[帳票編]テーブル項目集計一覧の出力

##項目の集計一覧出力の例
メソッド：addRelativeCopyItem()
###ステップ1：テーブルと画面の作成		
###ステップ2：帳票テンプレートの作成
###ステップ3：関数を新規作成	
###ステップ4：印刷結果

###ステップ1：テーブルと画面の作成
データベースにテーブルを作成。	
SQL文：

```		
CREATE TABLE `m_student1` (	
  `STUDENT_ID` varchar(10) NOT NULL,	
  `STUDENT_FAMILY_NM` varchar(20) DEFAULT NULL,	
  `STUDENT_FIRST_NM` varchar(20) DEFAULT NULL,	
  `STUDENT_FULL_NM_KN` varchar(40) DEFAULT NULL,	
  `SEX` varchar(1) DEFAULT NULL,	
  `STUDENT_SCORE` varchar(3) DEFAULT NULL,	
  `STUDENT_SUBJECT` varchar(5) NOT NULL,	
  `FIRST_REG_DTM` datetime DEFAULT NULL,	
  `FIRST_REG_ID` varchar(50) DEFAULT NULL,	
  `LAST_UPDATE_DTM` datetime DEFAULT NULL,	
  `LAST_UPDATE_ID` varchar(50) DEFAULT NULL,	
  PRIMARY KEY (`STUDENT_ID`,`STUDENT_SUBJECT`)	
) ENGINE=InnoDB DEFAULT CHARSET=utf8;	
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/5dcb1b3a-0d6a-d278-2341-37aa201daec9.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/49eb8807-d0c5-5829-5ade-7490d1c6e187.png)

データベース反映を選んでください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/82fb96de-f39c-69c2-d8ae-1cf9a157e61a.png)

###印刷用画面を2つ作成
#####1.印刷関数ボタンをクリックし、生徒ID条件によってSQL文のSELECTでデータを取得し、EXCELに出力して印刷できるようにします。
画面：印刷関数画面（画面作成＞画面レイアウト作成）。
項目：
・生徒ID入力指定欄
・「印刷関数」ボタン
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/70161579-ffb6-ed21-dd0c-333ff6f1be53.png)

#####２．印刷項目作成・編集画面
（画面作成＞画面項目定義＞新規）
ステップ１で作成したテーブルを指定して各項目を入力編集する画面です。
#####2-1テーブル（M_STUDENT1）を指定（画面項目定義＞新規＞画面自動作成）
#####2-2画面名（印刷関数画面）、画面IDとなる管理ID（P00013）を入力
#####2-3画面に表示する項目を指定してチェック
#####2-4「保存して次へ」（フォルダ指定不要）
#####2-5「画面レイアウト設計へ遷移」アイコンをクリック
　ラベルの表記を日本語にする等の編集後「保存」アイコン（フロッピーディスクの絵）をクリック
[科目のプロパティはdroplistで「0:数学;1:英語;2:国語;」という3つの値があります。]
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/646ee60c-9fc0-4835-19bc-c8fb52641fc9.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/ab7e2fe8-16d6-0385-64b2-6d2b8a121416.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/d095b807-2de0-0901-3cfb-00497bd3c893.png)

最後はシステム動作環境のデータ入力画面から作成したテーブルに情報を入力保存します。

```
INSERT INTO `m_student1` VALUES ('K0001', '柴田', '次郎', '柴田次郎', '男', '78', '0', '2018-12-03 12:02:48', '', '2018-12-06 16:22:30', 'sun1');						
INSERT INTO `m_student1` VALUES ('K0001', '柴田', '次郎', '柴田次郎', '男', '88', '1', '2018-12-03 12:02:48', '', '2018-12-06 16:24:33', 'sun1');						
INSERT INTO `m_student1` VALUES ('K0001', '柴田', '次郎', '柴田次郎', '男', '67', '2', '2018-12-03 12:02:48', '', '2018-12-06 16:24:56', 'sun1');						
INSERT INTO `m_student1` VALUES ('k0002', '柴田', '二郎', '柴田二郎', '男', '99', '0', '2018-12-03 12:12:52', 'sun1', '2018-12-06 16:25:41', 'sun1');						
INSERT INTO `m_student1` VALUES ('k0002', '柴田', '二郎', '柴田二郎', '男', '100', '1', '2018-12-03 12:13:14', 'sun1', '2018-12-06 16:26:10', 'sun1');						
INSERT INTO `m_student1` VALUES ('k0002', '柴田', '二郎', '柴田二郎', '男', '60', '2', '2018-12-03 12:13:25', 'sun1', '2018-12-06 16:26:36', 'sun1');

```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/d758b597-8c11-4831-e41c-fc1cd5583613.png)


##ステップ2：帳票テンプレートの作成 
帳票用のExcelテンプレートを下記のリンクからダウロードすることができます。
　[テーブル項目集計一覧.xlsx](https://github.com/saasforce/excel/blob/master/jp/%E6%88%90%E7%B8%BE%E8%A1%A8_%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E9%A0%85%E7%9B%AE%E9%9B%86%E8%A8%88%E4%B8%80%E8%A6%A7.xlsx)


#####新テンプレート指定
・画面「ステップ1：」枠にて「管理ID」を入力後、アップロードする
Excel帳票テンプレート定義ファイルを指定します。
・更新：画面下の「更新」ボタンを押し、アップロードを完了します。
・ファイルIDをメモ
「検索条件」枠の「検索」ボタンを押すと画面が更新されアップロードした帳票テンプレートのファイルIDを確認できます。ファイルIDをメモして関数の定義で使います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/2fa9cc21-148c-db44-3466-d3ddbc139cdd.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/e36b4d4f-1dbf-2fcc-de47-f07187cae02f.png)

##ステップ3：関数を新規作成（ExcelDataBean関数のコード確認）
#####3-1印刷関数画面（画面レイアウト）の印刷関数ボタンを右クリックし（コード表示）、関数定義（詳細画面利用関数）にて「新しい関数追加」ボタンにて印刷関数を作成します。
#####3-2次に編集ボタンをクリックしてこの画面で関数コードを入力してください。
#####3-3不明なところがあればdevelop doc をクリックすると参照でき「ExcelDataBean説明書」があります。不明な方法をコピーし左側のExcelDataBeanをクリック、Ctrl+Fで検索することができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/f5cdb85d-8312-7903-b6a8-1b3fa9dbf44a.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/be8cf883-e787-63de-0a1b-9205e05e5998.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/39aff891-97d9-90bc-3131-5e7713301421.png)
「SQL構文検証」ボタンにより、SQL構文の実行結果を検証できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/7428dc76-0f61-54f2-56ef-f7cd42519417.png)
「関数編集」タブを開き、サンプルのSQLコードを張り付けて関数を保存します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/497e2d7c-0c97-8e38-9fcb-6a0aa17ffe29.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/d39f8afd-ce55-e8d9-66a7-fb9674be29e7.png)

```javascript:subtotal_sample
//1.SQL文でデータを取得する
// データを検索する方式： select x1, x2, y1, y2 from table where 条件1
// 配列aに入れる
//2.select文でy轴のデータを取得し、 条件は1と同じ
//データを検索する方式： select distinct y1, y2 from table where 条件1
// 配列bに入れる
//データをデータベースから取得する
var cy;
//StringBuilder文字列を連結する
var strSqlc = new StringBuilder();
//生徒ID
var NIANDU1 = getObj('txt2'); 
//グローバル変数
var excelDataBean = null;
//局部変数
var sheeBean = null;
//エクセル印刷
var excelPrint = getExcelPrint();
var rowDataList = null;
var row = null;
try {
    //データがある場合
    strSqlc.append("SELECT STUDENT_ID,STUDENT_FULL_NM_KN,SEX,STUDENT_SUBJECT,STUDENT_SCORE FROM M_STUDENT1 ");
    strSqlc.append("where 1 = 1");	
   //idを判断する
    if (NIANDU1 != null && NIANDU1 != "") {
　　　//StringBuilder文字列を連接する
        strSqlc.append(" AND STUDENT_ID = '").append(NIANDU1).append("'");
    }
　　//ＩＤによってランキングする
    strSqlc.append(" ORDER BY STUDENT_SUBJECT ");

    cy = exequeryarrylist(strSqlc.toString());

    excelDataBean = new ExcelDataBean();
    //データがある場合
    if (cy != null && cy.size() > 0) {
        // list初期化
        rowDataList = new ArrayList();

        sheeBean = new ExcelDataBean();

        var conditionMap = new HashMap ();
    
　　　　//ループでデータの取得
        for (var i = 0; i < cy.size(); i++) {
            
            row1 = new ArrayList();

            row = cy.get(i);
            
            // 生徒ID
            row1.add(row.get(0));
            
            // 姓名
            if(nullOrBlank(row.get(1))){
                row1.add("");
            } else {
    　　　 // 姓名　           
                row1.add(row.get(1));
            }
            
            // 性別
            if(nullOrBlank(row.get(2))){
                row1.add("");
            } else {
              // 性別
                row1.add(row.get(2));
            }
                        // 科目
            if(nullOrBlank(row.get(3))){
                row1.add("");

            } else {
                // 科目に値を与える
                if (row.get(3) == 0) {
                    row1.add("数学");

                } else if (row.get(3) == 1) {
                    row1.add("英語");

                } else {
                    row1.add("国語");
                }
            } 

            // 成績
            if(nullOrBlank(row.get(4))){
                row1.add("");
            } else {
                // 成績
                row1.add(row.get(4));
            }
            
            rowDataList.add(row1);
        }
        
        //テンプレートのヘッダ部分をコピーする
        sheeBean.addCopyItem("A1", "A5");

        //指定するセルに値を設定する（ヘッダの利用が多い）
        sheeBean.addItem("A2", "成績書");

        //セルタイプの設定
        conditionMap.put(0, new ExcelCellBean(0, 0, "string"));
        //セルタイプの設定 
        conditionMap.put(1, new ExcelCellBean(0, 1, "string"));
        //セルタイプの設定
        conditionMap.put(2, new ExcelCellBean(0, 2, "string"));
        //セルタイプの設定 
        conditionMap.put(3, new ExcelCellBean(0, 3, "string"));
        //セルタイプの設定 
        conditionMap.put(4, new ExcelCellBean(0, 4, "number"));
        
        //データを指定する
        var listBean = sheeBean.addList("A5", rowDataList, conditionMap);

        //シートを追加する
        excelDataBean.addSheet("成績書", sheeBean);

　　　　//小計欄を設定する
        var listcount = listBean.setCount("A6", "A6", "D5");

        //合計欄を設定する
        sheeBean.addRelativeCopyItem("A7","A7",0,0,true,true);

        excelPrint.setExcelDataBean(excelDataBean);
　　　　//アップロードテンプレートファイルIDを入力する 
        excelPrint.setTemplateID(19);
        JsonObj = excelPrint.print("19");
    } else {
        //エラーメッセージを設定する
        excelDataBean.setErrorMsg("データは存在しない。");
        excelPrint.setTemplateID(19);
        excelPrint.setExcelDataBean(excelDataBean);
        JsonObj = excelPrint.print("19");
    }
} catch (e) {
trace(e);
    ActStr += "alert('" + e + "');";
}
```

#####このサンプルに使っているメソッドは以下の通りです。(リンクをクリックすると説明書に遷移します)
・[addRelativeCopyItem](http://www.saasforce.co.jp/help/jpn/fundoc/com/wonderfulfly/saasforce/business/edit/inout/data/ExcelDataBean.html#addRelativeCopyItem(java.lang.String,%20java.lang.String,%20int,%20int,%20boolean,%20boolean)): 合計欄を設定する
##ステップ4：印刷結果（画面からテストデータを入力して、印刷関数ボタンをクリック）
印刷関数ボタンをクリック、Excelファイルがダウンロードされますので、内容を確認して印刷できるようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/184885/f6714721-c917-5413-04b0-be7651cf271c.png)