# XDMF_EF121_0 / 受領データの保守

_言語: ja / データ版数 (設定の最終更新): 2024-07-11 11:38:18_

## 要約

| 項目 | 値 |
|------|------|
| FUNC\_ID | \`XDMF\_EF121\_0\` |
| 機能名 | 受領データの保守 |
| 機能タイプ \(APP\_KBN\) | STD / 固定検索条件 |
| BG\_L | 4 |
| BG\_M | 9 |
| ブロック数 | 1 |
| 項目数 | 10 |
| 読み取りテーブル | 1 |
| 書き込みテーブル | 1 |
| DB 接続先 | 1 |


### 機能概要

得意先単位に受領額をエントリーするための画面です。受領データの一覧・保守の「新規登録」ボタンより起動されます。実行すると画面は閉じる仕様となっていますので、データの確認は受領データの一覧・保守で行って下さい。同画面の「関連」ボタンで詳細な内容も確認できます。

※金種区分は現預金／受取手形が選択できます。

※売掛金増減履歴が下記の取引区分で作成されます。また、金額は得意先マスタの期間受領額に加算されます。
　　金種区分が現預金のとき、現預金受領で作成します。
　　金種区分が受取手形のとき、手形受領で作成します。
　　残高控除分手数料が0以外のとき、手数料で作成します。

※請求エントリーで登録した請求データとの紐づきはありません。

※統計管理の取引集計処理で、期間受領額は期末売掛残高の計算で使用されます。
　　期末売掛残高 ＝ 期首売掛残高 ＋ 期間売上額 － 期間受領額

## 機能設定

### 機能説明

| 項目 | 値 |
|------|----|
| 機能ID | XDMF\_EF121\_0 |
| 機能名 | 受領データの保守 |
| 機能タイプ | 固定検索条件 \(STD\) |
| ADMIN\_ID |  |
| 業務分類 大 | XTEA生産管理 \(4\) |
| 業務分類 中 | 売上・売掛管理 \(9\) |
| 業務分類 小 |  |
| 作成 | 2024\-07\-11 11:38:09.0 demo |
| 最終更新 | 2024\-07\-11 11:38:09.0 demo |
| ヘルプリンク名 \(HELP\_LINK\_NM\) |  |
| ヘルプURL \(HELP\_URL\) |  |

#### 機能概要

得意先単位に受領額をエントリーするための画面です。受領データの一覧・保守の「新規登録」ボタンより起動されます。実行すると画面は閉じる仕様となっていますので、データの確認は受領データの一覧・保守で行って下さい。同画面の「関連」ボタンで詳細な内容も確認できます。

※金種区分は現預金／受取手形が選択できます。

※売掛金増減履歴が下記の取引区分で作成されます。また、金額は得意先マスタの期間受領額に加算されます。
　　金種区分が現預金のとき、現預金受領で作成します。
　　金種区分が受取手形のとき、手形受領で作成します。
　　残高控除分手数料が0以外のとき、手数料で作成します。

※請求エントリーで登録した請求データとの紐づきはありません。

※統計管理の取引集計処理で、期間受領額は期末売掛残高の計算で使用されます。
　　期末売掛残高 ＝ 期首売掛残高 ＋ 期間売上額 － 期間受領額


### アプリケーション設定

#### 機能レベル設定一覧

_TLN_M_GENERAL_APP (FUNC_SEQ=-1) に登録されている全ての設定値。非表示フラグや個別セクションで重複して表示される設定も含む。_

| ボタン | 状態 | FUNC\_KBN |
|------|------|------|
| 機能タイプ | 固定検索条件 | APP\_KBN=STD |
| 検索条件保存 \> 非表示 | ON \[1\] | COND\_SAVE\_HDN\_FLG |
| ボタンの非表示 \> PDF出力 | ON \[1\] | PDF\_BUTTON\_HDN\_FLG |
| ボタンの非表示 \> クリア | ON \[1\] | CLEAR\_BUTTON\_HDN\_FLG |
| ボタンの非表示 \> 検索 | ON \[1\] | SEARCH\_BUTTON\_HDN\_FLG |
| 確定終了メッセージ \> メッセージ | 登録しました。 | EXECUTE\_MESSAGE |
| 確定後再表示オプション \> 初期状態 | 初期化する \[1\] | EXE\_DISP\_INIT\_FLG |
| 起動Window状態 | 上書き＋親再検索 \[OVER\_WRITE\_SEARCH\] | OPEN\_WINDOW\_MODE |

#### 標準ボタン非表示設定

| ボタン | FUNC\_KBN | 状態 |
|------|------|------|
| PDF出力 | PDF\_BUTTON\_HDN\_FLG | 非表示 |
| Excel出力 | EXCEL\_BUTTON\_HDN\_FLG | 表示 |
| Excel更新 | EXCELUPDATE\_BUTTON\_HDN\_FLG | 表示 |
| クリア | CLEAR\_BUTTON\_HDN\_FLG | 非表示 |
| 検索 | SEARCH\_BUTTON\_HDN\_FLG | 非表示 |
| 戻る | BACK\_BUTTON\_HDN\_FLG | 表示 |
| 確定 | EXECUTE\_BTN\_HDN\_FLG | 表示 |
| 参照 | VIEW\_BUTTON\_HDN\_FLG | 表示 |
| 画面設定 | COL\_BUTTON\_HDN\_FLG | 表示 |
| 検索条件保存 | COND\_SAVE\_HDN\_FLG | 非表示 |
| 検索条件タイトル | IS\_CONDITION\_TITLE\_OFF | 表示 |
| ブロック名 | BLOCK\_NAME\_HDN\_FLG | 表示 |


### ユーザグループ

| FUNC\_ATH\_ID | グループ名 |
|------|------|
| system | システム管理 |



## 検索条件 (集約)

| 表示名 | COL\_NAME | データ型 | 桁 | 表示形式 | 改行 | 集約数 | 集約元 |
|------|------|------|------|------|------|------|------|
| 受領№ | NRJYURYOU | VARCHAR2 | 30 | TEXT:半角、全角混在\(Byte\) |  | 1 | BLOCK1: NRJYURYOU |


## ブロック設定

### ブロック構成

| \# | TYPE | TITLE |
|------|------|------|
| BLOCK 1 | CARD | 受領 |

### BLOCK 1: 受領 [CARD]

#### ブロックレベル更新先テーブル

| 設定 | 内容 |
|------|------|
| SELECT式 \> 更新テーブル | ET120 |

#### SELECT 式

```sql
SELECT  
        ET120.NRJYURYOU as NRJYURYOU
       ,ET120.DTJYURYOU as DTJYURYOU
       ,ET120.IDTOKUISAKI as IDTOKUISAKI
       ,AT030.CDTORIHIKISAKI as CDTORIHIKISAKI
       ,AT030.TXKANJI as TXKANJI
       ,ET120.KBKINSYU as KBKINSYU
       ,ET120.AMJYURYOU as AMJYURYOU
       ,ET120.AMTESURYOU as AMTESURYOU
       ,ET120.NRSOURCE as NRSOURCE
       ,ET120.MODIFY_COUNT as MODIFY_COUNT

FROM
 ET120 INNER JOIN AT030
            ON  ET120.IDTOKUISAKI = AT030.IDTORIHIKISAKI
```

#### 項目情報

| 並び順 | 物理項目名 | 表示名 | キー | 更新 | 検索 | 必須 | 改行 | グループ名 | 表示形式 | データ型 | 桁 | 表示桁 | 行数 | コンポーネント | 識別コード |
|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|
| 1 | NRJYURYOU | 受領№ | ○ |  | ○ |  |  |  | TEXT:半角、全角混在\(Byte\) | VARCHAR2 | 30 |  |  |  |  |
| 2 | DTJYURYOU | 受領日 |  | ○ |  | ○ |  |  | DATE:YYYY/MM/DD | DATE | 10 |  |  |  |  |
| 3 | IDTOKUISAKI | 得意先ID |  | ○ |  | ○ | ○ |  | TEXT:半角、全角混在\(Byte\) | VARCHAR2 | 30 |  |  |  |  |
| 4 | CDTORIHIKISAKI | 得意先Ｃ |  |  |  |  |  |  | TEXT:半角、全角混在\(Byte\) | VARCHAR2 | 30 |  |  |  |  |
| 5 | TXKANJI | 得意先名 |  |  |  |  |  |  | TEXT:半角、全角混在\(Byte\) | VARCHAR2 | 100 |  |  |  |  |
| 6 | KBKINSYU | 金種区分 |  | ○ |  | ○ | ○ |  | TEXT:半角、全角混在\(Byte\) | VARCHAR2 | 2 |  |  | リストボックス \(1\) | KBKINSYU |
| 7 | AMJYURYOU | 受領額 |  | ○ |  | ○ |  |  | INT:整数　　　　　　　　　　 | NUMBER | 11 |  |  |  |  |
| 8 | AMTESURYOU | 残高控除分手数料 |  | ○ |  | ○ |  |  | INT:整数　　　　　　　　　　 | NUMBER | 11 |  |  |  |  |
| 9 | NRSOURCE |  |  | ○ |  |  |  |  | TEXT:半角、全角混在\(Byte\) | VARCHAR2 | 30 |  |  |  |  |
| 10 | MODIFY\_COUNT |  |  |  |  |  |  |  | INT:整数　　　　　　　　　　 | NUMBER | 10 |  |  |  |  |


##### 項目別 詳細設定 (ITEM_OPTN)

###### 項目: NRJYURYOU (受領№)

| 設定種別 | 並び | 内容 |
|------|------|------|
| 採番名 | 1 | XDMF\_EF\_JYURYOU |

###### 項目: DTJYURYOU (受領日)

| 設定種別 | 並び | 内容 |
|------|------|------|
| 登録初期値 | 1 | 選択肢=システム日付 \[TLN\_SYSDATE\] |

###### 項目: IDTOKUISAKI (得意先ID)

| 設定種別 | 並び | 内容 |
|------|------|------|
| マスタチェック | 1 | ON |
| 検索子画面 \> 機能ID | 1 | 機能ID=XDMF\_EF200\_0 \(得意先マスターの検索子画面\) |
| 検索子画面 | 1 | 子画面項目=IDTOKUISAKI \(得意先ID\) / 項目名=IDTOKUISAKI \(得意先ID\) |
| 検索子画面 | 2 | 子画面項目=IDTOKUISAKI \(得意先ID\) / 戻り値=IDTOKUISAKI \(得意先ID\) |
| 検索子画面 | 3 | 子画面項目=CDTORIHIKISAKI \(得意先Ｃ\) / 戻り値=CDTORIHIKISAKI \(得意先Ｃ\) |
| 検索子画面 | 4 | 子画面項目=TXKANJI \(得意先名\) / 戻り値=TXKANJI \(得意先名\) |
| 検索子画面 | 5 | 項目名=ON \[INIT\_SEARCH\] |

###### 項目: AMTESURYOU (残高控除分手数料)

| 設定種別 | 並び | 内容 |
|------|------|------|
| 登録初期値テキスト | 1 | 値=0 |

###### 項目: NRSOURCE

| 設定種別 | 並び | 内容 |
|------|------|------|
| 採番名 | 1 | XDMF\_DF\_SOURCE |

#### 詳細設定

| 設定種別 | 値 | FUNC\_KBN |
|------|------|------|
| 確定時オプション \> 排他制御 | ON \[1\] | EXCLUSIVE\_CONTROL\_FLG |
| 処理権限 \> 登録 | ON \[1\] | INSERT\_FLG |


## 参照情報

### メニュー位置

_(なし)_


### 依存関係

#### 参照先機能

| FUNC\_ID | FUNC\_NM | APP\_KBN |
|------|------|------|
| XDMF\_EF200\_0 | 得意先マスターの検索子画面 | SUB |

#### 参照先テーブル (書き込み)

_INSERT/UPDATE/DELETE/MERGE/UPDATE_TABLE 設定_

| テーブル名 | 出典 |
|------|------|
| <a href="er-diagram.html#tbl-ET120">ET120</a> | UPDATE\_TABLE \(FUNC\_SEQ=0\) / UPDATE\_TABLE \(FUNC\_SEQ=0\) |

#### 参照先テーブル (読み取りのみ)

_FROM / JOIN 句から抽出_

| テーブル名 | 出典 |
|------|------|
| <a href="er-diagram.html#tbl-AT030">AT030</a> | BLOCK1.BODY\_SQL |

> **✎ テーブル参照解析の注意事項**
>
> - テーブル参照は `UPDATE_TABLE` 設定 + ブロック SELECT 式 (BODY_SQL/TITLE_SQL) + JavaScript コード (CHR_TEXT) + 呼び出すストアドプロシージャ本体 (Oracle / PostgreSQL / MySQL / SQL Server) を `FROM` / `JOIN` / `INSERT INTO` / `UPDATE ... SET` / `DELETE FROM` / `MERGE INTO` / `REPLACE INTO` / `MERGE ... USING` の正規表現で抽出した結果です。 動的SQLは文字列リテラルが DML 文で始まる場合のみ抽出します。
> - **書き込み** = INSERT/UPDATE/DELETE/MERGE が検出されたテーブル / **読み取り** = FROM/JOIN のみのテーブル
> - **⚠ 抜け・漏れの可能性**: コード内で動的に組み立てられた SQL、変数連結、条件分岐内の SQL は検出できない場合があります。
> - **⚠ 対象外**: ストアドプロシージャ本体は Oracle / PostgreSQL / MySQL / SQL Server に対応 (DB2 等は今後)。 プロシージャから更に呼ぶ別プロシージャ、 BODY_SQL/JS 直書きの CALL/EXEC、 外部 API 経由、 トリガ連動は含まれません。 動的SQLの変数組み立てテーブル名も対象外 (リテラル完結分は抽出)。
> - **✎ 補完 (備考タグ)**: 解析で捕捉できない依存は 機能説明タブの備考に `[R:テーブル名]` (読み) / `[W:テーブル名]` (書き) / `[WR:テーブル名]` (読み書き) と記入すると依存として取り込まれます (1タグ1テーブル、 文章中に埋め込み可)。 `@番号` で複数DB接続の接続先を明示できます (例 `[W:LOG_TBL@2]`。 省略時は機能の DB 接続先)。

#### 被参照 (呼出元機能)

| FUNC\_ID | FUNC\_NM | APP\_KBN | 参照箇所 |
|------|------|------|------|
| XDMF\_EF120\_0 | 受領データの一覧・保守 | STD | BUTTON\_NEXT \(ALL\) |

#### 参照先共通ライブラリ

_TLN_M_HANYO_CODE_MAIN.SIKIBETU_CODE in (TLN_GENERAL_JAVASCRIPT_ENGINE / TLN_GENERAL_JAVASCRIPT / TLN_GENERAL_CSS) からマップ。「全て」モード時は該当種別の全ライブラリ、「個別」モード時は CHR1 で指定されたものだけ。_

| 種別 | LIBRARY\_CODE | 名称 | 使用スコープ |
|------|------|------|------|
| サーバ JS | ASP\_COMMON | JavaScriptエンジン共通コード（ASP\_COMMON） | サーバJS:確定処理後\[全て\] |
| サーバ JS | ASP\_MASTER | JavaScriptエンジン共通コード（ASP\_MASTER） | サーバJS:確定処理後\[全て\] |
| サーバ JS | ASP\_SETUP | JavaScriptエンジン共通コード（ASP\_SETUP） | サーバJS:確定処理後\[全て\] |
| サーバ JS | ST\_COMMON | 要員シフト管理共通JavaScript | サーバJS:確定処理後\[全て\] |
| サーバ JS | TALON\_FUNCTION\_COMMON\_BK | TALON機能設計書出力 共通ライブラリ | サーバJS:確定処理後\[全て\] |
| サーバ JS | TLN\_AI\_DEV\_DEMO\_DATE\_UTIL | TLN\_AI\_DEV\_DEMO\_DATE\_UTIL | サーバJS:確定処理後\[全て\] |
| サーバ JS | TLN\_AI\_DEV\_DEMO\_INPUT\_UTIL | TLN\_AI\_DEV\_DEMO\_INPUT\_UTIL | サーバJS:確定処理後\[全て\] |
| サーバ JS | TLN\_AI\_DEV\_DEMO\_SQL\_SET | TLN\_AI\_DEV\_DEMO\_SQL\_SET | サーバJS:確定処理後\[全て\] |
| サーバ JS | TLN\_AI\_DEV\_DEMO\_SQL\_VALUES | TLN\_AI\_DEV\_DEMO\_SQL\_VALUES | サーバJS:確定処理後\[全て\] |
| サーバ JS | TLN\_AI\_DEV\_DEMO\_SQL\_WHERE | TLN\_AI\_DEV\_DEMO\_SQL\_WHERE | サーバJS:確定処理後\[全て\] |
| サーバ JS | TLN\_ANALYZE\_COMMON | 共通JavaScript\_リポジトリ分析共通部品 | サーバJS:確定処理後\[全て\] |
| サーバ JS | TLN\_ANALYZE\_SETUP | 共通JavaScript\_リポジトリ分析セットアップ | サーバJS:確定処理後\[全て\] |
| サーバ JS | TLN\_ANALYZE\_TEST13 | 共通JavaScript共通ClientsideJavaScriptCSSメンテナンス部品 | サーバJS:確定処理後\[全て\] |
| サーバ JS | TLN\_FUNC\_DOC\_COMMON | TALON機能設計書出力 共通ライブラリ | サーバJS:確定処理後\[全て\] |
| サーバ JS | TLN\_FUNC\_TEST\_JAVA | TLN\_FUNC\_TEST\_JAVA | サーバJS:確定処理後\[全て\] |
| サーバ JS | WCRG\_COMMON | WCRG\_共通クラス群 | サーバJS:確定処理後\[全て\] |
| サーバ JS | WFS\_COMMON | \[共通\]ワークフローシステム | サーバJS:確定処理後\[全て\] |
| サーバ JS | WFS\_CUSTOM | \[共通\]ワークフローシステム（ユーザー処理用） | サーバJS:確定処理後\[全て\] |
| サーバ JS | WFS\_SETUP | \[共通\]ワークフローシステム（環境構築） | サーバJS:確定処理後\[全て\] |
| サーバ JS | XDMF\_JS001\_0 | \[共通\]共通 | サーバJS:確定処理後\[全て\] |
| サーバ JS | XDMF\_JS002\_0 | \[共通\]仕入関連 | サーバJS:確定処理後\[全て\] |
| サーバ JS | XDMF\_JS003\_0 | \[共通\]製造関連 | サーバJS:確定処理後\[全て\] |


### マスタ参照

#### 汎用CD (TLN_M_HANYO_CODE_MAIN)

| 識別コード | KEY | 名称 | DSP1 | DSP2 | DSP3 | DSP\_NO1 | SORT |
|------|------|------|------|------|------|------|------|
| KBKINSYU | 1 | 金種区分 | 現預金 |  |  | 0 | 1 |
| KBKINSYU | 2 | 金種区分 | 受取手形 |  |  | 0 | 2 |

#### 採番 (TLN_M_SEQ_PARAMETER)

| 識別コード | SEQ\_NO | KIND | VALUE |
|------|------|------|------|
| XDMF\_DF\_SOURCE | 0 | 1 | SO |
| XDMF\_DF\_SOURCE | 1 | 2 | %tY%tm |
| XDMF\_DF\_SOURCE | 2 | 3 | 5 |
| XDMF\_EF\_JYURYOU | 0 | 1 | JR |
| XDMF\_EF\_JYURYOU | 1 | 2 | %tY%tm |
| XDMF\_EF\_JYURYOU | 2 | 3 | 5 |



## コードブック

### JavaScript / 各種コード

#### サーバJS:確定処理後 (機能レベル, 並び=0)

```javascript
//-------------------------------------------
//XDMF_EF121_0　受領データの保守
//-------------------------------------------
function execXDMF_EF121_0() {
	//機能ＩＤセット（Ver3.1用）
	_FUNC_ID = 'XDMF_EF121_0';


	//入力情報（受領明細）取得
	var itemBlockList = TALON.getBlockData_List(1);
	var lineDataMap = itemBlockList[0]
	_NRJYURYOU = lineDataMap['NRJYURYOU'];


	//対象情報（受領明細）取得
	var itemSelectListET120 = selectET120(_NRJYURYOU);
	var lineDataMapET120 = itemSelectListET120[0];
	var _NRSOURCE   = lineDataMapET120['NRSOURCE'];


	//【受領金額の更新】
	if (lineDataMapET120['AMJYURYOU'] != 0) {
		//-----------------------
		//　1 : 得意先ID
		//　2 : 受領日
		//　3 : 金種区分
		//　4 : 金額（受領金額／残高控除分手数料）
		//　5 : 処理区分（1:金額処理／2:手数料処理）
		//　5 : 取引ソース№
		//　6 : 受領№
		exec_juryo_ins(
				  lineDataMapET120['IDTOKUISAKI']
				, lineDataMapET120['DTJYURYOU']
				, lineDataMapET120['KBKINSYU']
				, lineDataMapET120['AMJYURYOU']
				, '1'
				, lineDataMapET120['NRSOURCE']
				, lineDataMapET120['NRJYURYOU']
		);
	}


	//【手数料金額の更新】
	if (lineDataMapET120['AMTESURYOU'] != 0) {
		//-----------------------
		//　1 : 得意先ID
		//　2 : 受領日
		//　3 : 金種区分
		//　4 : 金額（受領金額／残高控除分手数料）
		//　5 : 処理区分（1:金額処理／2:手数料処理）
		//　5 : 取引ソース№
		//　6 : 受領№
		exec_juryo_ins(
				  lineDataMapET120['IDTOKUISAKI']
				, lineDataMapET120['DTJYURYOU']
				, lineDataMapET120['KBKINSYU']
				, lineDataMapET120['AMTESURYOU']
				, '2'
				, lineDataMapET120['NRSOURCE']
				, lineDataMapET120['NRJYURYOU']
		);
	}

}

execXDMF_EF121_0();



```

### 共通ライブラリ

#### サーバJS ライブラリ: ASP_COMMON (JavaScriptエンジン共通コード（ASP_COMMON）)

```javascript
/**
 *  共通
 *
 * @version   2022/06/29
 */

//-------------------------------------------
//［共通］処理０
//-------------------------------------------
function tln_com_escape(val) {
    if (val == null) return val;
    var s = String(val);
    return s
        .replace(/\\/g, '\\\\')
        .replace(/'/g, "''")
        .replace(/\x00/g, '')
}
function getMapVal(map , id) {
    var _rec = null;
    _rec = map[id];
    if (_rec == null) {
        _rec = map[id.toLowerCase()];
    }
    return _rec;
}
function setMapVal(map , id , val) {
    if ( TALON.getDbConfig().isPostgres() ) {
        map[ id.toLowerCase() ]   = val;
    } else {
        map[ id ]   = val;
    }
}
function chkLowercase() {
    if ( TALON.getDbConfig().isPostgres() ) {
        return true;
    } else if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(),  "SELECT COUNT(*) AS CNT FROM TLN_M_NAME_MANAGER WHERE BINARY TABLE_NAME = BINARY 'ASP_M_BOM' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal( lineDataMap , 'CNT' );
        if (_CNT == 0) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}
function editLowList(obj) {
    if ( TALON.getDbConfig().isPostgres() ) {
        for(var lop = 0; lop < obj.length; lop++) {
            obj[lop] = obj[lop].toLowerCase();
        }
    }
    return obj;
}
function getLanguageType() {
    var sql = "" +
        "SELECT DSP1 FROM TLN_M_HANYO_CODE_MAIN " + 
        "WHERE SIKIBETU_CODE = 'ASP_LANGUAGE' " + 
        "  AND KEY_CODE = 'LANG' ";

    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );
    var lineDataMap = itemSelectList[0];
    var now_lang = getMapVal( lineDataMap , 'DSP1' );
    return now_lang;
}


function getMessage(msgid, to_lang) {
	//メッセージデータベース
	var map = {
		'MSG001' : ['処理が正常終了しました。','Process completed successfully.',' '],
		'MSG002' : ['処理が異常終了しました。','Process terminated abnormally.',' '],
		'MSG003' : ['他ユーザによってデータが更新されました。','Data has been updated by another user.',' '],
		'MSG101' : ['不良数は０以上、製造数より小さい値で入力してください。','Please enter a value of 0 or more and less than the number of productions for "Scrap quantity".',' '],
		'MSG102' : ['すでにステータスが完了の為、実績情報の変更は実施できません。','Status can not be changed because the status is already completed',' '],
		'MSG103' : ['作業ステータスが「完了」もしくは「着手中」の場合、イベントは変更できません','Event can not be changed if the status is "Completed" or "Started"',' '],
		'MSG501' : ['処理前チェックでエラーになりました。プロジェクトが設定されていません。データまたは設定画面の項目名がPROJECTIDになっているか確認して下さい。','An error occurred in the pre-processing check. Project has not been set. ',' '],
		'MSG502' : ['処理前チェックでエラーになりました。計画月度(指定月以降を更新)を入力して下さい。または設定画面の項目名がYMPLN_YYYYMMになっているか確認して下さい。','An error occurred in the pre-processing check. Please enter the "Plan YM". ',' '],
		'MSG901' : ['セットアップ・初期化処理が終了しました','Setup and initialization processes have been completed',' '],
		'MSG902' : ['セットアップ・パッチ処理が終了しました','Setup and patch processes have been completed',' '],
		'MSG904' : ['言語変更が終了しました','Language change processing has been completed',' ']
	}

	return map[msgid][to_lang];
}


function setRelationData() {
    //動的表示の場合、非同期にて実施。最後にCOMMITがされるので、最初にDELETEを実施する
    var deleteCount = TalonDbUtil.insert( TALON.getDbConfig() , "DELETE FROM ASP_WK_SAGYO_INFO_MAE " );
    var deleteCount = TalonDbUtil.insert( TALON.getDbConfig() , "DELETE FROM ASP_WK_SAGYO_INFO_ATO " );

    var insertCount = TalonDbUtil.insert( TALON.getDbConfig() , "INSERT INTO ASP_WK_SAGYO_INFO_MAE SELECT * FROM ASP_V_SAGYO_INFO_MAE" );
    var insertCount = TalonDbUtil.insert( TALON.getDbConfig() , "INSERT INTO ASP_WK_SAGYO_INFO_ATO SELECT * FROM ASP_V_SAGYO_INFO_ATO" );
}



```

#### サーバJS ライブラリ: ASP_MASTER (JavaScriptエンジン共通コード（ASP_MASTER）)

```javascript
/***************************************************************************************************
識別コード：TLN_GENERAL_JAVASCRIPT_ENGINE
検索キー  ：ASP_MASTER
***************************************************************************************************/

/* 製造BOMの重複チェック ------------------------------------------------------------------------ */
function fncMstBomChkExist(mapBlock){
	strStepMsg = '(製造BOMの重複チェック[fncMstBomChkExist])';
	var strMsg1 = '';
	var strMsg2 = '';
	var strMsg3 = '';
	var strMsg4 = '';
	var strMsg5 = '';
	var strMsg6 = '';

	var strSQL =
		"SELECT * " +
		"FROM ASP_M_BOM " +
		"WHERE PROJECTID    = '"+getMapVal( mapBlock , 'PROJECTID'     )+"' " +
		"AND ITEM_CODE      = '"+getMapVal( mapBlock , 'ITEM_CODE'     )+"' " +
		"AND KOUTEI_NO      = '"+getMapVal( mapBlock , 'KOUTEI_NO'     )+"' " +
		"AND SASIZU_SYUBETU = '"+getMapVal( mapBlock , 'SASIZU_SYUBETU')+"' " +
		"AND SASIZU_CODE    = '"+getMapVal( mapBlock , 'SASIZU_CODE'   )+"' " +
		"AND SIGEN_CODE     = '"+getMapVal( mapBlock , 'SIGEN_CODE'    )+"' ";

	if( getMapVal( mapBlock , 'KOUTEI_SELECTOR' ) == null || getMapVal( mapBlock , 'KOUTEI_SELECTOR' ) == ''){
		strSQL += "AND KOUTEI_SELECTOR IS NULL ";
	}else{
		strSQL += "AND KOUTEI_SELECTOR = '"+ getMapVal( mapBlock , 'KOUTEI_SELECTOR' )+"' ";
		strMsg1 = "工程ｾﾚｸﾀ["+ getMapVal( mapBlock , 'KOUTEI_SELECTOR' ) +"]､";
	}

	if( getMapVal( mapBlock , 'KOUTEI_SELECTOR_JKN' ) == null || getMapVal( mapBlock , 'KOUTEI_SELECTOR_JKN' ) == ''){
		strSQL += "AND KOUTEI_SELECTOR_JKN IS NULL ";
	}else{
		strSQL += "AND KOUTEI_SELECTOR_JKN = '"+ getMapVal( mapBlock , 'KOUTEI_SELECTOR_JKN' ).replace(/\'/g,"''")+"' ";
		strMsg2 = "工程ｾﾚｸﾀ有効条件["+ getMapVal( mapBlock , 'KOUTEI_SELECTOR_JKN' )+"]､";
	}

	if( getMapVal( mapBlock , 'KOUTEI_CODE' ) == null || getMapVal( mapBlock , 'KOUTEI_CODE' ) == ''){
		strSQL += "AND KOUTEI_CODE IS NULL ";
	}else{
		strSQL += "AND KOUTEI_CODE = '"+ getMapVal( mapBlock , 'KOUTEI_CODE' ) +"' ";
		strMsg3 = "工程ｺｰﾄﾞ["+ getMapVal( mapBlock , 'KOUTEI_CODE' ) +"]､";
	}

	if( getMapVal( mapBlock , 'TASK_SELECTOR' ) == null || getMapVal( mapBlock , 'TASK_SELECTOR' ) == ''){
		strSQL += "AND TASK_SELECTOR IS NULL ";
	}else{
		strSQL += "AND TASK_SELECTOR = '"+ getMapVal( mapBlock , 'TASK_SELECTOR' )+"' ";
		strMsg4 = "ﾀｽｸｾﾚｸﾀﾞ["+ getMapVal( mapBlock , 'TASK_SELECTOR' ) +"]､";
	}

	if( getMapVal( mapBlock , 'TASK_SELECTOR_JKN' ) == null || getMapVal( mapBlock , 'TASK_SELECTOR_JKN' ) == ''){
		strSQL += "AND TASK_SELECTOR_JKN IS NULL ";
	}else{
		strSQL += "AND TASK_SELECTOR_JKN = '"+ getMapVal( mapBlock , 'TASK_SELECTOR_JKN' ).replace(/\'/g,"''")+"' ";
		strMsg5 = "ﾀｽｸｾﾚｸﾀ有効条件["+ getMapVal( mapBlock , 'TASK_SELECTOR_JKN' )+"]､";
	}

	if( getMapVal( mapBlock , 'OBJECTID' ) != null && getMapVal( mapBlock , 'OBJECTID' ) != ''){
		strMsg6 = "､OBJECTID["+ getMapVal( mapBlock , 'OBJECTID' )+"]";
	}
	TALON.getLogger().writeInfo(strFuncNm+strStepMsg+" SQL:"+strSQL);

	var lstSelect = TALON.select(strSQL);
	if(lstSelect.size() == 0){
		TALON.setIsSuccess(true);
	}else if(lstSelect.size() == 1){
		if( getMapVal( mapBlock , 'OBJECTID' ) == getMapVal( lstSelect[0] , 'OBJECTID' ) ){
			TALON.setIsSuccess(true);
		}else{
			TALON.addErrorMsg("重複しています。(PJ["+ getMapVal( mapBlock , 'PROJECTID' ) +"]､品目["+ getMapVal( mapBlock , 'ITEM_CODE' ) +"]､"+ strMsg1 + strMsg2 + "工程番号["+ getMapVal( mapBlock , 'KOUTEI_NO' ) +"]"
			 + strMsg3 + strMsg4 + strMsg5 + "指図種別["+ getMapVal( mapBlock , 'SASIZU_SYUBETU' ) +"]､指図ｺｰﾄﾞ["+ getMapVal( mapBlock , 'SASIZU_CODE' ) +"]､品目/資源ｺｰﾄﾞ["+ getMapVal( mapBlock , 'SIGEN_CODE' ) +"]"+ strMsg6 +")");
			TALON.setIsSuccess(false);
		}
	}else{
		TALON.addErrorMsg("重複しています。(PJ["+ getMapVal( mapBlock , 'PROJECTID' ) +"]､品目["+ getMapVal( mapBlock , 'ITEM_CODE' ) +"]､"+ strMsg1 + strMsg2 +"工程番号["+ getMapVal( mapBlock , 'KOUTEI_NO' ) +"]"
		 + strMsg3 + strMsg4 + strMsg5 + "指図種別["+ getMapVal( mapBlock , 'SASIZU_SYUBETU' ) +"]､指図ｺｰﾄﾞ["+ getMapVal( mapBlock , 'SASIZU_CODE' ) +"]､品目/資源ｺｰﾄﾞ["+ getMapVal( mapBlock , 'SIGEN_CODE' ) +"]"+ strMsg6 +")");
		TALON.setIsSuccess(false);
	}
}

/* 製造BOMの品目/資源チェック ------------------------------------------------------------------------ */
function fncMstBomChkSigen(mapBlock){
	strStepMsg = '(製造BOMの品目/資源チェック[fncMstBomChkSigen])';
	var strMsg6 = '';

	if( getMapVal( mapBlock , 'SASIZU_SYUBETU' ) == 'U'){
		var strSigen = getMapVal( mapBlock , 'SIGEN_CODE' ).split(";");
		for (var i in strSigen) {
			var strSQL =
				"SELECT * " +
				"FROM ( " +
				" SELECT " +
				"  SIGEN1.PROJECTID " +
				" ,'U' AS SASIZU_SYUBETU " +
				" ,SIGEN1.SIGEN_CODE AS CODE " +
				" ,SIGEN1.SIGEN_NM AS NM " +
				" ,SIGEN1.SIGEN_GROUP AS GRP " +
				" ,SIGEN2.SIGEN_NM AS GRP_NM " +
				" ,CASE WHEN SIGENG.SIGEN_GROUP IS NOT NULL THEN 'ｸﾞﾙｰﾌﾟ設定あり' END AS MST_UMU " +
				" FROM ASP_M_SIGEN SIGEN1 " +
				" LEFT OUTER JOIN ASP_M_SIGEN SIGEN2 ON SIGEN1.PROJECTID = SIGEN2.PROJECTID AND SIGEN1.SIGEN_GROUP = SIGEN2.SIGEN_CODE " +
				" LEFT OUTER JOIN ( " +
				"  SELECT PROJECTID,SIGEN_GROUP FROM ASP_M_SIGEN GROUP BY PROJECTID,SIGEN_GROUP " +
				" ) SIGENG ON SIGEN1.PROJECTID = SIGENG.PROJECTID AND SIGEN1.SIGEN_CODE = SIGENG.SIGEN_GROUP " +
				" UNION " +
				" /** 資源グループに設定されていて、資源の登録がないデータを補完 **/ " +
				" SELECT " +
				"  SIGEN1.PROJECTID " +
				" ,'U' AS SASIZU_SYUBETU " +
				" ,SIGEN1.SIGEN_GROUP AS CODE " +
				" ,NULL AS NM " +
				" ,NULL AS GRP " +
				" ,NULL AS GRP_NM " +
				" ,'ｸﾞﾙｰﾌﾟ設定ありマスタなし' AS MST_UMU " +
				" FROM ASP_M_SIGEN SIGEN1 " +
				" WHERE SIGEN1.SIGEN_GROUP IS NOT NULL " +
				" AND NOT EXISTS (SELECT 1 FROM ASP_M_SIGEN SIGENG WHERE SIGEN1.PROJECTID = SIGENG.PROJECTID AND SIGEN1.SIGEN_GROUP = SIGENG.SIGEN_CODE) " +
				" GROUP BY SIGEN1.PROJECTID,SIGEN1.SIGEN_GROUP " +
				") SIGEN " +
				"WHERE PROJECTID = '"+ getMapVal( mapBlock , 'PROJECTID' ) +"' " +
				"AND CODE = '"+ strSigen[i] +"' ";

			TALON.getLogger().writeInfo(strFuncNm+strStepMsg+" SQL:"+strSQL);

			var lstSelect = TALON.select(strSQL);
			if(lstSelect.size() == 0){
				if( getMapVal( mapBlock , 'OBJECTID' ) != null && getMapVal( mapBlock , 'OBJECTID' ) != ''){
					strMsg6 = "､OBJECTID["+ getMapVal( mapBlock , 'OBJECTID' ) +"]";
				}

				TALON.addErrorMsg("資源["+ strSigen[i] +"]が存在しません。(PJ["+ getMapVal( mapBlock , 'PROJECTID' ) +"]､品目["+ getMapVal( mapBlock , 'ITEM_CODE' ) +"]､"+"工程番号["+ getMapVal( mapBlock , 'KOUTEI_NO' ) +"]"
				+"指図種別["+ getMapVal( mapBlock , 'SASIZU_SYUBETU' ) +"]､指図ｺｰﾄﾞ["+ getMapVal( mapBlock , 'SASIZU_CODE' ) +"]､品目/資源ｺｰﾄﾞ["+ getMapVal( mapBlock , 'SIGEN_CODE' ) +"]"+ strMsg6 +")");

				TALON.setIsSuccess(false);
				break;
			}
		}
	 }else{
		var strSQL =
			"SELECT * " +
			"FROM ( " +
			" SELECT " +
			"  ITEM1.PROJECTID " +
			" ,ITEM1.ITEM_CODE AS CODE " +
			" ,ITEM1.ITEM_NM AS NM " +
			" ,ITEM1.ITEM_GROUP AS GRP " +
			" ,ITEM2.ITEM_NM AS GRP_NM " +
			" ,NULL AS MST_UMU " +
			" FROM ASP_M_ITEM ITEM1 " +
			" LEFT OUTER JOIN ASP_M_ITEM ITEM2 ON ITEM1.PROJECTID = ITEM2.PROJECTID AND ITEM1.ITEM_GROUP = ITEM2.ITEM_CODE " +
			" /** 製造BOMの入力指図の品目に品目グループは設定不可のため除外 **/ " +
			" WHERE NOT EXISTS (SELECT 1 FROM ASP_M_ITEM ITEMG WHERE ITEM1.PROJECTID = ITEMG.PROJECTID AND ITEM1.ITEM_CODE = ITEMG.ITEM_GROUP) " +
			" UNION " +
			" /** 製造BOMの工程NOから、品目の登録がない中間品データを補完 **/ " +
			" SELECT " +
			"  MST.PROJECTID " +
			" ,MST.CODE " +
			" ,NULL AS NM " +
			" ,NULL AS GRP " +
			" ,NULL AS GRP_NM " +
			" ,'マスタなし' AS MST_UMU " +
			" FROM ( " +
			"  SELECT " +
			"   PROJECTID " +
			"  ,CONCAT(CONCAT(ITEM_CODE,'-'),KOUTEI_NO) AS CODE " +
			"  FROM ASP_M_BOM BOM " +
			"  WHERE NOT EXISTS ( " +
			"   SELECT 1 FROM (SELECT PROJECTID,ITEM_CODE,MAX(KOUTEI_NO) AS KOUTEI_NO FROM ASP_M_BOM GROUP BY PROJECTID,ITEM_CODE) MAXNO " +
			"   WHERE BOM.PROJECTID = MAXNO.PROJECTID AND BOM.ITEM_CODE = MAXNO.ITEM_CODE AND BOM.KOUTEI_NO = MAXNO.KOUTEI_NO " +
			"  ) " +
			"  GROUP BY PROJECTID,ITEM_CODE,KOUTEI_NO " +
			" ) MST " +
			" WHERE NOT EXISTS (SELECT 1 FROM ASP_M_ITEM ITM WHERE MST.PROJECTID = ITM.PROJECTID AND MST.CODE = ITM.ITEM_CODE) " +
			") ITEM " +
			"WHERE PROJECTID = '"+ getMapVal( mapBlock , 'PROJECTID' ) +"' " +
			"AND CODE = '"+ getMapVal( mapBlock , 'SIGEN_CODE' ) +"' ";

		TALON.getLogger().writeInfo(strFuncNm+strStepMsg+" SQL:"+strSQL);

		var lstSelect = TALON.select(strSQL);
		if(lstSelect.size() == 0){
			if( getMapVal( mapBlock , 'OBJECTID' ) != null && getMapVal( mapBlock , 'OBJECTID' ) != ''){
				strMsg6 = "､OBJECTID["+ getMapVal( mapBlock , 'OBJECTID' ) +"]";
			}
			TALON.addErrorMsg("品目["+ getMapVal( mapBlock , 'SIGEN_CODE' ) +"]が存在しません。(PJ["+ getMapVal( mapBlock , 'PROJECTID' ) +"]､品目["+ getMapVal( mapBlock , 'ITEM_CODE' ) +"]､"+"工程番号["+ getMapVal( mapBlock , 'KOUTEI_NO' ) +"]"
			+"指図種別["+ getMapVal( mapBlock , 'SASIZU_SYUBETU' ) +"]､指図ｺｰﾄﾞ["+ getMapVal( mapBlock , 'SASIZU_CODE' ) +"]､品目/資源ｺｰﾄﾞ["+ getMapVal( mapBlock , 'SIGEN_CODE' ) +"]"+ strMsg6 +")");

			TALON.setIsSuccess(false);
		}
	}
}

```

#### サーバJS ライブラリ: ASP_SETUP (JavaScriptエンジン共通コード（ASP_SETUP）)

```javascript
/**
 *  セットアップ共通（環境構築）
 *
 * @version   2019/10/09
 */


//--------------------------------------------
// セットアップ関連共通
//--------------------------------------------
function table_exists(nm) {
    if ( TALON.getDbConfig().isOra() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM USER_TABLES WHERE TABLE_NAME = '" + nm + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    }
    if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT DSP1 FROM TLN_M_HANYO_CODE_MAIN WHERE SIKIBETU_CODE='TLN_GENERAL' AND KEY_CODE='DB_NAME'" );
        var lineDataMap = itemSelectList[0];
        var _DSP1 = getMapVal(lineDataMap,'DSP1');
        
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM information_schema.tables WHERE table_name = '" + nm + "' AND table_schema = '" + _DSP1 + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isMssql() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM sys.objects WHERE type = 'U' AND name = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(DISTINCT table_name) AS CNT FROM information_schema.columns WHERE LOWER(table_name) = LOWER('" + nm + "')" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function function_exists(nm) {
    if ( TALON.getDbConfig().isOra() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM USER_PROCEDURES WHERE OBJECT_TYPE = 'FUNCTION' AND OBJECT_NAME = '" + nm + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    }
    if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT DSP1 FROM TLN_M_HANYO_CODE_MAIN WHERE SIKIBETU_CODE='TLN_GENERAL' AND KEY_CODE='DB_NAME'" );
        var lineDataMap = itemSelectList[0];
        var _DSP1 = getMapVal(lineDataMap,'DSP1');
        
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION' AND ROUTINE_SCHEMA = '" + _DSP1 + "' AND SPECIFIC_NAME = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isMssql() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM sys.objects WHERE type = 'FN' AND name = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM pg_proc WHERE proname = LOWER('" + nm + "')" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function view_exists(nm) {
    if ( TALON.getDbConfig().isOra() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM USER_OBJECTS WHERE OBJECT_TYPE = 'VIEW' AND OBJECT_NAME = '" + nm + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    }
    if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT DSP1 FROM TLN_M_HANYO_CODE_MAIN WHERE SIKIBETU_CODE='TLN_GENERAL' AND KEY_CODE='DB_NAME'" );
        var lineDataMap = itemSelectList[0];
        var _DSP1 = getMapVal(lineDataMap,'DSP1');
        
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = '" + nm + "' AND TABLE_SCHEMA = '" + _DSP1 + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isMssql() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM sys.objects WHERE type = 'V' AND name = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM pg_class WHERE relkind = 'v' and relname = LOWER('" + nm + "')" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function field_exists(nm,fl) {
    if ( !TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM TLN_M_NAME_MANAGER WHERE TABLE_NAME = '" + nm + "' AND COLUMN_NAME = '" + fl + "' " );
    } else {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM TLN_M_NAME_MANAGER WHERE TABLE_NAME = LOWER('" + nm + "') AND COLUMN_NAME = LOWER('" + fl + "') " );
    }
    var lineDataMap = itemSelectList[0];
    var _CNT = getMapVal(lineDataMap,'CNT');
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function executeSQL(sql) {
    if ( TALON.getDbConfig().isOra() ) {
        //Oracleの場合true
        TALON.executeSQL(sql);
    };
    if ( TALON.getDbConfig().isMy() ) {
        //MySQLの場合true
        TalonDbUtil.update( TALON.getDbConfig(), sql);
    };
    if ( TALON.getDbConfig().isMssql() ) {
        //MsSqlServerの場合true
        TalonDbUtil.update( TALON.getDbConfig(), sql);
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        //Postgresの場合true
        TalonDbUtil.update( TALON.getDbConfig(), sql);
    };
}
function table_exists_drop(nm) {
    if (table_exists(nm)) {
        if ( !TALON.getDbConfig().isPostgres() ) {
            executeSQL( "DROP TABLE " + nm ) ;
        } else {
            executeSQL( "DROP TABLE " + nm.toLowerCase() ) ;
        }
    }
}
function function_exists_drop(nm) {
    if (function_exists(nm)) {
        if ( !TALON.getDbConfig().isPostgres() ) {
            executeSQL( "DROP FUNCTION " + nm ) ;
        } else {
            executeSQL( "DROP FUNCTION " + nm.toLowerCase() ) ;
        }
    }
}
function view_exists_drop(nm) {
    if (view_exists(nm)) {
        if ( !TALON.getDbConfig().isPostgres() ) {
            executeSQL( "DROP VIEW " + nm ) ;
        } else {
            executeSQL( "DROP VIEW " + nm.toLowerCase() ) ;
        }
    }
}



//--------------------------------------------
// セットアップ後環境別データ修正
//--------------------------------------------
function exec_custom() {


    if ( TALON.getDbConfig().isMy() ) {
        //MySQLの場合true
        if ( chkLowercase() ) {
            //lowercaseとして判断
            TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_APP SET VALUE  = LOWER(VALUE) WHERE FUNC_KBN = 'UPDATE_TABLE' AND FUNC_ID LIKE 'ASP_%' ");
        }

    }

    if ( TALON.getDbConfig().isMssql() ) {
        //MsSqlServerの場合true
        var array = ["TLN_CHAR_TO_DATE", "TLN_CHAR_TO_NUMBER", "TLN_CHARINDEX", "TLN_CONCAT", "TLN_DATE_TIME_TO_CHAR", "TLN_DATE_TIME_TO_DATETIME", "TLN_DATE_TO_CHAR", "TLN_DATE_TO_WEEKDAY", "TLN_DATEADD", "TLN_DATEDIFF", "TLN_FIRSTDAY", "TLN_LEN", "TLN_LF", "TLN_MID", "TLN_ROUND", "TLN_ROUND_INT", "TLN_SYSDATE"]




        var i;
        var num = array.length;
        for(i=0;i < num;i++){
            //--------------
            //TLN_M_GENERAL_FUNC_SQL
            TalonDbUtil.update( TALON.getDbConfig(), 
            " UPDATE TLN_M_GENERAL_FUNC_SQL " + 
            " SET " + 
            "  BODY_SQL  = REPLACE(REPLACE(BODY_SQL ,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " ,TITLE_SQL = REPLACE(REPLACE(TITLE_SQL,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " WHERE FUNC_ID LIKE 'ASP_%' "
            );

            //--------------
            //TLN_M_GENERAL_ITEM_OPTN
            TalonDbUtil.update( TALON.getDbConfig(), 
            " UPDATE TLN_M_GENERAL_ITEM_OPTN " + 
            " SET " + 
            "  CHR_TEXT = REPLACE(REPLACE(CHR_TEXT,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_ID <> 'ASP_SYS0010' " + 
            " AND (FUNC_KBN = 'JAVA_SCRIPT_ENGINE' OR (FUNC_KBN = 'BUTTON_BAT' AND FLAG = 2)) "
            );

            //--------------
            //TLN_M_HANYO_CODE_MAIN
            TalonDbUtil.update( TALON.getDbConfig(), 
            " UPDATE TLN_M_HANYO_CODE_MAIN " + 
            " SET " + 
            "  NOTE = REPLACE(REPLACE(NOTE,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " WHERE SIKIBETU_CODE = 'TLN_GENERAL_JAVASCRIPT_ENGINE' " + 
            "   AND KEY_CODE <> 'ASP_SETUP' "

            );
        }

    }



    if ( TALON.getDbConfig().isPostgres() ) {
        //PostgreSQLの場合true

        //lower
        //--------------
        //TLN_M_GENERAL_ITEM 
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM SET COL_NAME = LOWER(COL_NAME) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_ID <> 'ASP_SYS0010' ");

        //--------------
        //TLN_M_GENERAL_FUNC_SQL 
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%ITEM_CODE%'            , LOWER('%ITEM_CODE%')            ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%PROJECTID%'            , LOWER('%PROJECTID%')            ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%YM%'                   , LOWER('%YM%')                   ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%SIGEN_CODE%'           , LOWER('%SIGEN_CODE%')           ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%ITEM_SYUBETU_I%'       , LOWER('%ITEM_SYUBETU_I%')       ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%TENKAI_HOUKOU%'        , LOWER('%TENKAI_HOUKOU%')        ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%USER_ID%'              , LOWER('%USER_ID%')              ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%OPERATION_KBN%'        , LOWER('%OPERATION_KBN%')        ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%YMPLN_YYYYMM_SEARCH%'  , LOWER('%YMPLN_YYYYMM_SEARCH%')  ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%DEL_FLG_SEARCH%'       , LOWER('%DEL_FLG_SEARCH%')       ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%ALL_SEARCH%'           , LOWER('%ALL_SEARCH%')           ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%PLN_YM%'               , LOWER('%PLN_YM%')               ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%SEL_END_DATA_INCLUDE%' , LOWER('%SEL_END_DATA_INCLUDE%') ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%SIGEN_SEIYAKU_KBN%'    , LOWER('%SIGEN_SEIYAKU_KBN%')    ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%BACK_COLOR_FUNC%'      , LOWER('%BACK_COLOR_FUNC%')      ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%PROJECTID_1%'          , LOWER('%PROJECTID_1%')          ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%PROJECTID_2%'          , LOWER('%PROJECTID_2%')          ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%AVGKIKAN%'             , LOWER('%AVGKIKAN%')             ) WHERE FUNC_ID LIKE 'ASP_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = replace( BODY_SQL , '%STDEV%'                , LOWER('%STDEV%')                ) WHERE FUNC_ID LIKE 'ASP_%' ");


        //--------------
        //TLN_M_GENERAL_ITEM_OPTN 
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET COL_NAME = LOWER(COL_NAME) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_SEQ > -1 AND ( FUNC_KBN IN ('BACK_COLOR' , 'CSV_LOAD_BUTTON_COL' , 'CSV_OUT_BUTTON_COL' , 'DISP_POS' , 'DRILL_DOWN' , 'FIX_FORMULA' , 'FOCUS_OUT_JAVASCRIPT' , 'FORE_COLOR' , 'INIT_VALUE_TEXT' , 'INPUT_CONDITION' , 'JAVASCRIPT' , 'JAVASCRIPT_ENGINE' , 'XX_JAVA_SCRIPT_ENGINE' , 'JOIN' , 'LOOK_UP' , 'LOOK_UP_FUNC_ID' , 'MASTER_CHECK' , 'MATCH_PATTERN' , 'REGIST_VALUE' , 'REQUIRED_SEARCH' , 'SAIBAN_SIKIBETU_CODE' , 'SEARCH_FUNC_ID' , 'SEARCH_METHOD' , 'SUB_SEARCH' , 'IS_DB_NOT_REGIST' , 'SUGGEST_FUNC_ID' , 'SUGGEST' , 'BARCODE_FORMAT' , 'THUMBNAIL_SIZE' , '' ) OR FUNC_KBN LIKE 'BUTTON_NEXT_%' ) ");


        // -- BACK_COLOR
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%ITEM_CODE%'    , LOWER('%ITEM_CODE%')     ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BACK_COLOR' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%DUP_FLG%'      , LOWER('%DUP_FLG%')       ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BACK_COLOR' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%OPE_FLG%'      , LOWER('%OPE_FLG%')       ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BACK_COLOR' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%HENKO_NG_FLG%' , LOWER('%HENKO_NG_FLG%')  ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BACK_COLOR' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%SAGYO_STATUS%' , LOWER('%SAGYO_STATUS%')  ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BACK_COLOR' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%KOUTEI_CODE%'  , LOWER('%KOUTEI_CODE%')   ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BACK_COLOR' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%PROJECTID_KBN%', LOWER('%PROJECTID_KBN%') ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BACK_COLOR' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%DATA_KBN%'     , LOWER('%DATA_KBN%')      ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BACK_COLOR' ");
        // -- BUTTON_NEXT
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR4 = replace( CHR4 , '%1_ORDER_SYUBETU%', LOWER('%1_ORDER_SYUBETU%') ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BUTTON_NEXT' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR4 = replace( CHR4 , '%1_DATA_KBN%'     , LOWER('%1_DATA_KBN%')      ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BUTTON_NEXT' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR4 = replace( CHR4 , '%1_ORDER_STATUS%' , LOWER('%1_ORDER_STATUS%')  ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BUTTON_NEXT' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR4 = replace( CHR4 , '%1_SAGYO_STATUS%' , LOWER('%1_SAGYO_STATUS%')  ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'BUTTON_NEXT' ");
        // -- BUTTON_NEXT_x
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = LOWER(KIND) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN LIKE 'BUTTON_NEXT_%' ");
        // -- CHART
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1) , CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'CHART' AND COL_NAME IN ('CHART_SERIES_BASE' , 'CHART_AXIS_X_BASE') ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = LOWER(KIND) , CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN='CHART' AND COL_NAME LIKE 'CHART_SERIES_ONCLICK_%' AND COL_NAME <> 'CHART_SERIES_ONCLICK_WINSIZE' ");
        // -- FORE_COLOR
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%SAGYO_STATUS%', LOWER('%SAGYO_STATUS%') ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'FORE_COLOR' ");
        // -- INIT_VALUE_TEXT
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = replace( CHR1 , '%PROJECTID%', LOWER('%PROJECTID%') ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'INIT_VALUE_TEXT' ");
        // -- INPUT_CONDITION
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_DEL_FLG%'       , LOWER('%1_DEL_FLG%')        ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'INPUT_CONDITION' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_ORDER_SYUBETU%' , LOWER('%1_ORDER_SYUBETU%')  ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'INPUT_CONDITION' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_SASIZU_SYUBETU%', LOWER('%1_SASIZU_SYUBETU%') ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'INPUT_CONDITION' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_SAGYO_STATUS%'  , LOWER('%1_SAGYO_STATUS%')   ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'INPUT_CONDITION' ");
        // -- LOOK_UP
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1),CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'LOOK_UP' ");
        // -- MATCH_PATTERN
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_ORDER_SU%'       , LOWER('%1_ORDER_SU%')        ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_ORDER_SYUBETU%'  , LOWER('%1_ORDER_SYUBETU%')   ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_SAGYO_STATUS%'   , LOWER('%1_SAGYO_STATUS%')    ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_END_DATE%'       , LOWER('%1_END_DATE%')        ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_SEIZO_SU%'       , LOWER('%1_SEIZO_SU%')        ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_SIGEN_CODE%'     , LOWER('%1_SIGEN_CODE%')      ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_START_DATE%'     , LOWER('%1_START_DATE%')      ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_SEIZO_START_DATE%'       , LOWER('%1_SEIZO_START_DATE%')       ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_SEIZO_END_DATE%'         , LOWER('%1_SEIZO_END_DATE%')         ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_MAE_DANDORI_END_DATE%'   , LOWER('%1_MAE_DANDORI_END_DATE%')   ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = replace( KIND , '%1_MAE_DANDORI_START_DATE%' , LOWER('%1_MAE_DANDORI_START_DATE%') ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        // -- REGIST_VALUE
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'REGIST_VALUE' AND CHR1 NOT IN ('\"B\"','\"T\"') ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%2_SAGYO_STATUS%'   , LOWER('%2_SAGYO_STATUS%')   ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'REGIST_VALUE' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = replace( CHR2 , '%1_SEIZO_END_DATE%' , LOWER('%1_SEIZO_END_DATE%') ) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'REGIST_VALUE' ");

        // -- SUB_SEARCH
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1),CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'SUB_SEARCH' ");
        // -- SUGGEST
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1),CHR2 = LOWER(CHR2),CHR3 = LOWER(CHR3) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN = 'SUGGEST' ");


        //TLN_M_GENERAL_APP
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_APP SET VALUE = LOWER(VALUE) WHERE FUNC_ID LIKE 'ASP_%' AND FUNC_KBN IN ('UPDATE_TABLE' , 'SCHEDULE_EVENT_TEXT_COL','SCHEDULE_EVENT_TOOLTIP_COL','SCHEDULE_FROM_DATE_COL','SCHEDULE_TITLE_COL','SCHEDULE_TO_DATE_COL','SCHEDULE_UNIQUE_COL','SCHEDULE_CONNECT_TO_COL' ) ");

        //TLN_M_GENERAL_USES
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_USES SET KEY_CODE = LOWER(KEY_CODE) WHERE FUNC_ID LIKE 'ASP_%' AND USER_CODE = 'TLN_GEN_ALL' AND OPTN IN ( 'ITEM', 'ASC', 'DESC', 'DRILL_LEVEL') ");

    }

}


function exec_object( _func_chk ){
    //画面でファンクションの再構築が設定された場合（初回インストールは固定１で呼び出される)
    if ( _func_chk == '1' ) {

        //ファンクションの再構築　→ファンクション・Viewはパッチ毎に最新を作成
        exec_create_Function();

        //Ｖｉｅｗの再構築　　　　→ファンクション・Viewはパッチ毎に最新を作成
        exec_create_View();
    } 
}


function exec_create_Function() {

    //≪FUNCTION DROP≫
    //--------------------
    //
    // function_exists_drop('XXXXXXXXXX');

    // * 
    // * if ( TALON.getDbConfig().isOra() ) {
    // *     //
    // *     executeSQL( 
    // *     "CREATE FUNCTION XXXXXX (  " + "\n" + 
    // *     ""
    // *     );
    // * 
    // * };
    // * if ( TALON.getDbConfig().isMy() ) {
    // *     //
    // *     //SQLファイルで作成
    // * 
    // * };
    // * if ( TALON.getDbConfig().isMssql() ) {
    // *     //
    // *     executeSQL( 
    // *     "CREATE FUNCTION XXXXXX (  " + "\n" + 
    // *     ""
    // *     );
    // * 
    // * };
    // * if ( TALON.getDbConfig().isPostgres() ) {
    // *     //
    // *     //SQLファイルで作成
    // * 
    // * };

}


function exec_create_View() {

    //≪VIEW DROP≫
    //--------------------

    //
    view_exists_drop('ASP_V_SAGYO_JSK_TO_ASPROVA');
    //
    view_exists_drop('ASP_V_SAGYO_OPE_TO_ASPROVA');
    //
    view_exists_drop('ASP_V_ORDER_TO_ASPROVA');

    //
    view_exists_drop('ASP_V_SAGYO_INFO_ATO');
    //
    view_exists_drop('ASP_V_SAGYO_INFO_MAE');
    //
    view_exists_drop('ASP_V_SAGYO_INFO');
    //
    view_exists_drop('ASP_V_SAGYO_JSK');
    //
    view_exists_drop('ASP_V_SAGYO_OPE');



    //--------------------
    executeSQL( 
		"CREATE VIEW ASP_V_SAGYO_JSK_TO_ASPROVA AS " + "\n" + 
		"SELECT " + "\n" + 
		"     ASP_SAGYO_JSK.PROJECTID " + "\n" + 
		"    ,ASP_SAGYO_JSK.SAGYO_CODE " + "\n" + 
		"    ,ASP_SAGYO_SYS.ORDER_CODE " + "\n" + 
		"    ,ASP_SAGYO_SYS.KOUTEI_NO " + "\n" + 
		" " + "\n" + 
		"    ,CASE WHEN ASP_SAGYO_JSK.MAE_DANDORI_START_DATE IS NOT NULL THEN ASP_SAGYO_JSK.MAE_DANDORI_START_DATE ELSE ASP_SAGYO_JSK.SEIZO_START_DATE END AS START_DATE " + "\n" + 
		"    ,ASP_SAGYO_JSK.SEIZO_END_DATE AS END_DATE " + "\n" + 
		" " + "\n" + 
		"    ,ASP_SAGYO_JSK.SIGEN_CODE " + "\n" + 
		"    ,ASP_SAGYO_JSK.SEIZO_SU " + "\n" + 
		"    ,ASP_SAGYO_JSK.SAGYO_STATUS " + "\n" + 
		"    ,ASP_SAGYO_JSK.FURYO_SU " + "\n" + 
		"    ,ASP_SAGYO_JSK.SAIKI_FLG " + "\n" + 
		" " + "\n" + 
		"FROM ASP_SAGYO_JSK " + "\n" + 
		"INNER JOIN ASP_SAGYO_SYS " + "\n" + 
		"  ON ASP_SAGYO_JSK.PROJECTID = ASP_SAGYO_SYS.PROJECTID " + "\n" + 
		" AND ASP_SAGYO_JSK.SAGYO_CODE = ASP_SAGYO_SYS.SAGYO_CODE " + "\n" + 
		"INNER JOIN ASP_ORDER_SYS " + "\n" + 
		"   ON ASP_SAGYO_SYS.ORDER_CODE = ASP_ORDER_SYS.ORDER_CODE " + "\n" + 
		"  AND ASP_ORDER_SYS.DEL_FLG IS NULL " + "\n" + 
		"-- 実績入力　オーダ未完了分がインポート対象 " + "\n" + 
		"WHERE ASP_ORDER_SYS.ORDER_STATUS <> 'B' " + "\n" + 
        ""
    );

    //--------------------
    executeSQL( 
		"CREATE VIEW ASP_V_SAGYO_OPE_TO_ASPROVA AS " + "\n" + 
		"SELECT " + "\n" + 
		"     ASP_SAGYO_OPE.PROJECTID " + "\n" + 
		"    ,ASP_SAGYO_OPE.SAGYO_CODE " + "\n" + 
		"    ,ASP_SAGYO_SYS.ORDER_CODE " + "\n" + 
		"    ,ASP_SAGYO_SYS.KOUTEI_NO " + "\n" + 
		"    ,ASP_SAGYO_OPE.START_DATE " + "\n" + 
		"    ,ASP_SAGYO_OPE.END_DATE " + "\n" + 
		"    ,ASP_SAGYO_SYS.SIGEN_CODE " + "\n" + 
		"    ,ASP_SAGYO_OPE.SEND_KBN " + "\n" + 
		"    ,'D' AS STATUS " + "\n" + 
		"    ,'1' AS IMP_TIME_ALLOCATE_FLG " + "\n" + 
		"    ,'1' AS TLN_IMP_FLG " + "\n" + 
		"FROM ASP_SAGYO_OPE " + "\n" + 
		"INNER JOIN ASP_SAGYO_SYS " + "\n" + 
		"  ON ASP_SAGYO_OPE.PROJECTID = ASP_SAGYO_SYS.PROJECTID " + "\n" + 
		" AND ASP_SAGYO_OPE.SAGYO_CODE = ASP_SAGYO_SYS.SAGYO_CODE " + "\n" + 
		"INNER JOIN ASP_ORDER_SYS " + "\n" + 
		"  ON ASP_SAGYO_SYS.ORDER_CODE = ASP_ORDER_SYS.ORDER_CODE " + "\n" + 
		" AND ASP_ORDER_SYS.DEL_FLG IS NULL " + "\n" + 
		"-- 計画調整　未送信分　オーダ未完了分がインポート対象 " + "\n" + 
		"WHERE ASP_SAGYO_OPE.SEND_KBN = '0'   -- 0:未送信／1:送信済み計画中／2:送信済み計画終了／9:取消 " + "\n" + 
		"  AND ASP_ORDER_SYS.ORDER_STATUS <> 'B' " + "\n" + 
        ""
    );

    //--------------------
    if ( TALON.getDbConfig().isMssql() ) {
        executeSQL( 
			"CREATE VIEW ASP_V_ORDER_TO_ASPROVA AS " + "\n" + 
			"SELECT " + "\n" + 
			"     ASP_ORDER_SYS.PROJECTID     AS PROJECTID " + "\n" + 
			"    ,ASP_ORDER_SYS.ORDER_CODE    AS ORDER_CODE " + "\n" + 
			"    ,ASP_ORDER_SYS.ORDER_SYUBETU AS ORDER_SYUBETU " + "\n" + 
			"    ,ASP_ORDER_SYS.ITEM_CODE     AS ITEM_CODE " + "\n" + 
			"    ,dbo.TLN_DATE_TO_CHAR('YMDHMS', ASP_ORDER_SYS.NOKI_DATE) AS NOKI_DATE " + "\n" + 
			"    ,ASP_ORDER_SYS.ORDER_SU      AS ORDER_SU " + "\n" + 
			"    ,ASP_ORDER_SYS.YUSENDO       AS YUSENDO " + "\n" + 
			"    ,ASP_ORDER_SYS.NOTE AS NOTE " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO1 AS SIYO1 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO2 AS SIYO2 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO3 AS SIYO3 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO4 AS SIYO4 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO_NUM1 AS SIYO_NUM1 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO_NUM2 AS SIYO_NUM2 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO_NUM3 AS SIYO_NUM3 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO_NUM4 AS SIYO_NUM4 " + "\n" + 
			"    ,ASP_ORDER_SYS.ORDER_KBN AS ORDER_KBN " + "\n" + 
			"    ,ASP_ORDER_SYS.ORDER_STATUS AS ORDER_STATUS " + "\n" + 
			"    ,dbo.TLN_DATE_TO_CHAR('YMDHMS', ASP_ORDER_SYS.JSK_START_DATE) AS JSK_START_DATE " + "\n" + 
			"    ,dbo.TLN_DATE_TO_CHAR('YMDHMS', ASP_ORDER_SYS.JSK_END_DATE)   AS JSK_END_DATE " + "\n" + 
			"    ,ASP_ORDER_SYS.JSK_ORDER_SU AS JSK_ORDER_SU " + "\n" + 
			"FROM ASP_ORDER_SYS " + "\n" + 
			"-- オーダーは削除されたもの、完了ステータスのもの以外はインポート対象とする（洗い替え） " + "\n" + 
			"WHERE ASP_ORDER_SYS.DEL_FLG IS NULL " + "\n" + 
			"    AND ASP_ORDER_SYS.ORDER_STATUS <> 'B' " + "\n" + 
            ""
        );
    } else {
        executeSQL( 
			"CREATE VIEW ASP_V_ORDER_TO_ASPROVA AS " + "\n" + 
			"SELECT " + "\n" + 
			"     ASP_ORDER_SYS.PROJECTID     AS PROJECTID " + "\n" + 
			"    ,ASP_ORDER_SYS.ORDER_CODE    AS ORDER_CODE " + "\n" + 
			"    ,ASP_ORDER_SYS.ORDER_SYUBETU AS ORDER_SYUBETU " + "\n" + 
			"    ,ASP_ORDER_SYS.ITEM_CODE     AS ITEM_CODE " + "\n" + 
			"    ,TLN_DATE_TO_CHAR('YMDHMS', ASP_ORDER_SYS.NOKI_DATE) AS NOKI_DATE " + "\n" + 
			"    ,ASP_ORDER_SYS.ORDER_SU      AS ORDER_SU " + "\n" + 
			"    ,ASP_ORDER_SYS.YUSENDO       AS YUSENDO " + "\n" + 
			"    ,ASP_ORDER_SYS.NOTE AS NOTE " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO1 AS SIYO1 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO2 AS SIYO2 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO3 AS SIYO3 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO4 AS SIYO4 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO_NUM1 AS SIYO_NUM1 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO_NUM2 AS SIYO_NUM2 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO_NUM3 AS SIYO_NUM3 " + "\n" + 
			"    ,ASP_ORDER_SYS.SIYO_NUM4 AS SIYO_NUM4 " + "\n" + 
			"    ,ASP_ORDER_SYS.ORDER_KBN AS ORDER_KBN " + "\n" + 
			"    ,ASP_ORDER_SYS.ORDER_STATUS AS ORDER_STATUS " + "\n" + 
			"    ,TLN_DATE_TO_CHAR('YMDHMS', ASP_ORDER_SYS.JSK_START_DATE) AS JSK_START_DATE " + "\n" + 
			"    ,TLN_DATE_TO_CHAR('YMDHMS', ASP_ORDER_SYS.JSK_END_DATE)   AS JSK_END_DATE " + "\n" + 
			"    ,ASP_ORDER_SYS.JSK_ORDER_SU AS JSK_ORDER_SU " + "\n" + 
			"FROM ASP_ORDER_SYS " + "\n" + 
			"-- オーダーは削除されたもの、完了ステータスのもの以外はインポート対象とする（洗い替え） " + "\n" + 
			"WHERE ASP_ORDER_SYS.DEL_FLG IS NULL " + "\n" + 
			"    AND ASP_ORDER_SYS.ORDER_STATUS <> 'B' " + "\n" + 
		    ""
        );
    }

    //--------------------
    if ( TALON.getDbConfig().isMssql() ) {
        executeSQL( 
			"CREATE VIEW ASP_V_SAGYO_JSK AS " + "\n" + 
			"SELECT " + "\n" + 
			"     ASP_SAGYO_JSK.PROJECTID " + "\n" + 
			"    ,ASP_SAGYO_JSK.SAGYO_CODE " + "\n" + 
			"    ,ASP_SAGYO_JSK.ORDER_CODE " + "\n" + 
			"    ,CASE WHEN ASP_SAGYO_JSK.MAE_DANDORI_START_DATE IS NOT NULL THEN ASP_SAGYO_JSK.MAE_DANDORI_START_DATE ELSE ASP_SAGYO_JSK.SEIZO_START_DATE END AS START_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.SEIZO_END_DATE AS END_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.KOUTEI_CODE " + "\n" + 
			"    ,ASP_SAGYO_JSK.KOUTEI_NO " + "\n" + 
			"    -- ASPROVAで実績入力時、資源コードが省略されるパターンあり（その場合は計画のもとを使用） " + "\n" + 
			"    ,CASE WHEN ASP_SAGYO_JSK.SIGEN_CODE IS NULL THEN ASP_SAGYO_SYS.SIGEN_CODE ELSE ASP_SAGYO_JSK.SIGEN_CODE END SIGEN_CODE " + "\n" + 
			"    ,ASP_SAGYO_JSK.SEIZO_SU " + "\n" + 
			"    ,ASP_SAGYO_JSK.SAGYO_STATUS " + "\n" + 
			"    ,ASP_SAGYO_JSK.MAE_DANDORI_START_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.MAE_DANDORI_END_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.SEIZO_START_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.SEIZO_END_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.SEIZO_TEISI_TIME " + "\n" + 
			"    ,ASP_SAGYO_JSK.SAIKI_FLG " + "\n" + 
			"    ,ASP_SAGYO_JSK.FURYO_SU " + "\n" + 
			"    ,CASE " + "\n" + 
			"        WHEN ASP_SAGYO_JSK.FURYO_SU IS NULL THEN  ASP_SAGYO_JSK.SEIZO_SU " + "\n" + 
			"        ELSE ASP_SAGYO_JSK.SEIZO_SU - ASP_SAGYO_JSK.FURYO_SU " + "\n" + 
			"     END AS NORMAL_SU " + "\n" + 
			"    -- BOM段取実績　：　開始、終了が登録されている場合出力、計算対象 " + "\n" + 
			"    ,CASE " + "\n" + 
			"        WHEN ASP_SAGYO_JSK.MAE_DANDORI_START_DATE IS NOT NULL AND ASP_SAGYO_JSK.MAE_DANDORI_END_DATE IS NOT NULL THEN  dbo.TLN_DATEDIFF('S', ASP_SAGYO_JSK.MAE_DANDORI_END_DATE, ASP_SAGYO_JSK.MAE_DANDORI_START_DATE) / 60 " + "\n" + 
			"        ELSE 0 " + "\n" + 
			"     END  AS MAE_DANDORI_TIME " + "\n" + 
			"    -- 製造時間には停止時間（分）を考慮（実績時間_秒 / 60 - 実績時間_分）　 " + "\n" + 
			"    ,CASE WHEN ASP_SAGYO_JSK.SEIZO_START_DATE IS NOT NULL AND ASP_SAGYO_JSK.SEIZO_END_DATE IS NOT NULL THEN " + "\n" + 
			"        ( dbo.TLN_DATEDIFF('S', ASP_SAGYO_JSK.SEIZO_END_DATE, ASP_SAGYO_JSK.SEIZO_START_DATE) / 60 ) " + "\n" + 
			"        - " + "\n" + 
			"        CASE WHEN ASP_SAGYO_JSK.SEIZO_TEISI_TIME IS NULL THEN 0 ELSE ASP_SAGYO_JSK.SEIZO_TEISI_TIME END " + "\n" + 
			"     ELSE 0 END  AS SEIZO_TIME " + "\n" + 
			"    ,ASP_SAGYO_JSK.CREATED_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.CREATED_BY " + "\n" + 
			"    ,ASP_SAGYO_JSK.CREATED_PRG_NM " + "\n" + 
			"    ,ASP_SAGYO_JSK.UPDATED_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.UPDATED_BY " + "\n" + 
			"    ,ASP_SAGYO_JSK.UPDATED_PRG_NM " + "\n" + 
			"    ,ASP_SAGYO_JSK.MODIFY_COUNT " + "\n" + 
			"FROM ASP_SAGYO_JSK " + "\n" + 
			"LEFT OUTER JOIN  ASP_SAGYO_SYS " + "\n" + 
			"  ON ASP_SAGYO_SYS.PROJECTID  = ASP_SAGYO_JSK.PROJECTID " + "\n" + 
			" AND ASP_SAGYO_SYS.SAGYO_CODE = ASP_SAGYO_JSK.SAGYO_CODE " + "\n" + 
            ""
        );
    } else {
        executeSQL( 
			"CREATE VIEW ASP_V_SAGYO_JSK AS " + "\n" + 
			"SELECT " + "\n" + 
			"     ASP_SAGYO_JSK.PROJECTID " + "\n" + 
			"    ,ASP_SAGYO_JSK.SAGYO_CODE " + "\n" + 
			"    ,ASP_SAGYO_JSK.ORDER_CODE " + "\n" + 
			"    ,CASE WHEN ASP_SAGYO_JSK.MAE_DANDORI_START_DATE IS NOT NULL THEN ASP_SAGYO_JSK.MAE_DANDORI_START_DATE ELSE ASP_SAGYO_JSK.SEIZO_START_DATE END AS START_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.SEIZO_END_DATE AS END_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.KOUTEI_CODE " + "\n" + 
			"    ,ASP_SAGYO_JSK.KOUTEI_NO " + "\n" + 
			"    -- ASPROVAで実績入力時、資源コードが省略されるパターンあり（その場合は計画のもとを使用） " + "\n" + 
			"    ,CASE WHEN ASP_SAGYO_JSK.SIGEN_CODE IS NULL THEN ASP_SAGYO_SYS.SIGEN_CODE ELSE ASP_SAGYO_JSK.SIGEN_CODE END SIGEN_CODE " + "\n" + 
			"    ,ASP_SAGYO_JSK.SEIZO_SU " + "\n" + 
			"    ,ASP_SAGYO_JSK.SAGYO_STATUS " + "\n" + 
			"    ,ASP_SAGYO_JSK.MAE_DANDORI_START_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.MAE_DANDORI_END_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.SEIZO_START_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.SEIZO_END_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.SEIZO_TEISI_TIME " + "\n" + 
			"    ,ASP_SAGYO_JSK.SAIKI_FLG " + "\n" + 
			"    ,ASP_SAGYO_JSK.FURYO_SU " + "\n" + 
			"    ,CASE " + "\n" + 
			"        WHEN ASP_SAGYO_JSK.FURYO_SU IS NULL THEN  ASP_SAGYO_JSK.SEIZO_SU " + "\n" + 
			"        ELSE ASP_SAGYO_JSK.SEIZO_SU - ASP_SAGYO_JSK.FURYO_SU " + "\n" + 
			"     END AS NORMAL_SU " + "\n" + 
			"    -- BOM段取実績　：　開始、終了が登録されている場合出力、計算対象 " + "\n" + 
			"    ,CASE " + "\n" + 
			"        WHEN ASP_SAGYO_JSK.MAE_DANDORI_START_DATE IS NOT NULL AND ASP_SAGYO_JSK.MAE_DANDORI_END_DATE IS NOT NULL THEN  TLN_DATEDIFF('S', ASP_SAGYO_JSK.MAE_DANDORI_END_DATE, ASP_SAGYO_JSK.MAE_DANDORI_START_DATE) / 60 " + "\n" + 
			"        ELSE 0 " + "\n" + 
			"     END  AS MAE_DANDORI_TIME " + "\n" + 
			"    -- 製造時間には停止時間（分）を考慮（実績時間_秒 / 60 - 実績時間_分）　 " + "\n" + 
			"    ,CASE WHEN ASP_SAGYO_JSK.SEIZO_START_DATE IS NOT NULL AND ASP_SAGYO_JSK.SEIZO_END_DATE IS NOT NULL THEN " + "\n" + 
			"        ( TLN_DATEDIFF('S', ASP_SAGYO_JSK.SEIZO_END_DATE, ASP_SAGYO_JSK.SEIZO_START_DATE) / 60 ) " + "\n" + 
			"        - " + "\n" + 
			"        CASE WHEN ASP_SAGYO_JSK.SEIZO_TEISI_TIME IS NULL THEN 0 ELSE ASP_SAGYO_JSK.SEIZO_TEISI_TIME END " + "\n" + 
			"     ELSE 0 END  AS SEIZO_TIME " + "\n" + 
			"    ,ASP_SAGYO_JSK.CREATED_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.CREATED_BY " + "\n" + 
			"    ,ASP_SAGYO_JSK.CREATED_PRG_NM " + "\n" + 
			"    ,ASP_SAGYO_JSK.UPDATED_DATE " + "\n" + 
			"    ,ASP_SAGYO_JSK.UPDATED_BY " + "\n" + 
			"    ,ASP_SAGYO_JSK.UPDATED_PRG_NM " + "\n" + 
			"    ,ASP_SAGYO_JSK.MODIFY_COUNT " + "\n" + 
			"FROM ASP_SAGYO_JSK " + "\n" + 
			"LEFT OUTER JOIN  ASP_SAGYO_SYS " + "\n" + 
			"  ON ASP_SAGYO_SYS.PROJECTID  = ASP_SAGYO_JSK.PROJECTID " + "\n" + 
			" AND ASP_SAGYO_SYS.SAGYO_CODE = ASP_SAGYO_JSK.SAGYO_CODE " + "\n" + 
            ""
        );
    }

    //--------------------
    executeSQL( 
		"CREATE VIEW ASP_V_SAGYO_OPE AS " + "\n" + 
		"SELECT " + "\n" + 
		"     ASP_SAGYO_OPE.PROJECTID " + "\n" + 
		"    ,ASP_SAGYO_OPE.SAGYO_CODE " + "\n" + 
		"    ,ASP_SAGYO_OPE.START_DATE " + "\n" + 
		"    ,ASP_SAGYO_OPE.END_DATE " + "\n" + 
		"    ,ASP_SAGYO_OPE.SIGEN_CODE " + "\n" + 
		"    ,ASP_SAGYO_OPE.SEND_KBN " + "\n" + 
		"    ,ASP_SAGYO_OPE.CREATED_DATE " + "\n" + 
		"    ,ASP_SAGYO_OPE.CREATED_BY " + "\n" + 
		"    ,ASP_SAGYO_OPE.CREATED_PRG_NM " + "\n" + 
		"    ,ASP_SAGYO_OPE.UPDATED_DATE " + "\n" + 
		"    ,ASP_SAGYO_OPE.UPDATED_BY " + "\n" + 
		"    ,ASP_SAGYO_OPE.UPDATED_PRG_NM " + "\n" + 
		"    ,ASP_SAGYO_OPE.MODIFY_COUNT " + "\n" + 
		"FROM ASP_SAGYO_OPE " + "\n" + 
		"-- 実績データは1:未送信／2:送信済み計画中が対象（計画完了後はSYSが正となる) " + "\n" + 
		"WHERE ASP_SAGYO_OPE.SEND_KBN IN ( '0' , '1' ) " + "\n" + 
	    ""
    );

    //--------------------
    if ( TALON.getDbConfig().isMssql() ) {
        executeSQL( 
			"CREATE VIEW ASP_V_SAGYO_INFO AS  " + "\n" + 
			"SELECT " + "\n" + 
			"     ASP_SAGYO_SYS.PROJECTID " + "\n" + 
			"    ,ASP_SAGYO_SYS.SAGYO_CODE " + "\n" + 
			"    ,ASP_SAGYO_SYS.ORDER_CODE " + "\n" + 
			"    ,ASP_ORDER_SYS.ITEM_CODE " + "\n" + 
			" " + "\n" + 
			"    -- 実績入力が実施されていればその内容を表示 " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SAGYO_STATUS ELSE ASP_SAGYO_SYS.SAGYO_STATUS END SAGYO_STATUS " + "\n" + 
			" " + "\n" + 
			"    ,ASP_SAGYO_SYS.KOUTEI_CODE " + "\n" + 
			"    ,ASP_SAGYO_SYS.KOUTEI_NO " + "\n" + 
			"    ,ASP_SAGYO_SYS.LT " + "\n" + 
			" " + "\n" + 
			"    -- ガント操作が実施されていればその内容を表示 " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.SIGEN_CODE ELSE ASP_SAGYO_SYS.SIGEN_CODE END AS SIGEN_CODE " + "\n" + 
			"    ,ASP_SAGYO_SYS.SEIZO_SU " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.START_DATE ELSE ASP_SAGYO_SYS.START_DATE END AS START_DATE " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.END_DATE   ELSE ASP_SAGYO_SYS.END_DATE   END AS END_DATE " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN '1' ELSE '0' END OPE_UMU_KBN " + "\n" + 
			" " + "\n" + 
			"    -- 実績入力が実施されていればその内容を表示 " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SIGEN_CODE ELSE ASP_SAGYO_SYS.JSK_SIGEN_CODE END AS JSK_SIGEN_CODE " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SEIZO_SU   ELSE ASP_SAGYO_SYS.JSK_SEIZO_SU   END AS JSK_SEIZO_SU " + "\n" + 
			" " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.START_DATE ELSE ASP_SAGYO_SYS.JSK_START_DATE END AS JSK_START_DATE " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.END_DATE   ELSE ASP_SAGYO_SYS.JSK_END_DATE   END AS JSK_END_DATE " + "\n" + 
			" " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.MAE_DANDORI_START_DATE AS JSK_MAE_DANDORI_START_DATE " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.MAE_DANDORI_END_DATE   AS JSK_MAE_DANDORI_END_DATE " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.SEIZO_START_DATE       AS JSK_SEIZO_START_DATE " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.SEIZO_END_DATE         AS JSK_SEIZO_END_DATE " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.SEIZO_TEISI_TIME       AS SEIZO_TEISI_TIME " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.SAIKI_FLG              AS SAIKI_FLG " + "\n" + 
			" " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.FURYO_SU ELSE ASP_SAGYO_SYS.JSK_FURYO_SU END AS JSK_FURYO_SU " + "\n" + 
			"    -- 不良数がnullの場合場合、製造数を表示する（算出で正常数がNULLになってしまうので） " + "\n" + 
			"    ,CASE WHEN ( CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.FURYO_SU   ELSE ASP_SAGYO_SYS.JSK_FURYO_SU END ) IS NULL THEN " + "\n" + 
			"         ( CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SEIZO_SU   ELSE ASP_SAGYO_SYS.JSK_SEIZO_SU   END ) " + "\n" + 
			"     ELSE " + "\n" + 
			"         ( CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SEIZO_SU   ELSE ASP_SAGYO_SYS.JSK_SEIZO_SU   END ) " + "\n" + 
			"         - " + "\n" + 
			"         ( CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.FURYO_SU   ELSE ASP_SAGYO_SYS.JSK_FURYO_SU   END ) " + "\n" + 
			"     END AS JSK_NORMAL_SU " + "\n" + 
			" " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN '1' ELSE '0' END JSK_UMU_KBN " + "\n" + 
			" " + "\n" + 
			"     -- ガント表示用（ステータス、入力値を考慮し、TALON上の状態を取得） " + "\n" + 
			"     -- ステータス：実績入力がある場合は実績入力でのステータス。以外の場合はSYSのステータスを表示 " + "\n" + 
			"     ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SAGYO_STATUS ELSE ASP_SAGYO_SYS.SAGYO_STATUS END AS GANTT_SAGYO_STATUS " + "\n" + 
			" " + "\n" + 
			"     -- 資源コード：実績入力がある場合は実績入力での資源コード。ガント変更がある場合はガント変更での資源コード。以外の場合はSYSの資源コード " + "\n" + 
			"     ,CASE " + "\n" + 
			"         WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS IN ('B','T') THEN ASP_V_SAGYO_JSK.SIGEN_CODE " + "\n" + 
			"         ELSE " + "\n" + 
			"           CASE " + "\n" + 
			"               WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.SIGEN_CODE " + "\n" + 
			"               ELSE ASP_SAGYO_SYS.SIGEN_CODE " + "\n" + 
			"           END " + "\n" + 
			"      END AS GANTT_SIGEN_CODE " + "\n" + 
			" " + "\n" + 
			"     -- 実績入力の数量、開始日、終了日は「完了ステータス」で無いと反映させない（着手中は反映しない） " + "\n" + 
			"     -- 製造数：実績入力がありステータスが完了の場合は実績入力の製造数。以外の場合はSYSの製造数 " + "\n" + 
			"     ,CASE " + "\n" + 
			"         WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.SEIZO_SU " + "\n" + 
			"         ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN JSK_SEIZO_SU ELSE ASP_SAGYO_SYS.SEIZO_SU END " + "\n" + 
			"      END  AS GANTT_SEIZO_SU " + "\n" + 
			" " + "\n" + 
			"     -- 開始日：実績入力がありステータスが完了の場合は実績入力の開始日、ガント変更がある場合はガント変更での開始日、 " + "\n" + 
			"     -- 以外の場合、SYSのステータスが完了の場合は実績開始日、以外の場合は開始日を表示 " + "\n" + 
			"     ,CASE " + "\n" + 
			"         WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.START_DATE " + "\n" + 
			"         ELSE " + "\n" + 
			"           CASE " + "\n" + 
			"               WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.START_DATE " + "\n" + 
			"               -- ASP_SAGYO_SYSのステータスが完了の状態でOPEは操作できない前提 " + "\n" + 
			"               ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_START_DATE ELSE ASP_SAGYO_SYS.START_DATE END " + "\n" + 
			"           END " + "\n" + 
			"      END  AS GANTT_START_DATE " + "\n" + 
			" " + "\n" + 
			"     -- 終了日：実績入力がありステータスが完了の場合は実績入力の終了日、ガント変更がある場合はガント変更での終了日、 " + "\n" + 
			"     -- 以外の場合、SYSのステータスが完了の場合は実績終了日、以外の場合は終了日を表示 " + "\n" + 
			"     ,CASE " + "\n" + 
			"         WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.END_DATE " + "\n" + 
			"         ELSE " + "\n" + 
			"           CASE " + "\n" + 
			"               WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.END_DATE " + "\n" + 
			"               -- ASP_SAGYO_SYSのステータスが完了の状態でOPEは操作できない前提 " + "\n" + 
			"               ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_END_DATE ELSE ASP_SAGYO_SYS.END_DATE END " + "\n" + 
			"           END " + "\n" + 
			"      END  AS GANTT_END_DATE " + "\n" + 
			" " + "\n" + 
			"      -- ガントチャートツールチップ（オーダガント、資源ガント） " + "\n" + 
			"      , dbo.TLN_CONCAT( " + "\n" + 
			"           dbo.TLN_CONCAT( " + "\n" + 
			"               dbo.TLN_CONCAT( " + "\n" + 
			"                   CONCAT( TOOLTIP_1.DSP1 , ASP_SAGYO_SYS.ORDER_CODE ) " + "\n" + 
			"                  ,CONCAT( TOOLTIP_2.DSP1  , dbo.TLN_DATE_TO_CHAR( 'YMD' , ASP_ORDER_SYS.NOKI_DATE ) ) " + "\n" + 
			"                  ,dbo.TLN_LF() " + "\n" + 
			"               ) " + "\n" + 
			"              ,dbo.TLN_CONCAT( " + "\n" + 
			"                   dbo.TLN_CONCAT( " + "\n" + 
			"                      CONCAT( TOOLTIP_3.DSP1  , ASP_SAGYO_SYS.SAGYO_CODE ) " + "\n" + 
			"                     ,dbo.TLN_CONCAT( '( ' , ' )' , ASP_SAGYO_SYS.KOUTEI_CODE ) " + "\n" + 
			"                     ,'' " + "\n" + 
			"                   ) " + "\n" + 
			"                  ,dbo.TLN_CONCAT( " + "\n" + 
			"                       CONCAT( TOOLTIP_4.DSP1    , ASP_ORDER_SYS.ITEM_CODE ) " + "\n" + 
			"                      ,CONCAT( TOOLTIP_5.DSP1  , " + "\n" + 
			"                            -- GANTT_SEIZO_SU " + "\n" + 
			"                            CASE " + "\n" + 
			"                                WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.SEIZO_SU " + "\n" + 
			"                                ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN JSK_SEIZO_SU ELSE ASP_SAGYO_SYS.SEIZO_SU END " + "\n" + 
			"                            END " + "\n" + 
			"                       ) " + "\n" + 
			"                      ,dbo.TLN_LF() " + "\n" + 
			"                   ) " + "\n" + 
			"                  ,dbo.TLN_LF() " + "\n" + 
			"               ) " + "\n" + 
			"              ,dbo.TLN_LF() " + "\n" + 
			"           ) " + "\n" + 
			"          ,dbo.TLN_CONCAT( " + "\n" + 
			"               dbo.TLN_CONCAT( " + "\n" + 
			"                     dbo.TLN_CONCAT( TOOLTIP_6.DSP1  , dbo.TLN_DATE_TO_CHAR( 'YMDHMS' , " + "\n" + 
			"                        -- GANTT_START_DATE " + "\n" + 
			"                        CASE " + "\n" + 
			"                            WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.START_DATE " + "\n" + 
			"                            ELSE " + "\n" + 
			"                            CASE " + "\n" + 
			"                               WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.START_DATE " + "\n" + 
			"                               ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_START_DATE ELSE ASP_SAGYO_SYS.START_DATE END " + "\n" + 
			"                            END " + "\n" + 
			"                        END " + "\n" + 
			"                     )  , ''  ) " + "\n" + 
			"                    ,dbo.TLN_CONCAT( TOOLTIP_7.DSP1  , dbo.TLN_DATE_TO_CHAR( 'YMDHMS' , " + "\n" + 
			"                        -- GANTT_END_DATE " + "\n" + 
			"                        CASE " + "\n" + 
			"                            WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.END_DATE " + "\n" + 
			"                            ELSE " + "\n" + 
			"                            CASE " + "\n" + 
			"                                WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.END_DATE " + "\n" + 
			"                                ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_END_DATE ELSE ASP_SAGYO_SYS.END_DATE END " + "\n" + 
			"                            END " + "\n" + 
			"                        END " + "\n" + 
			"                     )    , ''  ) " + "\n" + 
			"                    ,dbo.TLN_LF() " + "\n" + 
			"               ) " + "\n" + 
			"              ,dbo.TLN_CONCAT( " + "\n" + 
			"                     dbo.TLN_CONCAT( TOOLTIP_8.DSP1  , CONCAT( dbo.TLN_ROUND('1' , 2 , " + "\n" + 
			"                        -- JSK_MAE_DANDORI_TIME " + "\n" + 
			"                        -- 段取り時間は実績より計算 " + "\n" + 
			"                        CASE WHEN ASP_V_SAGYO_JSK.MAE_DANDORI_START_DATE IS NOT NULL AND ASP_V_SAGYO_JSK.MAE_DANDORI_END_DATE IS NOT NULL THEN " + "\n" + 
			"                            dbo.TLN_DATEDIFF('S',ASP_V_SAGYO_JSK.MAE_DANDORI_END_DATE,ASP_V_SAGYO_JSK.MAE_DANDORI_START_DATE) / 60 " + "\n" + 
			"                        ELSE 0 END " + "\n" + 
			"                     ),'')  , '' ) " + "\n" + 
			"                    ,dbo.TLN_CONCAT( TOOLTIP_9.DSP1  , CONCAT( dbo.TLN_ROUND('1' , 2 , " + "\n" + 
			"                        -- JSK_SEIZO_TIME " + "\n" + 
			"                        -- 製造時間は完了の実績がある場合は実績(JSK)より、無い場合は計画調整(OPE)、もしくは作業情報(SYS)より計算（上記ガントの表示内容と同じ） " + "\n" + 
			"                        ( " + "\n" + 
			"                            dbo.TLN_DATEDIFF( " + "\n" + 
			"                                'S', " + "\n" + 
			"                                -- 終了日時 " + "\n" + 
			"                                CASE " + "\n" + 
			"                                    WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.END_DATE " + "\n" + 
			"                                    ELSE " + "\n" + 
			"                                    CASE " + "\n" + 
			"                                        WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.END_DATE " + "\n" + 
			"                                        ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_END_DATE ELSE ASP_SAGYO_SYS.END_DATE END " + "\n" + 
			"                                    END " + "\n" + 
			"                                END, " + "\n" + 
			"                                -- 終了日時 " + "\n" + 
			"                                CASE " + "\n" + 
			"                                    WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.START_DATE " + "\n" + 
			"                                    ELSE " + "\n" + 
			"                                    CASE " + "\n" + 
			"                                       WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.START_DATE " + "\n" + 
			"                                       ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_START_DATE ELSE ASP_SAGYO_SYS.START_DATE END " + "\n" + 
			"                                    END " + "\n" + 
			"                                END " + "\n" + 
			"                            ) " + "\n" + 
			"                        / 60 ) " + "\n" + 
			"                        - " + "\n" + 
			"                        CASE WHEN ASP_V_SAGYO_JSK.SEIZO_TEISI_TIME IS NULL THEN 0 ELSE ASP_V_SAGYO_JSK.SEIZO_TEISI_TIME END " + "\n" + 
			"                     ),'')  , '' ) " + "\n" + 
			"                    ,dbo.TLN_LF() " + "\n" + 
			"               ) " + "\n" + 
			"              ,dbo.TLN_LF() " + "\n" + 
			"           ) " + "\n" + 
			"          ,dbo.TLN_LF() " + "\n" + 
			"       ) as TOOLTIP " + "\n" + 
			" " + "\n" + 
			"     -- BOM段取実績　：　開始、終了が登録されている場合出力、計算対象 " + "\n" + 
			"     ,CASE WHEN ASP_V_SAGYO_JSK.MAE_DANDORI_START_DATE IS NOT NULL AND ASP_V_SAGYO_JSK.MAE_DANDORI_END_DATE IS NOT NULL THEN " + "\n" + 
			"      dbo.TLN_DATEDIFF('S',ASP_V_SAGYO_JSK.MAE_DANDORI_END_DATE,ASP_V_SAGYO_JSK.MAE_DANDORI_START_DATE) / 60 " + "\n" + 
			"      ELSE 0 END  AS JSK_MAE_DANDORI_TIME " + "\n" + 
			"     -- 製造時間には停止時間（分）を考慮（実績時間_秒 / 60 - 実績時間_分）　 " + "\n" + 
			"     ,CASE WHEN ASP_V_SAGYO_JSK.SEIZO_START_DATE IS NOT NULL AND ASP_V_SAGYO_JSK.SEIZO_END_DATE IS NOT NULL THEN " + "\n" + 
			"          ( dbo.TLN_DATEDIFF('S',ASP_V_SAGYO_JSK.SEIZO_END_DATE,ASP_V_SAGYO_JSK.SEIZO_START_DATE) / 60 ) " + "\n" + 
			"          - " + "\n" + 
			"          CASE WHEN ASP_V_SAGYO_JSK.SEIZO_TEISI_TIME IS NULL THEN 0 ELSE ASP_V_SAGYO_JSK.SEIZO_TEISI_TIME END " + "\n" + 
			"      ELSE 0 END  AS JSK_SEIZO_TIME " + "\n" + 
			" " + "\n" + 
			"FROM ASP_SAGYO_SYS " + "\n" + 
			" " + "\n" + 
			"LEFT OUTER JOIN ASP_ORDER_SYS " + "\n" + 
			"  ON ASP_SAGYO_SYS.PROJECTID = ASP_ORDER_SYS.PROJECTID " + "\n" + 
			" AND ASP_SAGYO_SYS.ORDER_CODE = ASP_ORDER_SYS.ORDER_CODE " + "\n" + 
			" " + "\n" + 
			"LEFT OUTER JOIN ASP_V_SAGYO_JSK " + "\n" + 
			"  ON ASP_SAGYO_SYS.PROJECTID = ASP_V_SAGYO_JSK.PROJECTID " + "\n" + 
			" AND ASP_SAGYO_SYS.SAGYO_CODE = ASP_V_SAGYO_JSK.SAGYO_CODE " + "\n" + 
			" " + "\n" + 
			"LEFT OUTER JOIN ASP_V_SAGYO_OPE " + "\n" + 
			"  ON ASP_SAGYO_SYS.PROJECTID = ASP_V_SAGYO_OPE.PROJECTID " + "\n" + 
			" AND ASP_SAGYO_SYS.SAGYO_CODE = ASP_V_SAGYO_OPE.SAGYO_CODE " + "\n" + 
			" " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_1 " + "\n" + 
			"   ON TOOLTIP_1.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_1.KEY_CODE = '1' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_2 " + "\n" + 
			"   ON TOOLTIP_2.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_2.KEY_CODE = '2' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_3 " + "\n" + 
			"   ON TOOLTIP_3.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_3.KEY_CODE = '3' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_4 " + "\n" + 
			"   ON TOOLTIP_4.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_4.KEY_CODE = '4' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_5 " + "\n" + 
			"   ON TOOLTIP_5.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_5.KEY_CODE = '5' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_6 " + "\n" + 
			"   ON TOOLTIP_6.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_6.KEY_CODE = '6' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_7 " + "\n" + 
			"   ON TOOLTIP_7.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_7.KEY_CODE = '7' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_8 " + "\n" + 
			"   ON TOOLTIP_8.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_8.KEY_CODE = '8' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_9 " + "\n" + 
			"   ON TOOLTIP_9.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_9.KEY_CODE = '9' " + "\n" + 
			" " + "\n" + 
            ""
        );

    } else {
        executeSQL( 
			"CREATE VIEW ASP_V_SAGYO_INFO AS  " + "\n" + 
			"SELECT " + "\n" + 
			"     ASP_SAGYO_SYS.PROJECTID " + "\n" + 
			"    ,ASP_SAGYO_SYS.SAGYO_CODE " + "\n" + 
			"    ,ASP_SAGYO_SYS.ORDER_CODE " + "\n" + 
			"    ,ASP_ORDER_SYS.ITEM_CODE " + "\n" + 
			" " + "\n" + 
			"    -- 実績入力が実施されていればその内容を表示 " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SAGYO_STATUS ELSE ASP_SAGYO_SYS.SAGYO_STATUS END SAGYO_STATUS " + "\n" + 
			" " + "\n" + 
			"    ,ASP_SAGYO_SYS.KOUTEI_CODE " + "\n" + 
			"    ,ASP_SAGYO_SYS.KOUTEI_NO " + "\n" + 
			"    ,ASP_SAGYO_SYS.LT " + "\n" + 
			" " + "\n" + 
			"    -- ガント操作が実施されていればその内容を表示 " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.SIGEN_CODE ELSE ASP_SAGYO_SYS.SIGEN_CODE END AS SIGEN_CODE " + "\n" + 
			"    ,ASP_SAGYO_SYS.SEIZO_SU " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.START_DATE ELSE ASP_SAGYO_SYS.START_DATE END AS START_DATE " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.END_DATE   ELSE ASP_SAGYO_SYS.END_DATE   END AS END_DATE " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN '1' ELSE '0' END OPE_UMU_KBN " + "\n" + 
			" " + "\n" + 
			"    -- 実績入力が実施されていればその内容を表示 " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SIGEN_CODE ELSE ASP_SAGYO_SYS.JSK_SIGEN_CODE END AS JSK_SIGEN_CODE " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SEIZO_SU   ELSE ASP_SAGYO_SYS.JSK_SEIZO_SU   END AS JSK_SEIZO_SU " + "\n" + 
			" " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.START_DATE ELSE ASP_SAGYO_SYS.JSK_START_DATE END AS JSK_START_DATE " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.END_DATE   ELSE ASP_SAGYO_SYS.JSK_END_DATE   END AS JSK_END_DATE " + "\n" + 
			" " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.MAE_DANDORI_START_DATE AS JSK_MAE_DANDORI_START_DATE " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.MAE_DANDORI_END_DATE   AS JSK_MAE_DANDORI_END_DATE " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.SEIZO_START_DATE       AS JSK_SEIZO_START_DATE " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.SEIZO_END_DATE         AS JSK_SEIZO_END_DATE " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.SEIZO_TEISI_TIME       AS SEIZO_TEISI_TIME " + "\n" + 
			"    ,ASP_V_SAGYO_JSK.SAIKI_FLG              AS SAIKI_FLG " + "\n" + 
			" " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.FURYO_SU ELSE ASP_SAGYO_SYS.JSK_FURYO_SU END AS JSK_FURYO_SU " + "\n" + 
			"    -- 不良数がnullの場合場合、製造数を表示する（算出で正常数がNULLになってしまうので） " + "\n" + 
			"    ,CASE WHEN ( CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.FURYO_SU   ELSE ASP_SAGYO_SYS.JSK_FURYO_SU END ) IS NULL THEN " + "\n" + 
			"         ( CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SEIZO_SU   ELSE ASP_SAGYO_SYS.JSK_SEIZO_SU   END ) " + "\n" + 
			"     ELSE " + "\n" + 
			"         ( CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SEIZO_SU   ELSE ASP_SAGYO_SYS.JSK_SEIZO_SU   END ) " + "\n" + 
			"         - " + "\n" + 
			"         ( CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.FURYO_SU   ELSE ASP_SAGYO_SYS.JSK_FURYO_SU   END ) " + "\n" + 
			"     END AS JSK_NORMAL_SU " + "\n" + 
			" " + "\n" + 
			"    ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN '1' ELSE '0' END JSK_UMU_KBN " + "\n" + 
			" " + "\n" + 
			"     -- ガント表示用（ステータス、入力値を考慮し、TALON上の状態を取得） " + "\n" + 
			"     -- ステータス：実績入力がある場合は実績入力でのステータス。以外の場合はSYSのステータスを表示 " + "\n" + 
			"     ,CASE WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_JSK.SAGYO_STATUS ELSE ASP_SAGYO_SYS.SAGYO_STATUS END AS GANTT_SAGYO_STATUS " + "\n" + 
			" " + "\n" + 
			"     -- 資源コード：実績入力がある場合は実績入力での資源コード。ガント変更がある場合はガント変更での資源コード。以外の場合はSYSの資源コード " + "\n" + 
			"     ,CASE " + "\n" + 
			"         WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS IN ('B','T') THEN ASP_V_SAGYO_JSK.SIGEN_CODE " + "\n" + 
			"         ELSE " + "\n" + 
			"           CASE " + "\n" + 
			"               WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.SIGEN_CODE " + "\n" + 
			"               ELSE ASP_SAGYO_SYS.SIGEN_CODE " + "\n" + 
			"           END " + "\n" + 
			"      END AS GANTT_SIGEN_CODE " + "\n" + 
			" " + "\n" + 
			"     -- 実績入力の数量、開始日、終了日は「完了ステータス」で無いと反映させない（着手中は反映しない） " + "\n" + 
			"     -- 製造数：実績入力がありステータスが完了の場合は実績入力の製造数。以外の場合はSYSの製造数 " + "\n" + 
			"     ,CASE " + "\n" + 
			"         WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.SEIZO_SU " + "\n" + 
			"         ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN JSK_SEIZO_SU ELSE ASP_SAGYO_SYS.SEIZO_SU END " + "\n" + 
			"      END  AS GANTT_SEIZO_SU " + "\n" + 
			" " + "\n" + 
			"     -- 開始日：実績入力がありステータスが完了の場合は実績入力の開始日、ガント変更がある場合はガント変更での開始日、 " + "\n" + 
			"     -- 以外の場合、SYSのステータスが完了の場合は実績開始日、以外の場合は開始日を表示 " + "\n" + 
			"     ,CASE " + "\n" + 
			"         WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.START_DATE " + "\n" + 
			"         ELSE " + "\n" + 
			"           CASE " + "\n" + 
			"               WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.START_DATE " + "\n" + 
			"               -- ASP_SAGYO_SYSのステータスが完了の状態でOPEは操作できない前提 " + "\n" + 
			"               ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_START_DATE ELSE ASP_SAGYO_SYS.START_DATE END " + "\n" + 
			"           END " + "\n" + 
			"      END  AS GANTT_START_DATE " + "\n" + 
			" " + "\n" + 
			"     -- 終了日：実績入力がありステータスが完了の場合は実績入力の終了日、ガント変更がある場合はガント変更での終了日、 " + "\n" + 
			"     -- 以外の場合、SYSのステータスが完了の場合は実績終了日、以外の場合は終了日を表示 " + "\n" + 
			"     ,CASE " + "\n" + 
			"         WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.END_DATE " + "\n" + 
			"         ELSE " + "\n" + 
			"           CASE " + "\n" + 
			"               WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.END_DATE " + "\n" + 
			"               -- ASP_SAGYO_SYSのステータスが完了の状態でOPEは操作できない前提 " + "\n" + 
			"               ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_END_DATE ELSE ASP_SAGYO_SYS.END_DATE END " + "\n" + 
			"           END " + "\n" + 
			"      END  AS GANTT_END_DATE " + "\n" + 
			" " + "\n" + 
			"      -- ガントチャートツールチップ（オーダガント、資源ガント） " + "\n" + 
			"      , TLN_CONCAT( " + "\n" + 
			"           TLN_CONCAT( " + "\n" + 
			"               TLN_CONCAT( " + "\n" + 
			"                   CONCAT( TOOLTIP_1.DSP1 , ASP_SAGYO_SYS.ORDER_CODE ) " + "\n" + 
			"                  ,CONCAT( TOOLTIP_2.DSP1  , TLN_DATE_TO_CHAR( 'YMD' , ASP_ORDER_SYS.NOKI_DATE ) ) " + "\n" + 
			"                  ,TLN_LF() " + "\n" + 
			"               ) " + "\n" + 
			"              ,TLN_CONCAT( " + "\n" + 
			"                   TLN_CONCAT( " + "\n" + 
			"                      CONCAT( TOOLTIP_3.DSP1  , ASP_SAGYO_SYS.SAGYO_CODE ) " + "\n" + 
			"                     ,TLN_CONCAT( '( ' , ' )' , ASP_SAGYO_SYS.KOUTEI_CODE ) " + "\n" + 
			"                     ,'' " + "\n" + 
			"                   ) " + "\n" + 
			"                  ,TLN_CONCAT( " + "\n" + 
			"                       CONCAT( TOOLTIP_4.DSP1    , ASP_ORDER_SYS.ITEM_CODE ) " + "\n" + 
			"                      ,CONCAT( TOOLTIP_5.DSP1  , " + "\n" + 
			"                            -- GANTT_SEIZO_SU " + "\n" + 
			"                            CASE " + "\n" + 
			"                                WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.SEIZO_SU " + "\n" + 
			"                                ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN JSK_SEIZO_SU ELSE ASP_SAGYO_SYS.SEIZO_SU END " + "\n" + 
			"                            END " + "\n" + 
			"                       ) " + "\n" + 
			"                      ,TLN_LF() " + "\n" + 
			"                   ) " + "\n" + 
			"                  ,TLN_LF() " + "\n" + 
			"               ) " + "\n" + 
			"              ,TLN_LF() " + "\n" + 
			"           ) " + "\n" + 
			"          ,TLN_CONCAT( " + "\n" + 
			"               TLN_CONCAT( " + "\n" + 
			"                     TLN_CONCAT( TOOLTIP_6.DSP1  , TLN_DATE_TO_CHAR( 'YMDHMS' , " + "\n" + 
			"                        -- GANTT_START_DATE " + "\n" + 
			"                        CASE " + "\n" + 
			"                            WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.START_DATE " + "\n" + 
			"                            ELSE " + "\n" + 
			"                            CASE " + "\n" + 
			"                               WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.START_DATE " + "\n" + 
			"                               ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_START_DATE ELSE ASP_SAGYO_SYS.START_DATE END " + "\n" + 
			"                            END " + "\n" + 
			"                        END " + "\n" + 
			"                     )  , ''  ) " + "\n" + 
			"                    ,TLN_CONCAT( TOOLTIP_7.DSP1  , TLN_DATE_TO_CHAR( 'YMDHMS' , " + "\n" + 
			"                        -- GANTT_END_DATE " + "\n" + 
			"                        CASE " + "\n" + 
			"                            WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.END_DATE " + "\n" + 
			"                            ELSE " + "\n" + 
			"                            CASE " + "\n" + 
			"                                WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.END_DATE " + "\n" + 
			"                                ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_END_DATE ELSE ASP_SAGYO_SYS.END_DATE END " + "\n" + 
			"                            END " + "\n" + 
			"                        END " + "\n" + 
			"                     )    , ''  ) " + "\n" + 
			"                    ,TLN_LF() " + "\n" + 
			"               ) " + "\n" + 
			"              ,TLN_CONCAT( " + "\n" + 
			"                     TLN_CONCAT( TOOLTIP_8.DSP1  , CONCAT( TLN_ROUND('1' , 2 , " + "\n" + 
			"                        -- JSK_MAE_DANDORI_TIME " + "\n" + 
			"                        -- 段取り時間は実績より計算 " + "\n" + 
			"                        CASE WHEN ASP_V_SAGYO_JSK.MAE_DANDORI_START_DATE IS NOT NULL AND ASP_V_SAGYO_JSK.MAE_DANDORI_END_DATE IS NOT NULL THEN " + "\n" + 
			"                            TLN_DATEDIFF('S',ASP_V_SAGYO_JSK.MAE_DANDORI_END_DATE,ASP_V_SAGYO_JSK.MAE_DANDORI_START_DATE) / 60 " + "\n" + 
			"                        ELSE 0 END " + "\n" + 
			"                     ),'') , '' ) " + "\n" + 
			"                    ,TLN_CONCAT( TOOLTIP_9.DSP1  , CONCAT( TLN_ROUND('1' , 2 , " + "\n" + 
			"                        -- JSK_SEIZO_TIME " + "\n" + 
			"                        -- 製造時間は完了の実績がある場合は実績(JSK)より、無い場合は計画調整(OPE)、もしくは作業情報(SYS)より計算（上記ガントの表示内容と同じ） " + "\n" + 
			"                        ( " + "\n" + 
			"                            TLN_DATEDIFF( " + "\n" + 
			"                                'S', " + "\n" + 
			"                                -- 終了日時 " + "\n" + 
			"                                CASE " + "\n" + 
			"                                    WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.END_DATE " + "\n" + 
			"                                    ELSE " + "\n" + 
			"                                    CASE " + "\n" + 
			"                                        WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.END_DATE " + "\n" + 
			"                                        ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_END_DATE ELSE ASP_SAGYO_SYS.END_DATE END " + "\n" + 
			"                                    END " + "\n" + 
			"                                END, " + "\n" + 
			"                                -- 終了日時 " + "\n" + 
			"                                CASE " + "\n" + 
			"                                    WHEN ASP_V_SAGYO_JSK.SAGYO_CODE IS NOT NULL and ASP_V_SAGYO_JSK.SAGYO_STATUS = 'B' THEN ASP_V_SAGYO_JSK.START_DATE " + "\n" + 
			"                                    ELSE " + "\n" + 
			"                                    CASE " + "\n" + 
			"                                       WHEN ASP_V_SAGYO_OPE.SAGYO_CODE IS NOT NULL THEN ASP_V_SAGYO_OPE.START_DATE " + "\n" + 
			"                                       ELSE CASE WHEN ASP_SAGYO_SYS.SAGYO_STATUS = 'B' THEN ASP_SAGYO_SYS.JSK_START_DATE ELSE ASP_SAGYO_SYS.START_DATE END " + "\n" + 
			"                                    END " + "\n" + 
			"                                END " + "\n" + 
			"                            ) " + "\n" + 
			"                        / 60 ) " + "\n" + 
			"                        - " + "\n" + 
			"                        CASE WHEN ASP_V_SAGYO_JSK.SEIZO_TEISI_TIME IS NULL THEN 0 ELSE ASP_V_SAGYO_JSK.SEIZO_TEISI_TIME END " + "\n" + 
			"                     ),'') , '' ) " + "\n" + 
			"                    ,TLN_LF() " + "\n" + 
			"               ) " + "\n" + 
			"              ,TLN_LF() " + "\n" + 
			"           ) " + "\n" + 
			"          ,TLN_LF() " + "\n" + 
			"       ) as TOOLTIP " + "\n" + 
			" " + "\n" + 
			"     -- BOM段取実績　：　開始、終了が登録されている場合出力、計算対象 " + "\n" + 
			"     ,CASE WHEN ASP_V_SAGYO_JSK.MAE_DANDORI_START_DATE IS NOT NULL AND ASP_V_SAGYO_JSK.MAE_DANDORI_END_DATE IS NOT NULL THEN " + "\n" + 
			"      TLN_DATEDIFF('S',ASP_V_SAGYO_JSK.MAE_DANDORI_END_DATE,ASP_V_SAGYO_JSK.MAE_DANDORI_START_DATE) / 60 " + "\n" + 
			"      ELSE 0 END  AS JSK_MAE_DANDORI_TIME " + "\n" + 
			"     -- 製造時間には停止時間（分）を考慮（実績時間_秒 / 60 - 実績時間_分）　 " + "\n" + 
			"     ,CASE WHEN ASP_V_SAGYO_JSK.SEIZO_START_DATE IS NOT NULL AND ASP_V_SAGYO_JSK.SEIZO_END_DATE IS NOT NULL THEN " + "\n" + 
			"          ( TLN_DATEDIFF('S',ASP_V_SAGYO_JSK.SEIZO_END_DATE,ASP_V_SAGYO_JSK.SEIZO_START_DATE) / 60 ) " + "\n" + 
			"          - " + "\n" + 
			"          CASE WHEN ASP_V_SAGYO_JSK.SEIZO_TEISI_TIME IS NULL THEN 0 ELSE ASP_V_SAGYO_JSK.SEIZO_TEISI_TIME END " + "\n" + 
			"      ELSE 0 END  AS JSK_SEIZO_TIME " + "\n" + 
			" " + "\n" + 
			"FROM ASP_SAGYO_SYS " + "\n" + 
			" " + "\n" + 
			"LEFT OUTER JOIN ASP_ORDER_SYS " + "\n" + 
			"  ON ASP_SAGYO_SYS.PROJECTID = ASP_ORDER_SYS.PROJECTID " + "\n" + 
			" AND ASP_SAGYO_SYS.ORDER_CODE = ASP_ORDER_SYS.ORDER_CODE " + "\n" + 
			" " + "\n" + 
			"LEFT OUTER JOIN ASP_V_SAGYO_JSK " + "\n" + 
			"  ON ASP_SAGYO_SYS.PROJECTID = ASP_V_SAGYO_JSK.PROJECTID " + "\n" + 
			" AND ASP_SAGYO_SYS.SAGYO_CODE = ASP_V_SAGYO_JSK.SAGYO_CODE " + "\n" + 
			" " + "\n" + 
			"LEFT OUTER JOIN ASP_V_SAGYO_OPE " + "\n" + 
			"  ON ASP_SAGYO_SYS.PROJECTID = ASP_V_SAGYO_OPE.PROJECTID " + "\n" + 
			" AND ASP_SAGYO_SYS.SAGYO_CODE = ASP_V_SAGYO_OPE.SAGYO_CODE " + "\n" + 
			" " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_1 " + "\n" + 
			"   ON TOOLTIP_1.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_1.KEY_CODE = '1' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_2 " + "\n" + 
			"   ON TOOLTIP_2.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_2.KEY_CODE = '2' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_3 " + "\n" + 
			"   ON TOOLTIP_3.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_3.KEY_CODE = '3' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_4 " + "\n" + 
			"   ON TOOLTIP_4.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_4.KEY_CODE = '4' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_5 " + "\n" + 
			"   ON TOOLTIP_5.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_5.KEY_CODE = '5' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_6 " + "\n" + 
			"   ON TOOLTIP_6.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_6.KEY_CODE = '6' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_7 " + "\n" + 
			"   ON TOOLTIP_7.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_7.KEY_CODE = '7' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_8 " + "\n" + 
			"   ON TOOLTIP_8.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_8.KEY_CODE = '8' " + "\n" + 
			"  " + "\n" + 
			" LEFT OUTER JOIN TLN_M_HANYO_CODE_MAIN TOOLTIP_9 " + "\n" + 
			"   ON TOOLTIP_9.SIKIBETU_CODE = 'ASP_TOOLTIP_TITLE' " + "\n" + 
			"  AND TOOLTIP_9.KEY_CODE = '9' " + "\n" + 
			" " + "\n" + 
            ""
        );
    }

    //--------------------
    executeSQL( 
		"CREATE VIEW ASP_V_SAGYO_INFO_MAE AS " + "\n" + 
		"SELECT " + "\n" + 
		"   ASP_HIMO.PROJECTID " + "\n" + 
		" , ASP_HIMO.ORDER_CODE_RIGHT    AS ORDER_CODE_MY " + "\n" + 
		" , ASP_HIMO.SAGYO_CODE_RIGHT    AS SAGYO_CODE_MY " + "\n" + 
		" , MAX( ASP_V_SAGYO_INFO.GANTT_END_DATE ) AS MAX_END_DATE " + "\n" + 
		"FROM ASP_HIMO " + "\n" + 
		"INNER JOIN ASP_V_SAGYO_INFO " + "\n" + 
		"   ON ASP_HIMO.PROJECTID        = ASP_V_SAGYO_INFO.PROJECTID " + "\n" + 
		"  AND ASP_HIMO.SAGYO_CODE_LEFT = ASP_V_SAGYO_INFO.SAGYO_CODE " + "\n" + 
		"WHERE ASP_HIMO.ORDER_CODE_RIGHT = ASP_HIMO.ORDER_CODE_LEFT " + "\n" + 
		"GROUP BY " + "\n" + 
		"   ASP_HIMO.PROJECTID " + "\n" + 
		" , ORDER_CODE_RIGHT " + "\n" + 
		" , SAGYO_CODE_RIGHT " + "\n" + 
        ""
    );

    //--------------------
    executeSQL( 
		"CREATE VIEW ASP_V_SAGYO_INFO_ATO AS " + "\n" + 
		"SELECT " + "\n" + 
		"   ASP_HIMO.PROJECTID " + "\n" + 
		" , ASP_HIMO.ORDER_CODE_LEFT   AS ORDER_CODE_MY " + "\n" + 
		" , ASP_HIMO.SAGYO_CODE_LEFT   AS SAGYO_CODE_MY " + "\n" + 
		" , MIN( ASP_V_SAGYO_INFO.GANTT_START_DATE ) AS MIN_START_DATE " + "\n" + 
		"FROM ASP_HIMO " + "\n" + 
		"INNER JOIN ASP_V_SAGYO_INFO " + "\n" + 
		"   ON ASP_HIMO.PROJECTID        = ASP_V_SAGYO_INFO.PROJECTID " + "\n" + 
		"  AND ASP_HIMO.SAGYO_CODE_RIGHT = ASP_V_SAGYO_INFO.SAGYO_CODE " + "\n" + 
		"WHERE ASP_HIMO.ORDER_CODE_RIGHT = ASP_HIMO.ORDER_CODE_LEFT " + "\n" + 
		"GROUP BY " + "\n" + 
		"   ASP_HIMO.PROJECTID " + "\n" + 
		" , ORDER_CODE_LEFT " + "\n" + 
		" , SAGYO_CODE_LEFT " + "\n" + 
        ""
    );

}



//--------------------------------------------
// 言語設定変更
//--------------------------------------------

function change_language(to_lang) {
	
	//現時点の言語を取得
	var now_lang = getLanguageType();

	if ( now_lang != '0' && now_lang != '1' && now_lang != '2' ) {
		//パラメータ不正
		TALON.addErrorMsg( "Error : Invalid parameter (now_language) " );
		TALON.setIsSuccess(false);
		return false;
	}
	if ( to_lang != '0' && to_lang != '1' && to_lang != '2' ) {
		//パラメータ不正
		TALON.addErrorMsg( "Error : Invalid parameter (to_language)" );
		TALON.setIsSuccess(false);
		return false;
	}

	//機能IDの更新（TLN_M_GENERAL_FUNC）
	var map = {
		'ASP_BGT1110' : ['資源別予実照会(日別)[ASP_BGT1110]','Budget and Results by Resource [ASP_BGT1110]',''],
		'ASP_BGT1120' : ['資源別予実照会(日別)[ASP_BGT1120]','Budget and Results by Resource [ASP_BGT1120]',''],
		'ASP_BGT1210' : ['資源・品目別予実照会(日別)[ASP_BGT1210]','Budget and Results by Item [ASP_BGT1210]',''],
		'ASP_BGT1220' : ['資源・品目別予実照会(日別)[ASP_BGT1220]','Budget and Results by Item [ASP_BGT1220]',''],
		'ASP_BGT1400' : ['予実オーダガントチャート[ASP_BGT1400]','Budget and Results by Order Gantt [ASP_BGT1400]',''],
		'ASP_COP2200' : ['月間計画作成[ASP_COP2200]','Monthly Planning [ASP_COP2200]',''],
		'ASP_MST0020' : ['資源マスタ検索子画面[ASP_MST0020]','Search Resource Master [ASP_MST0020]',''],
		'ASP_MST0021' : ['資源マスタ検索子画面[ASP_MST0021]','Search Resource Master [ASP_MST0021]',''],
		'ASP_MST0022' : ['資源マスタ（グループ）検索子画面[ASP_MST0022]','Search Resource Master (Groups) [ASP_MST0020]',''],
		'ASP_MST0030' : ['工程マスタ検索子画面[ASP_MST0030]','Search Process Master [ASP_MST0030]',''],
		'ASP_MST0040' : ['品目マスタ検索子画面[ASP_MST0040]','Search Item Master [ASP_MST0040]',''],
		'ASP_MST0041' : ['品目マスタ検索子画面[ASP_MST0041]','Search Item Master [ASP_MST0041]',''],
		'ASP_MST0042' : ['品目マスタ検索子画面[ASP_MST0042]','Search Item Master [ASP_MST0042]',''],
		'ASP_MST0043' : ['品目マスタ（グループ）検索子画面[ASP_MST0043]','Search Item Master (Groups) [ASP_MST0043]',''],
		'ASP_MST0050' : ['品目/資源マスタ検索子画面[ASP_MST0050]','Search Item / Resource Master [ASP_MST0050]',''],
		'ASP_MST0060' : ['オーダ情報検索子画面[ASP_MST0060]','Search Order Information [ASP_MST0060]',''],
		'ASP_MST0100' : ['製造BOMマスタメンテナンス[ASP_MST0100]','Maintenance Integrated Master [ASP_MST0100]',''],
		'ASP_MST0400' : ['製造BOM段取り製造時間メンテナンス[ASP_MST0400]','Maintenance SetupTime Master [ASP_MST0400]',''],
		'ASP_MST0600' : ['品目マスタメンテナンス[ASP_MST0600]','Maintenance Item Master [ASP_MST0600]',''],
		'ASP_MST0700' : ['工程マスタメンテナンス[ASP_MST0700]','Maintenance Process Master [ASP_MST0700]',''],
		'ASP_MST0800' : ['資源マスタメンテナンス[ASP_MST0800]','Maintenance Reource Master [ASP_MST0800]',''],
		'ASP_MST0900' : ['構成照会[ASP_MST0900]','Inquiry Configuration [ASP_MST0900]',''],
		'ASP_ORD0100' : ['オーダ一覧照会／メンテナンス[ASP_ORD0100]','Maintenance Order List [ASP_ORD0100]',''],
		'ASP_ORD0300' : ['オーダ・作業／メンテナンス[ASP_ORD0300]','Maintenance Order / Operation List [ASP_ORD0300]',''],
		'ASP_ORD0400' : ['作業一覧・指示書発行[ASP_ORD0400]','Operation List / Instruction [ASP_ORD0400]',''],
		'ASP_ORD0410' : ['作業情報詳細[ASP_ORD0410]','Operation Information Details [ASP_ORD0410]',''],
		'ASP_ORD0500' : ['作業実績入力[ASP_ORD0500]','Entry Operation Result [ASP_ORD0500]',''],
		'ASP_ORD0600' : ['作業照会[ASP_ORD0600]（スマートフォン）','Operation List (Smartphone) [ASP_ORD0600]',''],
		'ASP_ORD0610' : ['作業実績入力[ASP_ORD0610]（スマートフォン）','Entry Operation Result (Smartphone) [ASP_ORD0610]',''],
		'ASP_ORD0700' : ['作業実績一括入力[ASP_ORD0700]','Entry Operation Result (Bulkupdate) [ASP_ORD0700]',''],
		'ASP_PLN0110' : ['オーダガントチャート（動的表示）[ASP_PLN0110]','Order Ganttchart (Display) [ASP_PLN0110]',''],
		'ASP_PLN0120' : ['オーダガントチャート（編集有）[ASP_PLN0120]','Order Ganttchart (Entry) [ASP_PLN0120]',''],
		'ASP_PLN0210' : ['資源ガントチャート（動的表示）[ASP_PLN0210]','Resource Ganttchart (Display) [ASP_PLN0210]',''],
		'ASP_PLN0220' : ['資源ガントチャート（編集有）[ASP_PLN0220]','Resource Ganttchart (Entry) [ASP_PLN0220]',''],
		'ASP_PLN0310' : ['作業スケジュールカレンダ（動的表示）[ASP_PLN0310]','Operation Schedule (Display) [ASP_PLN0310]',''],
		'ASP_PLN0320' : ['作業スケジュールカレンダー（編集有）[ASP_PLN0320]','Operation Schedule (Entry) [ASP_PLN0320]',''],
		'ASP_PLN0400' : ['計画調整データ取消[ASP_PLN0400]','Cancel Operation Change Data [ASP_PLN0400]',''],
		'ASP_PLN0500' : ['複数計画比較オーダガントチャート[ASP_PLN0500]','Multiple Plan Order Ganttchart [ASP_PLN0500]',''],
		'ASP_PLN0600' : ['複数計画比較資源ガントチャート[ASP_PLN0600]','Multiple Plan Resource Ganttchart [ASP_PLN0600]',''],
		'ASP_PLN0700' : ['ガントチャート・カレンダーカラー変更[ASP_PLN0700]','Ganttchart / Schedule Color Ghange [ASP_PLN0700]',''],
		'ASP_PLN1110' : ['負荷グラフ照会[ASP_PLN1110]','Inquiry Load Graph [ASP_PLN1110]',''],
		'ASP_SYS0010' : ['セットアップ・初期化[ASP_SYS0010]','System Setup / Initialization [ASP_SYS0010]',''],
		'ASP_SYS0011' : ['メニュー構成データ登録[ASP_SYS0011]','System Setup Menu-Data Registration [ASP_SYS0011]',''],
		'ASP_SYS0020' : ['サンプルデータ登録[ASP_SYS0020]','System Setup Sample-Date Entry [ASP_SYS0020]','']
	}

	for (key in map) {
		var sql = "" +
			"UPDATE TLN_M_GENERAL_FUNC SET FUNC_NM = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID = '" + key + "' ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//ブロック名の更新（TLN_M_GENERAL_FUNC_SQL）
	var map = {
		'ASP_MST0100#0' : ['BOM','BOM',''],
		'ASP_ORD0100#0' : ['オーダ','Order',''],
		'ASP_ORD0300#0' : ['オーダ','Order',''],
		'ASP_MST0060#0' : ['オーダ','Order',''],
		'ASP_BGT1400#0' : ['ガントチャート','Ganttchart',''],
		'ASP_PLN0110#0' : ['ガントチャート','Ganttchart',''],
		'ASP_PLN0120#0' : ['ガントチャート','Ganttchart',''],
		'ASP_PLN0210#0' : ['ガントチャート','Ganttchart',''],
		'ASP_PLN0220#0' : ['ガントチャート','Ganttchart',''],
		'ASP_PLN0500#0' : ['ガントチャート','Ganttchart',''],
		'ASP_PLN0600#0' : ['ガントチャート','Ganttchart',''],
		'ASP_BGT1120#2' : ['グラフ','Graph',''],
		'ASP_BGT1220#1' : ['グラフ','Graph',''],
		'ASP_PLN0310#0' : ['スケジュール','Schedule',''],
		'ASP_PLN0320#0' : ['スケジュール','Schedule',''],
		'ASP_BGT1210#0' : ['予実','Budget and Results',''],
		'ASP_COP2200#0' : ['作成','Create',''],
		'ASP_ORD0300#1' : ['作業','Operation',''],
		'ASP_ORD0400#0' : ['作業','Operation',''],
		'ASP_ORD0600#0' : ['作業','Operation',''],
		'ASP_ORD0610#0' : ['作業','Operation',''],
		'ASP_MST0040#0' : ['品目','Item',''],
		'ASP_MST0041#0' : ['品目','Item',''],
		'ASP_MST0042#0' : ['品目','Item',''],
		'ASP_MST0043#0' : ['品目','Item',''],
		'ASP_MST0600#0' : ['品目','Item',''],
		'ASP_MST0050#0' : ['品目/資源','Item / Resource',''],
		'ASP_BGT1110#1' : ['対象','Target',''],
		'ASP_MST0030#0' : ['工程','Process',''],
		'ASP_MST0700#0' : ['工程','Process',''],
		'ASP_MST0900#0' : ['構成照会','Inquiry Configuration',''],
		'ASP_MST0400#0' : ['製造BOM','Integrated',''],
		'ASP_PLN0400#0' : ['計画調整一覧','Operation Change Data',''],
		'ASP_ORD0410#0' : ['詳細','Detail',''],
		'ASP_ORD0500#0' : ['詳細','Detail',''],
		'ASP_ORD0700#0' : ['詳細','Detail',''],
		'ASP_PLN1110#1' : ['負荷グラフ','Load Graph',''],
		'ASP_MST0020#0' : ['資源','Resource',''],
		'ASP_MST0021#0' : ['資源','Resource',''],
		'ASP_MST0022#0' : ['資源','Resource',''],
		'ASP_MST0800#0' : ['資源','Resource',''],
		'ASP_PLN1110#0' : ['資源','Resource',''],
		'ASP_SYS0020#4' : ['オーダ情報ASP_ORDER_SYS','Order ASP_ORDER_SYS',''],
		'ASP_SYS0020#5' : ['作業情報ASP_SAGYO_SYS','Operation ASP_SAGYO_SYS',''],
		'ASP_SYS0020#1' : ['品目マスタASP_M_ITEM','Item ASP_M_ITEM',''],
		'ASP_SYS0020#2' : ['工程マスタASP_M_KOUTEI','Process ASP_M_KOUTEI',''],
		'ASP_SYS0020#0' : ['製造BOMマスタASP_M_BOM','Integrated ASP_M_BOM',''],
		'ASP_SYS0020#6' : ['紐付けASP_HIMO','Peg ASP_HIMO',''],
		'ASP_SYS0020#3' : ['資源マスタASP_M_SIGEN','Resource ASP_M_SIGEN',''],
		'ASP_SYS0011#1' : ['グループ構成','Group Constitution',''],
		'ASP_SYS0011#0' : ['機能グループ','Function Group',''],
		'ASP_SYS0011#2' : ['機能グループ構成','Function Group Constitution','']
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_GENERAL_FUNC_SQL SET TITLE = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID  = '" + keys[0] + "' " + 
			"  AND FUNC_SEQ =  " + keys[1] + "  ";
		//TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//画面項目の更新（TLN_M_GENERAL_ITEM）
	//画面項目はCOL_NAMEで変換を実施、ただし同じCOL_NAMEでも異なる名称もあるため、COL_NAMEと変換前文字列を条件に変換を実施
	var map = {
		'APP_URL#1' : ['機能毎APP_URL','Application url',''],
		'ATO_DANDORI_END_DATE#2' : ['後段取り終了日時','Teardown end time',''],
		'ATO_DANDORI_START_DATE#3' : ['後段取り開始日時','Teardown start time',''],
		'ATO_DANDORI_TIME#4' : ['後段取り','Teardown',''],
		'ATO_DANDORI_TIME#5' : ['後段取り時間','Teardown time',''],
		'AUTH_KBN#6' : ['権限区分　0:参照　1:更新','Authorization classification',''],
		'AVGKIKAN#7' : ['過去平均','Past average',''],
		'AVG_MAE_DANDORI_TIME#8' : ['前段取り(過去平均)','Setup (Past average)',''],
		'AVG_SAGYO_TIME#9' : ['製造(過去平均)','Production (Past average)',''],
		'BACK_COLOR_FUNC#10' : ['対象機能','Target ',''],
		'BOM_VERSION#11' : ['バージョン','Version',''],
		'BUDOMARI#12' : ['歩留まり率（１は１００％）','Yield rate (1=100%)',''],
		'CHR2#13' : ['条件式','Conditional expression',''],
		'CODE#14' : ['品目/資源コード','Item / Resource code',''],
		'CREATED_BY#15' : ['作成者','Created auther',''],
		'CREATED_DATE#16' : ['作成日','Created date',''],
		'CREATED_PRG_NM#17' : ['作成プログラム名','Created program',''],
		'DEL_FLG#18' : ['削除','Delete',''],
		'DEL_FLG#19' : ['削除フラグ','Delete flag',''],
		'DEL_FLG_SEARCH#20' : ['削除を検索','Search delete',''],
		'EARLIEST_START_DATE#21' : ['最早開始日時','EST',''],
		'END_DATE#22' : ['終了日時','End date',''],
		'END_DATE_YMD#23' : ['終了日　　','End date',''],
		'EVENT_NAIYO#24' : ['イベント内容','Event contents',''],
		'FUKA_1#25' : ['負荷（PJ1）','Load (PJ1)',''],
		'FUKA_2#26' : ['負荷（PJ2）','Load (PJ2)',''],
		'FUNC_ATH_ID#27' : ['グループID','Group id',''],
		'FUNC_ATH_ID#28' : ['機能グループID','Function group id',''],
		'FUNC_CHK#29' : ['ファンクションチェック','Function check',''],
		'FUNC_GRP_ID#30' : ['グループID','Function group id',''],
		'FUNC_ID#31' : ['機能ID','Function id',''],
		'FUNC_NM#32' : ['機能名','Function name',''],
		'FURYO_SU#33' : ['不良数','Scrap quantity',''],
		'GRP#34' : ['品目/資源グループ','Item / Resource groups',''],
		'GRP#35' : ['ﾚﾍﾞﾙ1品目コード','Item code (Lv.1)',''],
		'GRP_FLG#36' : ['ﾚﾍﾞﾙ1品目','Item (Lv.1)',''],
		'GRP_NM#37' : ['品目/資源グループ名','Item / Resource groups name',''],
		'GRP_NM#38' : ['ﾚﾍﾞﾙ1品目名','Item name (Lv.1)',''],
		'HELP_URL#39' : ['機能毎HELP_URL','Function help url',''],
		'HITUYO_SIGENRYO#40' : ['必要資源量','Required resource quantity',''],
		'HIZUKE#41' : ['工程納期','Process due date',''],
		'ITEM_AUTO_HOJU_FLG#42' : ['自動補充フラグ','Auto-replenish flag',''],
		'ITEM_CODE#43' : ['品目コード','Item code',''],
		'ITEM_GROUP#44' : ['品目グループ','Item groups',''],
		'ITEM_GROUP_NM#45' : ['品目グループ名','Item groups name',''],
		'ITEM_NM#46' : ['品目名','Item nm',''],
		'ITEM_NM_DSP#47' : ['品目名','Item nm (display)',''],
		'ITEM_SYUBETU#48' : ['品目種別','Item type',''],
		'ITEM_SYUBETU_I#49' : ['中間品','Intermediate item',''],
		'ITEM_TANKA#50' : ['品目単価','Item unit price',''],
		'JSK_END_DATE#51' : ['実績終了日時','Reported end time',''],
		'JSK_END_DATE_YMD#52' : ['実績終了日','Reported end date',''],
		'JSK_ORDER_SU#53' : ['実績数量','Reported qty',''],
		'JSK_SEIZO_SU#54' : ['実績数量','Reported qty',''],
		'JSK_SEIZO_TIME#55' : ['実績製造時間：分','Reported time',''],
		'JSK_SIGEN_CODE#56' : ['実績資源コード','Reported resource',''],
		'JSK_SIGEN_GROUP#57' : ['実績資源グループ','Reported resource groups',''],
		'JSK_SIGEN_GROUP_NM#58' : ['実績資源グループ名','Reported resource groups name',''],
		'JSK_SIGEN_NM#59' : ['実績資源名','Reported resource name',''],
		'JSK_START_DATE#60' : ['実績開始日時','Reported start time',''],
		'JSK_START_DATE_YMD#61' : ['実績開始日','Reported start date',''],
		'JSK_SU#62' : ['実績数','Reported qty',''],
		'JSK_SU_KEI#63' : ['実績数計','Reported qty (total)',''],
		'KASANARI_HOUHOU#64' : ['重なり方法','Time constraint method',''],
		'KASANARI_MAX#65' : ['重なりMAX','Time constraint MAX',''],
		'KASANARI_MIN#66' : ['重なりMIN','Time constraint MIN',''],
		'KIND#67' : ['バーカラー','Color',''],
		'KIND_DSP#68' : ['color','Color Image',''],
		'KIND_SEL#69' : ['バーカラー(選択)','Color (select)',''],
		'KOBAI_LOT_MAX#70' : ['購買ロットサイズMAX','Purchase lot size MAX',''],
		'KOBAI_LOT_MIN#71' : ['購買ロットサイズMIN','Purchase lot size MIN',''],
		'KOBAI_LOT_UNIT#72' : ['購買ロットサイズUNIT','Purchase lot size UNIT',''],
		'KOUTEI_CODE#73' : ['工程コード','Process code',''],
		'KOUTEI_NM#74' : ['工程名','Process name',''],
		'KOUTEI_NO#75' : ['工順','Process number',''],
		'KOUTEI_SELECTOR#76' : ['工程セレクタ','Process selector',''],
		'KOUTEI_SELECTOR_JKN#77' : ['工程セレクタ有効条件','Process selector valid condition',''],
		'KOUTEI_SORT#78' : ['ソード','Sort',''],
		'LAST_MAE_DANDORI_TIME#79' : ['前段取り(直近)','Setup (recent)',''],
		'LAST_SAGYO_TIME#80' : ['製造(直近)','Production (recent)',''],
		'LOAD_INFO_KBN#81' : ['負荷グラフ対象','Load graph target',''],
		'LT#82' : ['リードタイム','Lead time',''],
		'LVL#83' : ['ﾚﾍﾞﾙ','Level',''],
		'MAE_DANDORI_END_DATE#84' : ['前段取り終了日時','Setup end time',''],
		'MAE_DANDORI_START_DATE#85' : ['前段取り開始日時','Setup start time',''],
		'MAE_DANDORI_TIME#86' : ['前段取り','Setup',''],
		'MAE_DANDORI_TIME#87' : ['前段取り時間','Setup time',''],
		'MODIFY_COUNT#88' : ['更新数','Updated number',''],
		'MST_UMU#89' : ['登録状況','Registration status',''],
		'NM#90' : ['品目/資源名','Item / Resource',''],
		'NOKI_DATE#91' : ['納　期','Due date',''],
		'NOKI_OKURE#92' : ['納期遅れを検索','Due date delay',''],
		'NORMAL_SU#93' : ['正常数','Normal quantity',''],
		'NOTE#94' : ['コメント','Comment',''],
		'OBJECTID#95' : ['オブジェクトID','Object id',''],
		'OPT_SORT#96' : ['№','No.',''],
		'ORDER_CODE#97' : ['オーダコード','Order code',''],
		'ORDER_CODE#98' : ['オーダコード（表示）','Order code (display)',''],
		'ORDER_CODE_DISP#99' : ['オーダコード（表示）','Order code (display)',''],
		'ORDER_CODE_KEY#100' : ['オーダコード','Order code',''],
		'ORDER_CODE_KEY#101' : ['オーダコード（遷移）','Order code (transition)',''],
		'ORDER_CODE_LEFT#102' : ['オーダコードLEFT','Order code (left)',''],
		'ORDER_CODE_RIGHT#103' : ['オーダコードRIGHT','Order code (right)',''],
		'ORDER_CODE_SORT#104' : ['オーダコード（順番）','Order code (sort)',''],
		'ORDER_KBN#105' : ['オーダ区分','Order class',''],
		'ORDER_STATUS#106' : ['ステータス','Order status',''],
		'ORDER_SU#107' : ['オーダ数量','Order quantity',''],
		'ORDER_SYUBETU#108' : ['オーダ種別','Order type',''],
		'PLN_END_DATE#109' : ['終了日時','Plan end time',''],
		'PLN_SEIZO_SU#110' : ['製造数量','Plan production quantity',''],
		'PLN_SIGEN_CODE#111' : ['資源コード','Plan resource code',''],
		'PLN_SIGEN_GROUP#112' : ['資源グループ','Plan resource groups',''],
		'PLN_SIGEN_NM#113' : ['資源名','Plan resource name',''],
		'PLN_START_DATE#114' : ['開始日時','Plan start time',''],
		'PLN_SU#115' : ['計画数','Plan quantity',''],
		'PLN_SU_KEI#116' : ['計画数計','Plan quantity (total)',''],
		'PLN_YM#117' : ['計画月度','Plan monthly',''],
		'PREV_KOUTEI_NO#118' : ['先行工順','Previous process number',''],
		'PRINT_SORT#119' : ['出力ソート順','Sort',''],
		'PROJECTID#120' : ['PJ','PJ',''],
		'PROJECTID_1#121' : ['PJ1','PJ1',''],
		'PROJECTID_2#122' : ['PJ2','PJ2',''],
		'PROJECTNM_1#123' : ['PJNM1','PJNM1',''],
		'PROJECTNM_2#124' : ['PJNM2','PJNM2',''],
		'SAGYO_CODE#125' : ['作業コード','Code',''],
		'SAGYO_CODE_LEFT#126' : ['作業コードLEFT','Code (left)',''],
		'SAGYO_CODE_RIGHT#127' : ['作業コードRIGHT','Code (right)',''],
		'SAGYO_LOT_MAX#128' : ['作業LOT MAX','Operation split size MAX',''],
		'SAGYO_LOT_MIN#129' : ['作業LOT MIN','Operation split size MIN',''],
		'SAGYO_LOT_UNIT#130' : ['作業LOT UNIT','Operation split size UNIT',''],
		'SAGYO_STATUS#131' : ['ステータス','Status',''],
		'SAGYO_STATUS#132' : ['更新後ｽﾃｰﾀｽ','Status (after)',''],
		'SAGYO_STATUS_NOW#133' : ['ステータス','Status',''],
		'SAGYO_STATUS_PRE#134' : ['ステータス(変更前)','Status (before)',''],
		'SAIKI_FLG#135' : ['再帰実績フラグ','Result recursive flag',''],
		'SASIZU_CODE#136' : ['指図コード','Instruction code',''],
		'SASIZU_SYUBETU#137' : ['指図種別','Instruction type',''],
		'SCRAP_SU#138' : ['スクラップ数','Scrap quantity',''],
		'SEARCH_KBN_ITEM#139' : ['検索品目区分','Item class (search)',''],
		'SEARCH_KBN_SIGEN#140' : ['検索資源区分','Resource class (search)',''],
		'SEIZO#141' : ['数量','Quantity',''],
		'SEIZO#142' : ['製造','Production',''],
		'SEIZO_END_DATE#143' : ['実績終了日時','Reported end time',''],
		'SEIZO_END_DATE#144' : ['製造終了日時','Produciton end time',''],
		'SEIZO_KORITU#145' : ['製造効率','Production factor',''],
		'SEIZO_LOT_MAX#146' : ['製造ロットサイズMAX','Production lot size MAX',''],
		'SEIZO_LOT_MIN#147' : ['製造ロットサイズMIN','Production lot size MIN',''],
		'SEIZO_LOT_UNIT#148' : ['製造ロットサイズUNIT','Production lot size UNIT',''],
		'SEIZO_START_DATE#149' : ['実績開始日時','Reported start time',''],
		'SEIZO_START_DATE#150' : ['製造開始日時','Production start time',''],
		'SEIZO_SU#151' : ['実績数量','Reported quantity',''],
		'SEIZO_SU#152' : ['製造数','Production quantity',''],
		'SEIZO_TEISI_TIME#153' : ['実績停止時間：分','Reported stop time (min)',''],
		'SEIZO_TIME#154' : ['製造数量','Produciton time',''],
		'SEL_END_DATA_INCLUDE#155' : ['完了含む','Including complete',''],
		'SIGEN_CODE#156' : ['品目/資源コード','Item / Resource ',''],
		'SIGEN_CODE#157' : ['実績資源コード','Reported Resource',''],
		'SIGEN_CODE#158' : ['資源コード','Resource code',''],
		'SIGEN_CODE#159' : ['資源コード（表示）','Resource code (display)',''],
		'SIGEN_CODE#160' : ['集計資源','Resource code (total)',''],
		'SIGEN_CODE_KEY#161' : ['資源コード','Resource code',''],
		'SIGEN_CODE_SORT#162' : ['資源コード（順番）','Resource code (sort)',''],
		'SIGEN_COMMENT#163' : ['コメント','Comment',''],
		'SIGEN_GROUP#164' : ['資源グループ','Resource groups',''],
		'SIGEN_GROUP_NM#165' : ['資源グループ名','Resource groups name',''],
		'SIGEN_KBN#166' : ['資源区分','Resource class',''],
		'SIGEN_NM#167' : ['実績資源名','Reported resource name',''],
		'SIGEN_NM#168' : ['資源名','Resource name',''],
		'SIGEN_NM_DISP#169' : ['資源','Resource name',''],
		'SIGEN_NM_DSP#170' : ['資源名','Resource name',''],
		'SIGEN_SEIYAKU#171' : ['資源制約','Resource quantity constraints',''],
		'SIGEN_SEIYAKU_KBN#172' : ['資源無制限を含める','Include resource quantity not constraints',''],
		'SIGEN_SYUBETU#173' : ['資源種別','Resource type',''],
		'SIGEN_YUSENDO#174' : ['資源優先度','Resource priority',''],
		'SIYO1#175' : ['仕様１','Specification 1',''],
		'SIYO2#176' : ['仕様２','Specification 2',''],
		'SIYO3#177' : ['仕様３','Specification 3',''],
		'SIYO4#178' : ['仕様４','Specification 4',''],
		'SIYO_NUM1#179' : ['数値仕様１','Specification (numeric) 1',''],
		'SIYO_NUM2#180' : ['数値仕様２','Specification (numeric) 2',''],
		'SIYO_NUM3#181' : ['数値仕様３','Specification (numeric) 3',''],
		'SIYO_NUM4#182' : ['数値仕様４','Specification (numeric) 4',''],
		'START_DATE#183' : ['開始日時','Start date',''],
		'START_DATE_TO_GANTTO#184' : ['開始日時（ガント遷移用）','Start date (gantto)',''],
		'START_DATE_YMD#185' : ['開始日　　','Start date',''],
		'STDEV#186' : ['実績除外','Resource exclusion',''],
		'SUM_MAE_DANDORI_TIME#187' : ['前段取り(合計)','Setup (total)',''],
		'SUM_SAGYO_TIME#188' : ['製造(合計)','Produciton time (total)',''],
		'SURYO#189' : ['個数','Quantity',''],
		'TASK_SELECTOR#190' : ['タスクセレクタ','Task selector',''],
		'TASK_SELECTOR_JKN#191' : ['タスクセレクタ有効条件','Task selector valid conditon',''],
		'TENKAI_HOUKOU#192' : ['展開方向','Deployment direction',''],
		'TOOLTIP#193' : ['ツールチップ','Tooltip',''],
		'TRG#194' : ['対象','Target ',''],
		'TRG_DATE#195' : ['対象日','Target date',''],
		'TYOTATU_HOUHOU#196' : ['調達方法','Obtain method',''],
		'UPDATED_BY#197' : ['更新者','Updated auther',''],
		'UPDATED_DATE#198' : ['更新日','Updated date',''],
		'UPDATED_PRG_NM#199' : ['更新プログラム名','Updated program',''],
		'WARITUKE_HOUKOU#200' : ['割付方向','Assignment direction',''],
		'WARITUKE_SIGEN_FLG#201' : ['割付資源フラグ','Assignment flag',''],
		'YM#202' : ['年月','YM',''],
		'YMPLN_YYYYMM#203' : ['計画月度(指定月以降を更新)','Plan YM (Update after a designated month)',''],
		'YMPLN_YYYYMM_SEARCH#204' : ['計画月度','Plan YM',''],
		'YUKO_JOKEN_SIKI#205' : ['有効条件式','Vaid condition',''],
		'YUSENDO#206' : ['優先度','Priority',''],
		'ZAIKO_MAX#207' : ['在庫MAX','Stock MAX',''],
		'ZAIKO_MIN#208' : ['在庫MIN','Stock MIN','']
	}

	for (key in map) {
		var keys = key.split('#');

		if ( !TALON.getDbConfig().isPostgres() ) { 
			//PostgreSQL以外
			var sql = "" +
				"UPDATE TLN_M_GENERAL_ITEM SET DISP_NAME = '" + map[key][to_lang] + "' " + 
				"WHERE FUNC_ID LIKE 'ASP_%' " + 
				"  AND COL_NAME  = '" + keys[0] + "' " + 
				"  AND DISP_NAME = '" + map[key][now_lang] + "'";

		} else {
			var sql = "" +
				"UPDATE TLN_M_GENERAL_ITEM SET DISP_NAME = '" + map[key][to_lang] + "' " + 
				"WHERE FUNC_ID LIKE 'ASP_%' " + 
				"  AND UPPER(COL_NAME)  = '" + keys[0] + "' " + 
				"  AND DISP_NAME = '" + map[key][now_lang] + "'";

		}

		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//グループ名（TLN_M_GENERAL_ITEM）
	var map = {
		'ASP_ORD0300#0#15' : ['仕様関連','Specification',''],
		'ASP_ORD0300#0#23' : ['コメント','Comment',''],
		'ASP_ORD0410#0#5' : ['作業情報','Operation Information',''],
		'ASP_ORD0410#0#14' : ['計画情報','Plan Information',''],
		'ASP_ORD0410#0#21' : ['実績情報','Reported Infomation',''],
		'ASP_ORD0410#0#29' : ['追加情報','Other Information',''],
		'ASP_ORD0500#0#4' : ['作業情報','Operation Information',''],
		'ASP_ORD0500#0#11' : ['計画情報','Plan Information',''],
		'ASP_ORD0500#0#16' : ['実績情報','Reported Infomation',''],
		'ASP_ORD0500#0#26' : ['追加情報','Other Information','']
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_GENERAL_ITEM SET GROUP_NAME = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID   = '" + keys[0] + "' " + 
			"  AND FUNC_SEQ  =  " + keys[1] + "  " + 
			"  AND SORT      =  " + keys[2] + "  ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//帳票ファイル名①（TLN_M_GENERAL_ITEM_OPTN）出力ファイル名
	var map = {
		'ASP_ORD0400#-1#ALL#BUTTON_REPORT#0' : ['作業指示書%SYSDATETIME%','Instruction_%SYSDATETIME%',''],
		'ASP_ORD0400#-1#ALL#BUTTON_REPORT#1' : ['作業指示書%SYSDATETIME%.pdf','Instruction_%SYSDATETIME%.pdf','']
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR4 = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID  = '" + keys[0] + "' " + 
			"  AND FUNC_SEQ =  " + keys[1] + "  " + 
			"  AND COL_NAME = '" + keys[2] + "' " + 
			"  AND FUNC_KBN = '" + keys[3] + "' " + 
			"  AND OPT_SORT =  " + keys[4] + "  ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//帳票ファイル名②（TLN_M_GENERAL_ITEM_OPTN）レイアウトファイル名
	var map = {
		'ASP_ORD0400#-1#ALL#BUTTON_REPORT#0' : ['ASP_ORD0400.xlsx','ASP_ORD0400_EN.xlsx',''],
		'ASP_ORD0400#-1#ALL#BUTTON_REPORT#1' : ['ASP_ORD0400.jasper','ASP_ORD0400_EN.jasper','']
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID  = '" + keys[0] + "' " + 
			"  AND FUNC_SEQ =  " + keys[1] + "  " + 
			"  AND COL_NAME = '" + keys[2] + "' " + 
			"  AND FUNC_KBN = '" + keys[3] + "' " + 
			"  AND OPT_SORT =  " + keys[4] + "  ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//グラフ系列タイトル（TLN_M_GENERAL_ITEM_OPTN）
	var map = {
		'ASP_PLN1110#1#CHART_AXIS_Y_LABEL_BASE#CHART#0' : ['負荷（％）','Load (%)',''],
		'ASP_BGT1120#2#CHART_AXIS_X_LABEL_BASE#CHART#0' : ['工程納期','Process due date',''],
		'ASP_BGT1220#1#CHART_AXIS_X_LABEL_BASE#CHART#0' : ['工程納期','Process due date','']
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID  = '" + keys[0] + "' " + 
			"  AND FUNC_SEQ =  " + keys[1] + "  " + 
			"  AND COL_NAME = '" + keys[2] + "' " + 
			"  AND FUNC_KBN = '" + keys[3] + "' " + 
			"  AND OPT_SORT =  " + keys[4] + "  ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//ボタン名①（TLN_M_GENERAL_ITEM_OPTN）＋TLN_M_GENERAL_USES
	var map = {
		'ASP_COP2200#0#ALL#BUTTON_BAT#0' : ['　実　行　',' E x e c u t e ',''],
		'ASP_MST0900#0#ALL#BUTTON_NEXT#0' : ['BOMﾒﾝﾃ','Maintenance Integrated',''],
		'ASP_BGT1400#0#ALL#BUTTON_NEXT#1' : ['ｵｰﾀﾞ・作業','Order / Operration',''],
		'ASP_PLN0110#0#ALL#BUTTON_NEXT#1' : ['ｵｰﾀﾞ・作業','Order / Operration',''],
		'ASP_PLN0120#0#ALL#BUTTON_NEXT#1' : ['ｵｰﾀﾞ・作業','Order / Operration',''],
		'ASP_PLN0500#0#ALL#BUTTON_NEXT#1' : ['ｵｰﾀﾞ・作業','Order / Operration',''],
		'ASP_PLN0210#0#ALL#BUTTON_NEXT#2' : ['ｵｰﾀﾞｶﾞﾝﾄ','Order Gantt',''],
		'ASP_PLN0220#0#ALL#BUTTON_NEXT#2' : ['ｵｰﾀﾞｶﾞﾝﾄ','Order Gantt',''],
		'ASP_PLN0600#0#ALL#BUTTON_NEXT#2' : ['ｵｰﾀﾞｶﾞﾝﾄ','Order Gantt',''],
		'ASP_ORD0100#0#ALL#BUTTON_NEXT#0' : ['ｵｰﾀﾞﾒﾝﾃ','Maintenance Order',''],
		'ASP_ORD0400#0#ALL#BUTTON_NEXT#0' : ['ｵｰﾀﾞﾒﾝﾃ','Maintenance Order',''],
		'ASP_BGT1400#0#ALL#BUTTON_NEXT#0' : ['ｵｰﾀﾞ一覧','Order List',''],
		'ASP_PLN0110#0#ALL#BUTTON_NEXT#0' : ['ｵｰﾀﾞ一覧','Order List',''],
		'ASP_PLN0120#0#ALL#BUTTON_NEXT#0' : ['ｵｰﾀﾞ一覧','Order List',''],
		'ASP_PLN0500#0#ALL#BUTTON_NEXT#0' : ['ｵｰﾀﾞ一覧','Order List',''],
		'ASP_ORD0100#0#ALL#BUTTON_NEXT#2' : ['ｶﾞﾝﾄﾁｬｰﾄ','Ganttchart',''],
		'ASP_BGT1110#1#ALL#BUTTON_NEXT#1' : [' グ ラ フ 出 力 ','Graph Output',''],
		'ASP_BGT1210#0#ALL#BUTTON_NEXT#0' : [' グ ラ フ 出 力 ','Graph Output',''],
//		'ASP_BGT1210#0#ALL#BUTTON_REPORT#0' : ['ｸﾞﾗﾌ','Graph',''],
		'ASP_ORD0100#0#ALL#BUTTON_NEXT#1' : ['作業一覧','Operation List',''],
		'ASP_ORD0400#-1#ALL#BUTTON_REPORT#0' : ['作業指示書出力(EXCEL)','Instruction Output  (Excel)',''],
		'ASP_ORD0400#-1#ALL#BUTTON_REPORT#1' : ['作業指示書出力(PDF)','Instruction Output  (PDF)',''],
		'ASP_BGT1400#0#ALL#BUTTON_NEXT#2' : ['資源ｶﾞﾝﾄ','Resource Gantt',''],
		'ASP_PLN0110#0#ALL#BUTTON_NEXT#2' : ['資源ｶﾞﾝﾄ','Resource Gantt',''],
		'ASP_PLN0120#0#ALL#BUTTON_NEXT#2' : ['資源ｶﾞﾝﾄ','Resource Gantt',''],
		'ASP_PLN0500#0#ALL#BUTTON_NEXT#2' : ['資源ｶﾞﾝﾄ','Resource Gantt',''],
		'ASP_ORD0300#1#ALL#BUTTON_NEXT#0' : ['実績入力','Entry Result',''],
		'ASP_ORD0400#0#ALL#BUTTON_NEXT#1' : ['実績入力','Entry Result',''],
		'ASP_PLN0110#0#ALL#BUTTON_NEXT#3' : ['実績入力','Entry Result',''],
		'ASP_PLN0120#0#ALL#BUTTON_NEXT#3' : ['実績入力','Entry Result',''],
		'ASP_PLN0210#0#ALL#BUTTON_NEXT#1' : ['実績入力','Entry Result',''],
		'ASP_PLN0220#0#ALL#BUTTON_NEXT#1' : ['実績入力','Entry Result',''],
		'ASP_PLN0310#0#ALL#BUTTON_NEXT#1' : ['実績入力','Entry Result',''],
		'ASP_PLN0320#0#ALL#BUTTON_NEXT#1' : ['実績入力','Entry Result',''],
		'ASP_PLN0500#0#ALL#BUTTON_NEXT#3' : ['実績入力','Entry Result',''],
		'ASP_PLN0600#0#ALL#BUTTON_NEXT#1' : ['実績入力','Entry Result',''],
		'ASP_PLN0210#0#ALL#BUTTON_NEXT#0' : ['詳　細',' D e t a i l s ',''],
		'ASP_PLN0220#0#ALL#BUTTON_NEXT#0' : ['詳　細',' D e t a i l s ',''],
		'ASP_PLN0310#0#ALL#BUTTON_NEXT#0' : ['詳　細',' D e t a i l s ',''],
		'ASP_PLN0320#0#ALL#BUTTON_NEXT#0' : ['詳　細',' D e t a i l s ',''],
		'ASP_PLN0600#0#ALL#BUTTON_NEXT#0' : ['詳　細',' D e t a i l s ',''],
		'ASP_ORD0600#0#ALL#BUTTON_NEXT#0' : ['入力','Entry',''],
		'ASP_PLN0110#-1#ALL#BUTTON_AJAX#0' : ['非同期','Asynchronous',''],
		'ASP_PLN0110#-1#ALL#BUTTON_AJAX_CLIANT_JAVASCRIPT#0' : ['非同期','Asynchronous',''],
		'ASP_PLN0210#-1#ALL#BUTTON_AJAX#0' : ['非同期','Asynchronous',''],
		'ASP_PLN0210#-1#ALL#BUTTON_AJAX_CLIANT_JAVASCRIPT#0' : ['非同期','Asynchronous',''],
		'ASP_PLN0310#-1#ALL#BUTTON_AJAX#0' : ['非同期','Asynchronous',''],
		'ASP_PLN0310#-1#ALL#BUTTON_AJAX_CLIANT_JAVASCRIPT#0' : ['非同期','Asynchronous',''],
		'ASP_BGT1110#1#ALL#BUTTON_NEXT#0' : [' 品 目 別 ',' By Item ',''],
		'ASP_PLN1110#0#ALL#BUTTON_NEXT#0' : [' 負 荷 を 見 る ',' See the load ','']
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID  = '" + keys[0] + "' " + 
			"  AND FUNC_SEQ =  " + keys[1] + "  " + 
			"  AND COL_NAME = '" + keys[2] + "' " + 
			"  AND FUNC_KBN = '" + keys[3] + "' " + 
			"  AND OPT_SORT =  " + keys[4] + "  ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );

		//ボタンの初期表示設定の更新
		var sql = "" +
			"UPDATE TLN_M_GENERAL_USES SET KEY_CODE = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID  = '" + keys[0] + "' " + 
			"  AND OPTN = 'BUTTON' " + 
			"  AND KEY_CODE = '" + map[key][now_lang] + "' ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//ボタン名②（TLN_M_GENERAL_ITEM_OPTN）＋TLN_M_GENERAL_POSITION
	var map = {
		'ASP_SYS0010#0#ALL#BUTTON_BAT#3' : ['サンプルデータ削除','Sample Data Delete',''],
		'ASP_SYS0010#0#ALL#BUTTON_BAT#2' : ['サンプルデータ登録','Sample Data Entry',''],
		'ASP_SYS0010#0#ALL#BUTTON_BAT#1' : ['セットアップ・パッチ','Setup patch processing ',''],
		'ASP_SYS0010#0#ALL#BUTTON_BAT#0' : ['セットアップ・初期化','Setup / initialization processing ',''],
		'ASP_SYS0010#0#ALL#BUTTON_BAT#4' : ['メニュー構成データ登録','Menu Data Entry',''],
		'ASP_SYS0010#0#ALL#BUTTON_BAT#5' : ['日本語に変換','Language change (Japanese)',''],
		'ASP_SYS0010#0#ALL#BUTTON_BAT#6' : ['英語に変換','Language change (English)',''],
		'ASP_SYS0010#0#ALL#BUTTON_BAT#7' : ['中国語に変換','Language change (Chinese)','']
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID  = '" + keys[0] + "' " + 
			"  AND FUNC_SEQ =  " + keys[1] + "  " + 
			"  AND COL_NAME = '" + keys[2] + "' " + 
			"  AND FUNC_KBN = '" + keys[3] + "' " + 
			"  AND OPT_SORT =  " + keys[4] + "  ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );

		//ボタンのフリーレイアウト定義の更新
		var sql = "" +
			"UPDATE TLN_M_GENERAL_POSITION SET NAME = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID  = '" + keys[0] + "' " + 
			"  AND CHR1 = 'BUTTON' " + 
			"  AND NAME = '" + map[key][now_lang] + "' ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//フリーレイアウト（TLN_M_GENERAL_POSITION）
	var map = {
		'ASP_SYS0010#BLOCK#BASE_INFO#0_0_0#5' : ['初期化、もしくは初回のインストール','Initialization or initial install',''],
		'ASP_SYS0010#BLOCK#BASE_INFO#0_0_0#6' : ['メニュー構成','Menu structure',''],
		'ASP_SYS0010#BLOCK#BASE_INFO#0_0_0#18' : ['２回目以降のインストール','Second or later install',''],
		'ASP_SYS0010#BLOCK#BASE_INFO#0_0_0#19' : ['言語変更','Language change',''],
		'ASP_SYS0010#BLOCK#BASE_INFO#0_0_0_34#0' : ['FUNC_CHK','FUNC_CHK',''],
		'ASP_SYS0010#BLOCK#BASE_INFO#0_0_0_34#1' : ['　Viewを再構築する','  Rebuild View','']
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_GENERAL_POSITION SET NAME = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ID  = '" + keys[0] + "' " + 
			"  AND SCOPE    = '" + keys[1] + "' " + 
			"  AND ATTR_KBN = '" + keys[2] + "' " + 
			"  AND POS      = '" + keys[3] + "' " + 
			"  AND SORT     =  " + keys[4] + "  ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//汎用マスタ：識別コード名
	var map = {
		'ASP_ALL_SEARCH' : ['全てを検索する','Search all',''],
		'ASP_BACK_COLOR' : ['背景色設定','Background color',''],
		'ASP_BACK_COLOR_FUNC' : ['背景色設定機能','Background color setting function',''],
		'ASP_BASE_DATE' : ['基準日付データ','Date data',''],
		'ASP_BOMMNT_AVGKIKAN' : ['製造BOM時間ﾒﾝﾃ過去平均期間','Integrated, average time ',''],
		'ASP_BOMMNT_STDEV' : ['製造BOM時間ﾒﾝﾃ実績除外','Integrated, exclusion from reported',''],
		'ASP_CHECKBOX_ONE' : ['対象チェックボックス','Target check box',''],
		'ASP_DEL_FLG' : ['論理削除フラグ','Delete flag',''],
		'ASP_DEL_FLG_NONE' : ['論理削除フラグ','Delete flag (checkbox)',''],
		'ASP_ITEM_AUTO_HOJU_FLG' : ['ASPROVA品目自動補充フラグ','Auto-replenish flag',''],
		'ASP_ITEM_SYUBETU' : ['ASPROVA品目種別','Item type',''],
		'ASP_ITEM_SYUBETU_ALL' : ['ASPROVA品目種別','Item type (all)',''],
		'ASP_ITEM_SYUBETU_I' : ['品目種別中間品','Intermediate item',''],
		'ASP_KASANARI_HOUHOU' : ['ASPROVA重なり方法','Time constraint method',''],
		'ASP_LOAD_INFO_KBN' : ['負荷グラフ対象資源区分','Load graph target',''],
		'ASP_NOKI_OKURE_NONE' : ['納期遅れフラグ','Due date delay flag',''],
		'ASP_ORDER_KBN' : ['ASPROVAオーダ区分','Order class',''],
		'ASP_ORDER_STATUS' : ['ASPROVAオーダステータス','Order status',''],
		'ASP_ORDER_SYUBETU' : ['ASPROVAオーダ種別','Order type',''],
		'ASP_PROJECTID' : ['プロジェクトID','Project id',''],
		'ASP_SAGYO_STATUS' : ['ASPROVA作業ステータス','Operation status',''],
		'ASP_SASIZU_SYUBETU' : ['ASPROVA指図種別','Instruction type',''],
		'ASP_SEARCH_KBN_ITEM' : ['検索品目区分','Item class (search)',''],
		'ASP_SEARCH_KBN_SIGEN' : ['検索資源区分','Resource class (search)',''],
		'ASP_SIGEN_KBN' : ['ASPROVA資源区分','Resource class',''],
		'ASP_SIGEN_SEIYAKU' : ['ASPROVA資源量制約','Resource quantity constraints',''],
		'ASP_SIGEN_SYUBETU' : ['ASPROVA資源種別','Resource type',''],
		'ASP_TENKAI_END' : ['展開末端','Deployment end',''],
		'ASP_TENKAI_HOUKOU' : ['展開方向','Deployment direction',''],
		'ASP_TYOTATU_HOUHOU' : ['ASPROVA品目調達方法','Obtain method',''],
		'ASP_WARITUKE_SIGEN_FLG' : ['ASPROVA割付け資源量フラグ','Assignment flag',''],
		'ASP_YUSENDO_NVL' : ['優先度未設定時','When no priority is set',''],
		'ASP_TOOLTIP_TITLE' : ['ツールチップタイトル','Tooltip title','']
	}
	for (key in map) {
		var sql = "" +
			"UPDATE TLN_M_HANYO_CODE_MAIN SET SIKIBETU_NM = '" + map[key][to_lang] + "' " + 
			"WHERE SIKIBETU_CODE = '" + key + "' ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//汎用マスタ：ＤＳＰ１
	var map = {
		'ASP_ALL_SEARCH#1' : ['全てを検索','Search all',''],
		'ASP_BACK_COLOR#009487' : ['標準表示色16（#009487）','Background color16 (#009487)',''],
		'ASP_BACK_COLOR#00B04E' : ['標準表示色17（#00B04E）','Background color17 (#00B04E)',''],
		'ASP_BACK_COLOR#2DDD7B' : ['標準表示色26（#2DDD7B）','Background color26 (#2DDD7B)',''],
		'ASP_BACK_COLOR#32C6B9' : ['標準表示色19（#32C6B9）','Background color19 (#32C6B9)',''],
		'ASP_BACK_COLOR#5AAE72' : ['標準表示色14（#5AAE72）','Background color14 (#5AAE72)',''],
		'ASP_BACK_COLOR#64F8EB' : ['標準表示色5（#64F8EB）','Background color5 (#64F8EB)',''],
		'ASP_BACK_COLOR#64FFB2' : ['標準表示色2（#64FFB2）','Background color2 (#64FFB2)',''],
		'ASP_BACK_COLOR#8080FF' : ['標準表示色3（#8080FF）','Background color3 (#8080FF)',''],
		'ASP_BACK_COLOR#8585DC' : ['標準表示色27（#8585DC）','Background color27 (#8585DC)',''],
		'ASP_BACK_COLOR#8F69D0' : ['標準表示色15（#8F69D0）','Background color15 (#8F69D0)',''],
		'ASP_BACK_COLOR#8F83A8' : ['標準表示色12（#8F83A8）','Background color12 (#8F83A8)',''],
		'ASP_BACK_COLOR#9B9490' : ['標準表示色20（#9B9490）','Background color20 (#9B9490)',''],
		'ASP_BACK_COLOR#A8C0C1' : ['標準表示色11（#A8C0C1）','Background color11 (#A8C0C1)',''],
		'ASP_BACK_COLOR#ADADFF' : ['標準表示色9（#ADADFF）','Background color9 (#ADADFF)',''],
		'ASP_BACK_COLOR#B7ABD0' : ['標準表示色31（#B7ABD0）','Background color31 (#B7ABD0)',''],
		'ASP_BACK_COLOR#BA9BA7' : ['標準表示色30（#BA9BA7）','Background color30 (#BA9BA7)',''],
		'ASP_BACK_COLOR#BFB939' : ['標準表示色22（#BFB939）','Background color22 (#BFB939)',''],
		'ASP_BACK_COLOR#C59777' : ['標準表示色7（#C59777）','Background color7 (#C59777)',''],
		'ASP_BACK_COLOR#C5A0FF' : ['標準表示色23（#C5A0FF）','Background color23 (#C5A0FF)',''],
		'ASP_BACK_COLOR#C6D2AF' : ['標準表示色29（#C6D2AF）','Background color29 (#C6D2AF)',''],
		'ASP_BACK_COLOR#C8C1BD' : ['標準表示色32（#C8C1BD）','Background color32 (#C8C1BD)',''],
		'ASP_BACK_COLOR#CAAF66' : ['標準表示色24（#CAAF66）','Background color24 (#CAAF66)',''],
		'ASP_BACK_COLOR#CBFB47' : ['標準表示色8（#CBFB47）','Background color8 (#CBFB47)',''],
		'ASP_BACK_COLOR#CEA8B6' : ['標準表示色13（#CEA8B6）','Background color13 (#CEA8B6)',''],
		'ASP_BACK_COLOR#CFB17D' : ['標準表示色28（#CFB17D）','Background color28 (#CFB17D)',''],
		'ASP_BACK_COLOR#E8BA9A' : ['標準表示色21（#E8BA9A）','Background color21 (#E8BA9A)',''],
		'ASP_BACK_COLOR#ECE666' : ['標準表示色4（#ECE666）','Background color4 (#ECE666)',''],
		'ASP_BACK_COLOR#F05728' : ['標準表示色25（#F05728）','Background color25 (#F05728)',''],
		'ASP_BACK_COLOR#F280FF' : ['標準表示色6（#F280FF）','Background color6 (#F280FF)',''],
		'ASP_BACK_COLOR#FD96BA' : ['標準表示色18（#FD96BA）','Background color18 (#FD96BA)',''],
		'ASP_BACK_COLOR#FF895A' : ['標準表示色1（#FF895A）','Background color1 (#FF895A)',''],
		'ASP_BACK_COLOR#FFBB8C' : ['標準表示色10（#FFBB8C）','Background color10 (#FFBB8C)',''],
		'ASP_BACK_COLOR_FUNC#1' : ['オーダガントチャート','Order Ganttchart',''],
		'ASP_BACK_COLOR_FUNC#2' : ['資源ガントチャート','Resource Ganttchart',''],
		'ASP_BACK_COLOR_FUNC#3' : ['作業スケジュール','Operation Schedule',''],
		'ASP_BASE_DATE#1' : ['01','01',''],
		'ASP_BASE_DATE#10' : ['10','10',''],
		'ASP_BASE_DATE#11' : ['11','11',''],
		'ASP_BASE_DATE#12' : ['12','12',''],
		'ASP_BASE_DATE#13' : ['13','13',''],
		'ASP_BASE_DATE#14' : ['14','14',''],
		'ASP_BASE_DATE#15' : ['15','15',''],
		'ASP_BASE_DATE#16' : ['16','16',''],
		'ASP_BASE_DATE#17' : ['17','17',''],
		'ASP_BASE_DATE#18' : ['18','18',''],
		'ASP_BASE_DATE#19' : ['19','19',''],
		'ASP_BASE_DATE#2' : ['02','02',''],
		'ASP_BASE_DATE#20' : ['20','20',''],
		'ASP_BASE_DATE#21' : ['21','21',''],
		'ASP_BASE_DATE#22' : ['22','22',''],
		'ASP_BASE_DATE#23' : ['23','23',''],
		'ASP_BASE_DATE#24' : ['24','24',''],
		'ASP_BASE_DATE#25' : ['25','25',''],
		'ASP_BASE_DATE#26' : ['26','26',''],
		'ASP_BASE_DATE#27' : ['27','27',''],
		'ASP_BASE_DATE#28' : ['28','28',''],
		'ASP_BASE_DATE#29' : ['29','29',''],
		'ASP_BASE_DATE#3' : ['03','03',''],
		'ASP_BASE_DATE#30' : ['30','30',''],
		'ASP_BASE_DATE#31' : ['31','31',''],
		'ASP_BASE_DATE#4' : ['04','04',''],
		'ASP_BASE_DATE#5' : ['05','05',''],
		'ASP_BASE_DATE#6' : ['06','06',''],
		'ASP_BASE_DATE#7' : ['07','07',''],
		'ASP_BASE_DATE#8' : ['08','08',''],
		'ASP_BASE_DATE#9' : ['09','09',''],
		'ASP_BOMMNT_AVGKIKAN#-1' : ['１か月','1 month',''],
		'ASP_BOMMNT_AVGKIKAN#-3' : ['３か月','3 months',''],
		'ASP_BOMMNT_AVGKIKAN#-6' : ['６か月','6 months',''],
		'ASP_BOMMNT_STDEV#1' : ['68.26%','68.26%',''],
		'ASP_BOMMNT_STDEV#2' : ['95.44%','95.44%',''],
		'ASP_BOMMNT_STDEV#3' : ['99.73%','99.73%',''],
		'ASP_CHECKBOX_ONE#1' : [' ',' ',''],
		'ASP_DEL_FLG#1' : ['削除','Delete',''],
		'ASP_DEL_FLG_NONE#1' : [' ',' ',''],
		'ASP_ITEM_AUTO_HOJU_FLG#0' : ['いいえ','No',''],
		'ASP_ITEM_AUTO_HOJU_FLG#1' : ['はい','Yes',''],
		'ASP_ITEM_AUTO_HOJU_FLG#2' : ['はい(1対1生産)','Yes (1 to 1 production)',''],
		'ASP_ITEM_AUTO_HOJU_FLG#3' : ['はい(在庫+1対1生産)','Yes (stock + 1 to 1 production)',''],
		'ASP_ITEM_AUTO_HOJU_FLG#4' : ['はい(需給調整1対1生産)','Yes (1 supply and demand adjustment to 1 production)',''],
		'ASP_ITEM_SYUBETU#H' : ['半製品','Manufactured part',''],
		'ASP_ITEM_SYUBETU#M' : ['原材料','Raw material',''],
		'ASP_ITEM_SYUBETU#P' : ['製品','Finished item',''],
		'ASP_ITEM_SYUBETU#U' : ['購買品','Purchased part',''],
		'ASP_ITEM_SYUBETU_ALL#H' : ['半製品','Manufactured part',''],
		'ASP_ITEM_SYUBETU_ALL#I' : ['中間品','Intermediate item',''],
		'ASP_ITEM_SYUBETU_ALL#M' : ['原材料','Raw material',''],
		'ASP_ITEM_SYUBETU_ALL#P' : ['製品','Finished item',''],
		'ASP_ITEM_SYUBETU_ALL#U' : ['購買品','Purchased part',''],
		'ASP_ITEM_SYUBETU_I#1' : ['含む','Include',''],
		'ASP_KASANARI_HOUHOU#EES' : ['EES','EES',''],
		'ASP_KASANARI_HOUHOU#ES' : ['ES','ES',''],
		'ASP_KASANARI_HOUHOU#ESE' : ['ESE','ESE',''],
		'ASP_KASANARI_HOUHOU#ESSEE' : ['ESSEE','ESSEE',''],
		'ASP_KASANARI_HOUHOU#SS' : ['SS','SS',''],
		'ASP_KASANARI_HOUHOU#SSEE' : ['SSEE','SSEE',''],
		'ASP_KASANARI_HOUHOU#SSEEE' : ['SSEEE','SSEEE',''],
		'ASP_LOAD_INFO_KBN#0' : ['非対象','Target',''],
		'ASP_LOAD_INFO_KBN#1' : ['対象','Not targeted',''],
		'ASP_NOKI_OKURE_NONE#1' : [' ',' ',''],
		'ASP_ORDER_KBN#0' : ['登録','Registered order',''],
		'ASP_ORDER_KBN#1' : ['補充','Replenishment order',''],
		'ASP_ORDER_STATUS#B' : ['完了','Completed',''],
		'ASP_ORDER_STATUS#T' : ['着手済','Started',''],
		'ASP_ORDER_STATUS#X' : ['未着手','Not started',''],
		'ASP_ORDER_SYUBETU#I' : ['在庫(絶対量)','Inventory (absolute)',''],
		'ASP_ORDER_SYUBETU#J' : ['在庫(増減量)','Inventory (fluctuation)',''],
		'ASP_ORDER_SYUBETU#M' : ['製造','Manufacturing order',''],
		'ASP_ORDER_SYUBETU#P' : ['購買','Purchase order',''],
		'ASP_ORDER_SYUBETU#S' : ['受注','Sales order',''],
		'ASP_PROJECTID#TFA5' : ['TFA5','TFA5',''],
		'ASP_SAGYO_STATUS#A' : ['計画済み','Scheduled',''],
		'ASP_SAGYO_STATUS#B' : ['完了','Completed',''],
		'ASP_SAGYO_STATUS#D' : ['確定','Frozen',''],
		'ASP_SAGYO_STATUS#I' : ['指示済み','Released',''],
		'ASP_SAGYO_STATUS#T' : ['着手済み','Started',''],
		'ASP_SASIZU_SYUBETU#I' : ['I:入力指図','Input instruction',''],
		'ASP_SASIZU_SYUBETU#O' : ['O:出力指図','Use instruction',''],
		'ASP_SASIZU_SYUBETU#U' : ['U:使用指図','Output instruction',''],
		'ASP_SEARCH_KBN_ITEM#0' : ['品目番号','item code',''],
		'ASP_SEARCH_KBN_ITEM#1' : ['品目グループ','item groups',''],
		'ASP_SEARCH_KBN_SIGEN#0' : ['資源コード','Resource code',''],
		'ASP_SEARCH_KBN_SIGEN#1' : ['資源グループ','Resource groups',''],
		'ASP_SIGEN_KBN#F' : ['炉資源(任意仕様)','Furnace resource (Any spec)',''],
		'ASP_SIGEN_KBN#F1' : ['炉資源(仕様1)','Furnace resource (Spec 1)',''],
		'ASP_SIGEN_KBN#F2' : ['炉資源(仕様2)','Furnace resource (Spec 2)',''],
		'ASP_SIGEN_KBN#F3' : ['炉資源(仕様3)','Furnace resource (Spec 3)',''],
		'ASP_SIGEN_KBN#F4' : ['炉資源(仕様4)','Furnace resource (Spec 4)',''],
		'ASP_SIGEN_KBN#M' : ['多重資源','Multiplex resource',''],
		'ASP_SIGEN_KBN#S' : ['単純資源','Simple resource',''],
		'ASP_SIGEN_SEIYAKU#N' : ['制約なし','Not constrained',''],
		'ASP_SIGEN_SEIYAKU#R' : ['制約あり','Constrained',''],
		'ASP_SIGEN_SEIYAKU#V' : ['資源量に応じて','According to resource quantity',''],
		'ASP_SIGEN_SYUBETU#II' : ['在庫(デフォルト)','Inventory(default)',''],
		'ASP_SIGEN_SYUBETU#M' : ['主資源','Main resource',''],
		'ASP_SIGEN_SYUBETU#PI' : ['購買(デフォルト)','Purchase(default)',''],
		'ASP_SIGEN_SYUBETU#S' : ['副資源','Sub resource',''],
		'ASP_SIGEN_SYUBETU#SI' : ['受注(デフォルト)','Sales(default)',''],
		'ASP_TENKAI_END#0' : ['末端以外','Not end',''],
		'ASP_TENKAI_END#1' : ['末端','End',''],
		'ASP_TENKAI_HOUKOU#0' : ['正展開','Positive development',''],
		'ASP_TENKAI_HOUKOU#1' : ['逆展開','Reverse development',''],
		'ASP_TYOTATU_HOUHOU#IM' : ['内製優先','Prefer to produce',''],
		'ASP_TYOTATU_HOUHOU#IP' : ['購買優先','Prefer to purchase',''],
		'ASP_TYOTATU_HOUHOU#M' : ['内製','Produce',''],
		'ASP_TYOTATU_HOUHOU#P' : ['購買','Purchase',''],
		'ASP_WARITUKE_SIGEN_FLG#0' : ['通常','Normal',''],
		'ASP_WARITUKE_SIGEN_FLG#1' : ['製造数量に比例させる','Proportionate to production quantity',''],
		'ASP_YUSENDO_NVL#SORT_VALUE' : ['ソート用代替値','Alternative value',''],
		'ASP_TOOLTIP_TITLE#1' : ['＜オーダ＞','[ Order ]',''],
		'ASP_TOOLTIP_TITLE#2' : ['＜納　期＞','[ Due date ]',''],
		'ASP_TOOLTIP_TITLE#3' : ['＜作　業＞','[ Operation ]',''],
		'ASP_TOOLTIP_TITLE#4' : ['＜品　目＞','[ Item ]',''],
		'ASP_TOOLTIP_TITLE#5' : ['＜製造数量＞','[ Production quantity ]',''],
		'ASP_TOOLTIP_TITLE#6' : ['＜開始日時＞','[ Start time ]',''],
		'ASP_TOOLTIP_TITLE#7' : ['＜終了日時＞','[ End time ]',''],
		'ASP_TOOLTIP_TITLE#8' : ['＜段取り時間：分＞','[ Processing time ]',''],
		'ASP_TOOLTIP_TITLE#9' : ['＜製造時間：分＞','[ Production time ]','']
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_HANYO_CODE_MAIN SET DSP1 = '" + map[key][to_lang] + "' " + 
			"WHERE SIKIBETU_CODE = '" + keys[0] + "' " + 
			"  AND KEY_CODE      = '" + keys[1] + "' ";
		//TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//汎用マスタ：ＤＳＰ２
	var map = {
		'ASP_ORDER_SYUBETU#I' : ['在庫','Inventory',''],
		'ASP_ORDER_SYUBETU#J' : ['在庫','Inventory',''],
		'ASP_ORDER_SYUBETU#M' : ['製造','Manufacturing order',''],
		'ASP_ORDER_SYUBETU#P' : ['購買','Purchase order',''],
		'ASP_ORDER_SYUBETU#S' : ['受注','Sales order',''],
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_HANYO_CODE_MAIN SET DSP2 = '" + map[key][to_lang] + "' " + 
			"WHERE SIKIBETU_CODE = '" + keys[0] + "' " + 
			"  AND KEY_CODE      = '" + keys[1] + "' ";
		//TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//メニュー：メニューグループ
	var map = {
		'systemASP_BGT' : ['予実分析','Budget and Results Analysis',''],
		'systemASP_MBL' : ['スマートフォン実績入力','Entry Operation Result (Smartphone)',''],
		'systemASP_MST' : ['マスタ関連','Master Maintenance',''],
		'systemASP_ORD' : ['オーダ・作業','Order / Operation',''],
		'systemASP_PLN' : ['計画分析','Plan Analysis',''],
		'systemASP_SYS' : ['システム管理','System Management','']
	}

	for (key in map) {
		var sql = "" +
			"UPDATE TLN_M_AUTHORITY SET FUNC_NM = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ATH_ID = '" + key + "' ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//メニュー：メニューグループ
	var map = {
		'systemTLN_TFA//systemASP_ORD#ASP_ORD0100R' : ['オーダ一覧照会','Inquiry Order List ',''],
		'systemTLN_TFA//systemASP_ORD#ASP_ORD0100U' : ['オーダ一覧メンテナンス','Maintenance Order List ',''],
		'systemTLN_TFA//systemASP_ORD#ASP_ORD0400U' : ['作業一覧・指示書発行','Operation List / Instruction ',''],
		'systemTLN_TFA//systemASP_ORD#ASP_ORD0300U' : ['オーダ・作業メンテナンス','Maintenance Order / Operation List',''],
		'systemTLN_TFA//systemASP_ORD#ASP_ORD0700U' : ['作業実績一括入力','Entry Operation Result (Bulkupdate)',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN0110U' : ['オーダガントチャート','Order Ganttchart',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN0120U' : ['オーダガントチャート（更新）','Order Ganttchart (Entry)',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN0210U' : ['資源ガントチャート','Resource Ganttchart',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN0220U' : ['資源ガントチャート（更新）','Resource Ganttchart (Entry)',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN0310U' : ['作業スケジュールカレンダー','Operation Schedule',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN0320U' : ['作業スケジュールカレンダー（更新）','Operation Schedule (Entry)',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN0400U' : ['作業調整一括取消','Cancel Operation Change Data',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN0700U' : ['ガントチャート・カレンダーカラー変更','Ganttchart / Schedule Color Ghange',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN0500U' : ['複数計画比較 オーダガントチャート','Multiple Plan Order Ganttchart',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN0600U' : ['複数計画比較 資源ガントチャート','Multiple Plan Resource Ganttchart',''],
		'systemTLN_TFA//systemASP_PLN#ASP_PLN1110U' : ['負荷グラフ照会','Inquiry Load Graph',''],
		'systemTLN_TFA//systemASP_BGT#ASP_BGT1110U' : ['資源別予実照会','Budget and Results by Resource',''],
		'systemTLN_TFA//systemASP_BGT#ASP_BGT1210U' : ['資源・品目別予実照会','Budget and Results by Item',''],
		'systemTLN_TFA//systemASP_BGT#ASP_BGT1400U' : ['予実オーダガントチャート','Budget and Results by Order Gantt',''],
		'systemTLN_TFA//systemASP_BGT#ASP_COP2200U' : ['月間計画作成','Monthly Planning',''],
		'systemTLN_TFA//systemASP_MST#ASP_MST0800U' : ['資源マスタメンテナンス','Maintenance Reource Master',''],
		'systemTLN_TFA//systemASP_MST#ASP_MST0700U' : ['工程マスタメンテナンス','Maintenance Process Master',''],
		'systemTLN_TFA//systemASP_MST#ASP_MST0600U' : ['品目マスタメンテナンス','Maintenance Item Master',''],
		'systemTLN_TFA//systemASP_MST#ASP_MST0100U' : ['製造BOMマスタメンテナンス','Maintenance Integrated Master',''],
		'systemTLN_TFA//systemASP_MST#ASP_MST0400U' : ['製造BOM段取り製造時間メンテナンス','Maintenance SetupTime Master',''],
		'systemTLN_TFA//systemASP_MST#ASP_MST0900U' : ['構成照会','Inquiry Configuration',''],
		'systemTLN_TFA//systemASP_MBL#ASP_ORD0600U' : ['作業照会（スマートフォン）','Operation List (Smartphone)',''],
		'systemTLN_TFA//systemASP_MBL#ASP_ORD0610U' : ['実績入力（スマートフォン）','Entry Operation Result (Smartphone)',''],
		'systemTLN_TFA//systemASP_SYS#ASP_SYS0010U' : ['セットアップ・初期化','System Setup / Initialization','']
	}

	for (key in map) {
		var keys = key.split('#');

		var sql = "" +
			"UPDATE TLN_M_FUNCTION SET FUNC_NM = '" + map[key][to_lang] + "' " + 
			"WHERE FUNC_ATH_ID = '" + keys[0] + "' " + 
			"  AND FUNC_ID     = '" + keys[1] + "' ";
		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	//機能設定：入力許可メッセージ（TLN_M_GENERAL_ITEM_OPTN）
	//※PostgreSQL注意（COL_NAME)
	var map = {
		'ASP_ORD0100#0#ORDER_SU#MATCH_PATTERN#0' : ['受注オーダ、製造オーダ、購買オーダには 0より大きい数値を入力して下さい。','Please enter values greater than 0 for "Sales order", "Purchase order" and "Manufacturing order".',' '],
		'ASP_ORD0500#0#END_DATE#MATCH_PATTERN#0' : ['完了の場合、実績終了日時を入力して下さい。','Please enter "Reported end time" in case of "Completed".',' '],
		'ASP_ORD0500#0#MAE_DANDORI_END_DATE#MATCH_PATTERN#0' : ['前段取り終了日時の入力時、前段取り開始日時を入力してください。','When entering "Setup end time", please enter the "Setup start time".',' '],
		'ASP_ORD0500#0#MAE_DANDORI_START_DATE#MATCH_PATTERN#0' : ['着手済みの場合、前段取り開始日時もしくは実績開始日時を入力して下さい。（必須）','Please enter "Setup start time" or "Reported start time" in case of "Started". (required)',' '],
		'ASP_ORD0500#0#SEIZO_END_DATE#MATCH_PATTERN#0' : ['完了の場合、実績終了日時を入力して下さい。（必須）','Please enter "Reported end time" in case of "Completed". (required)',' '],
		'ASP_ORD0500#0#SEIZO_START_DATE#MATCH_PATTERN#0' : ['着手済みの場合、前段取り開始日時もしくは実績開始日時を入力して下さい。（必須）','Please enter "Setup start time" or "Reported start time" in case of "Started". (required)',' '],
		'ASP_ORD0500#0#SEIZO_SU#MATCH_PATTERN#0' : ['着手済み、完了の場合、実績数量を入力して下さい。','Please enter "Reported qty" in case of "Started" or "Completed".',' '],
		'ASP_ORD0500#0#SIGEN_CODE#MATCH_PATTERN#0' : ['着手済み、完了の場合、実績資源コードを入力して下さい。','Please enter "Reported Resource" in case of "Started" or "Completed".',' '],
		'ASP_ORD0500#0#START_DATE#MATCH_PATTERN#0' : ['着手済み、完了の場合、実績開始日時を入力して下さい。','Please enter "Reported start time" in case of "Started" or "Completed".',' '],
		'ASP_ORD0700#0#END_DATE#MATCH_PATTERN#0' : ['完了の場合、実績終了日時を入力して下さい。','Please enter "Reported end time" in case of "Completed". ',' '],
		'ASP_ORD0700#0#MAE_DANDORI_END_DATE#MATCH_PATTERN#0' : ['前段取り終了日時入力時は、前段取り開始日時を入力してください。','When entering "Setup end time", please enter the "Setup start time".',' '],
		'ASP_ORD0700#0#MAE_DANDORI_START_DATE#MATCH_PATTERN#0' : ['着手済みの場合、前段取り開始日時もしくは実績開始日時を入力して下さい。（必須）','Please enter "Setup start time" or "Reported start time" in case of "Started". (required)',' '],
		'ASP_ORD0700#0#SEIZO_END_DATE#MATCH_PATTERN#0' : ['完了の場合、実績終了日時を入力して下さい。（必須）','Please enter "Reported end time" in case of "Completed". (required)',' '],
		'ASP_ORD0700#0#SEIZO_START_DATE#MATCH_PATTERN#0' : ['着手済みの場合、前段取り開始日時もしくは実績開始日時を入力して下さい。（必須）','Please enter "Setup start time" or "Reported start time" in case of "Started". (required)',' '],
		'ASP_ORD0700#0#SEIZO_SU#MATCH_PATTERN#0' : ['着手済み、完了の場合、実績数量を入力して下さい。','Please enter "Reported qty" in case of "Started" or "Completed".',' '],
		'ASP_ORD0700#0#SIGEN_CODE#MATCH_PATTERN#0' : ['着手済み、完了の場合、実績資源コードを入力して下さい。','Please enter "Reported Resource" in case of "Started" or "Completed".',' '],
		'ASP_ORD0700#0#START_DATE#MATCH_PATTERN#0' : ['着手済み、完了の場合、実績開始日時を入力して下さい。','Please enter "Reported start time" in case of "Started" or "Completed".',' ']
	}

	for (key in map) {
		var keys = key.split('#');

		if ( !TALON.getDbConfig().isPostgres() ) { 
			//PostgreSQL以外
			var sql = "" +
				"UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = '" + map[key][to_lang] + "' " + 
				"WHERE FUNC_ID  = '" + keys[0] + "' " + 
				"  AND FUNC_SEQ =  " + keys[1] + "  " + 
				"  AND COL_NAME = '" + keys[2] + "' " + 
				"  AND FUNC_KBN = '" + keys[3] + "' " + 
				"  AND OPT_SORT =  " + keys[4] + "  ";

		} else {
			var sql = "" +
				"UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = '" + map[key][to_lang] + "' " + 
				"WHERE FUNC_ID  = '" + keys[0] + "' " + 
				"  AND FUNC_SEQ =  " + keys[1] + "  " + 
				"  AND UPPER(COL_NAME) = '" + keys[2] + "' " + 
				"  AND FUNC_KBN = '" + keys[3] + "' " + 
				"  AND OPT_SORT =  " + keys[4] + "  ";
		}

		// * TALON.addMsg( "★" + sql );
		var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
	}




	// ----------------------------------------

	//汎用マスタの言語を更新
	var sql = "" +
		"UPDATE TLN_M_HANYO_CODE_MAIN SET DSP1 = '" + to_lang + "' " + 
		"WHERE SIKIBETU_CODE = 'ASP_LANGUAGE' " + 
		"  AND KEY_CODE      = 'LANG' "; 
	var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );

}


function create_himo_data_relation() {
    //
    table_exists_drop('ASP_WK_SAGYO_INFO_MAE');

    //
    table_exists_drop('ASP_WK_SAGYO_INFO_ATO');


    //Oracle
    //--------------------------------------------------------------------------------
    if ( TALON.getDbConfig().isOra() ) {

        // if ( !table_exists("ASP_WK_SAGYO_INFO_MAE") ) {
        executeSQL( "CREATE TABLE ASP_WK_SAGYO_INFO_MAE( PROJECTID VARCHAR2(200) , ORDER_CODE_MY VARCHAR2(200) , SAGYO_CODE_MY VARCHAR2(200) , MAX_END_DATE DATE ) ");
        executeSQL( 
            "ALTER TABLE ASP_WK_SAGYO_INFO_MAE ADD ( CONSTRAINT PK_ASP_WK_SAGYO_INFO_MAE PRIMARY KEY  (  " + 
            "PROJECTID, " + 
            "ORDER_CODE_MY, " + 
            "SAGYO_CODE_MY " + 
            ") USING INDEX ) " + 
        "");
        // }

        // if ( !table_exists("ASP_WK_SAGYO_INFO_ATO") ) {
        executeSQL( "CREATE TABLE ASP_WK_SAGYO_INFO_ATO( PROJECTID VARCHAR2(200) , ORDER_CODE_MY VARCHAR2(200) , SAGYO_CODE_MY VARCHAR2(200) , MIN_START_DATE DATE ) ");
        executeSQL( 
            "ALTER TABLE ASP_WK_SAGYO_INFO_ATO ADD ( CONSTRAINT PK_ASP_WK_SAGYO_INFO_ATO PRIMARY KEY  (  " + 
            "PROJECTID, " + 
            "ORDER_CODE_MY, " + 
            "SAGYO_CODE_MY " + 
            ") USING INDEX ) " + 
        "");
        // }

    };


    //MySQL
    //--------------------------------------------------------------------------------
    if ( TALON.getDbConfig().isMy() ) {

        // if ( !table_exists("ASP_WK_SAGYO_INFO_MAE") ) {
        executeSQL( "CREATE TABLE ASP_WK_SAGYO_INFO_MAE( PROJECTID varchar(200) , ORDER_CODE_MY varchar(200) , SAGYO_CODE_MY varchar(200) , MAX_END_DATE datetime ) ");
        executeSQL( 
            "ALTER TABLE ASP_WK_SAGYO_INFO_MAE ADD CONSTRAINT PRIMARY KEY  ( " + 
            "PROJECTID, " + 
            "ORDER_CODE_MY, " + 
            "SAGYO_CODE_MY " + 
            ") " + 
        "");
        // }

        // if ( !table_exists("ASP_WK_SAGYO_INFO_ATO") ) {
        executeSQL( "CREATE TABLE ASP_WK_SAGYO_INFO_ATO( PROJECTID varchar(200) , ORDER_CODE_MY varchar(200) , SAGYO_CODE_MY varchar(200) , MIN_START_DATE datetime ) ");
        executeSQL( 
            "ALTER TABLE ASP_WK_SAGYO_INFO_ATO ADD CONSTRAINT PRIMARY KEY  ( " + 
            "PROJECTID, " + 
            "ORDER_CODE_MY, " + 
            "SAGYO_CODE_MY " + 
            ") " + 
        "");
        // }

    };


    //SQLServer
    //--------------------------------------------------------------------------------

    if ( TALON.getDbConfig().isMssql() ) {

        // if ( !table_exists("ASP_WK_SAGYO_INFO_MAE") ) {
        executeSQL( "CREATE TABLE ASP_WK_SAGYO_INFO_MAE( PROJECTID NVARCHAR(200) NOT NULL , ORDER_CODE_MY NVARCHAR(200) NOT NULL , SAGYO_CODE_MY NVARCHAR(200) NOT NULL , MAX_END_DATE DATETIME ) ");
        executeSQL( 
            "ALTER TABLE ASP_WK_SAGYO_INFO_MAE ADD CONSTRAINT PK_ASP_WK_SAGYO_INFO_MAE PRIMARY KEY NONCLUSTERED (  " + 
            "PROJECTID, " + 
            "ORDER_CODE_MY, " + 
            "SAGYO_CODE_MY " + 
            ") " + 
        "");
        // }

        // if ( !table_exists("ASP_WK_SAGYO_INFO_ATO") ) {
        executeSQL( "CREATE TABLE ASP_WK_SAGYO_INFO_ATO( PROJECTID NVARCHAR(200) NOT NULL , ORDER_CODE_MY NVARCHAR(200) NOT NULL , SAGYO_CODE_MY NVARCHAR(200) NOT NULL , MIN_START_DATE DATETIME ) ");
        executeSQL( 
            "ALTER TABLE ASP_WK_SAGYO_INFO_ATO ADD CONSTRAINT PK_ASP_WK_SAGYO_INFO_ATO PRIMARY KEY NONCLUSTERED (  " + 
            "PROJECTID, " + 
            "ORDER_CODE_MY, " + 
            "SAGYO_CODE_MY " + 
            ") " + 
        "");
        // }

    };


    //PostgreSQL
    //--------------------------------------------------------------------------------

    if ( TALON.getDbConfig().isPostgres() ) {

        // if ( !table_exists("ASP_WK_SAGYO_INFO_MAE") ) {
        executeSQL( "CREATE TABLE ASP_WK_SAGYO_INFO_MAE( PROJECTID character varying(200) , ORDER_CODE_MY character varying(200) , SAGYO_CODE_MY character varying(200) , MAX_END_DATE timestamp(6) ) ");
        executeSQL( 
            "ALTER TABLE ASP_WK_SAGYO_INFO_MAE ADD CONSTRAINT PK_ASP_WK_SAGYO_INFO_MAE  PRIMARY KEY  (  " + 
            "PROJECTID, " + 
            "ORDER_CODE_MY, " + 
            "SAGYO_CODE_MY " + 
            ") " + 
        "");
        // }

        // if ( !table_exists("ASP_WK_SAGYO_INFO_ATO") ) {
        executeSQL( "CREATE TABLE ASP_WK_SAGYO_INFO_ATO( PROJECTID character varying(200) , ORDER_CODE_MY character varying(200) , SAGYO_CODE_MY character varying(200) , MIN_START_DATE timestamp(6) ) ");
        executeSQL( 
            "ALTER TABLE ASP_WK_SAGYO_INFO_ATO ADD CONSTRAINT PK_ASP_WK_SAGYO_INFO_ATO  PRIMARY KEY  (  " + 
            "PROJECTID, " + 
            "ORDER_CODE_MY, " + 
            "SAGYO_CODE_MY " + 
            ") " + 
        "");
        // }

    };
}


```

#### サーバJS ライブラリ: ST_COMMON (要員シフト管理共通JavaScript)

```javascript
/**********************************
 *
 *  要員シフト管理用共通JavaSctipt
 *
**********************************/

//文字列の日付情報（YYYY/MM/DD）をJavaのDate型に変換して戻す。
function tln_string_to_date(val) {
    y = parseInt(val.split("/")[0]) - 1900;
    m = parseInt(val.split("/")[1]) - 1;
    d = parseInt(val.split("/")[2]);

    var date = new java.util.Date(y,m,d);
    return date;
}
```

#### サーバJS ライブラリ: TALON_FUNCTION_COMMON_BK (TALON機能設計書出力 共通ライブラリ)

```javascript
// TALON_FUNCTION_COMMON: TALON機能設計書出力 共通サーバ側JS
// LIBRARY_CODE: 0JSENGINE  /  TYPE: server-side common library
//
// 提供API:
//   TFC.getLabelBundle(lang)           Java ResourceBundle 取得 (ja/en/zh_CN/...)
//   TFC.lbl(bundle, key, fallback)     キー→翻訳テキスト
//   TFC.escapeHtml(s)                  HTML エスケープ
//   TFC.escapeMd(s)                    Markdown エスケープ
//   TFC.escapeAttr(s)                  HTML 属性値エスケープ (& < " ' のみ)
//   TFC.formatSql(s)                   SQL 整形 (将来用、現状は trim のみ)
//   TFC.appKbnLabel(appKbn, lang)      APP_KBN → "固定検索条件"等
//   TFC.funcKbnInfo(funcKbn)           FUNC_KBN → {section, labelKey, table} (辞書)
//   TFC.toLocale(lang)                 lang 文字列を java.util.Locale へ変換
//   TFC.HTML_HEAD / TFC.HTML_TAIL      自己完結HTMLの head/tail 生成
//   TFC.htmlSection(title, body, opts) <details>セクション生成
//   TFC.tabBadge(isOn, count, lang)    タブ on/off バッジ HTML
//   TFC.zip(entries)                   {name: bytes/string} → ZIP バイト列 (java.util.zip)

(function (global) {
    'use strict';

    var ResourceBundle = Java.type('java.util.ResourceBundle');
    var Locale = Java.type('java.util.Locale');
    var ByteArrayOutputStream = Java.type('java.io.ByteArrayOutputStream');
    var ZipOutputStream = Java.type('java.util.zip.ZipOutputStream');
    var ZipEntry = Java.type('java.util.zip.ZipEntry');
    var JString = Java.type('java.lang.String');
    var Charset = Java.type('java.nio.charset.Charset');

    var TFC = {};

    // ============================================================
    // 言語・ラベル
    // ============================================================
    TFC.toLocale = function (lang) {
        if (!lang) return Locale.JAPANESE;
        var s = String(lang);
        if (s.indexOf('_') > 0) {
            var p = s.split('_');
            return new Locale(p[0], p[1]);
        }
        if (s === 'ja') return Locale.JAPANESE;
        if (s === 'en') return Locale.ENGLISH;
        return new Locale(s);
    };

    var _bundleCache = {};
    TFC.getLabelBundle = function (lang) {
        var key = lang || 'ja';
        if (!_bundleCache[key]) {
            _bundleCache[key] = ResourceBundle.getBundle('general', TFC.toLocale(key));
        }
        return _bundleCache[key];
    };

    TFC.lbl = function (bundle, key, fallback) {
        try {
            return String(bundle.getString(key));
        } catch (e) {
            return fallback != null ? fallback : key;
        }
    };

    // ============================================================
    // エスケープ
    // ============================================================
    TFC.escapeHtml = function (s) {
        if (s == null) return '';
        return String(s)
            .replace(/&/g, '&amp;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;');
    };

    TFC.escapeAttr = function (s) {
        if (s == null) return '';
        return String(s)
            .replace(/&/g, '&amp;')
            .replace(/</g, '&lt;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;');
    };

    TFC.escapeMd = function (s) {
        if (s == null) return '';
        // Markdown で意味を持つ文字のうち、テキスト中で誤動作しやすいものをエスケープ
        return String(s).replace(/([\\`*_{}\[\]()#+\-!|>])/g, '\\$1');
    };

    TFC.formatSql = function (s) {
        if (s == null) return '';
        return String(s).replace(/\r\n/g, '\n').replace(/\t/g, '    ').replace(/\n+$/, '');
    };

    // ============================================================
    // APP_KBN ラベル ([TALON-DB設定マスタ.md] 出典)
    // ============================================================
    var APP_KBN_MAP = {
        ja: { STD: '固定検索条件', FREE: 'フリー検索条件', SUB: '検索子画面', BAT: '検索ボタン無し' },
        en: { STD: 'Fixed search condition', FREE: 'Free search condition', SUB: 'Sub search screen', BAT: 'No search button' }
    };
    TFC.appKbnLabel = function (appKbn, lang) {
        var l = (lang && APP_KBN_MAP[lang]) ? lang : 'ja';
        var m = APP_KBN_MAP[l];
        return (m && m[appKbn]) || appKbn || '';
    };

    // ============================================================
    // 項目情報の値マッピング
    // ============================================================
    var COMPONENT_MAP = {
        '0': 'TEXT (テキスト)', '1': 'COMBO (ドロップダウン)', '2': 'CHECKBOX',
        '3': 'RADIO', '4': 'TEXTAREA', '5': 'CHECK_FLG (フラグチェック)',
        '6': 'PASSWORD', '7': 'HIDDEN', '8': 'LABEL (固定表示)',
        '9': 'SUGGEST', '10': 'BARCODE', '11': 'IMAGE', '12': 'FILE',
        '13': 'CLOB_TEXT', '14': 'TOGGLE', '15': 'COLOR_PICKER',
        '16': 'DATE_PICKER', '17': 'TIME_PICKER', '18': 'DATETIME_PICKER'
    };
    TFC.componentLabel = function (val) {
        var v = val == null ? '' : String(val);
        return COMPONENT_MAP[v] || v;
    };

    var DATA_TYPE_MAP = {
        'VARCHAR2': '文字列 (VARCHAR2)', 'CHAR': '文字列固定 (CHAR)',
        'NUMBER':   '数値 (NUMBER)',     'INTEGER': '整数 (INTEGER)',
        'DATE':     '日付 (DATE)',       'TIMESTAMP': '日時 (TIMESTAMP)',
        'CLOB':     'CLOB (大量文字)',   'BLOB': 'BLOB (バイナリ)',
        'BOOLEAN':  '真偽 (BOOLEAN)'
    };
    TFC.dataTypeLabel = function (val) {
        var v = val == null ? '' : String(val).toUpperCase();
        return DATA_TYPE_MAP[v] || v;
    };

    TFC.flgLabel = function (val) {
        var v = val == null ? '' : String(val);
        if (v === '1') return '○';
        if (v === '0' || v === '') return '';
        return v;
    };

    // ============================================================
    // FUNC_KBN 辞書 (Phase 3: 全208項目, TALON-DB設定マスタ.md から自動生成)
    // 生成スクリプト: AI開発/scripts/build_func_kbn_dict.py
    //
    // section: 'app-application' | 'app-report' | 'app-othernext' | 'app-ajax'
    //        | 'block-item' | 'block-detail' | 'block-detail-cal'
    //        | 'block-report' | 'block-proc' | 'block-othernext'
    //        | 'block-fileio' | 'block-otherfunc' | 'block-other'
    //        | 'block-chart-general' | 'block-chart-x' | 'block-chart-y'
    //        | 'block-chart-y2' | 'block-chart-series'
    //        | 'free-layout' | 'auth-menu' | 'other'
    // ============================================================
    var FUNC_KBN_DICT = {
    'KEY_COL_BLOCK': { section: 'app-application', labelJa: '機能タイプ', table: 'TLN_M_GENERAL_APP' },
    'OPEN_WINDOW_MODE': { section: 'app-application', labelJa: '起動Window状態', table: 'TLN_M_GENERAL_APP' },
    'WIN_H': { section: 'app-application', labelJa: 'Window高さ', table: 'TLN_M_GENERAL_APP' },
    'WIN_W': { section: 'app-application', labelJa: 'Window幅', table: 'TLN_M_GENERAL_APP' },
    'WIN_POS_X': { section: 'app-application', labelJa: '表示位置 横', table: 'TLN_M_GENERAL_APP' },
    'WIN_POS_Y': { section: 'app-application', labelJa: '表示位置 縦', table: 'TLN_M_GENERAL_APP' },
    'WIN_POS': { section: 'app-application', labelJa: '表示位置', table: 'TLN_M_GENERAL_APP' },
    'IS_NOT_WIN_RESIZE': { section: 'app-application', labelJa: 'Windowサイズ変更不可', table: 'TLN_M_GENERAL_APP' },
    'IS_ON_RELOAD_ORIGIN_WIN_SIZE': { section: 'app-application', labelJa: '再描画時、設定したWindow位置サイズに戻す', table: 'TLN_M_GENERAL_APP' },
    'IS_WIN_OPENER_CLOSED': { section: 'app-application', labelJa: 'Window終了オプション', table: 'TLN_M_GENERAL_APP' },
    'TAB_MENU_NAME': { section: 'app-application', labelJa: 'ブロック', table: 'TLN_M_GENERAL_APP' },
    'CHART': { section: 'app-application', labelJa: 'ブロック', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CONDTN_CNT': { section: 'app-application', labelJa: '検索条件項目数', table: 'TLN_M_GENERAL_APP' },
    'COND_SAVE_HDN_FLG': { section: 'app-application', labelJa: '検索条件保存', table: 'TLN_M_GENERAL_APP' },
    'IS_CONDITION_TITLE_OFF': { section: 'app-application', labelJa: '検索条件タイトル', table: 'TLN_M_GENERAL_APP' },
    'BACK_BUTTON_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', table: 'TLN_M_GENERAL_APP' },
    'CLEAR_BUTTON_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', table: 'TLN_M_GENERAL_APP' },
    'PDF_BUTTON_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', table: 'TLN_M_GENERAL_APP' },
    'EXCEL_BUTTON_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', table: 'TLN_M_GENERAL_APP' },
    'SEARCH_BUTTON_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', table: 'TLN_M_GENERAL_APP' },
    'EXECUTE_BTN_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', table: 'TLN_M_GENERAL_APP' },
    'EXECUTE_BTN_CND': { section: 'app-application', labelJa: '確定ボタン', table: 'TLN_M_GENERAL_APP' },
    'EXECUTE_BTN_NAME_DISP_FORMULA': { section: 'app-application', labelJa: '確定ボタン', table: 'TLN_M_GENERAL_APP' },
    'EXECUTE_MESSAGE': { section: 'app-application', labelJa: '確定終了メッセージ', table: 'TLN_M_GENERAL_APP' },
    'IS_EXECUTE_MESSAGE_HIDDEN': { section: 'app-application', labelJa: '確定終了メッセージ', table: 'TLN_M_GENERAL_APP' },
    'IS_EXECUTE_CONFIRM': { section: 'app-application', labelJa: '確定ボタン確認ダイアログ', table: 'TLN_M_GENERAL_APP' },
    'EXE_DISP_INIT_FLG': { section: 'app-application', labelJa: '確定後再表示オプション', table: 'TLN_M_GENERAL_APP' },
    'EXE_TARGET_ONLY_FLG_NO_SEARCH': { section: 'app-application', labelJa: '確定後再表示オプション', table: 'TLN_M_GENERAL_APP' },
    'EXE_DISP_TARGET_ONLY_FLG': { section: 'app-application', labelJa: '確定後再表示オプション', table: 'TLN_M_GENERAL_APP' },
    'IS_EXE_AUTH': { section: 'app-application', labelJa: '確定時認証', table: 'TLN_M_GENERAL_APP' },
    'SEND_MAIL': { section: 'app-application', labelJa: '確定後のメール送信', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SEND_MAIL_': { section: 'app-application', labelJa: '確定後のメール送信', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'JAVA_SCRIPT_ENGINE': { section: 'app-application', labelJa: 'DB検索JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'PL_SQL_NAME_SEARCH': { section: 'app-application', labelJa: 'DB検索プロシージャ名', table: 'TLN_M_GENERAL_APP' },
    'PL_SQL_NAME_SEARCH_AFTER': { section: 'app-application', labelJa: 'DB検索プロシージャ名', table: 'TLN_M_GENERAL_APP' },
    'PL_SQL_NAME': { section: 'app-application', labelJa: 'プロシージャ名', table: 'TLN_M_GENERAL_APP' },
    'PL_SQL_NAME_AFTER': { section: 'app-application', labelJa: 'プロシージャ名', table: 'TLN_M_GENERAL_APP' },
    'ACCESS_DB': { section: 'app-application', labelJa: 'DB接続先', table: 'TLN_M_GENERAL_APP' },
    'JAVA_SCRIPT': { section: 'app-application', labelJa: 'Client-side JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSS': { section: 'app-application', labelJa: 'CSS', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'JOIN': { section: 'app-application', labelJa: '結合項目', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_DSP_POS': { section: 'app-application', labelJa: 'ボタン位置移動', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_REPORT': { section: 'app-report', labelJa: 'EXCEL', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'ALL_OPT': { section: 'app-report', labelJa: 'EXCEL', table: 'BUTTON_REPORT' },
    'BUTTON_NEXT': { section: 'app-othernext', labelJa: '機能画面設定', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_AJAX': { section: 'app-ajax', labelJa: 'ボタン名', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_AJAX_CLIENT_JAVASCRIPT': { section: 'app-ajax', labelJa: '再表示ブロック', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_AJAX_': { section: 'app-ajax', labelJa: 'DB検索前JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CR_FLG_SEARCH': { section: 'block-item', labelJa: '検索改行', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'REQUIRED_SEARCH': { section: 'block-item', labelJa: '検索必須', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'IS_DB_NOT_REGIST': { section: 'block-item', labelJa: 'DB更新無し', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TABLE_LAYOUT': { section: 'block-item', labelJa: 'ROW SPAN', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TABLE_TITLE_LAYOUT': { section: 'block-item', labelJa: 'タイトルROW SPAN', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SEARCH_METHOD': { section: 'block-item', labelJa: '検索方式', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'DISP_POS': { section: 'block-item', labelJa: '表示位置', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TAB_INDEX_SEARCH': { section: 'block-item', labelJa: 'Tab index(検索)', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TAB_INDEX': { section: 'block-item', labelJa: 'Tab index', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CAMMA_OFF': { section: 'block-item', labelJa: 'カンマ編集無し', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'ZERO_SPLIT': { section: 'block-item', labelJa: '小数点ゼロ埋め', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'ALL_SELECT_CHECK': { section: 'block-item', labelJa: 'コンポーネント', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TATE_CHECK': { section: 'block-item', labelJa: 'コンポーネント', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'OPTION_LIST_FUNC_ID': { section: 'block-item', labelJa: 'オプションリスト機能ID', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'OPTION_LIST_SEARCH': { section: 'block-item', labelJa: 'オプションリスト機能ID', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CLASS_CODE': { section: 'block-item', labelJa: '階層コード/レベル', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'NEST': { section: 'block-item', labelJa: '階層コード/レベル', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'INPUT_CONDITION': { section: 'block-item', labelJa: '入力許可パターン', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'MATCH_PATTERN': { section: 'block-item', labelJa: '入力チェックパターン', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SEARCH_FUNC_ID': { section: 'block-item', labelJa: '検索子画面', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SUB_SEARCH': { section: 'block-item', labelJa: '検索子画面', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SUB_BTN_HDN': { section: 'block-item', labelJa: '子画面非表示', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'MASTER_CHECK': { section: 'block-item', labelJa: 'マスタチェック', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'LOOK_UP_FUNC_ID': { section: 'block-item', labelJa: 'LOOKUP', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'LOOK_UP': { section: 'block-item', labelJa: 'LOOKUP', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'FOCUS_OUT_JAVASCRIPT': { section: 'block-item', labelJa: 'FOCUS OUT', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'FLAT_TEXT': { section: 'block-item', labelJa: '値保持', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SUGGEST_FUNC_ID': { section: 'block-item', labelJa: 'SUGGEST', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SUGGEST': { section: 'block-item', labelJa: 'SUGGEST', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'PRINTING_UPDATE': { section: 'block-item', labelJa: '印刷時更新項目', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'FORE_COLOR': { section: 'block-item', labelJa: '文字色', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BACK_COLOR': { section: 'block-item', labelJa: '背景色', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'INIT_VALUE_TEXT': { section: 'block-item', labelJa: '検索条件初期値', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'INIT_VALUE': { section: 'block-item', labelJa: '検索条件初期値', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'REGIST_VALUE': { section: 'block-item', labelJa: 'DB設定式', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'FIX_FORMULA': { section: 'block-item', labelJa: '固定条件式', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SAIBAN_SIKIBETU_CODE': { section: 'block-item', labelJa: '採番名', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SERIAL_NUMBER_VAL': { section: 'block-item', labelJa: 'シリアル番号加算値', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'JAVASCRIPT': { section: 'block-item', labelJa: 'JavaScript呼出ボタン', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'JAVASCRIPT_ENGINE': { section: 'block-item', labelJa: 'JavaScript呼出ボタン', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BARCODE_FORMAT': { section: 'block-item', labelJa: 'EXCEL帳票', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'THUMBNAIL_SIZE': { section: 'block-item', labelJa: 'サムネイル・バーコードサイズ', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'IMG_UPLOAD_SIZE': { section: 'block-item', labelJa: 'アップロードファイルサイズ', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'DRILL_DOWN': { section: 'block-item', labelJa: 'ドリルダウンレベル項目', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'HDN_LIST_SORT': { section: 'block-item', labelJa: '明細ソート無し', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TITLE_NOTE': { section: 'block-item', labelJa: 'タイトルツールチップ', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'MAX_LINE_COUNT': { section: 'block-detail', labelJa: '画面最大行数', table: 'TLN_M_GENERAL_APP' },
    'MAX_LINE_COUNT_EXCEL': { section: 'block-detail', labelJa: '標準Excel出力最大行数', table: 'TLN_M_GENERAL_APP' },
    'MAX_LINE_CNT_EXCEL_UPDATE': { section: 'block-detail', labelJa: '更新Excel出力最大行数', table: 'TLN_M_GENERAL_APP' },
    'ADD_LINE_VAL_INIT': { section: 'block-detail', labelJa: '追加行の初期値', table: 'TLN_M_GENERAL_APP' },
    'STD_EXCEL_EXT': { section: 'block-detail', labelJa: '標準Excel拡張子', table: 'TLN_M_GENERAL_APP' },
    'LIST_PAGE_ROWS': { section: 'block-detail', labelJa: '初期ページ内行数', table: 'TLN_M_GENERAL_APP' },
    'LIST_PAGE_DROPDOWN': { section: 'block-detail', labelJa: '改頁行数選択リスト', table: 'TLN_M_GENERAL_APP' },
    'SPACE_HEIGHT': { section: 'block-detail', labelJa: '表示高さ', table: 'TLN_M_GENERAL_APP' },
    'IS_VERTICAL_LAYOUT': { section: 'block-detail', labelJa: '行見出しレイアウト', table: 'TLN_M_GENERAL_APP' },
    'HDN_PAGER_FLG': { section: 'block-detail', labelJa: '改ページしない', table: 'TLN_M_GENERAL_APP' },
    'BLOCK_NAME_HDN_FLG': { section: 'block-detail', labelJa: 'ブロック名フィールドを非表示', table: 'TLN_M_GENERAL_APP' },
    'IS_SEARCH_NOTFOUND_MSG_HDN': { section: 'block-detail', labelJa: '検索結果０件メッセージを非表示', table: 'TLN_M_GENERAL_APP' },
    'IS_CLOSE_SWITCH': { section: 'block-detail', labelJa: '開閉表示状態', table: 'TLN_M_GENERAL_APP' },
    'IS_LIST_ROW_SELECT': { section: 'block-detail', labelJa: '明細行の編集方式', table: 'TLN_M_GENERAL_APP' },
    'IS_LIST_FIXED': { section: 'block-detail', labelJa: '明細列の固定', table: 'TLN_M_GENERAL_APP' },
    'EXCELUPDATE_BUTTON_HDN_FLG': { section: 'block-detail', labelJa: 'ボタンの非表示', table: 'TLN_M_GENERAL_APP' },
    'VIEW_BUTTON_HDN_FLG': { section: 'block-detail', labelJa: 'ボタンの非表示', table: 'TLN_M_GENERAL_APP' },
    'COL_BUTTON_HDN_FLG': { section: 'block-detail', labelJa: 'ボタンの非表示', table: 'TLN_M_GENERAL_APP' },
    'EXCELUPDATE_BTN_DISABLED_FLG': { section: 'block-detail', labelJa: '検索前ボタンの非活性', table: 'TLN_M_GENERAL_APP' },
    'INSERT_FLG': { section: 'block-detail', labelJa: '処理権限', table: 'TLN_M_GENERAL_APP' },
    'UPDATE_FLG': { section: 'block-detail', labelJa: '処理権限', table: 'TLN_M_GENERAL_APP' },
    'DELETE_FLG': { section: 'block-detail', labelJa: '処理権限', table: 'TLN_M_GENERAL_APP' },
    'EXCLUSIVE_CONTROL_FLG': { section: 'block-detail', labelJa: '確定時オプション', table: 'TLN_M_GENERAL_APP' },
    'ALL_REG_FLG': { section: 'block-detail', labelJa: '確定時オプション', table: 'TLN_M_GENERAL_APP' },
    'IS_USE_SEARCH_RESULT_REPORT': { section: 'block-detail', labelJa: '確定時オプション', table: 'TLN_M_GENERAL_APP' },
    'IS_USE_SEARCH_RESULT_MAIL': { section: 'block-detail', labelJa: '確定時オプション', table: 'TLN_M_GENERAL_APP' },
    'PLSQL_PARAM_COL': { section: 'block-detail', labelJa: 'プロシージャ名', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'LISTSELECT_BTN_CND': { section: 'block-detail', labelJa: '参照ボタン', table: 'TLN_M_GENERAL_APP' },
    'LISTSEL_BTN_NAME_DISP_FORMULA': { section: 'block-detail', labelJa: '参照ボタン', table: 'TLN_M_GENERAL_APP' },
    'COPY_DL_BTN_CND': { section: 'block-detail', labelJa: '複写ボタン', table: 'TLN_M_GENERAL_APP' },
    'COPY_DL_BTN_NAME_DISP_FORMULA': { section: 'block-detail', labelJa: '複写ボタン', table: 'TLN_M_GENERAL_APP' },
    'ADDLINE_DL_BTN_CND': { section: 'block-detail', labelJa: '行追加ボタン', table: 'TLN_M_GENERAL_APP' },
    'ADDLINE_BTN_NAME_DISP_FORMULA': { section: 'block-detail', labelJa: '行追加ボタン', table: 'TLN_M_GENERAL_APP' },
    'DELETE_BTN_CND': { section: 'block-detail', labelJa: '削除ボタン', table: 'TLN_M_GENERAL_APP' },
    'DELETE_BTN_NAME_DISP_FORMULA': { section: 'block-detail', labelJa: '削除ボタン', table: 'TLN_M_GENERAL_APP' },
    'FORE_COLOR_TR_CODE_': { section: 'block-detail', labelJa: '行文字色', table: 'TLN_M_GENERAL_APP' },
    'FORE_COLOR_TR_KBN_': { section: 'block-detail', labelJa: '行文字色', table: 'TLN_M_GENERAL_APP' },
    'FORE_COLOR_TR_CND_': { section: 'block-detail', labelJa: '行文字色', table: 'TLN_M_GENERAL_APP' },
    'BACK_COLOR_TR_CODE_': { section: 'block-detail', labelJa: '行背景色', table: 'TLN_M_GENERAL_APP' },
    'BACK_COLOR_TR_KBN_': { section: 'block-detail', labelJa: '行背景色', table: 'TLN_M_GENERAL_APP' },
    'BACK_COLOR_TR_CND_': { section: 'block-detail', labelJa: '行背景色', table: 'TLN_M_GENERAL_APP' },
    'SAVE_BTN_CND': { section: 'block-detail', labelJa: '保存ボタン', table: 'TLN_M_GENERAL_APP' },
    'SAVE_BTN_NAME_DISP_FORMULA': { section: 'block-detail', labelJa: '保存ボタン', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_TITLE_COL': { section: 'block-detail', labelJa: 'タスクコード', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_GRID_TOP': { section: 'block-detail', labelJa: '時間グリッドのスクロールTOP', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_FROM_DATE_COL': { section: 'block-detail', labelJa: '開始日時', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_TO_DATE_COL': { section: 'block-detail', labelJa: '終了日時', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_START_WEEK': { section: 'block-detail', labelJa: '開始曜日', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_INIT_SCALE': { section: 'block-detail', labelJa: '描画期間初期値', table: 'TLN_M_GENERAL_APP' },
    'IS_SCALE_HIDDEN_MONTH': { section: 'block-detail', labelJa: '描画期間スケールボタン表示', table: 'TLN_M_GENERAL_APP' },
    'IS_SCALE_HIDDEN_WEEK': { section: 'block-detail', labelJa: '描画期間スケールボタン表示', table: 'TLN_M_GENERAL_APP' },
    'IS_SCALE_HIDDEN_DAY': { section: 'block-detail', labelJa: '描画期間スケールボタン表示', table: 'TLN_M_GENERAL_APP' },
    'IS_ALL_DAY_CHECK_ON': { section: 'block-detail', labelJa: 'All Day チェックボックス状態', table: 'TLN_M_GENERAL_APP' },
    'CALENDAR_SIKIBETU_CODE': { section: 'block-detail', labelJa: 'カレンダー識別コード', table: 'TLN_M_GENERAL_APP' },
    'IS_BAR_UPDATE_CONFIRM': { section: 'block-detail', labelJa: 'イベントバーの変更時確認', table: 'TLN_M_GENERAL_APP' },
    'IS_SCHEDULE_UIWAIT_LOCK': { section: 'block-detail', labelJa: '処理中ロック', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_TITLE_DISP_COL': { section: 'block-detail', labelJa: 'タスク表示名', table: 'TLN_M_GENERAL_APP' },
    'IS_TASK_GROUING_DISP': { section: 'block-detail', labelJa: 'タスク名の全種表示', table: 'TLN_M_GENERAL_APP' },
    'TASK_AREA_WIDTH': { section: 'block-detail', labelJa: 'タスク領域幅', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_EVENT_TEXT_COL': { section: 'block-detail', labelJa: 'イベント内容項目', table: 'TLN_M_GENERAL_APP' },
    'IS_FIT_EVENT_BAR_MAX_WIDTH': { section: 'block-detail', labelJa: 'イベント内容項目', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_EVENT_TOOLTIP_COL': { section: 'block-detail', labelJa: 'ツールチップ項目', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_UNIQUE_COL': { section: 'block-detail', labelJa: '関係線KEY項目', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_CONNECT_FROM_COL': { section: 'block-detail', labelJa: '関係線FROM', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_CONNECT_TO_COL': { section: 'block-detail', labelJa: '関係線TO', table: 'TLN_M_GENERAL_APP' },
    'LABEL_DSP_CNT': { section: 'block-detail', labelJa: '日時ラベル最大表示数', table: 'TLN_M_GENERAL_APP' },
    'IS_GRID_SNAP_OFF': { section: 'block-detail', labelJa: 'イベントバーのグリッドスナップ', table: 'TLN_M_GENERAL_APP' },
    'IS_ST_ED_TOOLTIP_HIDDEN': { section: 'block-detail', labelJa: '開始-終了日時ツールチップ', table: 'TLN_M_GENERAL_APP' },
    'IS_BAR_MOUSE_ALLOW_RESIZING': { section: 'block-detail', labelJa: 'イベントバーのマウス操作', table: 'TLN_M_GENERAL_APP' },
    'IS_BAR_MOUSE_ALLOW_MOVING': { section: 'block-detail', labelJa: 'イベントバーのマウス操作', table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_HOUR_BTN': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_HOUR_GRID_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_HOUR_FROM_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_HOUR_LIMIT_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_DAY_BTN': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_DAY_GRID_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_WEEK_BTN': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_WEEK_GRID_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_MONTH_BTN': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_MONTH_GRID_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_QUARTERLY_BTN': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_QTR_YEAR_GRID_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_HALF_YEAR_BTN': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_HALF_YEAR_GRID_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_YEAR_BTN': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_ONE_YEAR_GRID_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_YEARS_BTN': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_YEARS_GRID_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'GANTT_YEARS_INIT_VAL': { section: 'block-detail', labelJa: '描画期間の制御エリア', table: 'TLN_M_GENERAL_APP' },
    'BUTTON_BAT': { section: 'block-proc', labelJa: 'JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_BAT_CLIENT_JAVASCRIPT': { section: 'block-proc', labelJa: 'JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_BAT_': { section: 'block-proc', labelJa: 'プロシージャ', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_NEXT_': { section: 'block-othernext', labelJa: '設定（機能ID指定あり）', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_OUT_BUTTON': { section: 'block-fileio', labelJa: 'ファイル出力', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_OUT_BUTTON_OPTION': { section: 'block-fileio', labelJa: 'ファイル出力', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_OUT_BUTTON_FILE': { section: 'block-fileio', labelJa: 'ファイル出力', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_OUT_BUTTON_COL': { section: 'block-fileio', labelJa: 'ファイル出力', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_LOAD_BUTTON': { section: 'block-fileio', labelJa: 'DB登録', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_LOAD_BUTTON_OPTION': { section: 'block-fileio', labelJa: 'DB登録', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_LOAD_BUTTON_FILE': { section: 'block-fileio', labelJa: 'DB登録', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_LOAD_BUTTON_COL': { section: 'block-fileio', labelJa: 'DB登録', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'OTHER_FUNC': { section: 'block-otherfunc', labelJa: '式', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'OTHER_FUNC_': { section: 'block-otherfunc', labelJa: '項目設定', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'UPDATE_TABLE': { section: 'block-other', labelJa: 'SELECT式', table: 'TLN_M_GENERAL_APP' },
    'OTHER_BLOCK_FUNC': { section: 'block-other', labelJa: '他ブロック', table: 'TLN_M_GENERAL_APP' },
    'CHART_MARK': { section: 'block-chart-series', labelJa: 'マーカー', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'FUNC_TOP_AREA': { section: 'free-layout', labelJa: '機能実行画面デザイン', table: 'TLN_M_GENERAL_POSITION' },
    'FUNC_BUTTON_AREA_HEAD': { section: 'free-layout', labelJa: '機能実行画面デザイン', table: 'TLN_M_GENERAL_POSITION' },
    'CONDITION_AREA': { section: 'free-layout', labelJa: '機能実行画面デザイン', table: 'TLN_M_GENERAL_POSITION' },
    'FUNC_BUTTON_AREA_TOP': { section: 'free-layout', labelJa: '機能実行画面デザイン', table: 'TLN_M_GENERAL_POSITION' },
    'RESULT_AREA': { section: 'free-layout', labelJa: '機能実行画面デザイン', table: 'TLN_M_GENERAL_POSITION' },
    'FUNC_BUTTON_AREA_BTM': { section: 'free-layout', labelJa: '機能実行画面デザイン', table: 'TLN_M_GENERAL_POSITION' },
    'BLOCK': { section: 'free-layout', labelJa: 'ブロックデザイン(明細)', table: 'TLN_M_GENERAL_POSITION' },
    'CONDITION': { section: 'free-layout', labelJa: 'ブロックデザイン(検索条件)', table: 'TLN_M_GENERAL_POSITION' },

    // === DB スキャンで未対応だった追加分 (TLN_M_GENERAL_APP) ===
    'EXECUTE_BTN_DISP_NAME': { section: 'app-application', labelJa: '確定ボタン表示名', table: 'TLN_M_GENERAL_APP' },
    'HELP_LINK_NM': { section: 'app-application', labelJa: 'ヘルプリンク表示名', table: 'TLN_M_GENERAL_APP' },
    'HELP_URL': { section: 'app-application', labelJa: 'ヘルプURL', table: 'TLN_M_GENERAL_APP' },
    'PLOT_BTN_CND': { section: 'app-application', labelJa: 'プロットボタン表示条件式', table: 'TLN_M_GENERAL_APP' },

    // === DB スキャンで未対応だった追加分 (TLN_M_GENERAL_ITEM_OPTN) ===
    //  ※ BUTTON_AJAX_<N>, BUTTON_BAT_<N>, BUTTON_NEXT_<N>, OTHER_FUNC_<N>, SEND_MAIL_<N> 系は
    //    _<digits> サフィックスのフォールバック解決でカバーされる (TFC.funcKbnInfo 参照)
    'BUTTON_AJAX_CLIANT_JAVASCRIPT': { section: 'app-ajax', labelJa: '非同期通信ボタン Client-side JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_LIST_OPT': { section: 'block-otherfunc', labelJa: 'LIST明細選択ボタンオプション', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'PLOT': { section: 'block-detail', labelJa: 'グラフ プロット設定', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'PLOT_COL': { section: 'block-detail', labelJa: 'グラフ プロット項目設定', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'PLOT_COL_MARKER_STYLE': { section: 'block-detail', labelJa: 'グラフ プロット項目 マーカースタイル', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'PLOT_COL_PIE_OPTION': { section: 'block-detail', labelJa: 'グラフ プロット項目 円グラフオプション', table: 'TLN_M_GENERAL_ITEM_OPTN' },

    // === DB設定マスタ.csv (talon-docs) との突合で判明した追加分 ===
    // 機能タブ アプリケーション (FUNC_SEQ=-1)
    'SEARCH_FLG': { section: 'app-application', labelJa: '検索ボタン表示', table: 'TLN_M_GENERAL_APP' },
    'CLEAR_FLG': { section: 'app-application', labelJa: 'クリアボタン表示', table: 'TLN_M_GENERAL_APP' },
    'EXCEL_OUT_FLG': { section: 'app-application', labelJa: 'Excel出力ボタン表示', table: 'TLN_M_GENERAL_APP' },
    'PDF_OUT_FLG': { section: 'app-application', labelJa: 'PDF出力ボタン表示', table: 'TLN_M_GENERAL_APP' },

    // ブロック設定 詳細 (FUNC_SEQ != -1) — _<N> サフィックス連番系の基底キーとして登録
    'BACK_COLOR_TR_CODE': { section: 'block-detail', labelJa: '行背景色 動的キー', table: 'TLN_M_GENERAL_APP' },
    'FORE_COLOR_TR_CODE': { section: 'block-detail', labelJa: '行文字色 動的キー', table: 'TLN_M_GENERAL_APP' },
    'GANTT_REF_UPDATE_TABLE': { section: 'block-detail', labelJa: 'GANTT 参照更新テーブル', table: 'TLN_M_GENERAL_APP' },

    // ブロック 検索呼出 (DLプロシージャ)
    'PL_SQL_NAME_DL': { section: 'block-proc', labelJa: '検索前プロシージャ (引出)', table: 'TLN_M_GENERAL_APP' },
    'PL_SQL_NAME_AFTER_DL': { section: 'block-proc', labelJa: '検索後プロシージャ (引出)', table: 'TLN_M_GENERAL_APP' },

    // 項目情報 (TLN_M_GENERAL_ITEM_OPTN)
    'ZERO_INT': { section: 'block-item', labelJa: 'ゼロ値ハイフン表示', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    };

    
    // FUNC_KBN は同種設定が複数登録されると `_<N>` 連番サフィックスが付くことがある
    //   例: BUTTON_NEXT, BUTTON_NEXT_0, BUTTON_NEXT_1, ... (同じ FUNC_KBN 系列を別レコードとして保持)
    //   この場合、辞書に基底キーがあればフォールバックで該当エントリを返す
    function _resolveBaseKbn(funcKbn) {
        if (!funcKbn) return null;
        if (FUNC_KBN_DICT[funcKbn]) return FUNC_KBN_DICT[funcKbn];
        // _<digits> 末尾を削って再検索
        var m = funcKbn.match(/^(.+?)_(\d+)$/);
        if (m && FUNC_KBN_DICT[m[1]]) return FUNC_KBN_DICT[m[1]];
        return null;
    }

    TFC.funcKbnInfo = function (funcKbn) {
        return _resolveBaseKbn(funcKbn);
    };

    TFC.isKnownFuncKbn = function (funcKbn) {
        return _resolveBaseKbn(funcKbn) != null;
    };

    // ============================================================
    // HTML テンプレート部品
    // ============================================================
    TFC.htmlHead = function (titleText, lang) {
        var l = lang || 'ja';
        var t = TFC.escapeHtml(titleText);
        return '<!DOCTYPE html>\n' +
            '<html lang="' + l + '">\n' +
            '<head>\n' +
            '<meta charset="UTF-8">\n' +
            '<meta name="viewport" content="width=device-width,initial-scale=1.0">\n' +
            '<title>' + t + '</title>\n' +
            '<style>' + TFC.CSS + '</style>\n' +
            '</head>\n<body>\n';
    };

    TFC.htmlTail = function () {
        return '\n<script>' + TFC.JS_TAIL + '</script>\n</body>\n</html>\n';
    };

    TFC.tabBadge = function (isOn, count, lang) {
        if (isOn) {
            var on = (lang === 'en') ? '● set (' + count + ')' : '● 設定あり (' + count + '件)';
            return '<span class="tab-status tab-status-on">' + on + '</span>';
        }
        var off = (lang === 'en') ? '○ none' : '○ 設定なし';
        return '<span class="tab-status tab-status-off">' + off + '</span>';
    };

    TFC.htmlSection = function (titleHtml, bodyHtml, classes) {
        var c = classes ? ' ' + classes : '';
        return '<details class="screen-section' + c + '">\n' +
            '<summary>' + titleHtml + '</summary>\n' +
            '<div class="section-body">\n' + (bodyHtml || '') + '\n</div>\n' +
            '</details>\n';
    };

    // 仕様書 §6.1: DOMContentLoaded で全 details を強制 close
    TFC.JS_TAIL =
        "document.addEventListener('DOMContentLoaded',function(){" +
        "document.querySelectorAll('details').forEach(function(d){d.open=false;});" +
        "});" +
        "function tfcAll(open){document.querySelectorAll('details').forEach(function(d){d.open=open;});}" +
        "function tfcCardOnly(){document.querySelectorAll('details.func-card,details.shared-card').forEach(function(d){d.open=true;});" +
        "document.querySelectorAll('details.func-card details, details.shared-card details').forEach(function(d){d.open=false;});}" +
        "function tfcOnOnly(){document.querySelectorAll('details').forEach(function(d){d.open=true;});" +
        "document.querySelectorAll('details.tab-off').forEach(function(d){d.open=false;});}";

    // 仕様書 §8 の色パレットを採用
    TFC.CSS = "body{font-family:'Segoe UI',Meiryo,sans-serif;background:#f1f5f9;color:#1e293b;margin:0;padding:0 12px 32px;line-height:1.55}" +
        "h1{font-size:1.5em;margin:18px 0 8px}" +
        ".meta{font-size:.9em;color:#475569;margin-bottom:6px}" +
        ".legend{font-size:.85em;color:#475569;margin:6px 0}" +
        ".controls{position:sticky;top:0;background:#fff;padding:8px;border-bottom:1px solid #cbd5e1;z-index:10;margin-bottom:12px}" +
        ".controls button{margin-right:6px;padding:4px 10px;font-size:.9em;cursor:pointer;border:1px solid #94a3b8;background:#f8fafc;border-radius:3px}" +
        ".controls button:hover{background:#e2e8f0}" +
        "details.func-card{border:2px solid #cbd5e1;border-radius:6px;background:#fff;margin:14px 0;padding:6px 10px}" +
        "details.func-card[open]{border-color:#7dd3fc}" +
        "details.func-card>summary{font-weight:bold;font-size:1.1em;cursor:pointer;padding:4px 0}" +
        "details.shared-card{border:2px solid #f59e0b;border-radius:6px;background:#fef3c7;margin:14px 0;padding:6px 10px}" +
        "details.block-card{border:1px solid #7dd3fc;border-radius:4px;margin:8px 0;padding:4px 8px;background:#f0f9ff}" +
        "details.screen-section{border:1px solid #e2e8f0;border-radius:3px;margin:6px 0;padding:4px 8px;background:#f8fafc}" +
        "details.screen-section.tab-on{border-color:#86efac;background:#f0fdf4}" +
        "details.screen-section.tab-off{border-color:#e2e8f0;background:#f8fafc;opacity:.85}" +
        "details>summary{cursor:pointer;outline:none}" +
        ".tab-status{font-size:.85em;margin-left:8px}" +
        ".tab-status-on{color:#15803d}" +
        ".tab-status-off{color:#94a3b8}" +
        ".section-body{padding:6px 0 6px 12px}" +
        "table.kv{border-collapse:collapse;margin:4px 0;width:auto}" +
        "table.kv th,table.kv td{border:1px solid #cbd5e1;padding:3px 8px;font-size:.92em;text-align:left;vertical-align:top}" +
        "table.kv th{background:#f1f5f9;color:#475569;white-space:nowrap;min-width:160px}" +
        "table.kv td.val{background:#fff}" +
        "table.kv-compact{table-layout:auto;width:auto}" +
        "table.kv-compact th{min-width:0;padding:2px 6px;white-space:nowrap;font-size:.85em}" +
        "table.kv-compact td{padding:2px 6px;font-size:.88em;white-space:nowrap;max-width:280px;overflow:hidden;text-overflow:ellipsis}" +
        "table.kv-compact td:hover{overflow:visible;white-space:normal;background:#fef3c7}" +
        "code,pre{font-family:Consolas,'Courier New',monospace}" +
        "pre.sql-code,pre.js-code{background:#0f172a;color:#a5f3fc;padding:8px 10px;border-radius:4px;overflow:auto;font-size:.85em;margin:4px 0}" +
        ".kbn{display:inline-block;background:#fef3c7;color:#b45309;padding:1px 6px;border-radius:3px;font-size:.82em;font-family:Consolas,monospace}" +
        ".unclassified{border:2px dashed #f87171;background:#fef2f2;padding:8px 12px;border-radius:4px;margin:10px 0}" +
        ".unclassified summary{color:#b91c1c;font-weight:bold}";

    // ============================================================
    // ZIP 出力 (Java util.zip)
    // ============================================================
    // entries: [{name: 'a.html', content: 'string'}, {name: 'b.md', content: 'string'}]
    // 戻り値: byte[] (Java)
    TFC.zip = function (entries) {
        var baos = new ByteArrayOutputStream();
        var zos = new ZipOutputStream(baos, Charset.forName('UTF-8'));
        try {
            for (var i = 0; i < entries.length; i++) {
                var e = entries[i];
                zos.putNextEntry(new ZipEntry(e.name));
                var bytes = new JString(e.content).getBytes(Charset.forName('UTF-8'));
                zos.write(bytes, 0, bytes.length);
                zos.closeEntry();
            }
        } finally {
            zos.close();
        }
        return baos.toByteArray();
    };

    // ============================================================
    // Markdown テンプレート部品
    // ============================================================
    TFC.mdHeader = function (title) {
        return '# ' + (title || '') + '\n\n';
    };

    TFC.mdSection = function (level, heading, body) {
        var hashes = '';
        for (var i = 0; i < (level || 2); i++) hashes += '#';
        return hashes + ' ' + (heading || '') + '\n\n' + (body || '') + '\n';
    };

    TFC.mdKvTable = function (rows) {
        // rows: [[key, val], ...]
        if (!rows || rows.length === 0) return '';
        var s = '| 項目 | 値 |\n|------|----|\n';
        for (var i = 0; i < rows.length; i++) {
            var k = TFC.escapeMd(rows[i][0]);
            var v = TFC.escapeMd(rows[i][1] != null ? String(rows[i][1]) : '');
            s += '| ' + k + ' | ' + v + ' |\n';
        }
        return s + '\n';
    };

    TFC.mdCodeBlock = function (lang, code) {
        return '```' + (lang || '') + '\n' + (code || '') + '\n```\n\n';
    };

    // ============================================================
    // ユーティリティ
    // ============================================================
    TFC.s = function (v) { return v == null ? '' : String(v); };
    TFC.isEmpty = function (v) { return v == null || String(v).length === 0; };
    TFC.coalesce = function () {
        for (var i = 0; i < arguments.length; i++) {
            if (!TFC.isEmpty(arguments[i])) return arguments[i];
        }
        return '';
    };

    // export
    global.TFC = TFC;
    return TFC;

})(this);

```

#### サーバJS ライブラリ: TLN_AI_DEV_DEMO_DATE_UTIL (TLN_AI_DEV_DEMO_DATE_UTIL)

```javascript
/**
 * TLN_AI_DEV_DEMO_DATE_UTIL
 *
 * TALON画面の入力値をSQL実行用の日付型へ変換する共通関数です。
 * JavaScriptエンジン APIマニュアル 11.2 JavaScript日付変換ユーティリティ の内容に沿っています。
 */

/**
 * ロケールごとの日付フォーマット定義です。
 */
var DATE_PATTERN_BY_LOCALE = {
    'en_us': 'MM/dd/yyyy',
    'en-us': 'MM/dd/yyyy',
    'en_gb': 'dd/MM/yyyy',
    'en-gb': 'dd/MM/yyyy'
};

/**
 * 標準の日付フォーマットです。
 */
var DEFAULT_DATE_PATTERN = 'yyyy/MM/dd';

/**
 * 画面入力値を java.sql.Date に変換します。
 *
 * ・java.util.Date の場合：そのまま java.sql.Date 化
 * ・文字列の場合：ユーザーロケールに応じた形式で parse
 *
 * 対応例:
 * ・ja / ja_JP：yyyy/MM/dd
 * ・en_US     ：MM/dd/yyyy
 * ・en_GB     ：dd/MM/yyyy
 *
 * @param {*} value 画面入力値
 * @returns {java.sql.Date|null} SQL日付
 * @throws {java.text.ParseException} 文字列 value がユーザーロケールの日付形式に一致しない場合、または不正な日付の場合
 */
function toSqlDate(value) {
    if (value == null || value === '') {
        return null;
    }
    var SqlDate = Java.type('java.sql.Date');
    if (value.getTime) {
        return new SqlDate(value.getTime());
    }
    var utilDate = parseDate(
        value,
        getDatePatternByLocale()
    );
    return new SqlDate(utilDate.getTime());
}

/**
 * 画面入力値を java.sql.Timestamp に変換します。
 *
 * ・java.util.Date の場合：そのまま Timestamp 化
 * ・文字列の場合：ロケールに応じた形式で parse
 *
 * 対応例:
 * ・ja / ja_JP：yyyy/MM/dd HH:mm:ss
 * ・en_US     ：MM/dd/yyyy HH:mm:ss
 * ・en_GB     ：dd/MM/yyyy HH:mm:ss
 *
 * @param {*} value 画面入力値
 * @returns {java.sql.Timestamp|null} SQL日時
 * @throws {java.text.ParseException} 文字列 value がユーザーロケールの日時形式に一致しない場合、または不正な日時の場合
 */
function toSqlDateTime(value) {
    if (value == null || value === '') {
        return null;
    }
    var Timestamp = Java.type('java.sql.Timestamp');
    if (value.getTime) {
        return new Timestamp(value.getTime());
    }
    var pattern =
        getDatePatternByLocale()
        + ' HH:mm:ss';
    var utilDate = parseDate(value, pattern);
    return new Timestamp(utilDate.getTime());
}

/**
 * 値を java.util.Date に変換します。
 *
 * 対応型:
 * ・String
 * ・java.sql.Timestamp
 * ・oracle.sql.TIMESTAMP
 *
 * @param {*} value
 * @returns {*}
 * @throws {java.text.ParseException} 文字型の value が判定された日付/日時形式に一致しない場合、または不正な日付の場合
 */
function toUtilDate(value) {
    if (value == null || value === '') {
        return value;
    }
    var type = Object.prototype.toString
        .call(value)
        .slice(8, -1)
        .toUpperCase();
    switch (type) {
        case 'STRING':
            return parseDate(
                value,
                getDatePatternByValue(value)
            );
        case 'JAVA.SQL.TIMESTAMP':
            return new java.util.Date(
                value.getTime()
            );
        case 'ORACLE.SQL.TIMESTAMP':
            return new java.util.Date(
                value.timestampValue().getTime()
            );
        default:
            return value;
    }
}

/**
 * 文字列を指定フォーマットで
 * java.util.Date に変換します。
 *
 * @param {*} value 画面入力値
 * @param {string} pattern 日付フォーマット
 * @returns {java.util.Date}
 * @throws {java.text.ParseException} value が pattern に一致しない場合、または不正な日付の場合
 */
function parseDate(value, pattern) {
    var SimpleDateFormat = Java.type(
        'java.text.SimpleDateFormat'
    );
    var sdf = new SimpleDateFormat(pattern);
    sdf.setLenient(false);
    return sdf.parse(String(value));
}

/**
 * 入力値に応じた
 * 日付フォーマットを返します。
 *
 * @param {string} value
 * @returns {string} 日付フォーマット
 */
function getDatePatternByValue(value) {
    var pattern = getDatePatternByLocale();
    if (String(value).indexOf(' ') >= 0) {
        pattern += ' HH:mm:ss';
    }
    return pattern;
}

/**
 * ログインユーザーの locale に応じた
 * 日付フォーマットを返します。
 *
 * @returns {string} 日付フォーマット
 */
function getDatePatternByLocale() {
    var userData = TALON.getUserInfoMap();
    var locale = userData['LOCALE'];
    if (!locale) {
        return DEFAULT_DATE_PATTERN;
    }
    locale = String(locale).toLowerCase();
    return DATE_PATTERN_BY_LOCALE[locale]
        || DEFAULT_DATE_PATTERN;
}

```

#### サーバJS ライブラリ: TLN_AI_DEV_DEMO_INPUT_UTIL (TLN_AI_DEV_DEMO_INPUT_UTIL)

```javascript
/**
 * TLN_AI_DEV_DEMO_INPUT_UTIL
 *
 * 画面入力値の空判定・数値変換・チェックボックス値の配列変換を行うための共通関数です。
 * JavaScriptエンジン APIマニュアル 11.3 入力値操作ユーティリティ の内容に沿っています。
 */

/**
 * チェックボックス値の区切り文字です。
 *
 * TALON標準のチェックボックス区切り値（システム設定情報 CHECKBOX_SEP）に合わせて設定します。
 */
var CHECKBOX_VALUE_SEPARATOR = ';';

/**
 * 空入力か判定します。
 *
 * @param {*} value 入力値
 * @returns {boolean} 判定結果
 */
function isEmptyValue(value) {
    return value === null
        || value === undefined
        || value === '';
}

/**
 * 画面入力値を数値へ変換します。
 * カンマ区切りが含まれる場合は、除去したうえで数値化します。
 * ※ 数値変換できない場合は null 扱い（例: "abc", "12a"）
 *
 * @param {*} value 画面入力値
 * @returns {number|null} 数値。空入力の場合は null
 */
function toNumber(value) {
    if (isEmptyValue(value)) {
        return null;
    }

    var num = Number(
        String(value).replace(/,/g, '')
    );

    if (isNaN(num)) {
        return null;
    }

    return num;
}

/**
 * チェックボックス値を配列へ変換します。
 *
 * @param {*} value チェックボックス値（区切り文字つきの文字列）
 * @returns {Array<string>} チェック済み値配列
 */
function toCheckboxArray(value) {
    if (isEmptyValue(value)) {
        return [];
    }
    return String(value)
        .split(CHECKBOX_VALUE_SEPARATOR);
}

```

#### サーバJS ライブラリ: TLN_AI_DEV_DEMO_SQL_SET (TLN_AI_DEV_DEMO_SQL_SET)

```javascript
/**
 * TLN_AI_DEV_DEMO_SQL_SET
 *
 * UPDATE文のSET句を安全に組み立てるための共通関数です。
 * JavaScriptエンジン APIマニュアル 11.5 SQLビルダ：SET句の組み立て（更新処理／NULL／SQL式対応） の内容に沿っています。
 */

/**
 * SET句のコンテナを生成します。
 *
 * @returns {SetBuilder}
 *
 * @typedef {Object} SetBuilder
 * @property {Array<Object>} items SET項目一覧
 */
function createSetBuilder() {
    return {
        items: []
    };
}

/**
 * SET（col = ?）を追加します。
 *
 * ・value が存在する場合：プレースホルダ「?」を使用して値を設定
 * ・value が null / undefined の場合：
 *     - forceNull = true  -> NULLを設定
 *     - forceNull = false -> 追加しない
 * ・空文字や 0 は有効値として扱います
 *
 * @param {SetBuilder} setBuilder
 * @param {string} column カラム名
 * @param {*} value 設定値（null / undefined の場合は追加しない）
 * @param {boolean} [forceNull=false] trueの場合、NULLを強制設定
 * @returns {void}
 */
function addSet(setBuilder, column, value, forceNull) {
    if (value === null || value === undefined) {
        if (forceNull === true) {
            setBuilder.items.push({
                clause: column + ' = NULL',
                values: []
            });
        }
        return;
    }
    setBuilder.items.push({
        clause: column + ' = ?',
        values: [value]
    });
}

/**
 * 任意の式でSETを追加します（例：col = sysdate）
 *
 * @param {SetBuilder} setBuilder
 * @param {*} condition 条件
 * @param {string} expression SQL式
 * @returns {void}
 */
function addSetRaw(setBuilder, condition, expression) {
    if (!condition) {
        return;
    }
    setBuilder.items.push({
        clause: expression,
        values: []
    });
}

/**
 * SET句を生成し、paramsに値を追加します。
 *
 * @param {SetBuilder} setBuilder
 * @param {Array<*>} params バインドパラメータ
 * @returns {string} SET句
 * @throws {java.lang.IllegalArgumentException} UPDATE項目が指定されていない場合
 */
function buildSetSql(setBuilder, params) {
    if (!setBuilder.items || setBuilder.items.length === 0) {
        var IllegalArgumentException = Java.type('java.lang.IllegalArgumentException');
        throw new IllegalArgumentException('No UPDATE items specified');
    }
    var parts = [];
    for (var i = 0; i < setBuilder.items.length; i++) {
        var item = setBuilder.items[i];
        parts.push(item.clause);
        for (var j = 0; j < item.values.length; j++) {
            params.push(item.values[j]);
        }
    }
    return ' SET ' + parts.join(', ');
}

```

#### サーバJS ライブラリ: TLN_AI_DEV_DEMO_SQL_VALUES (TLN_AI_DEV_DEMO_SQL_VALUES)

```javascript
/**
 * TLN_AI_DEV_DEMO_SQL_VALUES
 *
 * INSERT文のカラム一覧とVALUES句を安全に組み立てるための共通関数です。
 * JavaScriptエンジン APIマニュアル 11.6 SQLビルダ：VALUES句の組み立て（VALUES／NULL／SQL式対応） の内容に沿っています。
 */

/**
 * INSERT文の組み立て用オブジェクトを作成します。
 *
 * @returns {InsertBuilder}
 *
 * @typedef {Object} InsertBuilder
 * @property {Array<Object>} items INSERT項目一覧
 */
function createInsertBuilder() {
    return {
        items: []
    };
}

/**
 * INSERT項目を追加します。
 *
 * ・value が存在する場合：プレースホルダ「?」を使用して値を設定
 * ・value が null / undefined の場合：
 *     - forceNull = true  -> NULLを設定
 *     - forceNull = false -> 追加しない（カラムを除外）
 * ・空文字や 0 は有効値として扱います
 *
 * @param {InsertBuilder} insertBuilder INSERTビルダ
 * @param {string} column カラム名
 * @param {*} value 登録値
 * @param {boolean} [forceNull=false] trueの場合、NULLを強制設定
 * @returns {void}
 */
function addInsertValue(insertBuilder, column, value, forceNull) {
    if (value === null || value === undefined) {
        if (forceNull === true) {
            insertBuilder.items.push({
                column: column,
                placeholder: 'NULL',
                values: []
            });
        }
        return;
    }
    insertBuilder.items.push({
        column: column,
        placeholder: '?',
        values: [value]
    });
}

/**
 * SQL式をINSERTします。
 *
 * 例:
 * ・CURRENT_TIMESTAMP
 * ・SYSDATE
 * ・CURRENT_DATE
 *
 * @param {InsertBuilder} insertBuilder INSERTビルダ
 * @param {*} condition 条件がtrueの場合に追加
 * @param {string} column カラム名
 * @param {string} expression SQL式
 * @returns {void}
 */
function addInsertRaw(insertBuilder, condition, column, expression) {
    if (!condition) {
        return;
    }
    insertBuilder.items.push({
        column: column,
        placeholder: expression,
        values: []
    });
}

/**
 * INSERT文を生成し、paramsに値を追加します。
 *
 * @param {string} tableName テーブル名
 * @param {InsertBuilder} insertBuilder INSERTビルダ
 * @param {Array<*>} params バインドパラメータ格納配列
 * @returns {string} INSERT文
 * @throws {java.lang.IllegalArgumentException} INSERT項目が指定されていない場合
 */
function buildInsertSql(tableName, insertBuilder, params) {
    if (!insertBuilder.items || insertBuilder.items.length === 0) {
        var IllegalArgumentException = Java.type('java.lang.IllegalArgumentException');
        throw new IllegalArgumentException('No INSERT items specified');
    }
    var columns = [];
    var placeholders = [];
    for (var i = 0; i < insertBuilder.items.length; i++) {
        var item = insertBuilder.items[i];
        columns.push(item.column);
        placeholders.push(item.placeholder);
        for (var j = 0; j < item.values.length; j++) {
            params.push(item.values[j]);
        }
    }
    return ''
        + 'INSERT INTO ' + tableName + ' (\n'
        + '    ' + columns.join(',\n    ') + '\n'
        + ') VALUES (\n'
        + '    ' + placeholders.join(',\n    ') + '\n'
        + ')';
}

```

#### サーバJS ライブラリ: TLN_AI_DEV_DEMO_SQL_WHERE (TLN_AI_DEV_DEMO_SQL_WHERE)

```javascript
/**
 * TLN_AI_DEV_DEMO_SQL_WHERE
 *
 * WHERE句を安全に組み立てるための共通関数です。
 * JavaScriptエンジン APIマニュアル 11.4 SQLビルダ：WHERE条件の組み立て（AND / OR / LIKE / IN など） の内容に沿っています。
 *
 * 依存：
 *   - TLN_AI_DEV_DEMO_INPUT_UTIL（CHECKBOX_VALUE_SEPARATOR を参照）
 *     CHECKBOX_VALUE_SEPARATOR を参照するため、本JSを利用する機能は
 *     INPUT_UTIL も合わせて参照してください。
 */

/**
 * WHERE句のグループ（論理ブロック）を生成します。
 *
 * @param {string} [operator='AND'] グループ内の論理演算子（'AND' または 'OR'）
 * @returns {WhereGroup} WHEREグループオブジェクト
 *
 * @typedef {Object} WhereGroup
 * @property {'group'} type ノード種別
 * @property {string} operator 子要素を結合する論理演算子
 * @property {Array<WhereNode>} children 子ノード一覧
 */
function createWhereGroup(operator) {
    return {
        type: 'group',
        operator: operator || 'AND',
        children: []
    };
}

/**
 * 通常の比較条件（=など）を追加します。
 *
 * @param {WhereGroup} group 追加先のWHEREグループ
 * @param {string} clause SQL条件句（例: 'col = ?'）
 * @param {*} value バインド値（null / undefined の場合は追加しない）
 * @returns {void}
 */
function addCondition(group, clause, value) {
    if (value === null || value === undefined) {
        return;
    }
    group.children.push({
        type: 'condition',
        clause: clause,
        values: [value]
    });
}

/**
 * 通常の比較条件（=など）を追加します。
 * condition が true の場合のみ条件を追加します。
 *
 * @param {WhereGroup} group 追加先のWHEREグループ
 * @param {boolean} condition 条件追加判定（false の場合は追加しない）
 * @param {string} clause SQL条件句（例: 'col = ?'）
 * @param {*} value バインド値
 * @returns {void}
 */
function addConditionIf(group, condition, clause, value) {
    if (condition !== true) {
        return;
    }
    addCondition(group, clause, value);
}

/**
 * LIKE条件を追加します。
 *
 * @param {WhereGroup} group WHEREグループ
 * @param {*} value 検索値（null / undefined / 空文字は無視）
 * @param {string} column カラム名
 * @param {'contains'|'prefix'|'suffix'|'exact'} [matchType='contains'] 一致方式
 * @returns {void}
 */
function addLikeCondition(group, value, column, matchType) {
    if (value === null || value === undefined || value === '') {
        return;
    }
    var likeValue;
    switch (matchType || 'contains') {
        case 'prefix':
            likeValue = value + '%';
            break;
        case 'suffix':
            likeValue = '%' + value;
            break;
        case 'exact':
            likeValue = value;
            break;
        case 'contains':
        default:
            likeValue = '%' + value + '%';
            break;
    }
    group.children.push({
        type: 'condition',
        clause: column + ' LIKE ?',
        values: [likeValue]
    });
}

/**
 * IN条件を追加します。
 *
 * @param {WhereGroup} group WHEREグループ
 * @param {Array<*>} values 検索値配列（空配列の場合は追加しない）
 * @param {string} column カラム名
 * @returns {void}
 */
function addInCondition(group, values, column) {
    if (!values || values.length === 0) {
        return;
    }
    var placeholders = [];
    for (var i = 0; i < values.length; i++) {
        placeholders.push('?');
    }
    group.children.push({
        type: 'condition',
        clause: column + ' IN (' + placeholders.join(', ') + ')',
        values: values
    });
}

/**
 * BETWEEN条件を追加します。
 *
 * @param {WhereGroup} group WHEREグループ
 * @param {*} from 開始値
 * @param {*} to 終了値
 * @param {string} column カラム名
 * @returns {void}
 */
function addBetweenCondition(group, from, to, column) {
    if (from === null || from === undefined ||
        to === null || to === undefined) {
        return;
    }
    group.children.push({
        type: 'condition',
        clause: column + ' BETWEEN ? AND ?',
        values: [from, to]
    });
}

/**
 * IS NULL 条件を追加します。
 *
 * @param {WhereGroup} group WHEREグループ
 * @param {*} condition 条件追加判定（true の場合に追加）
 * @param {string} column カラム名
 * @returns {void}
 */
function addIsNullCondition(group, condition, column) {
    if (!condition) {
        return;
    }
    group.children.push({
        type: 'condition',
        clause: column + ' IS NULL',
        values: []
    });
}

/**
 * IS NOT NULL 条件を追加します。
 *
 * @param {WhereGroup} group WHEREグループ
 * @param {*} condition 条件追加判定（true の場合に追加）
 * @param {string} column カラム名
 * @returns {void}
 */
function addIsNotNullCondition(group, condition, column) {
    if (!condition) {
        return;
    }
    group.children.push({
        type: 'condition',
        clause: column + ' IS NOT NULL',
        values: []
    });
}

/**
 * チェックボックス値検索用のLIKEパターンを生成します。
 *
 * @param {*} value チェックボックス値
 * @returns {string} LIKE検索用パターン
 */
function toCheckboxLikePattern(value) {
    return '%'
        + CHECKBOX_VALUE_SEPARATOR
        + String(value)
        + CHECKBOX_VALUE_SEPARATOR
        + '%';
}

/**
 * DBカラムの区切り文字で保持されたチェックボックス値に対して、
 * 「いずれかを含む」検索条件（OR条件）を追加します。
 *
 * @param {WhereGroup} group WHEREグループ
 * @param {Array<*>} values 検索値配列
 * @param {string} column カラム名
 * @returns {void}
 */
function addCheckboxCondition(group, values, column) {
    if (!values || values.length === 0) {
        return;
    }
    var orGroup = addGroup(group, 'OR');
    for (var i = 0; i < values.length; i++) {
        addCondition(
            orGroup,
            "CONCAT('"
                + CHECKBOX_VALUE_SEPARATOR
                + "', CONCAT("
                + column
                + ", '"
                + CHECKBOX_VALUE_SEPARATOR
                + "')) LIKE ? escape '$'",
            toCheckboxLikePattern(values[i])
        );
    }
}

/**
 * DBカラムの区切り文字で保持されたチェックボックス値に対して、
 * 「すべて含まない」検索条件（AND条件）を追加します。
 *
 * @param {WhereGroup} group WHEREグループ
 * @param {Array<*>} values 検索値配列
 * @param {string} column カラム名
 * @returns {void}
 */
function addNotCheckboxCondition(group, values, column) {
    if (!values || values.length === 0) {
        return;
    }
    var andGroup = addGroup(group, 'AND');
    for (var i = 0; i < values.length; i++) {
        addCondition(
            andGroup,
            "CONCAT('"
                + CHECKBOX_VALUE_SEPARATOR
                + "', CONCAT("
                + column
                + ", '"
                + CHECKBOX_VALUE_SEPARATOR
                + "')) NOT LIKE ? escape '$'",
            toCheckboxLikePattern(values[i])
        );
    }
}

/**
 * 子グループ（括弧）を追加します。
 *
 * @param {WhereGroup} parentGroup 親グループ
 * @param {string} [operator='AND'] 子グループ内の論理演算子
 * @returns {WhereGroup} 生成された子グループ
 */
function addGroup(parentGroup, operator) {
    var group = createWhereGroup(operator);
    parentGroup.children.push(group);
    return group;
}

/**
 * WHERE句のSQL文字列を生成し、params配列にバインド値を追加します。
 *
 * ・再帰的にグループを展開
 * ・condition はそのままSQLに追加
 * ・group は括弧で囲む
 * ・values は params に順序通り追加
 *
 * @param {WhereGroup} group WHEREグループ
 * @param {Array<*>} params バインドパラメータ格納配列（副作用で追加される）
 * @returns {string} WHERE句（条件部分のみ）
 */
function buildWhereSql(group, params) {
    if (!group.children || group.children.length === 0) {
        return '';
    }
    var parts = [];
    for (var i = 0; i < group.children.length; i++) {
        var child = group.children[i];
        if (child.type === 'condition') {
            parts.push(child.clause);
            for (var j = 0; j < child.values.length; j++) {
                params.push(child.values[j]);
            }
        } else if (child.type === 'group') {
            var groupSql = buildWhereSql(child, params);
            if (groupSql) {
                parts.push('(' + groupSql + ')');
            }
        }
    }
    return parts.join(' ' + group.operator + ' ');
}

```

#### サーバJS ライブラリ: TLN_ANALYZE_COMMON (共通JavaScript_リポジトリ分析共通部品)

```javascript
/**
 * TLN_ANALYZE_COMMON : 共通JavaScript_リポジトリ分析共通部品
 *
 * 最終更新：　TALON_ANALYZE_V2_0_1
 * @version   2024/03/25
 */

//----------------------------------------------
function tln_com_datetime2string(obj) {
    return (obj.getYear()+1900) + "-" +  tln_com_zpad2(obj.getMonth()+1) + "-" + tln_com_zpad2(obj.getDate()) + " " + tln_com_zpad2(obj.getHours()) + ":" + tln_com_zpad2(obj.getMinutes()) + ":" + tln_com_zpad2(obj.getSeconds());
}
function tln_com_zpad2(str) {
    return ( '0' + str ).slice( -2 );
}
function tln_com_nowdate() {
    var sysDate = new java.util.Date();
    return sysDate;
}
function tln_com_escape(val) {
    var toStr = Object.prototype.toString;
    var tType = toStr.call( val ).slice(8, -1).toUpperCase();
    if (tType == 'STRING' ) {
        return val.replace( /'/g , "''" );
    } else {
        return val;
    }
}
function tln_com_func_id() {
    var lineDataMap = TALON.getUserInfoMap();
    var _FUNC_ID = getMapVal( lineDataMap , 'FUNC_ID' );
    return _FUNC_ID;
}
function tln_com_user_id() {
    var lineDataMap = TALON.getUserInfoMap();
    var _USER_ID = getMapVal( lineDataMap , 'USER_ID' );
    return _USER_ID;
}



//-------------------------------------------
function tln_insertByMap(tbl, lst ,name) {
    if ( chkLowercase() ) {
        TalonDbUtil.insertByMap( TALON.getDbConfig(),  tbl.toLowerCase(), lst , name );
    } else {
        TalonDbUtil.insertByMap( TALON.getDbConfig(),  tbl              , lst , name );
    }
}
function tln_updateByMap(tbl, lst ,name ,where) {
    if ( chkLowercase() ) {
        TalonDbUtil.updateByMap( TALON.getDbConfig(),  tbl.toLowerCase(), lst , name , where);
    } else {
        TalonDbUtil.updateByMap( TALON.getDbConfig(),  tbl              , lst , name , where);
    }
}
function tln_deleteByMap(tbl, lst ,name) {
    if ( chkLowercase() ) {
        TalonDbUtil.deleteByMap( TALON.getDbConfig(),  tbl.toLowerCase(), lst , name );
    } else {
        TalonDbUtil.deleteByMap( TALON.getDbConfig(),  tbl              , lst , name );
    }
}



//-------------------------------------------
function getMapVal(map , id) {
    var _rec = null;
    _rec = map[id];
    if (_rec == null) {
        _rec = map[id.toLowerCase()];
    }
    return _rec;
}
function setMapVal(map , id , val) {
    if ( TALON.getDbConfig().isPostgres() ) {
        map[ id.toLowerCase() ]   = val;
    } else {
        map[ id ]   = val;
    }
}
function getBindVal(key) {
    var _rec = null;
    if ( TALON.getDbConfig().isPostgres() ) {
        _rec = TALON.getBindValue( key.toLowerCase() );
    } else {
        _rec = TALON.getBindValue( key );
    }
    return _rec;
}
function removeBindVal(key) {
    if ( TALON.getDbConfig().isPostgres() ) {
        TALON.removeBindValue( key.toLowerCase() );
    } else {
        TALON.removeBindValue( key );
    }
}
function putBindVal(key , val) {
    if ( TALON.getDbConfig().isPostgres() ) {
        TALON.putBindValue( key.toLowerCase() , val );
    } else {
        TALON.putBindValue( key , val );
    }
}
function chkLowercase() {
    if ( TALON.getDbConfig().isPostgres() ) {
        return true;
    } else if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(),  "SELECT COUNT(*) AS CNT FROM TLN_M_NAME_MANAGER WHERE BINARY TABLE_NAME = BINARY 'TLN_ANALYZE_INFO' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal( lineDataMap , 'CNT' );
        if (_CNT == 0) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}
function editLowList(obj) {
    if ( TALON.getDbConfig().isPostgres() ) {
        for(var lop = 0; lop < obj.length; lop++) {
            obj[lop] = obj[lop].toLowerCase();
        }
    }
    return obj;
}
// * function tln_getSysdate() {
// *     var sql = "SELECT TLN_SYSDATE() AS NOWDATE FROM TLN_M_HANYO_CODE_MAIN " +
// *               "WHERE SIKIBETU_CODE LIKE 'TLN_ANALYZE_ONE' ";
// *     var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );
// *     var lineDataMap = itemSelectList[0];
// *     var _NOWDATE   = getMapVal( lineDataMap , 'NOWDATE' );
// *     return _NOWDATE;
// * }
function tln_get_sysdate_created_date() {
    var obj = tln_com_nowdate();
    // * if ( TALON.getDbConfig().isPostgres() ) {
    // *     return (obj.getYear()+1900) + "-" +  tln_com_zpad2(obj.getMonth()+1) + "-" + tln_com_zpad2(obj.getDate()) + "T" + tln_com_zpad2(obj.getHours()) + ":" + tln_com_zpad2(obj.getMinutes()) + ":" + tln_com_zpad2(obj.getSeconds());
    // * } else {
    // *     return (obj.getYear()+1900) + "-" +  tln_com_zpad2(obj.getMonth()+1) + "-" + tln_com_zpad2(obj.getDate()) + " " + tln_com_zpad2(obj.getHours()) + ":" + tln_com_zpad2(obj.getMinutes()) + ":" + tln_com_zpad2(obj.getSeconds());
    // * }
    // * return (obj.getYear()+1900) + "/" +  tln_com_zpad2(obj.getMonth()+1) + "/" + tln_com_zpad2(obj.getDate()) + " " + tln_com_zpad2(obj.getHours()) + ":" + tln_com_zpad2(obj.getMinutes()) + ":" + tln_com_zpad2(obj.getSeconds());
    return new java.util.Date();
}




//----------------------------------------------
var itemColNameTbl_TLN_ANALYZE_INFO = [
      'FUNC_ID'
    , 'FUNC_SEQ'
    , 'FUNC_KBN'
    , 'COL_NAME'
    , 'OPT_SORT'
    , 'EVENT_TYPE'
    , 'DATA_TYPE'
    , 'MOCK_SEQ'
    , 'SEQ'
    , 'CHR_TEXT1'
    , 'CHR_TEXT2'
    , 'CREATED_DATE'
    , 'CREATED_BY'
    , 'CREATED_PRG_NM'
    , 'UPDATED_DATE'
    , 'UPDATED_BY'
    , 'UPDATED_PRG_NM'
];
itemColNameTbl_TLN_ANALYZE_INFO = editLowList(itemColNameTbl_TLN_ANALYZE_INFO);
//----------------------------------------------
var tableName_TLN_ANALYZE_INFO = 'TLN_ANALYZE_INFO';
if ( chkLowercase() ) {
    tableName_TLN_ANALYZE_INFO = tableName_TLN_ANALYZE_INFO.toLowerCase()
}
//----------------------------------------------
var tableName_TLN_ANALYZE_INFO_LOG = 'TLN_ANALYZE_INFO_LOG';
if ( chkLowercase() ) {
    tableName_TLN_ANALYZE_INFO_LOG = tableName_TLN_ANALYZE_INFO_LOG.toLowerCase()
}
//----------------------------------------------
function _tln_create_analyze_info( itemDataList ) {
    TalonDbUtil.insertByMap( TALON.getDbConfig() , tableName_TLN_ANALYZE_INFO, itemDataList , itemColNameTbl_TLN_ANALYZE_INFO );
}
function _tln_update_analyze_info( itemDataList , whereList ) {
    var iCount = TalonDbUtil.updateByMap( TALON.getDbConfig() , tableName_TLN_ANALYZE_INFO, itemDataList, itemColNameTbl_TLN_ANALYZE_INFO, whereList );
}
function _tln_delete_analyze_info( itemDataList , whereList) {
    var iCount = TalonDbUtil.deleteByMap( TALON.getDbConfig(), tableName_TLN_ANALYZE_INFO, itemDataList, whereList );
}
//----------------------------------------------
function _tln_create_analyze_info_autocommit( itemDataList ) {
    TalonDbUtil.insertByMap( TALON.getSubDBConn() , tableName_TLN_ANALYZE_INFO_LOG, itemDataList , itemColNameTbl_TLN_ANALYZE_INFO );
    TalonDbUtil.commit( TALON.getSubDBConn() );
}
function _tln_update_analyze_info_autocommit( itemDataList , whereList ) {
    var iCount = TalonDbUtil.updateByMap( TALON.getSubDBConn() , tableName_TLN_ANALYZE_INFO_LOG, itemDataList, itemColNameTbl_TLN_ANALYZE_INFO, whereList );
    TalonDbUtil.commit( TALON.getSubDBConn() );
}
function _tln_delete_analyze_info_autocommit( itemDataList , whereList) {
    var iCount = TalonDbUtil.deleteByMap( TALON.getSubDBConn(), tableName_TLN_ANALYZE_INFO_LOG, itemDataList, whereList );
    TalonDbUtil.commit( TALON.getSubDBConn() );
}



//----------------------------------------------
var _tln_analyze_mock_no = 0;
function _tln_analyze_set_mock_no(val) {
    _tln_analyze_mock_no = val;
}



//----------------------------------------------
var _g_FUNC_ID  = '';
var _g_FUNC_SEQ = '';
var _g_FUNC_KBN = '';
var _g_COL_NAME = '';
var _g_OPT_SORT = '';

var _tln_analyze_log = '';

function _tln_analyze_exec_mode() {
    var _FUNC_ID = tln_com_func_id();
    if ( _FUNC_ID == 'TLN_ANALYZE_TEST01' || _FUNC_ID == 'TLN_ANALYZE_TEST02' || _FUNC_ID == 'TLN_ANALYZE_TEST15' ) {
        return 'DEBUG';
    } else {
        return '';
    }
}

function _tln_analyze_js_init(_FUNC_ID, _FUNC_SEQ, _COL_NAME, _FUNC_KBN, _OPT_SORT) {
    var _my_USER_ID = tln_com_user_id();
    var _my_FUNC_ID = tln_com_func_id();
    var _SYSDATE    = tln_get_sysdate_created_date();    //tln_com_datetime2string( tln_com_nowdate() );

    _g_FUNC_ID  = _FUNC_ID;
    _g_FUNC_SEQ = _FUNC_SEQ;
    _g_FUNC_KBN = _FUNC_KBN;
    _g_COL_NAME = _COL_NAME;
    _g_OPT_SORT = _OPT_SORT;

    //変数の初期化
    _tln_analyze_log = '';

    //EXECUTE用のコネクションを作成（autocommit）
    TALON.createSubDBConfig();

    var itemDataList_EXECUTE = new Array();
    setMapVal( itemDataList_EXECUTE , 'FUNC_ID'         , _g_FUNC_ID );
    setMapVal( itemDataList_EXECUTE , 'FUNC_SEQ'        , _g_FUNC_SEQ );
    setMapVal( itemDataList_EXECUTE , 'FUNC_KBN'        , _g_FUNC_KBN );
    setMapVal( itemDataList_EXECUTE , 'COL_NAME'        , _g_COL_NAME );
    setMapVal( itemDataList_EXECUTE , 'OPT_SORT'        , _g_OPT_SORT );
    setMapVal( itemDataList_EXECUTE , 'EVENT_TYPE'      , 'EXECUTE'   );
    setMapVal( itemDataList_EXECUTE , 'DATA_TYPE'       , 'ENGINE'    );
    setMapVal( itemDataList_EXECUTE , 'SEQ'             ,  0          );

    var whereList_EXECUTE = new Array();
    if ( TALON.getDbConfig().isPostgres() ) {
        whereList_EXECUTE.push( [ null, '=' , 'func_id'  ] );
        whereList_EXECUTE.push( [ null, '=' , 'func_seq' ] );
        whereList_EXECUTE.push( [ null, '=' , 'func_kbn' ] );
        whereList_EXECUTE.push( [ null, '=' , 'col_name' ] );
        whereList_EXECUTE.push( [ null, '=' , 'opt_sort' ] );
        whereList_EXECUTE.push( [ null, '=' , 'event_type' ] );
        whereList_EXECUTE.push( [ null, '=' , 'data_type'  ] );
        whereList_EXECUTE.push( [ null, '=' , 'mock_seq'   ] );
        whereList_EXECUTE.push( [ null, '=' , 'seq' ] );
    } else {
        whereList_EXECUTE.push( [ null, '=' , 'FUNC_ID'  ] );
        whereList_EXECUTE.push( [ null, '=' , 'FUNC_SEQ' ] );
        whereList_EXECUTE.push( [ null, '=' , 'FUNC_KBN' ] );
        whereList_EXECUTE.push( [ null, '=' , 'COL_NAME' ] );
        whereList_EXECUTE.push( [ null, '=' , 'OPT_SORT' ] );
        whereList_EXECUTE.push( [ null, '=' , 'EVENT_TYPE' ] );
        whereList_EXECUTE.push( [ null, '=' , 'DATA_TYPE'  ] );
        whereList_EXECUTE.push( [ null, '=' , 'MOCK_SEQ'   ] );
        whereList_EXECUTE.push( [ null, '=' , 'SEQ' ] );
    }

    //モック番号が0以外の場合、既に登録されているモック番号0のデータ（モックが作られていなかった時のログ）は削除する
    setMapVal( itemDataList_EXECUTE, 'MOCK_SEQ'   , 0 );
    _tln_delete_analyze_info_autocommit( itemDataList_EXECUTE , whereList_EXECUTE ); 

    //EXECUTEデータの削除
    setMapVal( itemDataList_EXECUTE, 'MOCK_SEQ'   , _tln_analyze_mock_no );
    _tln_delete_analyze_info_autocommit( itemDataList_EXECUTE , whereList_EXECUTE ); 

    setMapVal( itemDataList_EXECUTE , 'CHR_TEXT1'        , '※ERROR※' );        //初期時にERRORとして更新し、正常終了時にクリアを行う
    setMapVal( itemDataList_EXECUTE , 'CREATED_DATE'     , _SYSDATE    );
    setMapVal( itemDataList_EXECUTE , 'CREATED_BY'       , _my_USER_ID );
    setMapVal( itemDataList_EXECUTE , 'CREATED_PRG_NM'   , _my_FUNC_ID );
    setMapVal( itemDataList_EXECUTE , 'UPDATED_DATE'     , _SYSDATE    );
    setMapVal( itemDataList_EXECUTE , 'UPDATED_BY'       , _my_USER_ID );
    setMapVal( itemDataList_EXECUTE , 'UPDATED_PRG_NM'   , _my_FUNC_ID );

    //EXECUTEデータの作成
    _tln_create_analyze_info_autocommit(itemDataList_EXECUTE);

    var itemDataList = new Array();
    setMapVal( itemDataList , 'FUNC_ID'         , _g_FUNC_ID  );
    setMapVal( itemDataList , 'FUNC_SEQ'        , _g_FUNC_SEQ );
    setMapVal( itemDataList , 'FUNC_KBN'        , _g_FUNC_KBN );
    setMapVal( itemDataList , 'COL_NAME'        , _g_COL_NAME );
    setMapVal( itemDataList , 'OPT_SORT'        , _g_OPT_SORT );
    setMapVal( itemDataList , 'DATA_TYPE'       , 'ENGINE'    );
    setMapVal( itemDataList , 'MOCK_SEQ'        , _tln_analyze_mock_no );
    
    var whereList = new Array();
    if ( TALON.getDbConfig().isPostgres() ) {
        whereList.push( [ null, '=' , 'func_id' ] );
        whereList.push( [ null, '=' , 'func_seq' ] );
        whereList.push( [ null, '=' , 'func_kbn' ] );
        whereList.push( [ null, '=' , 'col_name' ] );
        whereList.push( [ null, '=' , 'opt_sort' ] );
        whereList.push( [ null, '=' , 'data_type' ] );
        whereList.push( [ null, '=' , 'mock_seq' ] );
    } else {
        whereList.push( [ null, '=' , 'FUNC_ID' ] );
        whereList.push( [ null, '=' , 'FUNC_SEQ' ] );
        whereList.push( [ null, '=' , 'FUNC_KBN' ] );
        whereList.push( [ null, '=' , 'COL_NAME' ] );
        whereList.push( [ null, '=' , 'OPT_SORT' ] );
        whereList.push( [ null, '=' , 'DATA_TYPE' ] );
        whereList.push( [ null, '=' , 'MOCK_SEQ' ] );
    }
    
    //データの初期化
    _tln_delete_analyze_info( itemDataList , whereList ) 

    /*
    var sql = "DELETE FROM TLN_ANALYZE_INFO " + 
              "WHERE FUNC_ID     = '" + tln_com_escape(_g_FUNC_ID)  + "' " + 
              "  AND FUNC_SEQ    =  " + _g_FUNC_SEQ                 + "  " + 
              "  AND FUNC_KBN    = '" + tln_com_escape(_g_FUNC_KBN) + "' " + 
              "  AND COL_NAME    = '" + tln_com_escape(_g_COL_NAME) + "' " + 
              "  AND OPT_SORT    =  " + _g_OPT_SORT                 + " " + 
              "  AND DATA_TYPE   = '" + 'ENGINE'                    + "' " + 
              "  AND MOCK_SEQ    =  " + _tln_analyze_mock_no        + "  " + 
              "  AND EVENT_TYPE <> '" + 'EXECUTE'                   + "' " + 
              "";
     
    var iCount = TalonDbUtil.delete( TALON.getDbConfig() , sql );
    */
}

function _tln_analyze_js_end() {
    var _my_USER_ID = tln_com_user_id();
    var _my_FUNC_ID = tln_com_func_id();
    var _SYSDATE    = tln_get_sysdate_created_date();    //tln_com_datetime2string( tln_com_nowdate() );

    var itemDataList_EXECUTE = new Array();
    setMapVal( itemDataList_EXECUTE , 'FUNC_ID'         , _g_FUNC_ID  );
    setMapVal( itemDataList_EXECUTE , 'FUNC_SEQ'        , _g_FUNC_SEQ );
    setMapVal( itemDataList_EXECUTE , 'FUNC_KBN'        , _g_FUNC_KBN );
    setMapVal( itemDataList_EXECUTE , 'COL_NAME'        , _g_COL_NAME );
    setMapVal( itemDataList_EXECUTE , 'OPT_SORT'        , _g_OPT_SORT );
    setMapVal( itemDataList_EXECUTE , 'EVENT_TYPE'      , 'EXECUTE'   );
    setMapVal( itemDataList_EXECUTE , 'DATA_TYPE'       , 'ENGINE'    );
    setMapVal( itemDataList_EXECUTE , 'MOCK_SEQ'        , _tln_analyze_mock_no );
    setMapVal( itemDataList_EXECUTE , 'SEQ'             ,  0 );
    setMapVal( itemDataList_EXECUTE , 'CHR_TEXT1'       , '' );

    var whereList_EXECUTE = new Array();
    if ( TALON.getDbConfig().isPostgres() ) {
        whereList_EXECUTE.push( [ null, '=' , 'func_id' ] );
        whereList_EXECUTE.push( [ null, '=' , 'func_seq' ] );
        whereList_EXECUTE.push( [ null, '=' , 'func_kbn' ] );
        whereList_EXECUTE.push( [ null, '=' , 'col_name' ] );
        whereList_EXECUTE.push( [ null, '=' , 'opt_sort' ] );
        whereList_EXECUTE.push( [ null, '=' , 'event_type' ] );
        whereList_EXECUTE.push( [ null, '=' , 'data_type' ] );
        whereList_EXECUTE.push( [ null, '=' , 'mock_seq' ] );
        whereList_EXECUTE.push( [ null, '=' , 'seq' ] );
    } else {
        whereList_EXECUTE.push( [ null, '=' , 'FUNC_ID' ] );
        whereList_EXECUTE.push( [ null, '=' , 'FUNC_SEQ' ] );
        whereList_EXECUTE.push( [ null, '=' , 'FUNC_KBN' ] );
        whereList_EXECUTE.push( [ null, '=' , 'COL_NAME' ] );
        whereList_EXECUTE.push( [ null, '=' , 'OPT_SORT' ] );
        whereList_EXECUTE.push( [ null, '=' , 'EVENT_TYPE' ] );
        whereList_EXECUTE.push( [ null, '=' , 'DATA_TYPE' ] );
        whereList_EXECUTE.push( [ null, '=' , 'MOCK_SEQ' ] );
        whereList_EXECUTE.push( [ null, '=' , 'SEQ' ] );
    }
    //EXECUTEデータの初期化
    _tln_update_analyze_info_autocommit( itemDataList_EXECUTE , whereList_EXECUTE ) 
}

function _tln_analyze_set_data(_DATA_TYPE , _NAME , _EVENT_TYPE) {
    _tln_analyze_set_data_main(_DATA_TYPE , _NAME , '' , _EVENT_TYPE)
}

function _tln_analyze_set_data_item(_DATA_TYPE , _NAME , _ITEM , _EVENT_TYPE) {
    _tln_analyze_set_data_main(_DATA_TYPE , _NAME , _ITEM , _EVENT_TYPE)
}

function _tln_analyze_set_data_main(_DATA_TYPE , _NAME , _ITEM , _EVENT_TYPE) {

    if (_NAME != '' ) {
        //TABLE名を分割して登録する（_NAME）
        var _NAME_ARRAY = _NAME.split(';');
        for (var iTable = 0; iTable < _NAME_ARRAY.length; iTable++) {
            _NAME = _NAME_ARRAY[iTable];

            var _ITEM_ARRAY = _ITEM.split(';');
            if (_ITEM_ARRAY.length > 0) {
                for (var iItem = 0; iItem < _ITEM_ARRAY.length; iItem++) {
                    _ITEM = _ITEM_ARRAY[iItem];
                   _tln_analyze_set_data_exec(_DATA_TYPE , _NAME , _ITEM , _EVENT_TYPE);
                }
            } else {
               _tln_analyze_set_data_exec(_DATA_TYPE , _NAME , _ITEM , _EVENT_TYPE);
            }
        }
    } else {
        var _ITEM_ARRAY = _ITEM.split(';');
        if (_ITEM_ARRAY.length > 0) {
            for (var iItem = 0; iItem < _ITEM_ARRAY.length; iItem++) {
                _ITEM = _ITEM_ARRAY[iItem];
               _tln_analyze_set_data_exec(_DATA_TYPE , _NAME , _ITEM , _EVENT_TYPE);
            }
        } else {
           //TABLE も ITEM も空の場合
           //_tln_analyze_set_data_exec(_DATA_TYPE , _NAME , _ITEM , _EVENT_TYPE);
        }
    }
}

function _tln_analyze_set_data_exec(_DATA_TYPE , _NAME , _ITEM , _EVENT_TYPE) {
    var _my_USER_ID = tln_com_user_id();
    var _my_FUNC_ID = tln_com_func_id();
    var _SYSDATE    = tln_get_sysdate_created_date();    //tln_com_datetime2string( tln_com_nowdate() );

    //DB毎にCREATE文作成時に付与される囲い文字列を置換
    var _NAME = _NAME.replace( /`/g , '' );

    //同じテーブル名と項目名が有る場合は更新しない
    var sql = "SELECT COUNT(*) AS CNT FROM TLN_ANALYZE_INFO " +
              "WHERE FUNC_ID    = '" + tln_com_escape(_g_FUNC_ID )   + "' " +
              "  AND FUNC_SEQ   =  " + tln_com_escape(_g_FUNC_SEQ)   + "  " +
              "  AND FUNC_KBN   = '" + tln_com_escape(_g_FUNC_KBN)   + "' " +
              "  AND COL_NAME   = '" + tln_com_escape(_g_COL_NAME)   + "' " +
              "  AND OPT_SORT   =  " + tln_com_escape(_g_OPT_SORT)   + "  " +
              "  AND EVENT_TYPE = '" + tln_com_escape(_EVENT_TYPE) + "' " + 
              "  AND DATA_TYPE  = '" + tln_com_escape(_DATA_TYPE ) + "' " + 
              "  AND MOCK_SEQ   =  " + _tln_analyze_mock_no  + "  ";
    if ( TALON.getDbConfig().isOra() ) {
        if ( (_NAME == '') || (_NAME == null) ) {
            sql = sql + "  AND TLN_ANALYZE_CONV_CHAR( CHR_TEXT1 ) is null ";
        } else {
            sql = sql + "  AND TLN_ANALYZE_CONV_CHAR( CHR_TEXT1 )  = '" + tln_com_escape(_NAME) + "' ";
        }
        if ( (_ITEM == '') || (_ITEM == null) ) {
            sql = sql + "  AND TLN_ANALYZE_CONV_CHAR( CHR_TEXT2 ) is null ";
        } else {
            sql = sql + "  AND TLN_ANALYZE_CONV_CHAR( CHR_TEXT2 ) = '" + tln_com_escape(_ITEM) + "' ";
        }
    } else {
        sql = sql + "  AND CHR_TEXT1  = '" + tln_com_escape(_NAME) + "' ";
        sql = sql + "  AND CHR_TEXT2  = '" + tln_com_escape(_ITEM) + "' ";
    }
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );
    var lineDataMap = itemSelectList[0];
    var _CNT   = getMapVal( lineDataMap , 'CNT' );

    if ( _CNT == 0 ) {
        var _MODE = 'I';
    } else {
        //既に存在するので何もしない
        var _MODE = 'X';
    }

    //-------------------
    var sql = "SELECT CASE WHEN MAX(SEQ) IS NULL THEN 0 ELSE MAX(SEQ) END + 1 AS MAX_SEQ , COUNT(*) AS CNT FROM TLN_ANALYZE_INFO " +
              "WHERE FUNC_ID    = '" + tln_com_escape(_g_FUNC_ID ) + "' " +
              "  AND FUNC_SEQ   =  " + tln_com_escape(_g_FUNC_SEQ) + "  " +
              "  AND COL_NAME   = '" + tln_com_escape(_g_COL_NAME) + "' " +
              "  AND FUNC_KBN   = '" + tln_com_escape(_g_FUNC_KBN) + "' " +
              "  AND OPT_SORT   =  " + tln_com_escape(_g_OPT_SORT) + "  " +
              "  AND EVENT_TYPE = '" + tln_com_escape(_EVENT_TYPE) + "' " + 
              "  AND DATA_TYPE  = '" + tln_com_escape(_DATA_TYPE ) + "' " + 
              "  AND MOCK_SEQ   = '" + _tln_analyze_mock_no + "' "; 

    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );
    var lineDataMap = itemSelectList[0];
    var _SEQ  = getMapVal( lineDataMap , 'MAX_SEQ' );

    //-------------------
    var itemDataList = new Array();
    setMapVal( itemDataList , 'FUNC_ID'         , _g_FUNC_ID  );
    setMapVal( itemDataList , 'FUNC_SEQ'        , _g_FUNC_SEQ );
    setMapVal( itemDataList , 'FUNC_KBN'        , _g_FUNC_KBN );
    setMapVal( itemDataList , 'COL_NAME'        , _g_COL_NAME );
    setMapVal( itemDataList , 'OPT_SORT'        , _g_OPT_SORT );
    setMapVal( itemDataList , 'EVENT_TYPE'      , _EVENT_TYPE );
    setMapVal( itemDataList , 'DATA_TYPE'       , _DATA_TYPE  );
    setMapVal( itemDataList , 'MOCK_SEQ'        , _tln_analyze_mock_no );
    setMapVal( itemDataList , 'SEQ'             , _SEQ  );
    setMapVal( itemDataList , 'CHR_TEXT1'       , _NAME );
    setMapVal( itemDataList , 'CHR_TEXT2'       , _ITEM );
    setMapVal( itemDataList , 'UPDATED_DATE'    , _SYSDATE );
    setMapVal( itemDataList , 'UPDATED_BY'      , _my_USER_ID );
    setMapVal( itemDataList , 'UPDATED_PRG_NM'  , _my_FUNC_ID );

    if (_MODE == 'I' ) {
        setMapVal( itemDataList , 'CREATED_DATE'     , _SYSDATE );
        setMapVal( itemDataList , 'CREATED_BY'       , _my_USER_ID );
        setMapVal( itemDataList , 'CREATED_PRG_NM'   , _my_FUNC_ID );

        _tln_create_analyze_info(itemDataList);
    } 
    if (_MODE == 'U' ) {
        var whereList = new Array();
        if ( TALON.getDbConfig().isPostgres() ) {
            whereList.push( [ null, '=' , 'func_id' ] );
            whereList.push( [ null, '=' , 'func_seq' ] );
            whereList.push( [ null, '=' , 'func_kbn' ] );
            whereList.push( [ null, '=' , 'col_name' ] );
            whereList.push( [ null, '=' , 'opt_sort' ] );
            whereList.push( [ null, '=' , 'event_type' ] );
            whereList.push( [ null, '=' , 'data_type' ] );
            whereList.push( [ null, '=' , 'mock_seq' ] );
            whereList.push( [ null, '=' , 'seq' ] );
        } else {
            whereList.push( [ null, '=' , 'FUNC_ID' ] );
            whereList.push( [ null, '=' , 'FUNC_SEQ' ] );
            whereList.push( [ null, '=' , 'FUNC_KBN' ] );
            whereList.push( [ null, '=' , 'COL_NAME' ] );
            whereList.push( [ null, '=' , 'OPT_SORT' ] );
            whereList.push( [ null, '=' , 'EVENT_TYPE' ] );
            whereList.push( [ null, '=' , 'DATA_TYPE' ] );
            whereList.push( [ null, '=' , 'MOCK_SEQ' ] );
            whereList.push( [ null, '=' , 'SEQ' ] );
        }
        _tln_update_analyze_info( itemDataList , whereList ) 
    }
}



//----------------------------------------------

var _tln_analyze_mock = null;

function _tln_analyze_mock_data( mock ) {
    eval( "_tln_analyze_mock = " + mock ) ;
}



//----------------------------------------------
function _tln_analyze_select_table_name(_SQL) {
    if (_SQL.length > 0) {
        var _CHECK = 0;
        var _IDX   = 0;

        var _SQL_TABLE = new Array();
        var _SQL_ARRAY = _SQL.replace( /\t/g , ' ' ).replace( /\r?\n/g , ' ' ).split(' ');
        for (var iName = 0; iName < _SQL_ARRAY.length; iName++) {
            if (_SQL_ARRAY[iName] != '' ) {
                if (_CHECK == 1) {
                    if (_SQL_ARRAY[iName].substring(0, 1) != '(') {
                        _SQL_TABLE[_IDX] = _SQL_ARRAY[iName];
                        _IDX++
                    }
                    _CHECK = 0;
                }
                if (_SQL_ARRAY[iName].toUpperCase() == 'FROM' ) {
                    _CHECK = 1;
                }
                if (_SQL_ARRAY[iName].toUpperCase() == 'JOIN' ) {
                    _CHECK = 1;
                }
            }
        }

        return _SQL_TABLE.join(";");
    } else {
        return "";
    }
}

function _tln_analyze_insert_table_name(_SQL) {
    if (_SQL.length > 0) {
        var _CHECK = 0;
        var _IDX   = 0;

        var _SQL_TABLE = new Array();
        var _SQL_ARRAY = _SQL.replace( /\t/g , ' ' ).replace( /\r?\n/g , ' ' ).split(' ');
        for (var iName = 0; iName < _SQL_ARRAY.length; iName++) {
            if (_SQL_ARRAY[iName] != '' ) {
                if (_CHECK == 2) {
                    _SQL_TABLE[_IDX] = _SQL_ARRAY[iName];
                    _IDX++

                    _CHECK = 0;
                }

                if (_CHECK == 1 ) {
                    if (_SQL_ARRAY[iName].toUpperCase() == 'INTO' ) {
                        _CHECK = 2;
                    } else {
                        //INSERT の次が INTOでない場合はリセット
                        _CHECK = 0;
                    }
                }
                if (_SQL_ARRAY[iName].toUpperCase() == 'INSERT' ) {
                    _CHECK = 1;
                }
            }
        }

        return _SQL_TABLE.join(";");
    } else {
        return "";
    }
}

function _tln_analyze_update_table_name(_SQL) {
    if (_SQL.length > 0) {
        var _CHECK = 0;
        var _IDX   = 0;

        var _SQL_TABLE = new Array();
        var _SQL_ARRAY = _SQL.replace( /\t/g , ' ' ).replace( /\r?\n/g , ' ' ).split(' ');
        for (var iName = 0; iName < _SQL_ARRAY.length; iName++) {
            if (_SQL_ARRAY[iName] != '' ) {
                if (_CHECK == 1) {
                    _SQL_TABLE[_IDX] = _SQL_ARRAY[iName];
                    _IDX++

                    _CHECK = 0;
                }

                if (_SQL_ARRAY[iName].toUpperCase() == 'UPDATE' ) {
                    _CHECK = 1;
                }
            }
        }

        return _SQL_TABLE.join(";");
    } else {
        return "";
    }
}

function _tln_analyze_delete_table_name(_SQL) {
    if (_SQL.length > 0) {
        var _CHECK = 0;
        var _IDX   = 0;

        var _SQL_TABLE = new Array();
        var _SQL_ARRAY = _SQL.replace( /\t/g , ' ' ).replace( /\r?\n/g , ' ' ).split(' ');
        for (var iName = 0; iName < _SQL_ARRAY.length; iName++) {
            if (_SQL_ARRAY[iName] != '' ) {
                if (_CHECK == 1) {
                    _SQL_TABLE[_IDX] = _SQL_ARRAY[iName];
                    _IDX++

                    _CHECK = 0;
                }

                if (_SQL_ARRAY[iName].toUpperCase() == 'FROM' ) {
                    _CHECK = 1;
                }
            }
        }

        return _SQL_TABLE.join(";");
    } else {
        return "";
    }
}

function _tln_analyze_dataMap_item_name(lineDataMap) {
    var rec = '';
    for (var k in lineDataMap) {
        if (rec != '') {
            rec = rec + ';';
        }
        rec = rec + k;
    }
    return rec;
}



//----------------------------------------------
//----------------------------------------------
function _tln_analyze_js_create_analyze_data( _FUNC_ID, _FUNC_SEQ, _COL_NAME, _FUNC_KBN, _OPT_SORT, _JS_COMMON , _JS_TEXT , _MOC_NO , _MOC_TEXT , _MOC_SCRIPT) {

    putBindVal( 'TLN_ANALYZE_LOG'    , '' );
    putBindVal( 'TLN_ANALYZE_MOCK_N0', 0  );


    if ( ( _MOC_TEXT != '' ) && ( _MOC_TEXT != null ) ) {
        tln_write_log("【モックデータ】");
        _tln_analyze_mock_data(_MOC_TEXT);
    }
    if ( ( _MOC_SCRIPT != '' ) && ( _MOC_SCRIPT != null ) ) {
        tln_write_log("【モックスクリプト】");
        var conv_MOC_SCRIPT = _tln_analyze_js_script_convert( _MOC_SCRIPT );
        eval( conv_MOC_SCRIPT ) ;
    }


    //モック番号の確定（TLN_ANALYZE_INFOにはモック番号毎に分けてデータを格納する）
    //チェックがついていない場合はモック番号は０でセット
    _tln_analyze_set_mock_no(_MOC_NO);

    putBindVal( 'TLN_ANALYZE_MOCK_N0', _tln_analyze_mock_no );

    //関連データの初期化（モック番号確定後）
    _tln_analyze_js_init(_FUNC_ID, _FUNC_SEQ, _COL_NAME, _FUNC_KBN, _OPT_SORT);


    //共通ファンクション読込
    var _JS_COMMON_TEXT  = '';
    //共通JavaScriptを全てで読み込んだときに共通JavaScriptが読みこまれない現象を修正
    if (_JS_COMMON == '(全て)') {
        if( TALON.getDbConfig().isOra() ) {
            //OracleだとそのままSelectするとCLOB型項目を正常に取得できないのでTO_CHARで文字型として取得する
            var sql = "" + 
                    "SELECT KEY_CODE,TO_CHAR(NOTE) AS NOTE " + 
                    "FROM TLN_M_HANYO_CODE_MAIN " + 
                    "WHERE SIKIBETU_CODE = 'TLN_GENERAL_JAVASCRIPT_ENGINE' " + 
                    "AND KEY_CODE != 'TLN_ANALYZE_COMMON'" + //TLN_ANALYZE_COMMONまで読みこむとeval実行時に循環参照でのStackOverflowにより正常に実行されなくなる
                    "ORDER BY DSP_SORT1, KEY_CODE" //念のためソート順をログと合わせておく
                    "";
        } else {
            var sql = "" + 
                    "SELECT KEY_CODE,NOTE " + 
                    "FROM TLN_M_HANYO_CODE_MAIN " + 
                    "WHERE SIKIBETU_CODE = 'TLN_GENERAL_JAVASCRIPT_ENGINE' " + 
                    "AND KEY_CODE != 'TLN_ANALYZE_COMMON'" + //TLN_ANALYZE_COMMONまで読みこむとeval実行時に循環参照でのStackOverflowにより正常に実行されなくなる
                    "ORDER BY DSP_SORT1, KEY_CODE" //念のためソート順をログと合わせておく
                    "";
        }
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );
        for (iJSCommonAll = 0; iJSCommonAll < itemSelectList.length; iJSCommonAll++){
            var lineDataMap = itemSelectList[iJSCommonAll];
            //共通JavaScriptを複数設定したときに最後の共通JavaScriptしか読みこまれない現象を修正
            _JS_COMMON_TEXT += "\n" + getMapVal( lineDataMap , 'NOTE' );
        }
        tln_write_log("【共通ファンクション読込All】" +getMapVal( lineDataMap , 'KEY_CODE' ));
    } else {
        var _JS_COMMONS = _JS_COMMON.split('\t');
        for (var iJSCommon = 0; iJSCommon < _JS_COMMONS.length; iJSCommon++) {
            //TLN_ANALYZE_COMMONまで読みこむとeval実行時に循環参照でのStackOverflowにより正常に実行されなくなる
            if (_JS_COMMONS[iJSCommon] != '' && _JS_COMMONS[iJSCommon] != 'TLN_ANALYZE_COMMON') {
                //OracleだとそのままSelectするとCLOB型項目を正常に取得できないのでTO_CHARで文字型として取得する
                if(TALON.getDbConfig().isOra()) {
                    var sql = "" + 
                    "SELECT TO_CHAR(NOTE) AS NOTE " + 
                    "FROM TLN_M_HANYO_CODE_MAIN " + 
                    "WHERE SIKIBETU_CODE = 'TLN_GENERAL_JAVASCRIPT_ENGINE' " + 
                    "  AND KEY_CODE = '" + tln_com_escape(_JS_COMMONS[iJSCommon]) + "' " +
                    "";
                } else {
                    var sql = "" + 
                    "SELECT NOTE " + 
                    "FROM TLN_M_HANYO_CODE_MAIN " + 
                    "WHERE SIKIBETU_CODE = 'TLN_GENERAL_JAVASCRIPT_ENGINE' " + 
                    "  AND KEY_CODE = '" + tln_com_escape(_JS_COMMONS[iJSCommon]) + "' " +
                    "";
                }
                var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );
                if (itemSelectList.length > 0) {
                    var lineDataMap = itemSelectList[0];
                    //共通JavaScriptを複数設定したときに最後の共通JavaScriptしか読みこまれない現象を修正
                    _JS_COMMON_TEXT += "\n" + getMapVal( lineDataMap , 'NOTE' );
                }
                tln_write_log("【共通ファンクション読込】" + _JS_COMMONS[iJSCommon]);
            }
        }
    }
    if ( ( _JS_COMMON_TEXT != '' ) && ( _JS_COMMON_TEXT != null ) ) {
        if ( ( _JS_COMMON_TEXT != '' ) && ( _JS_COMMON_TEXT != null ) ) {
            tln_write_log("【共通ファンクション】");
            var conv_JS_TEXT = _tln_analyze_js_script_convert( _JS_COMMON_TEXT );
            eval( conv_JS_TEXT ) ;
        }
    }


    //実行ファンクション読込
    if ( ( _JS_TEXT != '' ) && ( _JS_TEXT != null ) ) {
        var conv_JS_TEXT = _tln_analyze_js_script_convert( _JS_TEXT );
        eval( conv_JS_TEXT ) ;
    }


    //実行結果ログを出力
    putBindVal( 'TLN_ANALYZE_LOG'    , _tln_analyze_log );


    //EXECUTEのデータの状態を初期化する
    _tln_analyze_js_end();

}
function _tln_analyze_js_script_convert(_script) {
    var cov_list =[
       {moto:'TALON.getConditionData'        ,saki:'tln_getConditionData'} ,
       {moto:'TALON.getBlockData_Card'       ,saki:'tln_getBlockData_Card'} ,
       {moto:'TALON.getBlockData_List'       ,saki:'tln_getBlockData_List'} ,
       {moto:'TALON.getTargetDataIndex'      ,saki:'tln_getTargetDataIndex'} ,
       {moto:'TALON.getTargetData'           ,saki:'tln_getTargetData'} ,
       {moto:'TalonDbUtil.select'            ,saki:'tln_db_select'} ,
       {moto:'TalonDbUtil.insertByMap'       ,saki:'tln_db_insertByMap'} ,
       {moto:'TalonDbUtil.insertByArray'     ,saki:'tln_db_insertByArray'} ,
       {moto:'TalonDbUtil.insert'            ,saki:'tln_db_insert'} ,
       {moto:'TalonDbUtil.updateByMap'       ,saki:'tln_db_updateByMap'} ,
       {moto:'TalonDbUtil.updateByArray'     ,saki:'tln_db_updateByArray'} ,
       {moto:'TalonDbUtil.update'            ,saki:'tln_db_update'} ,
       {moto:'TalonDbUtil.deleteByMap'       ,saki:'tln_db_deleteByMap'} ,
       {moto:'TalonDbUtil.deleteByArray'     ,saki:'tln_db_deleteByArray'} ,
       {moto:'TalonDbUtil.delete'            ,saki:'tln_db_delete'} ,
    ]

    var tmp_script = _script;

    for (var iConvScript = 0; iConvScript < cov_list.length; iConvScript++) {
        var cov = cov_list[iConvScript];
        var tmp = "tmp_script = tmp_script.replace(/" + cov.moto + "/g, '" + cov.saki + "');";
        eval(tmp);
    }

    TALON.getLogger().writeDebug('★↓↓↓↓変換後スクリプト↓↓↓↓★');
    TALON.getLogger().writeDebug(tmp_script);
    TALON.getLogger().writeDebug('★↑↑↑↑変換後スクリプト↑↑↑↑★');

    return tmp_script;
}




//----------------------------------------------
//----------------------------------------------








//----------------------------------------------
//----------------------------------------------
function tln_getBlockData_Card(block) {
    if (_tln_analyze_exec_mode() == '' ) {
        var lineDataMap = TALON.getBlockData_Card(block);
    } else {
        if (_tln_analyze_mock) {
            var lineDataMap = _tln_analyze_mock['blocks'][block-1]['blockdata'][0];
        } else {
            var lineDataMap = null;
        }
    }
    return lineDataMap;
}

function tln_getBlockData_List(block) {
    if (_tln_analyze_exec_mode() == '' ) {
        var itemBlockList = TALON.getBlockData_List(block);
    } else {
        if (_tln_analyze_mock) {
            var itemBlockList = _tln_analyze_mock['blocks'][block-1]['blockdata'];
        } else {
            var itemBlockList = null;
        }
    }
    return itemBlockList;
}

function tln_getConditionData() {
    if (_tln_analyze_exec_mode() == '' ) {
        var lineDataMap = TALON.getConditionData();
    } else {
        if (_tln_analyze_mock) {
            var lineDataMap = _tln_analyze_mock['conditions'];
        } else {
            var lineDataMap = null;
        }
    }
    return lineDataMap;
}

function tln_getTargetData() {
    if (_tln_analyze_exec_mode() == '' ) {
        var lineDataMap = TALON.getTargetData();
    } else {
        if (_tln_analyze_mock) {
            var lineDataMap = _tln_analyze_mock['targets']['targetdata'];
        } else {
            var lineDataMap = null;
        }
    }
    return lineDataMap;
}

function tln_getTargetDataIndex() {
    if (_tln_analyze_exec_mode() == '' ) {
        var irec = TALON.getTargetDataIndex();
    } else {
        if (_tln_analyze_mock) {
            var irec = _tln_analyze_mock['targets']['targetindex'];
        } else {
            var irec = null;
        }
    }
    return irec;
}




//----------------------------------------------
function tln_db_select(config, sql) {
    var _USER_ID = tln_com_user_id();
    var _FUNC_ID = tln_com_func_id();
    var _SYSDATE = tln_get_sysdate_created_date();    //tln_com_datetime2string( tln_com_nowdate() );

    var itemSelectList = TalonDbUtil.select( config , sql );
    if (_tln_analyze_exec_mode() != '' ) {
        var tmp = _tln_analyze_select_table_name(sql);

        if (itemSelectList.length == 0) {
            //データが取得できなかった時はテーブル名だけでセット
            _tln_analyze_set_data('ENGINE', tmp , 'SELECT');

        } else {
            //データが取得できた場合は、その取得情報より項目情報を取得する
            var isqTable = 0;
            var lineDataMap = itemSelectList[0];
            for (var k in lineDataMap) {
                var insCount = 0;
                var _COL_NAME = k;

                var _NAME_ARRAY = tmp.split(';');
                for (var iTable = 0; iTable < _NAME_ARRAY.length; iTable++) {
                    var _TABLE_NAME = _NAME_ARRAY[iTable];

TALON.getLogger().writeDebug('★★★★★' + _TABLE_NAME + ' : ' + _COL_NAME );

                    //TABLE-COLの組み合わせが有れば、そのテーブル名をセット
                    var sql = "" +
                        "SELECT " + 
                        " TABLE_NAME " + 
                        ",COLUMN_NAME " + 
                        "FROM TLN_M_NAME_MANAGER " + 
                        "WHERE TABLE_NAME   = '" + tln_com_escape(_TABLE_NAME) + "'" + 
                        "  AND COLUMN_NAME  = '" + tln_com_escape(_COL_NAME  ) + "'" + 
                        "";

                    var itemSelectListTABLECHK = TalonDbUtil.select( TALON.getDbConfig() , sql );

                    if ( itemSelectListTABLECHK.length == 0 ) {
                        _TABLE_NAME = '' ;
TALON.getLogger().writeDebug('★★★★★→組み合わせ無し');
                    } else {
TALON.getLogger().writeDebug('★★★★★→組み合わせ有り');
                    }
TALON.getLogger().writeDebug('★★★★★⇒' + _TABLE_NAME + ' / ' + iTable + ' / ' + _NAME_ARRAY.length + ' / ' + insCount );

                    //_TABLE_NAMEがNULLの時はINSERTしない。ただしTABLEの最後のLOOPの時insCountが0の時はNULLに関係なくINSERTする
                    if ( ( _TABLE_NAME != '' ) || ( ( (iTable + 1) == _NAME_ARRAY.length ) && ( insCount == 0 ) ) ) {
                        _tln_analyze_set_data_item('ENGINE' , _TABLE_NAME , _COL_NAME , 'SELECT');
                        insCount = insCount + 1;
                    }
                }
            }
        }

        if (tmp == '') {
            tmp = '**解析できませんでした**';
        }
        tln_write_log("【SELECT】" + tmp);
    }
    return itemSelectList;
}

function tln_db_insert(config, sql) {
    var icount = TalonDbUtil.insert( config , sql );
    if (_tln_analyze_exec_mode() != '' ) {
        var tmp = _tln_analyze_insert_table_name(sql);
        _tln_analyze_set_data('ENGINE', tmp , 'INSERT');
        if (tmp == '') {
            tmp = '**解析できませんでした**';
        }
        tln_write_log("【INSERT】" + tmp);
    }
    return icount;
}

function tln_db_insertByMap(config, table_nm , datalist, coltbl) {
    var icount = TalonDbUtil.insertByMap( config , table_nm , datalist , coltbl );
    if (_tln_analyze_exec_mode() != '' ) {
        var item_nm = _tln_analyze_dataMap_item_name(datalist);
        _tln_analyze_set_data_item('ENGINE', table_nm , item_nm , 'INSERT');
        tln_write_log("【INSERT】" + table_nm + ' / ' + item_nm);
    }
    return icount;
}

function tln_db_insertByArray(config, table_nm , datalist_array, coltbl) {
    var icount = TalonDbUtil.insertByArray( config , table_nm, datalist_array ,coltbl );
    if (_tln_analyze_exec_mode() != '' ) {
        var item_nm = _tln_analyze_dataMap_item_name(datalist_array[0]);
        _tln_analyze_set_data_item('ENGINE', table_nm , item_nm , 'INSERT');
        tln_write_log("【INSERT】" + table_nm + ' / ' + item_nm);
    }
    return icount;
}

function tln_db_update(config, sql) {
    var icount = TalonDbUtil.update( config , sql );
    if (_tln_analyze_exec_mode() != '' ) {
        var tmp = _tln_analyze_update_table_name(sql);
        _tln_analyze_set_data('ENGINE', tmp , 'UPDATE');
        if (tmp == '') {
            tmp = '**解析できませんでした**';
        }
        tln_write_log("【UPDATE】" + tmp);
    }
    return icount;
}

function tln_db_updateByMap(config, table_nm , datalist, coltbl, wherelist) {
    var icount = TalonDbUtil.updateByMap( config , table_nm , datalist ,coltbl , wherelist);
    if (_tln_analyze_exec_mode() != '' ) {
        var item_nm = _tln_analyze_dataMap_item_name(datalist);
        _tln_analyze_set_data_item('ENGINE', table_nm , item_nm , 'UPDATE');
        tln_write_log("【UPDATE】" + table_nm + ' / ' + item_nm);
    }
    return icount;
}

function tln_db_updateByArray(config, table_nm , datalist_array, coltbl, wherelist) {
    var icount = TalonDbUtil.updateByArray( config , table_nm, datalist_array ,coltbl , wherelist);
    if (_tln_analyze_exec_mode() != '' ) {
        var item_nm = _tln_analyze_dataMap_item_name(datalist_array[0]);
        _tln_analyze_set_data_item('ENGINE', table_nm , item_nm , 'UPDATE');
        tln_write_log("【UPDATE】" + table_nm + ' / ' + item_nm);
    }
    return icount;
}

function tln_db_delete(config, sql) {
    var icount = TalonDbUtil.delete( config , sql );
    if (_tln_analyze_exec_mode() != '' ) {
        var tmp = _tln_analyze_delete_table_name(sql);
        _tln_analyze_set_data('ENGINE', tmp , 'DELETE');
        if (tmp == '') {
            tmp = '**解析できませんでした**';
        }
        tln_write_log("【DELETE】" + tmp);
    }
    return icount;
}

function tln_db_deleteByMap(config, table_nm , datalist, wherelist) {
    var icount = TalonDbUtil.deleteByMap( config , table_nm, datalist , wherelist);
    if (_tln_analyze_exec_mode() != '' ) {
        //DELETEは項目情報無し
        _tln_analyze_set_data('ENGINE', table_nm , 'DELETE');
        tln_write_log("【DELETE】" + table_nm);
    }
    return icount;
}

function tln_db_deleteByArray(config, table_nm , datalist_array, wherelist) {
    var icount = TalonDbUtil.deleteByArray( config , table_nm, datalist_array , wherelist);
    if (_tln_analyze_exec_mode() != '' ) {
        //DELETEは項目情報無し
        _tln_analyze_set_data('ENGINE', table_nm , 'DELETE');
        tln_write_log("【DELETE】" + table_nm);
    }
    return icount;
}




//----------------------------------------------
function tln_write_log(msg) {
    TALON.getLogger().writeDebug( msg );
    if (_tln_analyze_exec_mode() != '' ) {
        if ( _tln_analyze_log != "" ) {
            _tln_analyze_log = _tln_analyze_log + '\n';
        } 
        _tln_analyze_log = _tln_analyze_log + msg;
    }
}

```

#### サーバJS ライブラリ: TLN_ANALYZE_SETUP (共通JavaScript_リポジトリ分析セットアップ)

```javascript
/**
 * TLN_ANALYZE_COMMON : 共通JavaScript_リポジトリ分析共通部品
 *
 * 最終更新：　TALON_ANALYZE_V1_0_3
 * @version   2021/04/09
 */

//--------------------------------------------
// セットアップ関連共通
//--------------------------------------------
function table_exists(nm) {
    if ( TALON.getDbConfig().isOra() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM USER_TABLES WHERE TABLE_NAME = '" + nm + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    }
    if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT DSP1 FROM TLN_M_HANYO_CODE_MAIN WHERE SIKIBETU_CODE='TLN_GENERAL' AND KEY_CODE='DB_NAME'" );
        var lineDataMap = itemSelectList[0];
        var _DSP1 = getMapVal(lineDataMap,'DSP1');
        
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM information_schema.tables WHERE table_name = '" + nm + "' AND table_schema = '" + _DSP1 + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isMssql() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM sys.objects WHERE type = 'U' AND name = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(DISTINCT table_name) AS CNT FROM information_schema.columns WHERE LOWER(table_name) = LOWER('" + nm + "')" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function function_exists(nm) {
    if ( TALON.getDbConfig().isOra() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM USER_PROCEDURES WHERE OBJECT_TYPE = 'FUNCTION' AND OBJECT_NAME = '" + nm + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    }
    if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT DSP1 FROM TLN_M_HANYO_CODE_MAIN WHERE SIKIBETU_CODE='TLN_GENERAL' AND KEY_CODE='DB_NAME'" );
        var lineDataMap = itemSelectList[0];
        var _DSP1 = getMapVal(lineDataMap,'DSP1');
        
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION' AND ROUTINE_SCHEMA = '" + _DSP1 + "' AND SPECIFIC_NAME = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isMssql() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM sys.objects WHERE type = 'FN' AND name = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM pg_proc WHERE proname = LOWER('" + nm + "')" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function view_exists(nm) {
    if ( TALON.getDbConfig().isOra() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM USER_OBJECTS WHERE OBJECT_TYPE = 'VIEW' AND OBJECT_NAME = '" + nm + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    }
    if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT DSP1 FROM TLN_M_HANYO_CODE_MAIN WHERE SIKIBETU_CODE='TLN_GENERAL' AND KEY_CODE='DB_NAME'" );
        var lineDataMap = itemSelectList[0];
        var _DSP1 = getMapVal(lineDataMap,'DSP1');
        
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = '" + nm + "' AND TABLE_SCHEMA = '" + _DSP1 + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isMssql() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM sys.objects WHERE type = 'V' AND name = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM pg_class WHERE relkind = 'v' and relname = LOWER('" + nm + "')" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function field_exists(nm,fl) {
    if ( !TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM TLN_M_NAME_MANAGER WHERE TABLE_NAME = '" + nm + "' AND COLUMN_NAME = '" + fl + "' " );
    } else {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM TLN_M_NAME_MANAGER WHERE TABLE_NAME = LOWER('" + nm + "') AND COLUMN_NAME = LOWER('" + fl + "') " );
    }
    var lineDataMap = itemSelectList[0];
    var _CNT = getMapVal(lineDataMap,'CNT');
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function executeSQL(sql) {
    if ( TALON.getDbConfig().isOra() ) {
        //Oracleの場合true
        TALON.executeSQL(sql);
    };
    if ( TALON.getDbConfig().isMy() ) {
        //MySQLの場合true
        TalonDbUtil.update( TALON.getDbConfig(), sql);
    };
    if ( TALON.getDbConfig().isMssql() ) {
        //MsSqlServerの場合true
        TalonDbUtil.update( TALON.getDbConfig(), sql);
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        //Postgresの場合true
        TalonDbUtil.update( TALON.getDbConfig(), sql);
    };
}
function table_exists_drop(nm) {
    if (table_exists(nm)) {
        if ( !TALON.getDbConfig().isPostgres() ) {
            executeSQL( "DROP TABLE " + nm ) ;
        } else {
            executeSQL( "DROP TABLE " + nm.toLowerCase() ) ;
        }
    }
}
function function_exists_drop(nm) {
    if (function_exists(nm)) {
        if ( !TALON.getDbConfig().isPostgres() ) {
            executeSQL( "DROP FUNCTION " + nm ) ;
        } else {
            executeSQL( "DROP FUNCTION " + nm.toLowerCase() ) ;
        }
    }
}
function view_exists_drop(nm) {
    if (view_exists(nm)) {
        if ( !TALON.getDbConfig().isPostgres() ) {
            executeSQL( "DROP VIEW " + nm ) ;
        } else {
            executeSQL( "DROP VIEW " + nm.toLowerCase() ) ;
        }
    }
}


function exec_create_Function() {

    //≪FUNCTION DROP≫
    //--------------------
    //[FUNCTION]
    function_exists_drop('XXXXX');

    if ( TALON.getDbConfig().isOra() ) {

    };
    if ( TALON.getDbConfig().isMy() ) {
            //SQLファイルで作成
    };
    if ( TALON.getDbConfig().isMssql() ) {

    };
    if ( TALON.getDbConfig().isPostgres() ) {
            //SQLファイルで作成

    };
}


function exec_create_View() {

    //≪VIEW DROP≫
    //--------------------
    //[VIEW]
    view_exists_drop('XXXXX');

    if ( TALON.getDbConfig().isOra() ) {

    };
    if ( TALON.getDbConfig().isMy() ) {
            //SQLファイルで作成
    };
    if ( TALON.getDbConfig().isMssql() ) {

    };
    if ( TALON.getDbConfig().isPostgres() ) {
            //SQLファイルで作成

    };
}


//--------------------------------------------
// セットアップ後環境別データ修正
//--------------------------------------------
function exec_custom() {


    if ( TALON.getDbConfig().isMy() ) {
        //MySQLの場合true

        if ( chkLowercase() ) {
            //lowercaseとして判断
            TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_APP SET VALUE  = LOWER(VALUE) WHERE FUNC_KBN = 'UPDATE_TABLE' AND FUNC_ID LIKE 'TLN_ANALYZE_%' ");
        }

    }



    if ( TALON.getDbConfig().isMssql() ) {
        //MsSqlServerの場合true
        var array = ["TLN_CHAR_TO_DATE", "TLN_CHAR_TO_NUMBER", "TLN_CHARINDEX", "TLN_CONCAT", "TLN_DATE_TIME_TO_CHAR", "TLN_DATE_TIME_TO_DATETIME", "TLN_DATE_TO_CHAR", "TLN_DATEADD", "TLN_DATEDIFF", "TLN_FIRSTDAY", "TLN_LEN", "TLN_LF", "TLN_MID", "TLN_ROUND", "TLN_SYSDATE", "TLN_ANALYZE_CONV_CHAR", "TLN_ANALYZE_CONV_TEXT"];

        var i;
        var num = array.length;
        for(i=0;i < num;i++){
            //--------------
            //TLN_M_GENERAL_FUNC_SQL
            TalonDbUtil.update( TALON.getDbConfig(), 
            " UPDATE TLN_M_GENERAL_FUNC_SQL " + 
            " SET " + 
            "  BODY_SQL  = REPLACE(REPLACE(BODY_SQL ,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " ,TITLE_SQL = REPLACE(REPLACE(TITLE_SQL,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' "
            );

            //--------------
            //TLN_M_GENERAL_ITEM_OPTN
            TalonDbUtil.update( TALON.getDbConfig(), 
            " UPDATE TLN_M_GENERAL_ITEM_OPTN " + 
            " SET " + 
            "  CHR_TEXT = REPLACE(REPLACE(CHR_TEXT,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_ID <> 'TLN_ANALYZE_SYS01' " + 
            " AND (FUNC_KBN = 'JAVA_SCRIPT_ENGINE' OR (FUNC_KBN = 'BUTTON_BAT' AND FLAG = 2)) "
            );

            //--------------
            //TLN_M_HANYO_CODE_MAIN
            TalonDbUtil.update( TALON.getDbConfig(), 
            " UPDATE TLN_M_HANYO_CODE_MAIN " + 
            " SET " + 
            "  NOTE = REPLACE(REPLACE(NOTE,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " WHERE SIKIBETU_CODE = 'TLN_GENERAL_JAVASCRIPT_ENGINE' " + 
            "   AND KEY_CODE <> 'TLN_ANALYZE_SETUP' "

            );
        }

    }



    if ( TALON.getDbConfig().isPostgres() ) {
        //PostgreSQLの場合true

        //lower
        //--------------
        //TLN_M_GENERAL_ITEM 
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM SET COL_NAME = LOWER(COL_NAME) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_ID <> 'TLN_ANALYZE_SYS01' AND COL_NAME <> 'PARAM_FUNC_ID'  AND COL_NAME <> 'BLOCK_NO' ");

        //--------------
        //TLN_M_GENERAL_FUNC_SQL 
        //機能内で使用しているバインド変数を小文字に変換

        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%FUNC_ID%**/'        ,'/**%func_id%**/'        ) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%FUNC_SEQ%**/'       ,'/**%func_seq%**/'       ) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%FUNC_KBN%**/'       ,'/**%func_kbn%**/'       ) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%COL_NAME%**/'       ,'/**%col_name%**/'       ) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%OPT_SORT%**/'       ,'/**%opt_sort%**/'       ) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%TRG_ID%**/'         ,'/**%trg_id%**/'         ) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%TENKAI_HOUKOU%**/'  ,'/**%tenkai_houkou%**/'  ) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%SEL_FUNC_ID%**/'    ,'/**%sel_func_id%**/'    ) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' ");

        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET TITLE_SQL = REPLACE(TITLE_SQL,'/**%FUNC_KBN%**/'    ,'/**%func_kbn%**/'    ) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' ");


        //--------------
        //TLN_M_GENERAL_ITEM_OPTN
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR4 = LOWER(CHR4) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'BUTTON_NEXT' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR4 = replace(CHR4,'''jse''','''JSE''') WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'BUTTON_NEXT' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = LOWER(KIND), CHR1 = LOWER(CHR1), CHR_TEXT = LOWER(CHR_TEXT), CHR4 = LOWER(CHR4) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'SEND_MAIL' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = LOWER(KIND)  WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND COL_NAME <> 'BLOCK_NO' AND ( FUNC_KBN LIKE 'BUTTON_NEXT_%' or FUNC_KBN = 'INPUT_CONDITION' ) ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1), CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND ( FUNC_KBN = 'SUB_SEARCH' OR FUNC_KBN = 'LOOK_UP' ) ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'REGIST_VALUE' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = LOWER(KIND) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1) , CHR2 = LOWER(CHR2) , CHR3 = LOWER(CHR3) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'SUGGEST' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'FORE_COLOR' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'INIT_VALUE_TEXT' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'OTHER_FUNC' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1), CHR3 = LOWER(CHR3) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN like 'OTHER_FUNC_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'BACK_COLOR' ");


        //--------------
        //TLN_M_GENERAL_ITEM_OPTN 
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET COL_NAME = LOWER(COL_NAME) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND COL_NAME <> 'PARAM_FUNC_ID' AND COL_NAME <> 'BLOCK_NO' AND FUNC_KBN NOT IN ('SEND_MAIL' , 'OTHER_FUNC' , 'JAVA_SCRIPT_ENGINE' , 'JAVA_SCRIPT' , 'BUTTON_NEXT' , 'BUTTON_BAT' , 'BUTTON_AJAX' ) ");

        //TLN_M_GENERAL_APP
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_APP SET VALUE = LOWER(VALUE) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_KBN = 'UPDATE_TABLE' ");

        //TLN_M_GENERAL_USES
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_USES SET KEY_CODE = LOWER(KEY_CODE) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND USER_CODE = 'TLN_GEN_ALL' AND KEY_CODE NOT IN (' PREVIEW ' , 'JS分析データ収集' ) ");


        //--------------
        //TLN_M_GENERAL_POSITION
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_POSITION SET NAME = LOWER(NAME) WHERE FUNC_ID LIKE 'TLN_ANALYZE_%' AND FUNC_ID <> 'WFS_M000' AND CHR1='ITEM' ");

    }

}

```

#### サーバJS ライブラリ: TLN_ANALYZE_TEST13 (共通JavaScript共通ClientsideJavaScriptCSSメンテナンス部品)

```javascript
function colNameMultiDB(str) {
    return TALON.getDbConfig().isPostgres() ? str.toLowerCase() : str;
}

//strを半角スペース、全角スペース、Tabキー入力を区切り文字として分割してセットとして取得する
function splitToSet(str) {
  if (!str) return {};

  var list = String(str)
    .trim()
    .split(/[ \u3000\t]+/);

  var set = {};   // 疑似Set

  for (var i = 0; i < list.length; i++) {
    var parts = list[i].split(",");

    for (var j = 0; j < parts.length; j++) {
      var v = parts[j];
      if (v.length > 0) {
        set[v] = true;
      }
    }
  }

  return set;
}

function listToSet(list) {
  var set = {};

  for (var i = 0; i < list.length; i++) {
    var v = list[i];
    set[v] = true;
  }

  return set;
}

function setToTabString(set) {

  // 1. キー一覧取得
  var list = Object.keys(set);

  // 2. 昇順ソート
  list.sort();

  // 3. タブ区切りで結合
  return list.join("\t");
}

//共通JavaScriptライブラリ入力値、入力項目、行番号、主キー、サーバーサイドクライアントサイドCSSの分類、設定種別コードを取得する
//getLibrarySelectValueAndcolNameAndrowNo()["value"]:入力値
//getLibrarySelectValueAndcolNameAndrowNo()["colName"]:入力項目
//getLibrarySelectValueAndcolNameAndrowNo()["rowNo"]:行番号
function getLibrarySelectValueAndcolNameAndrowNo() {
    var lineDataMap = TALON.getTargetData(); //入力値を得たい
    var iREC = TALON.getTargetDataIndex(); //更新行番号
    var _TYPE_CODE = lineDataMap[colNameMultiDB("TYPE_CODE")];
    var librarySelectValue = "";
    var updateColName = "";
    var updateColNameAll = "";
    var resultMap = {};
    if(_TYPE_CODE == '0S0' || _TYPE_CODE == '0S1' || _TYPE_CODE == '0S3' ||  _TYPE_CODE == '1C0' ||  _TYPE_CODE == '2CS0') { //検索、確定、非同期検索前、Client-side JavaScript、CSS
        librarySelectValue = lineDataMap[colNameMultiDB("CHR1")];
        updateColName = colNameMultiDB("CHR1");
        updateColNameAll = colNameMultiDB("FLAG");
    }
    if(_TYPE_CODE == '0S2' || _TYPE_CODE == '0S6' ) { //帳票出力、処理呼出
        librarySelectValue = lineDataMap[colNameMultiDB("CHR2")];
        updateColName = colNameMultiDB("CHR2");
        updateColNameAll = colNameMultiDB("CHR1");
    }
    if(_TYPE_CODE == '0S5') { //JavaScript呼出
        librarySelectValue = lineDataMap[colNameMultiDB("CHR2")];
        updateColName = colNameMultiDB("CHR2");
        updateColNameAll = colNameMultiDB("FLAG");
    }
    if(_TYPE_CODE == '0S4') { //非同期検索後
        librarySelectValue = lineDataMap[colNameMultiDB("CHR5")];
        updateColName = colNameMultiDB("CHR5");
        updateColNameAll = colNameMultiDB("CHR4");
    }

    //主キー値も取得する
    resultMap["FUNC_ID"] = lineDataMap[colNameMultiDB("FUNC_ID")];
    resultMap["FUNC_SEQ"] = lineDataMap[colNameMultiDB("FUNC_SEQ")];
    resultMap["COL_NAME"] = lineDataMap[colNameMultiDB("COL_NAME")];
    resultMap["FUNC_KBN"] = lineDataMap[colNameMultiDB("FUNC_KBN")];
    resultMap["OPT_SORT"] = lineDataMap[colNameMultiDB("OPT_SORT")];
    resultMap["value"] = librarySelectValue;
    resultMap["colName"] = updateColName;
    resultMap["colNameALL"] = updateColNameAll;
    resultMap["rowNo"] = iREC;

    //共通JavaScriptがサーバーサイドかclient-sideかの場合分けが必要
    if( _TYPE_CODE == '1C0' ) {
      resultMap['COMMON_TYPE'] = 'CSJS';
    } else if ( _TYPE_CODE == '2CS0' ) {
      resultMap['COMMON_TYPE'] = 'CSS';
    } else {
      resultMap['COMMON_TYPE'] = 'SSJS';
    }

    //設定種別コード
    resultMap["TYPE_CODE"] = _TYPE_CODE;
    //ライブラリ設定対象外の設定種別（1C1〜1C6等）かどうか
    resultMap["hasLibrary"] = (updateColName !== "");
    return resultMap;
}

//入力値inputvalueをsplitToSetで分割して全てselectlistに含まれているか確認する
function inputValidator(selectlist,inputvalue) {
    var inputvalueset = splitToSet(inputvalue);
    var selectset = listToSet(selectlist);

    for(key in inputvalueset) {
        if (!(key in selectset)) {
            return false;
        }
    }
    return true;
}

//JavaScript呼出のサーバーサイドのライブラリ設定がOn click時のレコードにも保存されているため本機能による更新時も同様の処理としておく
function updateCallJavaScriptOnClick() {
  var submitRecord = getLibrarySelectValueAndcolNameAndrowNo();
  var updatesql = "UPDATE TLN_M_GENERAL_ITEM_OPTN OPTN0 "
                  + " SET " 
                  + colNameMultiDB("CHR4") + " = ( "
                  + " SELECT SRC." + colNameMultiDB("CHR2")
                  + " FROM ("
                  + " SELECT "
                  + " OPTN1." + colNameMultiDB("CHR2")
                  + " FROM TLN_M_GENERAL_ITEM_OPTN OPTN1"
                  + " WHERE "
                  + " OPTN1." + colNameMultiDB("FUNC_ID") + " = " + "'" + submitRecord["FUNC_ID"] + "'"
                  + " AND OPTN1." + colNameMultiDB("FUNC_SEQ") + " = " + submitRecord["FUNC_SEQ"]
                  + " AND OPTN1." + colNameMultiDB("COL_NAME") + " = " + "'" + submitRecord["COL_NAME"] + "'"
                  + " AND OPTN1." + colNameMultiDB("FUNC_KBN") + " = " + "'JAVASCRIPT_ENGINE'"
                  + " AND OPTN1." + colNameMultiDB("OPT_SORT") + " = " + submitRecord["OPT_SORT"] 
                  + " ) SRC ) "
                  + " , " + colNameMultiDB("FLAG") + " = ( "
                  + " SELECT SRC." + colNameMultiDB("FLAG")
                  + " FROM ("
                  + " SELECT "
                  + " OPTN1." + colNameMultiDB("FLAG")
                  + " FROM TLN_M_GENERAL_ITEM_OPTN OPTN1"
                  + " WHERE "
                  + " OPTN1." + colNameMultiDB("FUNC_ID") + " = " + "'" + submitRecord["FUNC_ID"] + "'"
                  + " AND OPTN1." + colNameMultiDB("FUNC_SEQ") + " = " + submitRecord["FUNC_SEQ"]
                  + " AND OPTN1." + colNameMultiDB("COL_NAME") + " = " + "'" + submitRecord["COL_NAME"] + "'"
                  + " AND OPTN1." + colNameMultiDB("FUNC_KBN") + " = " + "'JAVASCRIPT_ENGINE'"
                  + " AND OPTN1." + colNameMultiDB("OPT_SORT") + " = " + submitRecord["OPT_SORT"] 
                  + " ) SRC ) "               
                  + " WHERE "
                  + " OPTN0." + colNameMultiDB("FUNC_ID") + " = " + "'" + submitRecord["FUNC_ID"] + "'"
                  + " AND OPTN0." + colNameMultiDB("FUNC_SEQ") + " = " + submitRecord["FUNC_SEQ"]
                  + " AND OPTN0." + colNameMultiDB("COL_NAME") + " = " + "'" + submitRecord["COL_NAME"] + "'"
                  + " AND OPTN0." + colNameMultiDB("FUNC_KBN") + " = " + "'JAVASCRIPT'"
                  + " AND OPTN0." + colNameMultiDB("OPT_SORT") + " = " + submitRecord["OPT_SORT"]
  TalonDbUtil.update(TALON.getDbConfig(), updatesql);
}
```

#### サーバJS ライブラリ: TLN_FUNC_DOC_COMMON (TALON機能設計書出力 共通ライブラリ)

```javascript
// TLN_FUNC_DOC_COMMON: TALON機能設計書出力 共通サーバ側JS
// LIBRARY_CODE: 0JSENGINE  /  TYPE: server-side common library
//
// 提供API:
//   TFC.getLabelBundle(lang)           Java ResourceBundle 取得 (ja/en/zh_CN/...)
//   TFC.lbl(bundle, key, fallback)     キー→翻訳テキスト
//   TFC.escapeHtml(s)                  HTML エスケープ
//   TFC.escapeMd(s)                    Markdown エスケープ
//   TFC.escapeAttr(s)                  HTML 属性値エスケープ (& < " ' のみ)
//   TFC.formatSql(s)                   SQL 整形 (将来用、現状は trim のみ)
//   TFC.appKbnLabel(appKbn, lang)      APP_KBN → "固定検索条件"等
//   TFC.funcKbnInfo(funcKbn)           FUNC_KBN → {section, labelKey, table} (辞書)
//   TFC.toLocale(lang)                 lang 文字列を java.util.Locale へ変換
//   TFC.HTML_HEAD / TFC.HTML_TAIL      自己完結HTMLの head/tail 生成
//   TFC.htmlSection(title, body, opts) <details>セクション生成
//   TFC.tabBadge(isOn, count, lang)    タブ on/off バッジ HTML
//   TFC.zip(entries)                   {name: bytes/string} → ZIP バイト列 (java.util.zip)

(function (global) {
    'use strict';

    var ResourceBundle = Java.type('java.util.ResourceBundle');
    var Locale = Java.type('java.util.Locale');
    var ByteArrayOutputStream = Java.type('java.io.ByteArrayOutputStream');
    var ZipOutputStream = Java.type('java.util.zip.ZipOutputStream');
    var ZipEntry = Java.type('java.util.zip.ZipEntry');
    var JString = Java.type('java.lang.String');
    var Charset = Java.type('java.nio.charset.Charset');

    var TFC = {};

    // ============================================================
    // 言語検出 (V6 のブラウザ言語に応じて出力を切り替える)
    // ============================================================
    // 出力言語を 'ja' / 'en' で返す。
    //   V6 (TALON Ver.6.0.2+): ブラウザの Accept-Language が FacesContext.viewRoot.locale に反映される
    //                          → ブラウザ=英語の利用者には英語版を、その他は日本語版を返す
    //   V5 (TALON Ver < 6.0.2 / Payara 5): FacesContext.viewRoot に locale は載らないため
    //                          常に 'ja' を返す (V5 で英語対応はしない方針)
    TFC.detectLang = function () {
        // 検出戦略 (上から優先順):
        //   (1) TALON.getUserInfoMap().LOCALE — V6.2.7+ で追加されたブラウザ言語 (利用者個別)
        //   (2) java.util.Locale.getDefault() — JVM デフォルトロケール (Payara JVM オプション
        //       -Duser.language=en 等で英語化されている環境向け)
        //   (3) 上記いずれも該当しなければ 'ja'
        //
        // バージョン別動作:
        //   - V5 / V6.0.0〜V6.2.6 + JVM=ja: 'ja'
        //   - V5 / V6.0.0〜V6.2.6 + JVM=en: 'en' (JVM Locale フォールバック)
        //     ※ V6.0.2〜V6.2.6 でブラウザ言語=en/JVM=ja の組み合わせは英語化できない (TALON 仕様)
        //   - V6.2.7+ + ブラウザ言語=en: 'en' (利用者ごとに切替)
        //   - V6.2.7+ + ブラウザ言語=ja: 'ja'
        //
        // 0S100 は別ワーカースレッドで動くため FacesContext / HttpSession にアクセスできず、
        // ブラウザ言語を取得する公式 API は userInfoMap.LOCALE 経由のみ (V6.2.7+)。
        // 実機調査 (2026-05-12): V5/V6.2.15 双方で TALON.getUserSessions() / JsfUtil.getUserID()
        // 等は worker thread からは "Non-login" を返すため利用できない。
        try {
            if (typeof TALON !== 'undefined' && typeof TALON.getUserInfoMap === 'function') {
                var ui = TALON.getUserInfoMap();
                if (ui) {
                    for (var k in ui) {
                        if (/^(locale|lang|language)$/i.test(k)) {
                            var v = String(ui[k] || '');
                            if (v) {
                                var nor = _normalizeLang(v);
                                try { TALON.getLogger().writeInfo('[TFC] detectLang via userInfo[' + k + ']=' + v + ' → ' + nor); } catch (ignore) {}
                                return nor;
                            }
                        }
                    }
                }
            }
        } catch (e) {}
        try {
            var dl = Locale.getDefault();
            if (dl) {
                var lng = String(dl.getLanguage() || '');
                if (lng) {
                    var nor2 = _normalizeLang(lng);
                    if (nor2 === 'en') {
                        // ja は既定値と区別がつかないのでログを出すのは en 検出時のみ
                        try { TALON.getLogger().writeInfo('[TFC] detectLang via Locale.getDefault=' + lng + ' → ' + nor2); } catch (ignore) {}
                    }
                    return nor2;
                }
            }
        } catch (e) {}
        return 'ja';
    };
    function _normalizeLang(lng) {
        // 'en', 'en-US', 'en_US' → 'en' ; 'ja', 'ja-JP' → 'ja' ; その他は ja にフォールバック
        var s = String(lng).toLowerCase().replace('_', '-').split('-')[0];
        if (s === 'en' || s === 'ja') return s;
        return 'ja';
    }

    // ============================================================
    // ライセンス / エディション (販売プラン ①無償 / ②物理DB+マトリクス / ③全機能)
    // ============================================================
    //   方式: オフライン署名検証 (RSA-2048 / SHA256withRSA)。
    //     ・製品には公開鍵のみ埋込 (下記 _LICENSE_PUBKEY_B64)。 署名は弊社の秘密鍵のみで作成可
    //       (改竄・偽造不可)。 顧客は署名済みライセンスキー (1 行) をファイルに置くだけ:
    //         {Payara}/glassfish/domains/{domain}/lib/classes/tln_func_doc_license.key
    //     ・ライセンスキー形式: base64(payloadJSON) + "." + base64(署名)
    //         payload = {cid:顧客ID, ed:1|2|3, exp:"YYYY-MM-DD"(当日まで有効), v:版}
    //     ・未配置 / 無効 / 期限切れ → edition 1 (無償) にフォールバック
    //   発行ツール: tools/_license_keygen.py (鍵生成・1回) / tools/_license_issue.py (顧客ごと)
    TFC._LICENSE_PUBKEY_B64 =
        'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApv8ZGJNXvF6WRq+nHKU3gmjTElQ/Z3+' +
        'vSI7z6VGZ8WjL2Zm4UjOS3lrpxc+LtlsfobWuhUwILujjHqoTz3x4zEf5Dx0S+0o/9t0UleI1Uk' +
        '485kM2Eg7zfLJDMblyb6WoVC/Cge5mnSWxjWl9gPsZhgRyL0SPUTdFISsOfFSidDK24zSjmdm/6' +
        'Neu88Iqaly5QO9N9oWhTml1g+3rNPIzIIvhlvjy4ItVc4OMk/rgRAuxC9EJmXqi6Va3YmXVMHjw' +
        'Mxn4E3xN1eBJL9OyDMmSQPKOOvIvWfE8Yzfkfd7W+5PZU+QQQcwMo43HIeUk8ZJf1GNCd7ScQrz' +
        'VLXD42l/31wIDAQAB';
    TFC.LICENSE_FILE_NAME = 'tln_func_doc_license.key';

    // ライセンスキー文字列を検証。 返り値: {valid:bool, edition:1|2|3, cid, exp, reason}
    //   reason: '' | 'empty' | 'format' | 'badsig' | 'expired' | 'error'
    TFC.verifyLicense = function (keyString, todayStr) {
        var res = { valid: false, edition: 1, cid: '', exp: '', reason: 'empty' };
        if (!keyString) return res;
        var ks = String(keyString).replace(/[\r\n\s]/g, '');
        if (!ks) return res;
        try {
            var dot = ks.indexOf('.');
            if (dot <= 0) { res.reason = 'format'; return res; }
            var msg = ks.substring(0, dot);
            var sigB64 = ks.substring(dot + 1);
            var Base64 = Java.type('java.util.Base64');
            var KeyFactory = Java.type('java.security.KeyFactory');
            var X509 = Java.type('java.security.spec.X509EncodedKeySpec');
            var Signature = Java.type('java.security.Signature');
            var pubDer = Base64.getDecoder().decode(TFC._LICENSE_PUBKEY_B64);
            var pub = KeyFactory.getInstance('RSA').generatePublic(new X509(pubDer));
            var sig = Signature.getInstance('SHA256withRSA');
            sig.initVerify(pub);
            sig.update(new JString(msg).getBytes('US-ASCII'));
            var sigBytes = Base64.getDecoder().decode(sigB64);
            if (!sig.verify(sigBytes)) { res.reason = 'badsig'; return res; }
            // 署名 OK → ペイロード復号
            var payloadJson = new JString(Base64.getDecoder().decode(msg), 'UTF-8');
            var pl = JSON.parse(String(payloadJson));
            res.cid = String(pl.cid || '');
            res.exp = String(pl.exp || '');
            var ed = parseInt(pl.ed, 10);
            // 期限判定 (YYYY-MM-DD 文字列比較。 exp >= today で有効)
            var today = todayStr || _todayYmd();
            if (res.exp && today && res.exp < today) { res.reason = 'expired'; res.edition = 1; return res; }
            res.valid = true;
            res.edition = (ed === 2 || ed === 3) ? ed : 1;
            res.reason = '';
            return res;
        } catch (e) {
            try { TALON.getLogger().writeWarn('[TFC] ライセンス検証エラー: ' + e); } catch (ig) {}
            res.reason = 'error';
            return res;
        }
    };
    function _todayYmd() {
        try {
            var LD = Java.type('java.time.LocalDate');
            return String(LD.now().toString());   // 'YYYY-MM-DD'
        } catch (e) {
            var d = new Date();
            var mm = ('0' + (d.getMonth() + 1)).slice(-2), dd = ('0' + d.getDate()).slice(-2);
            return d.getFullYear() + '-' + mm + '-' + dd;
        }
    }

    // ライセンスファイルを lib/classes (talonJdbc.properties と同じ場所) から読む。
    //   絶対パスをハードコードせず、 classloader で talonJdbc.properties の位置を解決 →
    //   同ディレクトリの tln_func_doc_license.key を毎回フレッシュ読み (差し替え即反映)。
    //   返り値: ライセンスキー文字列 (無ければ '')。
    TFC.readLicenseFile = function () {
        try {
            var File = Java.type('java.io.File');
            var Files = Java.type('java.nio.file.Files');
            var cl = Java.type('java.lang.Thread').currentThread().getContextClassLoader();
            var candidates = [];
            // 1. talonJdbc.properties と同じ lib/classes を第一候補にする
            try {
                var url = cl.getResource('talonJdbc.properties');
                if (url) {
                    var dir = new File(url.toURI()).getParentFile();
                    candidates.push(new File(dir, TFC.LICENSE_FILE_NAME));
                }
            } catch (e1) {}
            // 2. classpath ルート直下 (getResource(license) 直接ヒット)
            try {
                var lurl = cl.getResource(TFC.LICENSE_FILE_NAME);
                if (lurl) candidates.push(new File(lurl.toURI()));
            } catch (e2) {}
            for (var i = 0; i < candidates.length; i++) {
                var f = candidates[i];
                if (f && f.exists() && f.isFile()) {
                    var bytes = Files.readAllBytes(f.toPath());
                    var text = String(new JString(bytes, 'UTF-8'));
                    // 自己記述ヘッダ (# 始まりの説明行) と空行を無視して キー本体を取り出す。
                    //   キー本体は '#' で始まらない 1 行 (base64.base64)。 空白は除去。
                    var flines = text.split(/\r\n|\r|\n/);
                    var body = '';
                    for (var fl = 0; fl < flines.length; fl++) {
                        var ln = flines[fl].replace(/^\s+|\s+$/g, '');
                        if (ln === '' || ln.charAt(0) === '#') continue;
                        body += ln;
                    }
                    return body;
                }
            }
        } catch (e) {
            try { TALON.getLogger().writeWarn('[TFC] ライセンスファイル読取エラー: ' + e); } catch (ig) {}
        }
        return '';
    };

    // エディションを解決 (1|2|3)。 ファイル読取 → 検証 → 期限判定。 未配置/無効=1 (無償)。
    //   ログに検出結果を残す (顧客サポート・監査用)。
    TFC.resolveEdition = function () {
        var keyString = TFC.readLicenseFile();
        if (!keyString) {
            try { TALON.getLogger().writeInfo('[TFC] ライセンス未配置 → edition 1 (無償)'); } catch (ig) {}
            return { edition: 1, license: { valid: false, edition: 1, reason: 'empty' } };
        }
        var v = TFC.verifyLicense(keyString);
        try {
            TALON.getLogger().writeInfo('[TFC] ライセンス: valid=' + v.valid + ' edition=' + v.edition +
                ' cid=' + v.cid + ' exp=' + v.exp + ' reason=' + v.reason);
        } catch (ig) {}
        return { edition: v.edition, license: v };
    };

    // ============================================================
    // ラベル辞書 (UI 文言)
    // ============================================================
    // FUNC_KBN_DICT とは別に、HTML/Markdown 出力の見出し・ヘッダ・固定文言を集中管理する。
    // key は安定した英数字キー (例: 'sec.funcDesc')、値は言語別の表示文字列。
    // 使い方: TFC.t('sec.funcDesc', lang)  // → '機能説明' / 'Function Description'
    var _labels = {
        // セクション見出し / タブ名
        'sec.funcDesc':         { ja: '機能説明',         en: 'Function description' },
        'sec.application':      { ja: 'アプリケーション', en: 'Application' },
        'sec.userGroup':        { ja: 'ユーザグループ',   en: 'User group' },
        'sec.freeLayout':       { ja: 'フリーレイアウト', en: 'Free layout' },
        'sec.selectExpr':       { ja: 'SELECT式',         en: 'SELECT formula' },
        'sec.titleSelectExpr':  { ja: 'タイトルSELECT式', en: 'Title SELECT formula' },
        'sec.itemInfo':         { ja: '項目情報',         en: 'Item information' },
        'sec.detailSetting':    { ja: '詳細設定',         en: 'Detail settings' },
        'sec.menuPos':          { ja: 'メニュー位置',     en: 'Menu position' },
        'sec.referenced':       { ja: '被参照',           en: 'Referenced from' },
        'sec.referencedDetail':  { ja: '被参照 (他機能から呼ばれている箇所)', en: 'Referenced from (called by other functions)' },
        'sec.refGenCd':         { ja: '参照汎用CD',       en: 'Referenced general code' },
        'sec.refSeqNum':        { ja: '参照採番',         en: 'Referenced numbering' },
        'sec.refCalendar':      { ja: '参照カレンダー',   en: 'Referenced calendar' },
        'sec.refClass':         { ja: '参照汎用階層',     en: 'Referenced general hierarchy' },
        'sec.codebook':         { ja: 'コードブック',     en: 'Code book' },
        'sec.deps':              { ja: '依存関係',         en: 'Dependencies' },
        'sec.fixupNotes':        { ja: '改修時の注意',     en: 'Notes for modification' },

        // インデックス / トップレベル
        'idx.title':             { ja: 'TALON 機能設計書 インデックス', en: 'TALON Function Documents Index' },
        'idx.meta.generated':    { ja: '生成日時',         en: 'Generated' },
        'idx.meta.funcCount':    { ja: '機能件数',         en: 'Function count' },
        'idx.col.funcId':        { ja: '機能ID',           en: 'Function ID' },
        'idx.col.funcNm':        { ja: '機能名',           en: 'Function name' },
        'idx.col.outline':       { ja: '機能概要',         en: 'Outline' },
        'idx.col.links':         { ja: 'リンク',           en: 'Links' },
        'idx.uncategorized':     { ja: '(未分類)',         en: '(Uncategorized)' },
        'idx.empty':             { ja: '対象機能がありません。', en: 'No target functions.' },
        'idx.htmlLink':          { ja: 'HTML',             en: 'HTML' },
        'idx.mdLink':            { ja: 'Markdown',         en: 'Markdown' },

        // 共通テーブルヘッダ
        'th.item':               { ja: '項目',             en: 'Item' },
        'th.value':              { ja: '値',               en: 'Value' },
        'th.no':                 { ja: '#',                en: '#' },
        'th.type':               { ja: 'TYPE',             en: 'Type' },
        'th.title':              { ja: 'TITLE',            en: 'Title' },
        'th.colName':            { ja: 'COL_NAME',         en: 'COL_NAME' },
        'th.dispName':           { ja: 'DISP_NAME',        en: 'DISP_NAME' },
        'th.tableName':          { ja: 'テーブル名',       en: 'Table' },
        'th.source':             { ja: '出典',             en: 'Source' },
        'th.btnName':            { ja: 'ボタン名',         en: 'Button name' },
        'th.btnLabel':           { ja: 'ボタン',           en: 'Button' },
        'th.kind':                { ja: '種別',             en: 'Kind' },
        'th.state':               { ja: '状態',             en: 'State' },
        'th.group':              { ja: 'グループ名',       en: 'Group name' },
        'th.authKbn':            { ja: 'AUTH_KBN',         en: 'AUTH_KBN' },
        'th.sikibetuCd':         { ja: '識別コード',       en: 'Identifier code' },
        'th.keyCode':            { ja: 'KEY',              en: 'KEY' },
        'th.name':                { ja: '名称',             en: 'Name' },
        // 集約 (検索条件 / 項目情報) のテーブルヘッダ
        'th.dispNameTypical':     { ja: '表示名 (代表)',     en: 'Display name (typical)' },
        'th.typicalColName':      { ja: '代表 COL_NAME',     en: 'Typical COL_NAME' },
        'th.typicalBlock':        { ja: '代表ブロック',       en: 'Typical block' },
        'th.aggregatedFrom':      { ja: '集約元',             en: 'Aggregated from' },
        'th.dispName2':           { ja: '表示名',             en: 'Display name' },
        'th.physColName':         { ja: '物理項目名',         en: 'Physical column' },
        'th.component':           { ja: 'コンポーネント',     en: 'Component' },
        'th.dataType':            { ja: 'データ型',           en: 'Data type' },
        'th.dispWidth':           { ja: '表示桁',             en: 'Display width' },
        'th.dispHeight':          { ja: '表示高さ',           en: 'Display height' },
        'th.inputFormat':         { ja: '表示・入力形式',     en: 'Input format' },
        'th.dispOrder':           { ja: '表示順',             en: 'Display order' },
        'th.dispOrderShort':      { ja: '並び順',             en: 'Order' },
        'th.key':                 { ja: 'キー',               en: 'Key' },
        'th.update':              { ja: '更新',               en: 'Update' },
        'th.search':              { ja: '検索',               en: 'Search' },
        'th.required':            { ja: '必須',               en: 'Required' },
        'th.digits':              { ja: '桁数',               en: 'Digits' },
        'th.typical':             { ja: '代表',               en: 'Typical' },
        'th.helpUrl':             { ja: 'ヘルプURL',         en: 'Help URL' },
        'th.authGroupId':         { ja: '権限グループID',     en: 'Auth group ID' },
        'th.authKbnLabel':        { ja: '権限区分',           en: 'Auth kind' },
        'th.ref':                 { ja: '参照',               en: 'Ref' },
        'th.del':                 { ja: '削除',               en: 'Del' },
        'th.funcType':            { ja: '機能タイプ',         en: 'Function type' },

        // 画面ビジュアル内の固定文言
        'visual.ref':             { ja: '参照',               en: 'Ref' },
        'visual.del':             { ja: '削除',               en: 'Del' },
        // SUB (検索子画面) モードの専用 UI ラベル (TALON 実画面で観察)
        'visual.subSelect':       { ja: '選択',               en: 'Select' },
        'visual.subRowNo':        { ja: '行番号',             en: 'No.' },
        'visual.subRowNoSubMode': { ja: '行番号 (SUB モード)', en: 'Row number (SUB mode)' },
        // フォールバック / プレースホルダ
        'visual.itemFallback':    { ja: '(項目)',             en: '(item)' },
        'visual.thFallback':      { ja: '(TH)',               en: '(TH)' },
        'visual.tdInputFallback': { ja: '(TD: 入力)',         en: '(TD: input)' },
        // ボタンエリア (renderFuncAreaFromPos) の標準/カスタムボタン フォールバックチップ
        'visual.stdBtnPrefix':    { ja: '標準ボタン: ',        en: 'Standard button: ' },
        'visual.customBtnPrefix': { ja: 'ボタン: ',            en: 'Button: ' },
        // CSV_LOAD_BUTTON の付随ドロップゾーン widget (TALON 実画面でファイル UI を案内するテキスト)
        'visual.csvLoadDropzone': { ja: 'クリックまたはファイルをドロップ', en: 'Click or drop file' },
        // 確定ボタン (機能下部) ラベル / 処理実行
        'btn.confirm':            { ja: '確定',               en: 'Confirm' },
        'btn.run':                { ja: '処理実行',           en: 'Run' },

        // メタ / 機能カード
        'meta.bgCategory':       { ja: '業務分類',         en: 'Business category' },
        'meta.admin':            { ja: '管理者',           en: 'Administrator' },
        'meta.lastUpdate':       { ja: '最終更新',         en: 'Last update' },
        'meta.appKbn':           { ja: '機能タイプ',       en: 'Function type' },
        'meta.notSet':           { ja: '(未設定)',         en: '(Not set)' },

        // タブバッジ
        'badge.set':             { ja: '設定あり',         en: 'set' },
        'badge.none':            { ja: '設定なし',         en: 'none' },
        'badge.unit':            { ja: '件',               en: '' },  // 「2 件」 vs 「2」

        // コントロール (HTML 上部のボタン)
        'ctrl.allOpen':          { ja: '全展開',           en: 'Expand all' },
        'ctrl.allClose':         { ja: '全閉じ',           en: 'Collapse all' },
        'ctrl.cardOnly':         { ja: 'カードのみ',       en: 'Cards only' },
        'ctrl.onOnly':           { ja: '設定ありのみ',     en: 'Set only' },

        // エラー / 情報メッセージ
        'msg.err.noTarget':      { ja: '出力対象が選択されていません。明細の「出力対象」にチェックを入れてから押してください。',
                                   en: 'No output target selected. Check "Output target" in the row before pressing.' },
        'msg.err.noData':        { ja: '対象機能のデータが取得できませんでした。',
                                   en: 'Could not retrieve data for the selected functions.' },

        // 出力ファイルのカバーシート/警告
        'cov.warnHeader':         { ja: '⚠ 注意事項',       en: '⚠ Notes' },

        // 詳細セクション (Stats / Detail view / Data flow / Reference analysis)
        'detail.statsTitle':      { ja: '▤ 統計',                 en: '▤ Statistics' },
        'detail.viewTitle':       { ja: '⌕ 詳細ビュー (用途で切り替え)', en: '⌕ Detail view (switch by use)' },
        'detail.dataFlow':        { ja: 'データフロー',           en: 'Data flow' },
        'detail.refAnalysisTitle':{ ja: '✎ テーブル参照解析について:', en: '✎ About table reference analysis:' },
        'detail.refAnalysisMethod':{ ja: 'テーブル参照は <code>UPDATE_TABLE</code> 設定 + ブロック SELECT 式 (BODY_SQL/TITLE_SQL) + 各種 JavaScript コード (CHR_TEXT) + 呼び出すストアドプロシージャの本体 (Oracle / PostgreSQL / MySQL / SQL Server) を <code>FROM</code> / <code>JOIN</code> / <code>INSERT INTO</code> / <code>UPDATE ... SET</code> / <code>DELETE FROM</code> / <code>MERGE INTO</code> / <code>REPLACE INTO</code> / <code>MERGE ... USING</code> のキーワードで正規表現解析した結果です。 動的SQL (EXECUTE IMMEDIATE / PREPARE / sp_executesql 等) は、文字列リテラルが DML 文で始まる場合のみ抽出します。',
                                     en: 'Table references come from regex analysis of <code>UPDATE_TABLE</code> settings, block SELECT formulas (BODY_SQL/TITLE_SQL), JavaScript code (CHR_TEXT) and the body of called stored procedures (Oracle / PostgreSQL / MySQL / SQL Server), looking for <code>FROM</code> / <code>JOIN</code> / <code>INSERT INTO</code> / <code>UPDATE ... SET</code> / <code>DELETE FROM</code> / <code>MERGE INTO</code> / <code>REPLACE INTO</code> / <code>MERGE ... USING</code> keywords. Dynamic SQL (EXECUTE IMMEDIATE / PREPARE / sp_executesql etc.) is extracted only when a string literal starts with a DML statement.' },
        'detail.writeLabel':      { ja: '書き込み',               en: 'Write' },
        'detail.readLabel':       { ja: '読み取り',               en: 'Read' },
        'detail.refMissing':      { ja: '⚠ 抜け・漏れの可能性',   en: '⚠ Possible omissions' },
        'detail.refOutOfScope':   { ja: '⚠ 対象外',               en: '⚠ Out of scope' },
        'detail.refWriteDef':     { ja: 'INSERT/UPDATE/DELETE/MERGE/REPLACE のいずれかが検出されたテーブル',
                                    en: 'Tables detected by INSERT/UPDATE/DELETE/MERGE/REPLACE' },
        'detail.refReadDef':      { ja: 'FROM/JOIN のみで参照されているテーブル',
                                    en: 'Tables referenced only by FROM/JOIN' },
        'detail.refMissingDesc':  { ja: '変数連結でテーブル名を組み立てた SQL は検出できません (リテラルとして完結した動的SQLは抽出します)。JavaScript の if 分岐内の SQL は検出できない場合があります。',
                                    en: 'SQL whose table names are built by variable concatenation cannot be detected (dynamic SQL written as a complete literal is extracted). SQL inside JavaScript if-branches may not be detected.' },
        'detail.refScopeDesc':    { ja: 'ストアドプロシージャ本体は Oracle / PostgreSQL / MySQL / SQL Server に対応 (DB2 等は今後対応)。 プロシージャから更に呼び出す別プロシージャ、 BODY_SQL/JS に直接書いた CALL/EXEC 呼び出し、 外部 API 経由のアクセス、 トリガで連動するテーブルは含まれません。 動的SQLは文字列リテラルが DML 文で始まる場合のみ抽出し、 変数で組み立てるテーブル名は対象外です。',
                                    en: 'Stored procedure bodies are analyzed for Oracle / PostgreSQL / MySQL / SQL Server (DB2 etc. planned). Procedures called from within a procedure, CALL/EXEC written directly in BODY_SQL/JS, access via external APIs, and tables linked by triggers are not included. Dynamic SQL is extracted only when a string literal starts with a DML statement; table names built from variables are out of scope.' },
        'detail.refNoteTag':      { ja: '✎ 補完 (備考タグ)',       en: '✎ Supplement (Note tags)' },
        'detail.refNoteTagDesc':  { ja: '解析で捕捉できない依存は、 機能説明タブの備考に [R:テーブル名] (読み) / [W:テーブル名] (書き) / [WR:テーブル名] (読み書き) と記入すると本設計書の依存として取り込まれます (1タグ1テーブル、 文章中に埋め込み可)。 @番号 で複数DB接続の接続先を明示できます (例 [W:LOG_TBL@2]。 省略時は機能の DB 接続先)。',
                                    en: 'Dependencies the analysis cannot capture can be declared in the Note field of the function description tab as [R:TABLE] (read) / [W:TABLE] (write) / [WR:TABLE] (read+write) — one table per tag, embeddable in plain text. Append @N to specify a multi-DB connection target (e.g. [W:LOG_TBL@2]; defaults to the DB connection of the function).' },
        'detail.block':           { ja: 'ブロック',               en: 'Block' },
        'detail.wholeFunc':       { ja: '機能全体',               en: 'Whole function' },

        // タブラベル
        'tab.deps':               { ja: '◈️ 依存関係',            en: '◈️ Dependencies' },
        'tab.code':               { ja: '≣ コードブック',          en: '≣ Code book' },
        'tab.legacy':             { ja: '※ 全設定',                en: '※ All settings' },
        'tab.domains':            { ja: '◇ データドメイン',          en: '◇ Data domains' },

        // 統計カード
        'stats.blocks':           { ja: 'ブロック数',              en: 'Blocks' },
        'stats.code':             { ja: 'JS / SQL コード',          en: 'JS / SQL code' },
        'stats.refFuncs':         { ja: '参照先機能',              en: 'Referenced functions' },
        'stats.refFuncsSub':      { ja: 'LOOK_UP/SUB_SEARCH/OTHER_FUNC 等', en: 'LOOK_UP/SUB_SEARCH/OTHER_FUNC etc.' },
        'stats.referenced':       { ja: '被参照',                  en: 'Referenced from' },
        'stats.referencedSub':    { ja: '他機能から呼び出し',      en: 'Called from other functions' },
        'stats.none':             { ja: '(なし)',                  en: '(none)' },

        // 集約 (検索条件 / 項目情報)
        'agg.condTitle':          { ja: '検索条件集約',            en: 'Search condition aggregation' },
        'agg.condDesc':           { ja: '同一 COL_NAME は自動集約。物理項目名が異なる検索項目は <code>TLN_M_GENERAL_ITEM_OPTN.FUNC_KBN=&#39;JOIN&#39;</code> (機能設定画面 アプリケーションタブ「結合項目」) で集約されます。表示名は最初に出現したブロック (SORT 最小) のものを採用。',
                                    en: 'Same COL_NAME values are auto-aggregated. Conditions with different physical column names are aggregated via <code>TLN_M_GENERAL_ITEM_OPTN.FUNC_KBN=&#39;JOIN&#39;</code> (Application tab "Join items" in the function setup screen). Display name is taken from the first occurring block (smallest SORT).' },
        'agg.countSuffix':        { ja: '{0}件 (うち集約あり {1}件)', en: '{0} (with {1} aggregated)' },
        'agg.noAggregation':      { ja: '(集約なし)',              en: '(no aggregation)' },

        // ヒーロー (機能カードのタイトル + 機能概要 / 備考)
        'hero.outline':           { ja: '◆ 機能概要',              en: '◆ Outline' },
        'hero.note':              { ja: '✎ 備考',                  en: '✎ Note' },
        'hero.dataVer':           { ja: 'データ版数 (設定の最終更新)', en: 'Data version (last setting update)' },

        // 画面ビジュアル (静的画面プレビュー)
        'visual.title':           { ja: '画面ビジュアル',          en: 'Screen visual' },
        'visual.hint':            { ja: '(各UI要素にマウスオーバーで設定詳細)', en: '(Hover any element to see setting details)' },
        'visual.noteTitle':       { ja: '✎ 画面イメージの注意事項:',  en: '✎ About this visual:' },
        'visual.noteBody':        { ja: 'この画面イメージは<strong>機能設定 (静的データ) のみ</strong>から組み立てたスケルトンです。実際の動作と異なる場合があります。',
                                    en: 'This visual is a skeleton built from <strong>static settings only</strong>; runtime behavior may differ.' },
        'visual.noteDivergeTitle':{ ja: '主な乖離ポイント:',       en: 'Main divergences:' },
        'visual.noteDiverge1':    { ja: '①動的式 (ボタン名表示式 / 条件式 / TITLE_SQL 等) は固定値で表示 — 実行時に評価される。',
                                    en: '① Dynamic expressions (button labels / conditions / TITLE_SQL, etc.) shown with literal text — they are evaluated at runtime.' },
        'visual.noteDiverge2':    { ja: '②条件付き色付け (FORE_COLOR / BACK_COLOR) は kind 値を直接適用 — 条件式は評価しない。',
                                    en: '② Conditional coloring (FORE_COLOR / BACK_COLOR) applies kind values directly — conditions are not evaluated.' },
        'visual.noteDiverge3':    { ja: '③カレンダー / ガント / グラフは固定値スケルトン — 実データを反映しない (冪等性担保のため)。',
                                    en: '③ Calendar / Gantt / charts are fixed skeletons — actual data not reflected (for idempotency).' },
        'visual.noteDiverge4':    { ja: '④ユーザー個別設定 (PDF用紙サイズ等) は固定値表示。',
                                    en: '④ User-individual settings (PDF paper size etc.) shown as fixed values.' },
        'visual.noteDiverge5':    { ja: '⑤検索 / 確定ボタン押下後の動作は対象外。',
                                    en: '⑤ Post-search / post-confirm behavior is out of scope.' },

        // ストーリー (利用シナリオ)
        'story.actorUser':        { ja: 'ユーザ',                  en: 'User' },
        'story.actorScreen':      { ja: '画面',                    en: 'Screen' },
        'story.actorParent':      { ja: '親画面',                  en: 'Parent' },
        'story.openFunc':         { ja: '機能を開く',              en: 'Open the function' },
        'story.openFuncTech':     { ja: '1C0 LOAD で初期化処理が走ります', en: '1C0 LOAD runs the initialization handler' },
        'story.searchInput':      { ja: '検索条件を入力 → [検索]ボタン押下', en: 'Enter search conditions → press [Search]' },
        'story.searchInputTech':  { ja: '0S00 SEARCH_BEFORE → SELECT文発行 → 0S01 SEARCH_AFTER の順で実行',
                                    en: '0S00 SEARCH_BEFORE → issue SELECT → 0S01 SEARCH_AFTER, in order' },
        'story.showResults':      { ja: '検索結果を明細に表示',    en: 'Display search results in the list' },
        'story.showResultsTech':  { ja: 'ページャあり / 各 LIST ブロックに行を展開',
                                    en: 'With pager; each LIST block is populated with rows' },
        'story.editRows':         { ja: '明細を編集 (登録/更新/削除)', en: 'Edit rows (insert/update/delete)' },
        'story.editRowsTech':     { ja: 'FOCUS OUT JavaScript (1C4) でリアルタイム検証',
                                    en: 'FOCUS OUT JavaScript (1C4) provides real-time validation' },
        'story.confirm':          { ja: '[確定]ボタン押下',         en: 'Press [Confirm] button' },
        'story.confirmTech':      { ja: '0S100 UPDATE_BEFORE → INSERT/UPDATE/DELETE → 0S101 UPDATE_AFTER ／ 失敗時はロールバック',
                                    en: '0S100 UPDATE_BEFORE → INSERT/UPDATE/DELETE → 0S101 UPDATE_AFTER / rollback on failure' },
        'story.batExec':          { ja: '[処理実行]ボタン押下 (検索なし)', en: 'Press [Run] button (no search)' },
        'story.batExecTech':      { ja: 'BUTTON_BAT 系のサーバJSが直接走ります', en: 'BUTTON_BAT server JS runs directly' },
        'story.subLaunch':        { ja: '当機能を子画面として呼出',  en: 'Launch this function as a sub-screen' },
        'story.subLaunchTech':    { ja: 'SUB_SEARCH/LOOK_UP 経由で起動 → 親画面に値を返却',
                                    en: 'Launched via SUB_SEARCH/LOOK_UP → returns value to the parent' },
        'story.flowMain':         { ja: 'ユーザ [入力] ──▶ JS処理前 ──▶ SQL発行 ──▶ JS処理後 ──▶ 結果表示',
                                    en: 'User [input] ──▶ Pre-JS ──▶ SQL ──▶ Post-JS ──▶ Render result' },
        'story.flowConfirm':      { ja: '       └ [確定] ──▶ JS処理前(全体) ──▶ INSERT/UPDATE/DELETE ──▶ JS処理後(全体)',
                                    en: '       └ [Confirm] ──▶ Pre-JS(global) ──▶ INSERT/UPDATE/DELETE ──▶ Post-JS(global)' },

        // インデックス: 業務分類未設定
        'idx.bgL.unset':           { ja: '(業務分類大: 未設定)',    en: '(Large category: not set)' },
        'idx.bgM.unset':           { ja: '(中: 未設定)',            en: '(Medium: not set)' },
        'idx.bgS.unset':           { ja: '(小: 未設定)',            en: '(Small: not set)' },
        'idx.funcCount':           { ja: '出力件数: {0} 機能',      en: '{0} functions' },
        'idx.summary':             { ja: '業務分類 (大 / 中 / 小) ごとにグルーピングし、各グループ内は機能ID 昇順で表示。リンクをクリックすると個別の機能設計書 (HTML / Markdown) が開きます。',
                                     en: 'Grouped by business category (Large / Medium / Small); within each group sorted by Function ID. Click a link to open the function document (HTML / Markdown).' },
        'idx.groupCount':          { ja: '{0} 機能',                en: '{0} functions' },
        'idx.writer.title':        { ja: 'DB 更新あり',              en: 'has DB write' },

        // Markdown セクション見出し / TH ラベル群
        'md.langCaption':          { ja: '言語',                   en: 'Language' },
        'md.dataVer':              { ja: 'データ版数 (設定の最終更新)', en: 'Data version (last setting update)' },
        'md.funcId':               { ja: '機能ID',                  en: 'Function ID' },
        'md.funcNm':               { ja: '機能名',                  en: 'Function name' },
        'md.funcType':             { ja: '機能タイプ',              en: 'Function type' },
        'md.adminId':              { ja: 'ADMIN_ID',                en: 'ADMIN_ID' },
        'md.bgL':                  { ja: '業務分類 大',             en: 'Business category (large)' },
        'md.bgM':                  { ja: '業務分類 中',             en: 'Business category (medium)' },
        'md.bgS':                  { ja: '業務分類 小',             en: 'Business category (small)' },
        'md.created':              { ja: '作成',                    en: 'Created' },
        'md.lastUpdate':           { ja: '最終更新',                en: 'Last update' },
        'md.outline':              { ja: '機能概要',                en: 'Outline' },
        'md.note':                 { ja: '備考',                    en: 'Note' },
        'md.none':                 { ja: '(なし)',                  en: '(none)' },
        'md.noCondItems':          { ja: '(条件項目なし)',           en: '(no condition items)' },
        'md.funcDesc':             { ja: '機能説明',                en: 'Function description' },
        'md.fixupNotes':           { ja: '改修時の注意',             en: 'Notes for modification' },
        'md.menuPos':              { ja: 'メニュー位置',             en: 'Menu position' },
        'md.appSettings':          { ja: 'アプリケーション設定',     en: 'Application settings' },
        'md.appBaseSetting':       { ja: '機能レベル設定一覧',       en: 'Function-level settings' },
        'md.appBaseHint':          { ja: 'TLN_M_GENERAL_APP (FUNC_SEQ=-1) に登録されている全ての設定値。非表示フラグや個別セクションで重複して表示される設定も含む。', en: 'All settings stored in TLN_M_GENERAL_APP (FUNC_SEQ=-1). Includes settings also shown in hide-flag table or other sections.' },
        'md.btnPosition':          { ja: 'ボタン位置移動',           en: 'Button positioning' },
        'md.btnPositionHint':      { ja: 'BUTTON_DSP_POS で設定されたボタンの配置位置とマージン。', en: 'Button placement positions and margins via BUTTON_DSP_POS.' },
        'md.btnPositionPos':       { ja: '配置位置',                en: 'Position' },
        'md.btnPositionMargin':    { ja: 'マージン (上/下/左/右)',   en: 'Margin (T/B/L/R)' },
        'md.condAggr':             { ja: '検索条件 (集約)',          en: 'Search conditions (aggregated)' },
        'md.blockSettings':        { ja: 'ブロック設定',             en: 'Block settings' },
        'md.deps':                 { ja: '依存関係',                en: 'Dependencies' },
        'md.flPosition':           { ja: 'フリーレイアウト POSITION', en: 'Free layout POSITION' },
        'md.masters':              { ja: 'マスタ参照',              en: 'Master references' },
        'md.codebook':             { ja: 'コードブック',            en: 'Code book' },
        'md.userGroup':            { ja: 'ユーザグループ',          en: 'User group' },
        'md.hideButtonSetting':    { ja: '標準ボタン非表示設定',     en: 'Standard button visibility' },
        'md.tabHidden':            { ja: '非表示',                  en: 'Hidden' },
        'md.tabShown':             { ja: '表示',                    en: 'Shown' },
        'md.tabBtn':               { ja: 'ボタン',                  en: 'Button' },
        'md.tabState':             { ja: '状態',                    en: 'State' },
        'md.btnPdf':               { ja: 'PDF出力',                 en: 'PDF output' },
        'md.btnExcel':             { ja: 'Excel出力',               en: 'Excel output' },
        'md.btnExcelUpd':          { ja: 'Excel更新',               en: 'Excel update' },
        'md.btnClear':             { ja: 'クリア',                  en: 'Clear' },
        'md.btnSearch':            { ja: '検索',                    en: 'Search' },
        'md.btnBack':              { ja: '戻る',                    en: 'Back' },
        'md.btnExecute':           { ja: '確定',                    en: 'Confirm' },
        'md.btnView':              { ja: '参照',                    en: 'View' },
        'md.btnScreenSetting':     { ja: '画面設定',                en: 'Screen settings' },
        'md.btnCondSave':          { ja: '検索条件保存',             en: 'Save conditions' },
        'md.btnCondTitle':         { ja: '検索条件タイトル',         en: 'Condition title' },
        'md.btnBlockName':         { ja: 'ブロック名',              en: 'Block name' },
        'md.refWriteTable':        { ja: '参照先テーブル (書き込み)', en: 'Referenced tables (write)' },
        'md.refReadTable':         { ja: '参照先テーブル (読み取りのみ)', en: 'Referenced tables (read only)' },
        'md.refFuncs':             { ja: '参照先機能',              en: 'Referenced functions' },
        'md.refLibs':              { ja: '参照先共通ライブラリ',     en: 'Referenced shared libraries' },
        'md.calledFrom':           { ja: '被参照 (呼出元機能)',      en: 'Referenced from (caller functions)' },
        'md.codeJs':               { ja: 'JavaScript / 各種コード',  en: 'JavaScript / code' },
        'md.codeLibs':             { ja: '共通ライブラリ',          en: 'Shared libraries' },
        'md.cdHanyo':              { ja: '汎用CD (TLN_M_HANYO_CODE_MAIN)', en: 'General code (TLN_M_HANYO_CODE_MAIN)' },
        'md.cdHanyoClass':         { ja: '汎用階層 (TLN_M_HANYO_CLASS)', en: 'General hierarchy (TLN_M_HANYO_CLASS)' },
        'md.cdSaiban':             { ja: '採番 (TLN_M_SEQ_PARAMETER)', en: 'Numbering (TLN_M_SEQ_PARAMETER)' },
        'md.cdCalendar':           { ja: 'カレンダー (TLN_M_CALENDAR)', en: 'Calendar (TLN_M_CALENDAR)' },
        'md.cdDetail':             { ja: '詳細設定',                en: 'Detail settings' },
        'md.cdItem':               { ja: '項目情報',                en: 'Item information' },
        'md.cdSelectExpr':         { ja: 'SELECT 式',               en: 'SELECT formula' },
        'md.cdBlockComposition':   { ja: 'ブロック構成',            en: 'Block composition' },
        'md.cdCsvOut':             { ja: 'CSV出力',                 en: 'CSV output' },
        'md.cdCsvLoad':            { ja: 'CSV登録 (▶ クリックまたはファイルをドロップ)',
                                     en: 'CSV upload (▶ Click or drop file)' },
        'md.refWarnTitle':         { ja: '> **✎ テーブル参照解析の注意事項**\n>\n',
                                     en: '> **✎ Notes on table reference analysis**\n>\n' },
        'md.refWarnMethod':        { ja: '> - テーブル参照は `UPDATE_TABLE` 設定 + ブロック SELECT 式 (BODY_SQL/TITLE_SQL) + JavaScript コード (CHR_TEXT) + 呼び出すストアドプロシージャ本体 (Oracle / PostgreSQL / MySQL / SQL Server) を `FROM` / `JOIN` / `INSERT INTO` / `UPDATE ... SET` / `DELETE FROM` / `MERGE INTO` / `REPLACE INTO` / `MERGE ... USING` の正規表現で抽出した結果です。 動的SQLは文字列リテラルが DML 文で始まる場合のみ抽出します。\n',
                                     en: '> - Table references come from regex analysis of `UPDATE_TABLE` settings, block SELECT formulas (BODY_SQL/TITLE_SQL), JavaScript (CHR_TEXT) and called stored procedure bodies (Oracle / PostgreSQL / MySQL / SQL Server) for `FROM` / `JOIN` / `INSERT INTO` / `UPDATE ... SET` / `DELETE FROM` / `MERGE INTO` / `REPLACE INTO` / `MERGE ... USING` keywords. Dynamic SQL is extracted only when a string literal starts with a DML statement.\n' },
        'md.refWarnDefs':          { ja: '> - **書き込み** = INSERT/UPDATE/DELETE/MERGE が検出されたテーブル / **読み取り** = FROM/JOIN のみのテーブル\n',
                                     en: '> - **Write** = tables detected by INSERT/UPDATE/DELETE/MERGE / **Read** = tables referenced only by FROM/JOIN\n' },
        'md.refWarnMissing':       { ja: '> - **⚠ 抜け・漏れの可能性**: コード内で動的に組み立てられた SQL、変数連結、条件分岐内の SQL は検出できない場合があります。\n',
                                     en: '> - **⚠ Possible omissions**: SQL strings built dynamically by concatenation or in conditional branches may not be detected.\n' },
        'md.refWarnScope':         { ja: '> - **⚠ 対象外**: ストアドプロシージャ本体は Oracle / PostgreSQL / MySQL / SQL Server に対応 (DB2 等は今後)。 プロシージャから更に呼ぶ別プロシージャ、 BODY_SQL/JS 直書きの CALL/EXEC、 外部 API 経由、 トリガ連動は含まれません。 動的SQLの変数組み立てテーブル名も対象外 (リテラル完結分は抽出)。\n',
                                     en: '> - **⚠ Out of scope**: stored procedure bodies are analyzed for Oracle / PostgreSQL / MySQL / SQL Server (DB2 etc. later). Nested procedure calls, CALL/EXEC written directly in BODY_SQL/JS, external APIs, and triggers are not included. Table names built from variables in dynamic SQL are also out of scope (complete literals are extracted).\n' },
        'md.refWarnNoteTag':       { ja: '> - **✎ 補完 (備考タグ)**: 解析で捕捉できない依存は 機能説明タブの備考に `[R:テーブル名]` (読み) / `[W:テーブル名]` (書き) / `[WR:テーブル名]` (読み書き) と記入すると依存として取り込まれます (1タグ1テーブル、 文章中に埋め込み可)。 `@番号` で複数DB接続の接続先を明示できます (例 `[W:LOG_TBL@2]`。 省略時は機能の DB 接続先)。\n\n',
                                     en: '> - **✎ Supplement (Note tags)**: dependencies the analysis cannot capture can be declared in the Note field of the function description tab as `[R:TABLE]` (read) / `[W:TABLE]` (write) / `[WR:TABLE]` (read+write) — one table per tag, embeddable in plain text. Append `@N` to specify a multi-DB connection target (e.g. `[W:LOG_TBL@2]`; defaults to the DB connection of the function).\n\n' },
        'md.warnRefMsg':           { ja: '> ⚠ この機能は **{0}** 件の参照を他機能から受けています。改修時は呼出元の動作確認が必要です。\n\n',
                                     en: '> ⚠ This function is referenced by **{0}** other functions. Verify the callers when modifying.\n\n' },
        'md.libNote':              { ja: '_TLN_M_HANYO_CODE_MAIN.SIKIBETU_CODE in (TLN_GENERAL_JAVASCRIPT_ENGINE / TLN_GENERAL_JAVASCRIPT / TLN_GENERAL_CSS) からマップ。「全て」モード時は該当種別の全ライブラリ、「個別」モード時は CHR1 で指定されたものだけ。_\n\n',
                                     en: '_Mapped from TLN_M_HANYO_CODE_MAIN.SIKIBETU_CODE in (TLN_GENERAL_JAVASCRIPT_ENGINE / TLN_GENERAL_JAVASCRIPT / TLN_GENERAL_CSS). "All" mode = all libraries of that kind; "Individual" mode = only the one specified by CHR1._\n\n' },
        'md.libModeAll':           { ja: '[全て]',                  en: '[All]' },
        'md.libModeIndividual':    { ja: '[個別]',                  en: '[Individual]' },
        'md.serverJs':             { ja: 'サーバ JS',                en: 'Server JS' },
        'md.clientJs':             { ja: 'クライアント JS',         en: 'Client JS' },
        'md.cssLib':               { ja: 'CSS ライブラリ',           en: 'CSS library' },
        'md.serverJsLib':          { ja: 'サーバJS ライブラリ',      en: 'Server JS library' },
        'md.storedProc':           { ja: 'ストアドプロシージャ',     en: 'Stored procedure' },
        'cb.procPlace':            { ja: '設定箇所: ',               en: 'Configured at: ' },
        'cb.procPlaceConfirmBefore': { ja: '確定処理前プロシージャ', en: 'Pre-confirm procedure' },
        'cb.procPlaceConfirmAfter':  { ja: '確定処理後プロシージャ', en: 'Post-confirm procedure' },
        'cb.procPlaceDlBefore':    { ja: '検索前プロシージャ (引出)', en: 'Pre-search procedure (DL)' },
        'cb.procPlaceDlAfter':     { ja: '検索後プロシージャ (引出)', en: 'Post-search procedure (DL)' },
        'cb.procPlaceSearchBefore': { ja: 'DB検索前プロシージャ',    en: 'Pre-search procedure' },
        'cb.procPlaceSearchAfter':  { ja: 'DB検索後プロシージャ',    en: 'Post-search procedure' },
        'cb.procPlaceBatButton':   { ja: '処理呼出ボタン',           en: 'Procedure call button' },
        'cb.funcLevel':            { ja: '機能レベル',               en: 'Function level' },
        'ofc.resolvedHead':        { ja: '呼出先ブロックの解決',     en: 'Resolved callee block' },
        'ofc.calleeFunc':          { ja: '呼出先機能',               en: 'Callee function' },
        'ofc.calleeBlock':         { ja: '呼出先ブロック',           en: 'Callee block' },
        'ofc.updateTable':         { ja: '更新テーブル',             en: 'Update table' },
        'md.clientJsLib':          { ja: 'クライアントJS ライブラリ', en: 'Client JS library' },
        'md.fromJoinExtracted':    { ja: '_FROM / JOIN 句から抽出_\n\n', en: '_Extracted from FROM / JOIN clauses_\n\n' },
        'md.iudExtracted':         { ja: '_INSERT/UPDATE/DELETE/MERGE/UPDATE_TABLE 設定_\n\n',
                                     en: '_INSERT/UPDATE/DELETE/MERGE/UPDATE_TABLE settings_\n\n' },
        'md.wholeFunc':            { ja: '(機能全体)\n\n',           en: '(Whole function)\n\n' },
        'md.blockNoCol':           { ja: 'ブロックNo',               en: 'Block#' },
        'md.callerFuncId':         { ja: '呼出元機能ID',             en: 'Caller function ID' },
        'md.itemNameCol':          { ja: '項目名',                  en: 'Column name' },
        'md.kindCol':              { ja: '種別',                    en: 'Kind' },
        'md.settingKindCol':       { ja: '設定種別',                en: 'Setting kind' },
        'md.aggrTitle':            { ja: '集約元 ({0}件)',          en: 'Aggregated from ({0})' },
        'md.notRegistered':        { ja: '(マスタ未登録)',          en: '(Not in master)' },
        'md.sortCol':              { ja: '並び',                    en: 'Sort' },
        'md.valueCol':             { ja: '値',                      en: 'Value' },
        'md.dispName':             { ja: '表示名',                  en: 'Display name' },
        'md.dataType':             { ja: 'データ型',                en: 'Data type' },
        'md.digits':               { ja: '桁',                      en: 'Digits' },
        'md.dispFormat':           { ja: '表示形式',                en: 'Display format' },
        'md.crFlg':                { ja: '改行',                    en: 'Line break' },
        'md.aggrCount':            { ja: '集約数',                  en: 'Count' },
        'md.aggrSrc':              { ja: '集約元',                  en: 'Sources' },
        'th.bunrui':               { ja: '分類',                    en: 'Category' },

        // === チャート系 (ガント / カレンダー / グラフ) ===
        'chart.kind.bar':          { ja: '棒',                      en: 'Bar' },
        'chart.kind.line':         { ja: '折れ線',                  en: 'Line' },
        'chart.kind.area':         { ja: '折れ線エリア',            en: 'Line area' },
        'chart.kind.spline':       { ja: '曲線',                    en: 'Spline' },
        'chart.kind.area_spline':  { ja: '曲線エリア',              en: 'Spline area' },
        'chart.kind.step':         { ja: '階段',                    en: 'Step' },
        'chart.kind.area_step':    { ja: '階段エリア',              en: 'Step area' },
        'chart.kind.pie':          { ja: '円',                      en: 'Pie' },
        'chart.kind.donut':        { ja: 'ドーナツ',                en: 'Donut' },
        'chart.kind.scatter':      { ja: '散布図',                  en: 'Scatter' },
        'chart.bySeries':          { ja: ' + 系列別: ',             en: ' + by series: ' },
        'chart.seriesFields':      { ja: '系列項目: ',              en: 'Series fields: ' },
        'chart.taskCodeLabel':     { ja: 'タスクコード=',           en: 'Task code=' },
        'chart.taskNameLabel':     { ja: ' / タスク表示名=',        en: ' / Task name=' },
        'chart.startLabel':        { ja: ' / 開始=',                en: ' / Start=' },
        'chart.endLabel':          { ja: ' / 終了=',                en: ' / End=' },
        'chart.eventLabel':        { ja: ' / イベント: ',           en: ' / Event: ' },
        'chart.tooltipLabel':      { ja: ' ツールチップ=',          en: ' Tooltip=' },
        'chart.relationLabel':     { ja: ' / 関係線: ',             en: ' / Relations: ' },
        'chart.dispFormulaLabel':  { ja: ' / 表示式: ',             en: ' / Display formula: ' },
        'chart.eventContent':      { ja: '内容=',                   en: 'Content=' },
        'chart.calendarCodeLabel': { ja: 'カレンダー識別=',         en: 'Calendar code=' },
        'th.classCode':            { ja: '階層',                    en: 'Hierarchy' },
        'th.taskCode':             { ja: 'タスク',                  en: 'Task' },
        'th.saibanKind':           { ja: '種別',                    en: 'Kind' },
        'th.saibanKindFix':        { ja: '固定値',                  en: 'Fixed' },
        'th.saibanKindAgg':        { ja: '集計キー',                en: 'Aggregate key' },
        'th.saibanKindSeq':        { ja: '連番桁数',                en: 'Sequence digits' },

        // === HTML 細部のラベル / アイコン付き文言 ===
        'btn.pdf':                 { ja: '▦ PDF出力',                en: '▦ PDF out' },
        'btn.excel':               { ja: '▦ Excel出力',              en: '▦ Excel out' },
        'btn.excelUpdate':         { ja: '▦ 更新Excel出力',          en: '▦ Update Excel out' },
        // V3-5 round7 2026-05-28: 「Excel更新」 (= Excel ファイルを取込みレコード更新) は
        //   「更新Excel出力」 (= Excel ファイルを書き出し編集後 取込み) とは別ボタン。
        //   マスタ #00530: EXCELUPDATE_BUTTON_HDN_FLG は「Excel更新」 側の非表示制御。
        'btn.excelImport':         { ja: '▦ Excel更新',              en: '▦ Excel update' },
        'btn.excelMaintain':       { ja: 'Excel更新',                en: 'Excel update' },
        'btn.screenSetting':       { ja: '⚙ 画面設定',                en: '⚙ Screen settings' },
        'btn.clear':               { ja: 'クリア',                  en: 'Clear' },
        'btn.search':              { ja: '検索',                    en: 'Search' },
        'btn.back':                { ja: '戻る',                    en: 'Back' },
        'btn.save':                { ja: '保存',                    en: 'Save' },
        'btn.delete':              { ja: '削除',                    en: 'Delete' },
        'btn.addRow':              { ja: '行追加',                  en: 'Add row' },
        'btn.close':               { ja: '✕ 閉じる',                 en: '✕ Close' },

        'visual.hidden':           { ja: '✕ 非表示',                 en: '✕ Hidden' },
        'visual.hiddenItem':       { ja: '非表示項目 (COMPONENT=HIDDEN または DISP_NAME 空欄)',
                                     en: 'Hidden item (COMPONENT=HIDDEN or DISP_NAME empty)' },
        'visual.hiddenItemShort':  { ja: '非表示項目',                en: 'Hidden item' },
        'visual.hiddenByUses':     { ja: '表示項目設定で非表示 (TLN_M_GENERAL_USES.LIST 未登録 または FLAG=1)',
                                     en: 'Hidden by display item config (not in TLN_M_GENERAL_USES.LIST or FLAG=1)' },
        'visual.toLastRow':        { ja: '最終行へ',                  en: 'Last row' },
        'visual.toRowN':           { ja: '行目へ',                    en: 'Go to row' },
        'visual.addRow':           { ja: '行追加',                    en: 'Add row' },
        'visual.savedCondPh':      { ja: '(保存条件名)',              en: '(saved name)' },
        'visual.initialCond':      { ja: '起動時の初期条件にする',     en: 'Use as initial conditions' },
        'visual.condFreeNote':     { ja: '(フリー検索条件)',          en: '(free conditions)' },
        'visual.condStdNote':      { ja: '(検索単票配置)',            en: '(single search layout)' },
        'visual.condEmpty':        { ja: '(条件項目なし)',            en: '(no condition items)' },
        'visual.condError':        { ja: '(検索単票配置データを取得できませんでした)',
                                     en: '(failed to retrieve single search layout)' },
        'visual.blockEmpty':       { ja: '(項目情報なし)',            en: '(no item information)' },
        'visual.itemSelect':       { ja: '(項目選択)',                en: '(select item)' },
        'visual.chooseSelect':     { ja: '(選択)',                    en: '(select)' },
        'visual.unsetSpan':        { ja: '(未設定)',                  en: '(not set)' },
        'visual.searchResultsZero':{ ja: '▼ 検索結果: 0件',            en: '▼ Search results: 0' },
        'visual.searchCondHead':   { ja: '▼ 検索条件',                 en: '▼ Search conditions' },
        'visual.sampleNote':       { ja: '※ サンプル描画。実データではありません',
                                     en: '※ Sample render. Not actual data.' },
        'visual.sampleNoteGantt':  { ja: '※ サンプル描画 (バー描画は固定14日)。',
                                     en: '※ Sample render (bars are fixed 14 days).' },
        'visual.sampleRender':     { ja: 'サンプル描画',              en: 'Sample render' },
        'visual.chartType':        { ja: 'グラフ種類:',               en: 'Chart type:' },
        'visual.gantt':            { ja: 'ガントチャート',            en: 'Gantt chart' },
        'visual.calendar':         { ja: 'カレンダー',                en: 'Calendar' },
        'visual.allRowSelect':     { ja: '=1: 全選択チェック',          en: '=1: Select-all check' },
        'visual.delPermission':    { ja: '=1: 行削除権限あり',         en: '=1: Has delete permission' },
        'visual.canHideEq1':       { ja: '=1 で非表示可能',             en: '=1 to hide' },
        'visual.canHideEq1List':   { ja: '=1 で非表示可能。明細(LIST)ブロックがある機能のみ表示',
                                     en: '=1 to hide. Shown only for functions with LIST blocks.' },
        'visual.subSearch':        { ja: '(検索子画面)',                en: '(sub-search screen)' },
        'visual.libUsageScope':    { ja: '使用:',                      en: 'Used by:' },
        'visual.posOrphan':        { ja: '(orphan)',                  en: '(orphan)' },
        'visual.emptyCell':        { ja: '空きセル',                   en: 'Empty cell' },

        'sec.rawData':             { ja: '□ 生データ (DBレコード)',     en: '□ Raw data (DB records)' },
        'sec.rawPosition':         { ja: '□ POSITION テーブル生データ ({0}件)', en: '□ POSITION raw data ({0})' },
        'sec.commonLib':           { ja: '≣ 共通ライブラリ ({0})',      en: '≣ Common libraries ({0})' },
        'sec.storedProcCount':     { ja: '⛁ ストアドプロシージャ ({0})', en: '⛁ Stored procedures ({0})' },
        'sec.serverJsCount':       { ja: '■ サーバー側 JS ({0})',       en: '■ Server-side JS ({0})' },
        'sec.clientJsCount':       { ja: '● クライアント JS ({0})',     en: '● Client JS ({0})' },
        'sec.sqlCount':            { ja: '◐ SQL ({0})',               en: '◐ SQL ({0})' },
        'sec.otherCount':          { ja: '⚪ その他 ({0})',             en: '⚪ Other ({0})' },
        'sec.cellPlacement':       { ja: '≡ ブロック内のセル配置 (SCOPE=BLOCK)',
                                     en: '≡ Cell placement inside block (SCOPE=BLOCK)' },
        'sec.resultAreaPlacement': { ja: '∠ 結果エリアのブロック配置 (RESULT_AREA)',
                                     en: '∠ Result area block placement (RESULT_AREA)' },
        'sec.callerHead':          { ja: '⬅ 呼出元',                   en: '⬅ Called by' },
        'sec.refHead':             { ja: '参照先 ➡',                  en: 'References ➡' },
        'sec.menuNode':            { ja: 'メニュー',                  en: 'Menu' },
        'sec.writeNode':           { ja: '書き込み ({0})',              en: 'Write ({0})' },
        'sec.readNode':            { ja: '読み取り ({0})',              en: 'Read ({0})' },
        'sec.readWriteNode':       { ja: '読み書き ({0})',              en: 'Read+Write ({0})' },
        'sec.tblNotInDb':          { ja: 'DB未検出',                   en: 'Not in DB' },
        'sec.tblNotInDbTip':       { ja: 'コードからは参照されているが物理 DB に存在しないため ER 図には出力されません', en: 'Referenced by code but not present in the physical DB, so it is not shown in the ER diagram' },
        'sec.libsHead':            { ja: '≣ 参照先共通ライブラリ',     en: '≣ Referenced libraries' },
        'sec.itemsAddtl':          { ja: '▼ 追加設定 (代表項目)',       en: '▼ Additional (typical item)' },
        'sec.aggrSrc':             { ja: '▼ 集約元 ({0}件)',            en: '▼ Aggregated from ({0})' },
        'sec.codeNone':            { ja: 'JS/SQL コードはありません',    en: 'No JS/SQL code.' },

        'note.starKey':            { ja: '★キー項目',                  en: '★ Key' },
        'note.starUpdate':         { ja: '★更新',                      en: '★ Update' },
        'note.starSearch':         { ja: '★検索項目',                  en: '★ Search' },
        'note.starUpdateRequired': { ja: '★更新必須',                  en: '★ Required' },
        'note.starCrFlg':          { ja: '★改行',                      en: '★ Line break' },
        'note.divider':            { ja: '────────',                  en: '────────' },
        'note.additional':         { ja: '▼ 追加設定',                 en: '▼ Additional' },
        'note.kbnFlag0':           { ja: '0:参照',                     en: '0: View' },
        'note.kbnFlag1':           { ja: '1:更新',                     en: '1: Update' },
        'note.unsetMaster':        { ja: '<em>未設定</em>',             en: '<em>(not set)</em>' },

        'pos.fl.helpHint':         { ja: '画面の結果エリアを CSS Grid 状に区切り、各セルにブロックを配置する設定です。FUNC_SEQ が指定された行はそのブロックを配置、空欄行はレイアウト用の空セルです。',
                                     en: 'Divides the result area as a CSS Grid; FUNC_SEQ rows place that block, empty rows are layout-only empty cells.' },
        'pos.block.cellPlacement': { ja: '各ブロック内部の項目配置 (TH/TDセル) です。POS は階層キー、ROW_NUM/COL_NUM = 配置、ROW_SPAN/COL_SPAN = 結合。TH=ヘッダ・TD=データ。',
                                     en: 'Per-block item placement (TH/TD cells). POS = hierarchy key, ROW_NUM/COL_NUM = position, ROW_SPAN/COL_SPAN = span. TH=header, TD=data.' },

        // 機能レベルオプション (renderFuncLevelOptn)
        'optn.appReport':          { ja: '帳票出力',                en: 'Report output' },
        'optn.appOtherNext':       { ja: '他画面呼出',              en: 'Other screen call' },
        'optn.appAjax':            { ja: '非同期通信',              en: 'Async (AJAX)' },
        'optn.appSendMail':        { ja: '確定後のメール送信',      en: 'Send mail after confirm' },
        'optn.blockProc':          { ja: '処理呼出',                en: 'Procedure call' },
        'optn.blockReport':        { ja: '帳票出力',                en: 'Report output' },
        'optn.blockOtherNext':     { ja: '他画面呼出',              en: 'Other screen call' },
        'optn.blockFileIo':        { ja: 'ファイル入出力',          en: 'File I/O' },
        'optn.blockOtherFunc':     { ja: '他機能呼出',              en: 'Other function call' },

        // クライアントサイド (app.client.js 用)
        'cli.dlReady':           { ja: '機能設計書 ZIP の準備ができました',
                                   en: 'Function Documents ZIP is ready' },
        'cli.dlButton':          { ja: '▼ {0} をダウンロード',
                                   en: '▼ Download {0}' },
        'cli.dlStarted':         { ja: '✓ ダウンロードを開始しました',
                                   en: '✓ Download started' },
        'cli.dlMarkerCleaned':   { ja: '機能設計書ZIPの準備が完了しました: {0}',
                                   en: 'Function Documents ZIP prepared: {0}' }
    };
    TFC.t = function (key, lang) {
        var entry = _labels[key];
        if (!entry) return key;
        var l = (lang === 'en') ? 'en' : 'ja';
        return entry[l] != null ? entry[l] : (entry.ja != null ? entry.ja : key);
    };

    // ============================================================
    // 機能下部バー (bottombar) ボタンカテゴリの表示順
    // ============================================================
    // TALON 実画面の慣行に従う左→右の順序を 1 配列にまとめる。
    // 順序を変えたいときは この配列だけを変えれば全機能に波及する。
    //   出力系 (PDF サイズ → PDF → Excel → 帳票 → ファイル → CSV出力)
    //     → 取込系 (CSV ドロップゾーン → Excel 更新 → CSV登録)
    //     → 通信系 (BAT 処理呼出 → AJAX 非同期)
    //     → 確定 (右側固定)
    //
    // 各キーは update-before.server.js の renderTlnBottombar 内のエミッタと対応する。
    // 不明なキーは無視される (= レンダラに対応エミッタが無いカテゴリは安全に skip)。
    TFC.BOTTOMBAR_CATEGORY_ORDER = [
        'PDF_SIZE',
        'PDF_BTN',
        'EXCEL_BTN',
        'BUTTON_REPORT',
        'BUTTON_FILEIO',
        'CSV_OUT_BUTTON',
        'CSV_LOAD_DROPZONE',
        'BUTTON_EXCEL_UPDATE',
        'CSV_LOAD_BUTTON',
        'BUTTON_BAT',
        'BUTTON_AJAX'
    ];

    // メッセージ内の {0}, {1} を args[0], args[1] で置換
    TFC.tf = function (key, lang, args) {
        var s = TFC.t(key, lang);
        if (args && args.length) {
            for (var i = 0; i < args.length; i++) {
                s = s.split('{' + i + '}').join(args[i] != null ? String(args[i]) : '');
            }
        }
        return s;
    };

    // ============================================================
    // 言語・ラベル
    // ============================================================
    TFC.toLocale = function (lang) {
        if (!lang) return Locale.JAPANESE;
        var s = String(lang);
        if (s.indexOf('_') > 0) {
            var p = s.split('_');
            return new Locale(p[0], p[1]);
        }
        if (s === 'ja') return Locale.JAPANESE;
        if (s === 'en') return Locale.ENGLISH;
        return new Locale(s);
    };

    // 5系 TALON は general_ja_JP.properties / general_en_US.properties 等、
    // 国コード付きの ResourceBundle ファイル名を使用しているため、
    // 6系のロケール (ja / en) で取得失敗した際の互換 fallback を提供する
    TFC.toLocaleWithCountry = function (lang) {
        var m = { ja: ['ja','JP'], en: ['en','US'], zh: ['zh','CN'], ko: ['ko','KR'] };
        var s = String(lang || 'ja');
        var p = m[s];
        return p ? new Locale(p[0], p[1]) : null;
    };

    var _bundleCache = {};
    // ResourceBundle 'general' は TALON 標準の翻訳リソース。
    // 6系 (Payara 6.x / JDK 11): デフォルトの ResourceBundle.getBundle で成功。
    // 5系 (Payara 5.2): Nashorn の eval クラスローダが WEB-INF/classes を見られず
    //   MissingResourceException になることがある。複数のクラスローダソースを順に試す:
    //     (1) Thread.currentThread().getContextClassLoader()
    //     (2) jp.talon.common.message.MessageManager のクラスローダ (TALON 本体クラスから取得)
    //     (3) ResourceBundle 自身のクラスローダ
    //   各 classloader に対しさらに locale を (a) 国コード付き ja_JP / (b) 言語のみ ja で試行。
    //   全て失敗した場合は null を返し、TFC.lbl は fallback / key で動作継続。
    function _tryGetBundle(locale, classLoader) {
        try {
            return classLoader
                ? ResourceBundle.getBundle('general', locale, classLoader)
                : ResourceBundle.getBundle('general', locale);
        } catch (e) {
            return null;
        }
    }
    function _classLoaderSources() {
        var srcs = [];
        // (1) ContextClassLoader
        try { srcs.push(Java.type('java.lang.Thread').currentThread().getContextClassLoader()); } catch (e) {}
        // (2) TALON 本体クラスのクラスローダ (WEB-INF/classes 配下を読める想定)
        var talonClasses = ['jp.talon.common.message.MessageManager',
                            'jp.talon.application.general.free.ap.process.ExecuteProcess'];
        for (var i = 0; i < talonClasses.length; i++) {
            try {
                var T = Java.type(talonClasses[i]);
                srcs.push(T.class.getClassLoader());
            } catch (e) {}
        }
        // (3) ResourceBundle 自身のクラスローダ (フォールバック)
        try { srcs.push(ResourceBundle.class.getClassLoader()); } catch (e) {}
        // null や重複を除去
        var seen = [], out = [];
        for (var j = 0; j < srcs.length; j++) {
            var cl = srcs[j];
            if (!cl) continue;
            if (seen.indexOf(cl) >= 0) continue;
            seen.push(cl); out.push(cl);
        }
        return out;
    }
    TFC.getLabelBundle = function (lang) {
        var key = lang || 'ja';
        if (key in _bundleCache) return _bundleCache[key];
        var loc = TFC.toLocale(key);
        var locFb = TFC.toLocaleWithCountry(key);
        var cls = _classLoaderSources();
        var b = null;
        // 各 classloader × 各 locale を試行
        for (var ci = 0; !b && ci < cls.length; ci++) {
            if (locFb) b = _tryGetBundle(locFb, cls[ci]);
            if (!b) b = _tryGetBundle(loc, cls[ci]);
        }
        // 最後に引数なしも試行
        if (!b && locFb) b = _tryGetBundle(locFb, null);
        if (!b) b = _tryGetBundle(loc, null);
        if (!b) {
            try { TALON.getLogger().writeInfo('[TFC] ResourceBundle "general" 取得失敗 — fallback 文字列を使用 (key=' + key + ', tried ' + cls.length + ' classloaders)'); } catch (ignore) {}
        } else {
            try { TALON.getLogger().writeInfo('[TFC] ResourceBundle "general" 取得成功 (key=' + key + ')'); } catch (ignore) {}
        }
        _bundleCache[key] = b;
        return b;
    };

    TFC.lbl = function (bundle, key, fallback) {
        if (!bundle) return fallback != null ? fallback : key;
        try {
            return String(bundle.getString(key));
        } catch (e) {
            return fallback != null ? fallback : key;
        }
    };

    // ============================================================
    // エスケープ
    // ============================================================
    TFC.escapeHtml = function (s) {
        if (s == null) return '';
        return String(s)
            .replace(/&/g, '&amp;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;');
    };

    TFC.escapeAttr = function (s) {
        if (s == null) return '';
        return String(s)
            .replace(/&/g, '&amp;')
            .replace(/</g, '&lt;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#39;');
    };

    TFC.escapeMd = function (s) {
        if (s == null) return '';
        // Markdown で意味を持つ文字のうち、テキスト中で誤動作しやすいものをエスケープ
        return String(s).replace(/([\\`*_{}\[\]()#+\-!|>])/g, '\\$1');
    };

    TFC.formatSql = function (s) {
        if (s == null) return '';
        return String(s).replace(/\r\n/g, '\n').replace(/\t/g, '    ').replace(/\n+$/, '');
    };

    // ============================================================
    // APP_KBN ラベル ([TALON-DB設定マスタ.md] 出典)
    // ============================================================
    var APP_KBN_MAP = {
        ja: { STD: '固定検索条件', FREE: 'フリー検索条件', SUB: '検索子画面', BAT: '検索ボタン無し' },
        en: { STD: 'Fixed search condition', FREE: 'Free search condition', SUB: 'Sub search screen', BAT: 'No search button' }
    };
    TFC.appKbnLabel = function (appKbn, lang) {
        var l = (lang && APP_KBN_MAP[lang]) ? lang : 'ja';
        var m = APP_KBN_MAP[l];
        return (m && m[appKbn]) || appKbn || '';
    };

    // ============================================================
    // 項目情報の値マッピング
    // ============================================================
    // 出典: 公式マスタ #00316-#00321 (TALON_設定カタログ.md §12 / DB設定マスタ.csv)
    //   - 空/0: テキスト入力 (デフォルト)
    //   - 1:    リストボックス
    //   - 2:    検索条件ラジオ/結果リスト
    //   - 3:    検索条件チェック/結果リスト
    //   - 4:    ラジオボタン
    //   - 5:    チェックボックス
    //   - 6:    HIDDEN (非表示)  — isHiddenItem() でこの値を検出
    var COMPONENT_MAP = {
        ja: {
            '':  'テキスト入力',  '0': 'テキスト入力',
            '1': 'リストボックス',
            '2': '検索条件ラジオ/結果リスト',
            '3': '検索条件チェック/結果リスト',
            '4': 'ラジオボタン',
            '5': 'チェックボックス',
            '6': 'HIDDEN (非表示)'
        },
        en: {
            '':  'Text input', '0': 'Text input',
            '1': 'List box',
            '2': 'Search radio / result list',
            '3': 'Search check / result list',
            '4': 'Radio button',
            '5': 'Checkbox',
            '6': 'HIDDEN'
        }
    };
    TFC.componentLabel = function (val, lang) {
        var v = val == null ? '' : String(val);
        var m = COMPONENT_MAP[lang === 'en' ? 'en' : 'ja'];
        return (m && m[v]) || v;
    };

    // 出典: 公式マスタ #01441 + カタログ §12 DATA_TYPE 一覧
    //   - VARCHAR2: Java String
    //   - NUMBER:   Java BigDecimal
    //   - DATE:     Java java.sql.Date
    //   - DATETIME: Java Timestamp (※TIMESTAMP はエイリアスとして互換維持)
    //   - CLOB:     Java String(CLOB)
    var DATA_TYPE_MAP = {
        ja: {
            'VARCHAR2': '文字列 (VARCHAR2)',
            'NUMBER':   '数値 (NUMBER)',
            'DATE':     '日付 (DATE)',
            'DATETIME': '日時 (DATETIME)',
            'TIMESTAMP': '日時 (DATETIME)',  // 互換エイリアス
            'CLOB':     'CLOB (長文テキスト)'
        },
        en: {
            'VARCHAR2': 'String (VARCHAR2)',
            'NUMBER':   'Number (NUMBER)',
            'DATE':     'Date (DATE)',
            'DATETIME': 'Datetime (DATETIME)',
            'TIMESTAMP': 'Datetime (DATETIME)',
            'CLOB':     'CLOB (Large text)'
        }
    };
    TFC.dataTypeLabel = function (val, lang) {
        var v = val == null ? '' : String(val).toUpperCase();
        var m = DATA_TYPE_MAP[lang === 'en' ? 'en' : 'ja'];
        return (m && m[v]) || v;
    };

    // AUTO-GENERATED by tools/build_value_enum_js.py
    // Source: talon-docs/_TALON仕様分析/DB設定/DB設定マスタ.csv (COL == DB_VALUE entries)
    // 編集禁止 — 再生成するには `python tools/build_value_enum_js.py`
    // 構造: VALUE_ENUMS[<FUNC_KBN>][<DB値>] = <表示名>

    var VALUE_ENUMS = {
        'ALL_REG_FLG': {
            '1': 'ON',
        },
        'ALL_SELECT_CHECK': {
            '1': 'ON',
        },
        'BACK_BUTTON_HDN_FLG': {
            '1': 'ON',
        },
        'BACK_COLOR': {
            '<': '<',
            '<=': '<=',
            '<>': '<>',
            '=': '=',
            '>': '>',
            '>=': '>=',
            'IN': 'IN',
            'INFIX': 'INFIX',
            'IS NOT NULL': 'IS NOT NULL',
            'IS NULL': 'IS NULL',
            'LIKE': 'LIKE',
            'MACRO': 'マクロ',
            'NOT IN': 'NOT IN',
            'NOT LIKE': 'NOT LIKE',
            'PREFIX': 'PREFIX',
            'REG': '正規表現',
            'SUFFIX': 'SUFFIX',
        },
        'BACK_COLOR_TR_KBN_': {
            'MACRO': 'マクロ',
        },
        'BARCODE_FORMAT': {
            '15%': '15%',
            '25%': '25%',
            '30%': '30%',
            '7%': '7%',
            'CODABAR': 'CODABAR',
            'CODE_128': 'CODE 128',
            'CODE_39': 'CODE 39',
            'CODE_93': 'CODE 93',
            'DATA_MATRIX': 'DATA MATRIX',
            'EAN_13': 'EAN 13',
            'EAN_8': 'EAN 8',
            'ITF': 'ITF',
            'QR': 'QR',
            'UPC_A': 'UPC A',
            'UPC_E': 'UPC E',
        },
        'BLOCK': {
            '0': 'ON',
            'C': '中央',
            'C_BTM': '下中央',
            'C_MDL': '中間中央',
            'C_TOP': '上中央',
            'L': '左',
            'L_BTM': '下左',
            'L_MDL': '中間左',
            'L_TOP': '上左',
            'R': '右',
            'R_BTM': '下右',
            'R_MDL': '中間右',
            'R_TOP': '上右',
        },
        'BLOCK_NAME_HDN_FLG': {
            '1': 'ON',
        },
        'BUTTON_AJAX': {
            '1': 'ON',
            'INIT': '画面起動直後から',
            'SEARCH': '初回検索ボタン押下後',
        },
        'BUTTON_BAT': {
            '0': 'OFF',
            '1': 'ON',
        },
        'BUTTON_BAT_': {
            'TLN_LOGIN_BUMON': 'ログイン部門',
            'TLN_LOGIN_USER': 'ログインID',
        },
        'BUTTON_NEXT': {
            '0': '照会',
            '1': 'ON',
            'BTN_BTM': 'ボタンの下',
            'BTN_R': 'ボタンの右',
            'WIN_C_BTM': 'Window中央下',
            'WIN_C_MDL': 'Window中央',
            'WIN_C_TOP': 'Window中央上',
            'WIN_L_BTM': 'Window左下',
            'WIN_L_MDL': 'Window左中央',
            'WIN_L_TOP': 'Window左上',
            'WIN_R_BTM': 'Window右下',
            'WIN_R_MDL': 'Window右中央',
            'WIN_R_TOP': 'Window右上',
        },
        'BUTTON_NEXT_': {
            '1': 'ON',
            '<': '<',
            '<=': '<=',
            '<>': '<>',
            '=': '=',
            '>': '>',
            '>=': '>=',
            'BETWEEN': 'BETWEEN',
            'IN': 'IN',
            'INFIX': 'INFIX',
            'IS NOT NULL': 'IS NOT NULL',
            'IS NULL': 'IS NULL',
            'LIKE': 'LIKE',
            'NOT IN': 'NOT IN',
            'NOT LIKE': 'NOT LIKE',
            'PREFIX': 'PREFIX',
            'SUFFIX': 'SUFFIX',
            'TLN_LOGIN_BUMON': 'ログイン部門',
            'TLN_LOGIN_USER': 'ログインID',
            'day': 'day',
            'dayGridMonth': 'month',
            'halfYear': 'halfYear',
            'hour': 'hour',
            'minute': 'minute',
            'month': 'month',
            'quarterly': 'quarterly',
            'second': 'second',
            'timeGridDay': 'day',
            'timeGridWeek': 'week',
            'week': 'week',
            'year': 'year',
        },
        'BUTTON_REPORT': {
            '1': 'ON',
            '2': 'ボタンと確定後',
            'CLI_DIALOG': 'プリンタダイアログ表示',
            'CLI_PRINTER': '通常使うプリンタに直接出力',
            'DIALOG': 'プリンタダイアログ表示',
            'EXCEL': 'EXCEL',
            'PDF': 'PDF',
            'PREVIEW': 'プレビュー印刷',
            'PRINT': '通常使うプリンタに直接出力',
            'PRINTER': 'サーバプリンタへ直接印刷',
            'WORD': 'WORD',
        },
        'CAMMA_OFF': {
            '1': 'ON',
        },
        'CHART': {
            '0': '照会',
            '1': 'ON',
            '<': '<',
            '<=': '<=',
            '<>': '<>',
            '=': '=',
            '>': '>',
            '>=': '>=',
            'BETWEEN': 'BETWEEN',
            'IN': 'IN',
            'INFIX': 'INFIX',
            'IS NOT NULL': 'IS NOT NULL',
            'IS NULL': 'IS NULL',
            'LIKE': 'LIKE',
            'NOT IN': 'NOT IN',
            'NOT LIKE': 'NOT LIKE',
            'PREFIX': 'PREFIX',
            'SUFFIX': 'SUFFIX',
            'TLN_LOGIN_BUMON': 'ログイン部門',
            'TLN_LOGIN_USER': 'ログインID',
            'WIN_C_BTM': 'Window中央下',
            'WIN_C_MDL': 'Window中央',
            'WIN_C_TOP': 'Window中央上',
            'WIN_L_BTM': 'Window左下',
            'WIN_L_MDL': 'Window左中央',
            'WIN_L_TOP': 'Window左上',
            'WIN_R_BTM': 'Window右下',
            'WIN_R_MDL': 'Window右中央',
            'WIN_R_TOP': 'Window右上',
            'area': '折れ線エリア',
            'area_spline': '曲線エリア',
            'area_step': '階段エリア',
            'bar': '棒',
            'bottom': '下',
            'day': 'day',
            'dayGridMonth': 'month',
            'donut': 'ドーナツ',
            'halfYear': 'halfYear',
            'hour': 'hour',
            'inner-bottom': '枠内下',
            'inner-center': '枠内中央',
            'inner-left': '枠内左',
            'inner-middle': '枠内中央',
            'inner-right': '枠内右',
            'inner-top': '枠内上',
            'line': '折れ線',
            'minute': 'minute',
            'month': 'month',
            'outer-bottom': '枠外下',
            'outer-center': '枠外中央',
            'outer-left': '枠外左',
            'outer-middle': '枠外中央',
            'outer-right': '枠外右',
            'outer-top': '枠外上',
            'pie': '円',
            'quarterly': 'quarterly',
            'ratio': '比率',
            'right': '右',
            'scatter': '散布図',
            'second': 'second',
            'spline': '曲線',
            'step': '階段',
            'timeGridDay': 'day',
            'timeGridWeek': 'week',
            'value': '値',
            'week': 'week',
            'year': 'year',
        },
        'CHART_MARK': {
            '<': '<',
            '<=': '<=',
            '<>': '<>',
            '=': '=',
            '>': '>',
            '>=': '>=',
            'IN': 'IN',
            'INFIX': 'INFIX',
            'IS NOT NULL': 'IS NOT NULL',
            'IS NULL': 'IS NULL',
            'LIKE': 'LIKE',
            'MACRO': 'マクロ',
            'NOT IN': 'NOT IN',
            'NOT LIKE': 'NOT LIKE',
            'PREFIX': 'PREFIX',
            'REG': '正規表現',
            'SUFFIX': 'SUFFIX',
        },
        'CLEAR_BUTTON_HDN_FLG': {
            '1': 'ON',
        },
        'COL_BUTTON_HDN_FLG': {
            '1': 'ON',
        },
        'CONDITION': {
            '0': 'ON',
            'C': '中央',
            'C_BTM': '下中央',
            'C_MDL': '中間中央',
            'C_TOP': '上中央',
            'L': '左',
            'L_BTM': '下左',
            'L_MDL': '中間左',
            'L_TOP': '上左',
            'R': '右',
            'R_BTM': '下右',
            'R_MDL': '中間右',
            'R_TOP': '上右',
        },
        'CONDITION_AREA': {
            '1': '領域削除',
        },
        'COND_SAVE_HDN_FLG': {
            '1': 'ON',
        },
        'CR_FLG_SEARCH': {
            '1': 'ON',
        },
        'CSV_LOAD_BUTTON': {
            '1': 'ON',
        },
        'CSV_LOAD_BUTTON_FILE': {
            '1': 'ON',
            'FIX': '固定長',
            'VAR': '可変長',
        },
        'CSV_LOAD_BUTTON_OPTION': {
            '"': '”',
            '\'': '\'',
            '1': 'ON',
            'CAMMA': 'カンマ',
            'EUC_JP': 'EUC',
            'ISO-2022-JP': 'JISコード',
            'ISO-8859-1': 'ASCII',
            'NULL': 'なし',
            'Shift_JIS': 'Shift_JIS',
            'TAB': 'タブ',
            'UTF-8': 'UTF-8',
        },
        'CSV_OUT_BUTTON': {
            '1': 'ON',
        },
        'CSV_OUT_BUTTON_FILE': {
            'FIX': '固定長',
            'VAR': '可変長',
        },
        'CSV_OUT_BUTTON_OPTION': {
            '"': '”',
            '\'': '\'',
            '1': 'ON',
            'CAMMA': 'カンマ',
            'EUC_JP': 'EUC',
            'ISO-2022-JP': 'JISコード',
            'ISO-8859-1': 'ASCII',
            'NULL': 'なし',
            'Shift_JIS': 'Shift_JIS',
            'TAB': 'タブ',
            'UTF-8': 'UTF-8',
            '\\n': 'Lf',
            '\\r': 'Cr',
            '\\r\\n': 'CrLf',
        },
        'DELETE_FLG': {
            '1': 'ON',
        },
        'DISP_POS': {
            'C': '中央',
            'C_BTM': '下中央',
            'C_MDL': '中間中央',
            'C_TOP': '上中央',
            'L': '左',
            'L_BTM': '下左',
            'L_MDL': '中間左',
            'L_TOP': '上左',
            'R': '右',
            'R_BTM': '下右',
            'R_MDL': '中間右',
            'R_TOP': '上右',
        },
        'DRILL_DOWN': {
            '1': 'ON',
        },
        'EXCELUPDATE_BTN_DISABLED_FLG': {
            '1': 'ON',
        },
        'EXCELUPDATE_BUTTON_HDN_FLG': {
            '1': 'ON',
        },
        'EXCEL_BUTTON_HDN_FLG': {
            '1': 'ON',
        },
        'EXCLUSIVE_CONTROL_FLG': {
            '1': 'ON',
        },
        'EXECUTE_BTN_HDN_FLG': {
            '1': 'ON',
        },
        'EXE_DISP_INIT_FLG': {
            '0': '初期化しない',
            '1': '初期化する',
        },
        'EXE_DISP_TARGET_ONLY_FLG': {
            '1': 'ON',
        },
        'EXE_TARGET_ONLY_FLG_NO_SEARCH': {
            '1': 'ON',
        },
        'FIX_FORMULA': {
            '<': '<',
            '<=': '<=',
            '<>': '<>',
            '=': '=',
            '>': '>',
            '>=': '>=',
            'BETWEEN': 'BETWEEN',
            'IN': 'IN',
            'INFIX': 'INFIX',
            'IS NOT NULL': 'IS NOT NULL',
            'IS NULL': 'IS NULL',
            'LIKE': 'LIKE',
            'NOT IN': 'NOT IN',
            'NOT LIKE': 'NOT LIKE',
            'PREFIX': 'PREFIX',
            'SUFFIX': 'SUFFIX',
        },
        'FLAT_TEXT': {
            '1': 'ON',
        },
        'FORE_COLOR': {
            '1': 'ON',
            '<': '<',
            '<=': '<=',
            '<>': '<>',
            '=': '=',
            '>': '>',
            '>=': '>=',
            'IN': 'IN',
            'INFIX': 'INFIX',
            'IS NOT NULL': 'IS NOT NULL',
            'IS NULL': 'IS NULL',
            'LIKE': 'LIKE',
            'MACRO': 'マクロ',
            'NOT IN': 'NOT IN',
            'NOT LIKE': 'NOT LIKE',
            'PREFIX': 'PREFIX',
            'REG': '正規表現',
            'SUFFIX': 'SUFFIX',
        },
        'FORE_COLOR_TR_KBN_': {
            'MACRO': 'マクロ',
        },
        'FUNC_BUTTON_AREA_BTM': {
            '0': 'ON',
            '1': '領域削除',
            'C': '中央',
            'C_BTM': '下中央',
            'C_MDL': '中間中央',
            'C_TOP': '上中央',
            'L': '左',
            'L_BTM': '下左',
            'L_MDL': '中間左',
            'L_TOP': '上左',
            'R': '右',
            'R_BTM': '下右',
            'R_MDL': '中間右',
            'R_TOP': '上右',
        },
        'FUNC_BUTTON_AREA_HEAD': {
            '0': 'ON',
            '1': '領域削除',
            'C': '中央',
            'C_BTM': '下中央',
            'C_MDL': '中間中央',
            'C_TOP': '上中央',
            'L': '左',
            'L_BTM': '下左',
            'L_MDL': '中間左',
            'L_TOP': '上左',
            'R': '右',
            'R_BTM': '下右',
            'R_MDL': '中間右',
            'R_TOP': '上右',
        },
        'FUNC_BUTTON_AREA_TOP': {
            '0': 'ON',
            '1': '領域削除',
            'C': '中央',
            'C_BTM': '下中央',
            'C_MDL': '中間中央',
            'C_TOP': '上中央',
            'L': '左',
            'L_BTM': '下左',
            'L_MDL': '中間左',
            'L_TOP': '上左',
            'R': '右',
            'R_BTM': '下右',
            'R_MDL': '中間右',
            'R_TOP': '上右',
        },
        'FUNC_TOP_AREA': {
            '0': 'ON',
            '1': '領域削除',
            'C': '中央',
            'C_BTM': '下中央',
            'C_MDL': '中間中央',
            'C_TOP': '上中央',
            'L': '左',
            'L_BTM': '下左',
            'L_MDL': '中間左',
            'L_TOP': '上左',
            'R': '右',
            'R_BTM': '下右',
            'R_MDL': '中間右',
            'R_TOP': '上右',
        },
        'GANTT_DAY_GRID_INIT_VAL': {
            'hour': 'hour',
            'minute': 'minute',
        },
        'GANTT_HALF_YEAR_GRID_INIT_VAL': {
            'month': 'month',
            'week': 'week',
        },
        'GANTT_HOUR_GRID_INIT_VAL': {
            'hour': 'hour',
            'minute': 'minute',
        },
        'GANTT_MONTH_GRID_INIT_VAL': {
            'day': 'day',
            'hour': 'hour',
        },
        'GANTT_ONE_YEAR_GRID_INIT_VAL': {
            'month': 'month',
            'week': 'week',
        },
        'GANTT_QTR_YEAR_GRID_INIT_VAL': {
            'month': 'month',
            'week': 'week',
        },
        'GANTT_WEEK_GRID_INIT_VAL': {
            'day': 'day',
            'hour': 'hour',
        },
        'GANTT_YEARS_GRID_INIT_VAL': {
            'month': 'month',
            'year': 'year',
        },
        'HDN_LIST_SORT': {
            '1': 'ON',
        },
        'HDN_PAGER_FLG': {
            '1': 'ON',
        },
        'INIT_VALUE': {
            'TLN_LOGIN_BUMON': 'ログイン部門',
            'TLN_LOGIN_USER': 'ログインID',
            'TLN_SYSDATE': 'システム日付',
            'TLN_SYSDATE_FST': 'システム月初',
            'TLN_SYSDATE_LST': 'システム月末',
        },
        'INPUT_CONDITION': {
            '1': 'ON',
        },
        'INSERT_FLG': {
            '1': 'ON',
        },
        'IS_ALL_DAY_CHECK_ON': {
            '1': 'OFF',
        },
        'IS_BAR_MOUSE_ALLOW_MOVING': {
            'OFF': 'OFF',
        },
        'IS_BAR_MOUSE_ALLOW_RESIZING': {
            'OFF': 'OFF',
        },
        'IS_BAR_UPDATE_CONFIRM': {
            '1': 'ON',
        },
        'IS_CLOSE_SWITCH': {
            '1': 'ON',
        },
        'IS_CONDITION_TITLE_OFF': {
            '1': 'ON',
        },
        'IS_DB_NOT_REGIST': {
            '1': 'ON',
        },
        'IS_EXECUTE_CONFIRM': {
            '1': 'ON',
        },
        'IS_EXECUTE_MESSAGE_HIDDEN': {
            '1': 'ON',
        },
        'IS_EXE_AUTH': {
            'ON': 'ON',
        },
        'IS_FIT_EVENT_BAR_MAX_WIDTH': {
            '1': 'ON',
        },
        'IS_GANTT_DISP_DAY_BTN': {
            '1': 'OFF',
        },
        'IS_GANTT_DISP_HALF_YEAR_BTN': {
            '1': 'OFF',
        },
        'IS_GANTT_DISP_HOUR_BTN': {
            '1': 'OFF',
        },
        'IS_GANTT_DISP_MONTH_BTN': {
            '1': 'OFF',
        },
        'IS_GANTT_DISP_QUARTERLY_BTN': {
            '1': 'OFF',
        },
        'IS_GANTT_DISP_WEEK_BTN': {
            '1': 'OFF',
        },
        'IS_GANTT_DISP_YEARS_BTN': {
            '1': 'OFF',
        },
        'IS_GANTT_DISP_YEAR_BTN': {
            '1': 'OFF',
        },
        'IS_GRID_SNAP_OFF': {
            '1': 'ON',
        },
        'IS_LIST_FIXED': {
            'ON': 'ON',
        },
        'IS_LIST_ROW_SELECT': {
            '1': 'ON',
        },
        'IS_NOT_WIN_RESIZE': {
            '1': 'ON',
        },
        'IS_ON_RELOAD_ORIGIN_WIN_SIZE': {
            '1': 'ON',
        },
        'IS_SCALE_HIDDEN_DAY': {
            '1': 'OFF',
        },
        'IS_SCALE_HIDDEN_MONTH': {
            '1': 'OFF',
        },
        'IS_SCALE_HIDDEN_WEEK': {
            '1': 'OFF',
        },
        'IS_SCHEDULE_UIWAIT_LOCK': {
            '1': 'ON',
        },
        'IS_SEARCH_NOTFOUND_MSG_HDN': {
            '1': 'ON',
        },
        'IS_ST_ED_TOOLTIP_HIDDEN': {
            '1': 'ON',
        },
        'IS_TASK_GROUING_DISP': {
            '1': 'ON',
        },
        'IS_USE_SEARCH_RESULT_MAIL': {
            '1': 'ON',
        },
        'IS_USE_SEARCH_RESULT_REPORT': {
            '1': 'ON',
        },
        'IS_VERTICAL_LAYOUT': {
            '1': 'ON',
        },
        'IS_WIN_OPENER_CLOSED': {
            'OFF': 'OFF',
        },
        'KEY_COL_BLOCK': {
            '0': '表示しない',
            '1': '表示する',
        },
        'LOOK_UP': {
            'WAIT_LOCK': 'ON',
        },
        'MASTER_CHECK': {
            '1': 'ON',
        },
        'MATCH_PATTERN': {
            '1': 'ON',
            'ALL_MATCH': 'エラー条件',
            'NULL': '許可条件 ※この設定は現在できない',
        },
        'OPEN_WINDOW_MODE': {
            'NEW_WIN': '常に別Window',
            'NORMAL': '別Window (既存あれば上書き)',
            'NORMAL_DIALOG': '別Window (既存あれば警告)',
            'OVER_WRITE': '上書き',
            'OVER_WRITE_SEARCH': '上書き＋親再検索',
        },
        'OPTION_LIST_SEARCH': {
            '1': 'ON',
            'WAIT_LOCK': 'ON',
        },
        'OTHER_FUNC': {
            '1': 'ON',
            'DELETE': '削除',
            'INSERT': '登録',
            'MERGE': '登録/更新',
            'UPDATE': '更新',
        },
        // CHART 系 値辞書
        'CHART_FUNC_INFO': {
            'bar': '棒グラフ',
            'line': '折れ線',
            'pie': '円グラフ',
            'donut': 'ドーナツ',
            'area': '面グラフ',
            'scatter': '散布図',
            'spline': 'スプライン',
            'step': '階段グラフ',
            'area_spline': '面 (スプライン)',
            'area_step': '面 (階段)',
        },
        'CHART_BASE': {
            '1': 'ON',
        },
        'CHART_LEGEND_BASE': {
            '1': 'ON',
            'bottom': '下',
            'right': '右',
            'top': '上',
            'left': '左',
        },
        'CHART_AXIS_X_LABEL_BASE': {
            'inner-right': '内側-右',
            'inner-center': '内側-中央',
            'inner-left': '内側-左',
            'outer-right': '外側-右',
            'outer-center': '外側-中央',
            'outer-left': '外側-左',
        },
        'CHART_AXIS_Y_LABEL_BASE': {
            'inner-top': '内側-上',
            'inner-middle': '内側-中央',
            'inner-bottom': '内側-下',
            'outer-top': '外側-上',
            'outer-middle': '外側-中央',
            'outer-bottom': '外側-下',
        },
        'CHART_AXIS_Y_R_LABEL_BASE': {
            'inner-top': '内側-上',
            'inner-middle': '内側-中央',
            'inner-bottom': '内側-下',
            'outer-top': '外側-上',
            'outer-middle': '外側-中央',
            'outer-bottom': '外側-下',
        },
        'PDF_BUTTON_HDN_FLG': {
            '1': 'ON',
        },
        'REGIST_VALUE': {
            '<': '<',
            '<=': '<=',
            '<>': '<>',
            '=': '=',
            '>': '>',
            '>=': '>=',
            'IN': 'IN',
            'INFIX': 'INFIX',
            'IS NOT NULL': 'IS NOT NULL',
            'IS NULL': 'IS NULL',
            'LIKE': 'LIKE',
            'MACRO': 'マクロ',
            'NOT IN': 'NOT IN',
            'NOT LIKE': 'NOT LIKE',
            'PREFIX': 'PREFIX',
            'REG': '正規表現',
            'SUFFIX': 'SUFFIX',
        },
        'REQUIRED_SEARCH': {
            '1': 'ON',
        },
        'RESULT_AREA': {
            'C': '中央',
            'C_BTM': '下中央',
            'C_MDL': '中間中央',
            'C_TOP': '上中央',
            'L': '左',
            'L_BTM': '下左',
            'L_MDL': '中間左',
            'L_TOP': '上左',
            'R': '右',
            'R_BTM': '下右',
            'R_MDL': '中間右',
            'R_TOP': '上右',
        },
        'SCHEDULE_INIT_SCALE': {
            'day': 'ON',
            'dayGridMonth': '月',
            'halfYear': 'ON',
            'hour': 'ON',
            'month': 'ON',
            'quarterly': 'ON',
            'timeGridDay': '日',
            'timeGridWeek': '週',
            'week': 'ON',
            'year': 'ON',
            'years': 'ON',
        },
        'SCHEDULE_START_WEEK': {
            '0': 'Sun.',
            '1': 'Mon.',
            '2': 'Tue.',
            '3': 'Wed.',
            '4': 'Thu.',
            '5': 'Fri.',
            '6': 'Sat.',
        },
        'SEARCH_BUTTON_HDN_FLG': {
            '1': 'ON',
        },
        'SEARCH_FUNC_ID': {
            'BTN_BTM': 'ボタンの下',
            'BTN_R': 'ボタンの右',
            'WIN_C_BTM': 'Window中央下',
            'WIN_C_MDL': 'Window中央',
            'WIN_C_TOP': 'Window中央上',
            'WIN_L_BTM': 'Window左下',
            'WIN_L_MDL': 'Window左中央',
            'WIN_L_TOP': 'Window左上',
            'WIN_R_BTM': 'Window右下',
            'WIN_R_MDL': 'Window右中央',
            'WIN_R_TOP': 'Window右上',
        },
        'SEARCH_METHOD': {
            '=': '=',
            'BETWEEN': 'BETWEEN',
            'IN': 'IN',
            'INFIX': 'INFIX',
            'NOT IN': 'NOT IN',
            'PREFIX': 'PREFIX',
            'SUFFIX': 'SUFFIX',
        },
        'SEND_MAIL': {
            '1': 'ON',
        },
        'SERIAL_NUMBER_VAL': {
            '1': 'ON',
        },
        'STD_EXCEL_EXT': {
            'xls': 'xls',
            'xlsx': 'xlsx',
        },
        'SUB_BTN_HDN': {
            '1': 'ON',
        },
        'SUB_SEARCH': {
            'INIT_SEARCH': 'ON',
        },
        'SUGGEST': {
            '1': 'ON',
            'INIT_SEARCH': 'ON',
            'SKIP_INIT_SEARCH': 'OFF',
            'WAIT_LOCK': 'ON',
        },
        'TABLE_LAYOUT': {
            '1': 'ON',
        },
        'TABLE_TITLE_LAYOUT': {
            '1': 'ON',
        },
        'TATE_CHECK': {
            '1': 'ON',
        },
        'THUMBNAIL_SIZE': {
            '1': 'ON',
        },
        'UPDATE_FLG': {
            '1': 'ON',
        },
        'VIEW_BUTTON_HDN_FLG': {
            '1': 'ON',
        },
        'WIN_POS': {
            'BTN_BTM': 'ボタンの下',
            'BTN_R': 'ボタンの右',
            'WIN_C_BTM': 'Window中央下',
            'WIN_C_MDL': 'Window中央',
            'WIN_C_TOP': 'Window中央上',
            'WIN_L_BTM': 'Window左下',
            'WIN_L_MDL': 'Window左中央',
            'WIN_L_TOP': 'Window左上',
            'WIN_R_BTM': 'Window右下',
            'WIN_R_MDL': 'Window右中央',
            'WIN_R_TOP': 'Window右上',
        },
        'ZERO_SPLIT': {
            '1': 'ON',
        },
    };
    TFC.VALUE_ENUMS = VALUE_ENUMS;

    TFC.flgLabel = function (val) {
        var v = val == null ? '' : String(val);
        if (v === '1') return '○';
        if (v === '0' || v === '') return '';
        return v;
    };

    // EN 翻訳 (主要エニュメレーションのみ)。VALUE_ENUMS は DB設定マスタ.csv が JA 起源のため
    //   ここで手動 EN 訳を提供。未登録キーは EN モード時に raw コード値だけを返す。
    TFC.VALUE_ENUMS_EN = {
        'OPEN_WINDOW_MODE': {
            'NORMAL':            'New window (overwrite if existing)',
            'NORMAL_DIALOG':     'New window (warn if existing)',
            'NEW_WIN':           'Always new window',
            'OVER_WRITE':        'Overwrite current',
            'OVER_WRITE_SEARCH': 'Overwrite + parent re-search'
        },
        'WIN_POS': {
            'BTN_BTM':   'Below button',
            'BTN_R':     'Right of button',
            'WIN_C_TOP': 'Window center top',
            'WIN_C_MDL': 'Window center middle',
            'WIN_C_BTM': 'Window center bottom',
            'WIN_R_TOP': 'Window right top',
            'WIN_R_MDL': 'Window right middle',
            'WIN_R_BTM': 'Window right bottom',
            'WIN_L_TOP': 'Window left top',
            'WIN_L_MDL': 'Window left middle',
            'WIN_L_BTM': 'Window left bottom'
        },
        'KEY_COL_BLOCK': {
            '1': 'Show key items in block',
            '0': 'Hide key items in block'
        },
        'EXE_DISP_INIT_FLG': {
            '0': 'Do not reset',
            '1': 'Reset to initial'
        }
    };

    // FUNC_KBN ごとの DB 値 → 表示名 解決 (TFC.VALUE_ENUMS / VALUE_ENUMS_EN 参照)。
    //   OPEN_WINDOW_MODE 'NORMAL_DIALOG' → '別Window (既存あれば警告) [NORMAL_DIALOG]' (JA)
    //                                    → 'New window (warn if existing) [NORMAL_DIALOG]' (EN)
    //   未登録は元の値をそのまま返す (EN モードで JA 説明を出さないよう注意)。
    TFC.valueLabel = function (funcKbn, val, lang) {
        var v = val == null ? '' : String(val);
        if (v === '') return '';
        // EN モード: 先に EN 辞書を引く。未登録なら JA 辞書値が ON/OFF 系なら共通翻訳、 それ以外は raw。
        if (lang === 'en') {
            var enDict = (TFC.VALUE_ENUMS_EN || {})[funcKbn];
            if (enDict && enDict[v]) {
                return (enDict[v] === v) ? v : (enDict[v] + ' [' + v + ']');
            }
            // JA 辞書が 'ON'/'OFF'/'表示'/'非表示' といった bool 系を返す場合は EN 共通辞書で翻訳
            // (VALUE_ENUMS_EN を全 FUNC_KBN 分用意するのは現実的でないため、 共通 fallback)
            var jaDictE = (TFC.VALUE_ENUMS || {})[funcKbn];
            if (jaDictE && jaDictE[v]) {
                var commonEn = { 'ON': 'ON', 'OFF': 'OFF', '表示': 'Shown', '非表示': 'Hidden',
                                  '上': 'Top', '下': 'Bottom', '左': 'Left', '右': 'Right',
                                  '中央': 'Middle' };
                var jaV = jaDictE[v];
                if (commonEn[jaV] != null) {
                    return (commonEn[jaV] === v) ? v : (commonEn[jaV] + ' [' + v + ']');
                }
            }
            return v;  // EN 翻訳なし → コード値のみ
        }
        // JA モード: VALUE_ENUMS (JA 辞書) を使用
        var dict = (TFC.VALUE_ENUMS || {})[funcKbn];
        if (!dict) return v;
        var disp = dict[v];
        if (disp == null) return v;
        if (disp === v) return v;
        return disp + ' [' + v + ']';
    };

    // FUNC_KBN ラベルのみ取得 (コード "(...)" 付加なし) — 別列でコードを表示するときに使う
    TFC.fkLabelOnly = function (funcKbn, lang) {
        var info = TFC.funcKbnInfo ? TFC.funcKbnInfo(funcKbn) : null;
        if (!info) return funcKbn || '';
        if (lang === 'en' && info.labelEn) return info.labelEn;
        return info.labelJa || (funcKbn || '');
    };

    // ============================================================
    // FUNC_KBN 辞書 (Phase 3: 全208項目, TALON-DB設定マスタ.md から自動生成)
    // 生成スクリプト: AI開発/scripts/build_func_kbn_dict.py
    //
    // section: 'app-application' | 'app-report' | 'app-othernext' | 'app-ajax'
    //        | 'block-item' | 'block-detail' | 'block-detail-cal'
    //        | 'block-report' | 'block-proc' | 'block-othernext'
    //        | 'block-fileio' | 'block-otherfunc' | 'block-other'
    //        | 'block-chart-general' | 'block-chart-x' | 'block-chart-y'
    //        | 'block-chart-y2' | 'block-chart-series'
    //        | 'free-layout' | 'auth-menu' | 'other'
    // ============================================================
    var FUNC_KBN_DICT = {
    'KEY_COL_BLOCK': { section: 'app-application', labelJa: '機能タイプ', labelEn: 'Function type', table: 'TLN_M_GENERAL_APP' },
    'OPEN_WINDOW_MODE': { section: 'app-application', labelJa: '起動Window状態', labelEn: 'Initial window state', table: 'TLN_M_GENERAL_APP' },
    'WIN_H': { section: 'app-application', labelJa: 'Window高さ', labelEn: 'Window height', table: 'TLN_M_GENERAL_APP' },
    'WIN_W': { section: 'app-application', labelJa: 'Window幅', labelEn: 'Window width', table: 'TLN_M_GENERAL_APP' },
    'WIN_POS_X': { section: 'app-application', labelJa: '表示位置 横', labelEn: 'Position X', table: 'TLN_M_GENERAL_APP' },
    'WIN_POS_Y': { section: 'app-application', labelJa: '表示位置 縦', labelEn: 'Position Y', table: 'TLN_M_GENERAL_APP' },
    'WIN_POS': { section: 'app-application', labelJa: '表示位置', labelEn: 'Display position', table: 'TLN_M_GENERAL_APP' },
    'IS_NOT_WIN_RESIZE': { section: 'app-application', labelJa: 'Windowサイズ変更不可', labelEn: 'Window resize disabled', table: 'TLN_M_GENERAL_APP' },
    'IS_ON_RELOAD_ORIGIN_WIN_SIZE': { section: 'app-application', labelJa: '再描画時、設定したWindow位置サイズに戻す', labelEn: 'Restore window pos/size on redraw', table: 'TLN_M_GENERAL_APP' },
    'IS_WIN_OPENER_CLOSED': { section: 'app-application', labelJa: 'Window終了オプション', labelEn: 'Window close option', table: 'TLN_M_GENERAL_APP' },
    'TAB_MENU_NAME': { section: 'app-application', labelJa: 'ブロック', labelEn: 'Block', table: 'TLN_M_GENERAL_APP' },
    'CHART': { section: 'app-application', labelJa: 'ブロック', labelEn: 'Block', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CONDTN_CNT': { section: 'app-application', labelJa: '検索条件項目数', labelEn: 'Search condition count', table: 'TLN_M_GENERAL_APP' },
    'COND_SAVE_HDN_FLG': { section: 'app-application', labelJa: '検索条件保存', labelEn: 'Save search conditions', table: 'TLN_M_GENERAL_APP' },
    'IS_CONDITION_TITLE_OFF': { section: 'app-application', labelJa: '検索条件タイトル', labelEn: 'Search condition title', table: 'TLN_M_GENERAL_APP' },
    'BACK_BUTTON_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', labelEn: 'Button (hidden)', table: 'TLN_M_GENERAL_APP' },
    'CLEAR_BUTTON_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', labelEn: 'Button (hidden)', table: 'TLN_M_GENERAL_APP' },
    'PDF_BUTTON_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', labelEn: 'Button (hidden)', table: 'TLN_M_GENERAL_APP' },
    'EXCEL_BUTTON_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', labelEn: 'Button (hidden)', table: 'TLN_M_GENERAL_APP' },
    'SEARCH_BUTTON_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', labelEn: 'Button (hidden)', table: 'TLN_M_GENERAL_APP' },
    'EXECUTE_BTN_HDN_FLG': { section: 'app-application', labelJa: 'ボタンの非表示', labelEn: 'Button (hidden)', table: 'TLN_M_GENERAL_APP' },
    'EXECUTE_BTN_CND': { section: 'app-application', labelJa: '確定ボタン', labelEn: 'Confirm button', table: 'TLN_M_GENERAL_APP' },
    'EXECUTE_BTN_NAME_DISP_FORMULA': { section: 'app-application', labelJa: '確定ボタン', labelEn: 'Confirm button', table: 'TLN_M_GENERAL_APP' },
    'EXECUTE_MESSAGE': { section: 'app-application', labelJa: '確定終了メッセージ', labelEn: 'Confirm result message', table: 'TLN_M_GENERAL_APP' },
    'IS_EXECUTE_MESSAGE_HIDDEN': { section: 'app-application', labelJa: '確定終了メッセージ', labelEn: 'Confirm result message', table: 'TLN_M_GENERAL_APP' },
    'IS_EXECUTE_CONFIRM': { section: 'app-application', labelJa: '確定ボタン確認ダイアログ', labelEn: 'Confirm dialog', table: 'TLN_M_GENERAL_APP' },
    'EXE_DISP_INIT_FLG': { section: 'app-application', labelJa: '確定後再表示オプション', labelEn: 'Post-confirm redisplay option', table: 'TLN_M_GENERAL_APP' },
    'EXE_TARGET_ONLY_FLG_NO_SEARCH': { section: 'app-application', labelJa: '確定後再表示オプション', labelEn: 'Post-confirm redisplay option', table: 'TLN_M_GENERAL_APP' },
    'EXE_DISP_TARGET_ONLY_FLG': { section: 'app-application', labelJa: '確定後再表示オプション', labelEn: 'Post-confirm redisplay option', table: 'TLN_M_GENERAL_APP' },
    'IS_EXE_AUTH': { section: 'app-application', labelJa: '確定時認証', labelEn: 'Confirm-time authentication', table: 'TLN_M_GENERAL_APP' },
    'SEND_MAIL': { section: 'app-application', labelJa: '確定後のメール送信', labelEn: 'Send mail after confirm', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SEND_MAIL_': { section: 'app-application', labelJa: '確定後のメール送信', labelEn: 'Send mail after confirm', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'JAVA_SCRIPT_ENGINE': { section: 'app-application', labelJa: 'DB検索JavaScript', labelEn: 'DB search JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'PL_SQL_NAME_SEARCH': { section: 'app-application', labelJa: 'DB検索プロシージャ名', labelEn: 'DB search procedure name', table: 'TLN_M_GENERAL_APP' },
    'PL_SQL_NAME_SEARCH_AFTER': { section: 'app-application', labelJa: 'DB検索プロシージャ名', labelEn: 'DB search procedure name', table: 'TLN_M_GENERAL_APP' },
    'PL_SQL_NAME': { section: 'app-application', labelJa: 'プロシージャ名', labelEn: 'Procedure name', table: 'TLN_M_GENERAL_APP' },
    'PL_SQL_NAME_AFTER': { section: 'app-application', labelJa: 'プロシージャ名', labelEn: 'Procedure name', table: 'TLN_M_GENERAL_APP' },
    'ACCESS_DB': { section: 'app-application', labelJa: 'DB接続先', labelEn: 'DB connection', table: 'TLN_M_GENERAL_APP' },
    'JAVA_SCRIPT': { section: 'app-application', labelJa: 'Client-side JavaScript', labelEn: 'Client-side JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSS': { section: 'app-application', labelJa: 'CSS', labelEn: 'CSS', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'JOIN': { section: 'app-application', labelJa: '結合項目', labelEn: 'Join items', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_DSP_POS': { section: 'app-application', labelJa: 'ボタン位置移動', labelEn: 'Button position', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_REPORT': { section: 'app-report', labelJa: 'EXCEL', labelEn: 'Excel', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    // ALL_OPT は BUTTON_REPORT.COL_NAME の値 (= 「追加オプション」) であり FUNC_KBN ではない。
    // 表示は subCategoryPrefix (update-before.server.js) で COL_NAME='ALL_OPT' 検出時に解決する。
    'BUTTON_NEXT': { section: 'app-othernext', labelJa: '機能画面設定', labelEn: 'Function screen setting', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_AJAX': { section: 'app-ajax', labelJa: 'ボタン名', labelEn: 'Button name', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_AJAX_CLIENT_JAVASCRIPT': { section: 'app-ajax', labelJa: '再表示ブロック', labelEn: 'Refresh block', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_AJAX_': { section: 'app-ajax', labelJa: 'DB検索前JavaScript', labelEn: 'Pre-search JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CR_FLG_SEARCH': { section: 'block-item', labelJa: '検索改行', labelEn: 'Search line break', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'REQUIRED_SEARCH': { section: 'block-item', labelJa: '検索必須', labelEn: 'Search required', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'IS_DB_NOT_REGIST': { section: 'block-item', labelJa: 'DB更新無し', labelEn: 'No DB update', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TABLE_LAYOUT': { section: 'block-item', labelJa: 'ROW SPAN', labelEn: 'ROW SPAN', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TABLE_TITLE_LAYOUT': { section: 'block-item', labelJa: 'タイトルROW SPAN', labelEn: 'Title ROW SPAN', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SEARCH_METHOD': { section: 'block-item', labelJa: '検索方式', labelEn: 'Search method', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'DISP_POS': { section: 'block-item', labelJa: '表示位置', labelEn: 'Display position', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TAB_INDEX_SEARCH': { section: 'block-item', labelJa: 'Tab index(検索)', labelEn: 'Tab index (search)', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TAB_INDEX': { section: 'block-item', labelJa: 'Tab index', labelEn: 'Tab index', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CAMMA_OFF': { section: 'block-item', labelJa: 'カンマ編集無し', labelEn: 'No comma editing', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'ZERO_SPLIT': { section: 'block-item', labelJa: '小数点ゼロ埋め', labelEn: 'Pad decimals with zero', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'ALL_SELECT_CHECK': { section: 'block-item', labelJa: 'コンポーネント', labelEn: 'Component', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TATE_CHECK': { section: 'block-item', labelJa: 'コンポーネント', labelEn: 'Component', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'OPTION_LIST_FUNC_ID': { section: 'block-item', labelJa: 'オプションリスト機能ID', labelEn: 'Option list function ID', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'OPTION_LIST_SEARCH': { section: 'block-item', labelJa: 'オプションリスト機能ID', labelEn: 'Option list function ID', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CLASS_CODE': { section: 'block-item', labelJa: '階層コード/レベル', labelEn: 'Hierarchy code / level', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'NEST': { section: 'block-item', labelJa: '階層コード/レベル', labelEn: 'Hierarchy code / level', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'INPUT_CONDITION': { section: 'block-item', labelJa: '入力許可パターン', labelEn: 'Input allow pattern', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'MATCH_PATTERN': { section: 'block-item', labelJa: '入力チェックパターン', labelEn: 'Input check pattern', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SEARCH_FUNC_ID': { section: 'block-item', labelJa: '検索子画面', labelEn: 'Sub search screen', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SUB_SEARCH': { section: 'block-item', labelJa: '検索子画面', labelEn: 'Sub search screen', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SUB_BTN_HDN': { section: 'block-item', labelJa: '子画面非表示', labelEn: 'Sub screen hidden', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'MASTER_CHECK': { section: 'block-item', labelJa: 'マスタチェック', labelEn: 'Master check', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'LOOK_UP_FUNC_ID': { section: 'block-item', labelJa: 'LOOKUP', labelEn: 'LOOKUP', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'LOOK_UP': { section: 'block-item', labelJa: 'LOOKUP', labelEn: 'LOOKUP', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'FOCUS_OUT_JAVASCRIPT': { section: 'block-item', labelJa: 'FOCUS OUT', labelEn: 'FOCUS OUT', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'FLAT_TEXT': { section: 'block-item', labelJa: '値保持', labelEn: 'Value retention', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SUGGEST_FUNC_ID': { section: 'block-item', labelJa: 'SUGGEST', labelEn: 'SUGGEST', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SUGGEST': { section: 'block-item', labelJa: 'SUGGEST', labelEn: 'SUGGEST', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'PRINTING_UPDATE': { section: 'block-item', labelJa: '印刷時更新項目', labelEn: 'Print-time update items', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'FORE_COLOR': { section: 'block-item', labelJa: '文字色', labelEn: 'Foreground color', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BACK_COLOR': { section: 'block-item', labelJa: '背景色', labelEn: 'Background color', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'INIT_VALUE_TEXT': { section: 'block-item', labelJa: '検索条件初期値', labelEn: 'Search initial value', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'INIT_VALUE': { section: 'block-item', labelJa: '検索条件初期値', labelEn: 'Search initial value', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'REGIST_VALUE': { section: 'block-item', labelJa: 'DB設定式', labelEn: 'DB set formula', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'FIX_FORMULA': { section: 'block-item', labelJa: '固定条件式', labelEn: 'Fixed condition formula', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SAIBAN_SIKIBETU_CODE': { section: 'block-item', labelJa: '採番名', labelEn: 'Numbering name', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'SERIAL_NUMBER_VAL': { section: 'block-item', labelJa: 'シリアル番号加算値', labelEn: 'Serial number increment', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'JAVASCRIPT': { section: 'block-item', labelJa: 'JavaScript呼出ボタン', labelEn: 'JavaScript call button', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'JAVASCRIPT_ENGINE': { section: 'block-item', labelJa: 'JavaScript呼出ボタン', labelEn: 'JavaScript call button', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BARCODE_FORMAT': { section: 'block-item', labelJa: 'EXCEL帳票', labelEn: 'Excel report', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'THUMBNAIL_SIZE': { section: 'block-item', labelJa: 'サムネイル・バーコードサイズ', labelEn: 'Thumbnail / barcode size', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'IMG_UPLOAD_SIZE': { section: 'block-item', labelJa: 'アップロードファイルサイズ', labelEn: 'Upload file size', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'DRILL_DOWN': { section: 'block-item', labelJa: 'ドリルダウンレベル項目', labelEn: 'Drill-down level item', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'HDN_LIST_SORT': { section: 'block-item', labelJa: '明細ソート無し', labelEn: 'No row sorting', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'TITLE_NOTE': { section: 'block-item', labelJa: 'タイトルツールチップ', labelEn: 'Title tooltip', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'MAX_LINE_COUNT': { section: 'block-detail', labelJa: '画面最大行数', labelEn: 'Max rows on screen', table: 'TLN_M_GENERAL_APP' },
    'MAX_LINE_COUNT_EXCEL': { section: 'block-detail', labelJa: '標準Excel出力最大行数', labelEn: 'Standard Excel max rows', table: 'TLN_M_GENERAL_APP' },
    'MAX_LINE_CNT_EXCEL_UPDATE': { section: 'block-detail', labelJa: '更新Excel出力最大行数', labelEn: 'Update Excel max rows', table: 'TLN_M_GENERAL_APP' },
    'ADD_LINE_VAL_INIT': { section: 'block-detail', labelJa: '追加行の初期値', labelEn: 'Initial values for added rows', table: 'TLN_M_GENERAL_APP' },
    'STD_EXCEL_EXT': { section: 'block-detail', labelJa: '標準Excel拡張子', labelEn: 'Standard Excel extension', table: 'TLN_M_GENERAL_APP' },
    'LIST_PAGE_ROWS': { section: 'block-detail', labelJa: '初期ページ内行数', labelEn: 'Initial rows per page', table: 'TLN_M_GENERAL_APP' },
    'LIST_PAGE_DROPDOWN': { section: 'block-detail', labelJa: '改頁行数選択リスト', labelEn: 'Rows-per-page dropdown list', table: 'TLN_M_GENERAL_APP' },
    'SPACE_HEIGHT': { section: 'block-detail', labelJa: '表示高さ', labelEn: 'Display height', table: 'TLN_M_GENERAL_APP' },
    'IS_VERTICAL_LAYOUT': { section: 'block-detail', labelJa: '行見出しレイアウト', labelEn: 'Row header layout', table: 'TLN_M_GENERAL_APP' },
    'HDN_PAGER_FLG': { section: 'block-detail', labelJa: '改ページしない', labelEn: 'No pagination', table: 'TLN_M_GENERAL_APP' },
    'BLOCK_NAME_HDN_FLG': { section: 'block-detail', labelJa: 'ブロック名フィールドを非表示', labelEn: 'Hide block name field', table: 'TLN_M_GENERAL_APP' },
    'IS_SEARCH_NOTFOUND_MSG_HDN': { section: 'block-detail', labelJa: '検索結果０件メッセージを非表示', labelEn: 'Hide no-results message', table: 'TLN_M_GENERAL_APP' },
    'IS_CLOSE_SWITCH': { section: 'block-detail', labelJa: '開閉表示状態', labelEn: 'Open/close state', table: 'TLN_M_GENERAL_APP' },
    'IS_LIST_ROW_SELECT': { section: 'block-detail', labelJa: '明細行の編集方式', labelEn: 'Row edit mode', table: 'TLN_M_GENERAL_APP' },
    'IS_LIST_FIXED': { section: 'block-detail', labelJa: '明細列の固定', labelEn: 'Pinned columns', table: 'TLN_M_GENERAL_APP' },
    'EXCELUPDATE_BUTTON_HDN_FLG': { section: 'block-detail', labelJa: 'ボタンの非表示', labelEn: 'Button (hidden)', table: 'TLN_M_GENERAL_APP' },
    'VIEW_BUTTON_HDN_FLG': { section: 'block-detail', labelJa: 'ボタンの非表示', labelEn: 'Button (hidden)', table: 'TLN_M_GENERAL_APP' },
    'COL_BUTTON_HDN_FLG': { section: 'block-detail', labelJa: 'ボタンの非表示', labelEn: 'Button (hidden)', table: 'TLN_M_GENERAL_APP' },
    'EXCELUPDATE_BTN_DISABLED_FLG': { section: 'block-detail', labelJa: '検索前ボタンの非活性', labelEn: 'Disable button before search', table: 'TLN_M_GENERAL_APP' },
    'INSERT_FLG': { section: 'block-detail', labelJa: '処理権限', labelEn: 'Process permission', table: 'TLN_M_GENERAL_APP' },
    'UPDATE_FLG': { section: 'block-detail', labelJa: '処理権限', labelEn: 'Process permission', table: 'TLN_M_GENERAL_APP' },
    'DELETE_FLG': { section: 'block-detail', labelJa: '処理権限', labelEn: 'Process permission', table: 'TLN_M_GENERAL_APP' },
    'EXCLUSIVE_CONTROL_FLG': { section: 'block-detail', labelJa: '確定時オプション', labelEn: 'Confirm option', table: 'TLN_M_GENERAL_APP' },
    'ALL_REG_FLG': { section: 'block-detail', labelJa: '確定時オプション', labelEn: 'Confirm option', table: 'TLN_M_GENERAL_APP' },
    'IS_USE_SEARCH_RESULT_REPORT': { section: 'block-detail', labelJa: '確定時オプション', labelEn: 'Confirm option', table: 'TLN_M_GENERAL_APP' },
    'IS_USE_SEARCH_RESULT_MAIL': { section: 'block-detail', labelJa: '確定時オプション', labelEn: 'Confirm option', table: 'TLN_M_GENERAL_APP' },
    'PLSQL_PARAM_COL': { section: 'block-detail', labelJa: 'プロシージャ名', labelEn: 'Procedure name', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'LISTSELECT_BTN_CND': { section: 'block-detail', labelJa: '参照ボタン', labelEn: 'View button', table: 'TLN_M_GENERAL_APP' },
    'LISTSEL_BTN_NAME_DISP_FORMULA': { section: 'block-detail', labelJa: '参照ボタン', labelEn: 'View button', table: 'TLN_M_GENERAL_APP' },
    'COPY_DL_BTN_CND': { section: 'block-detail', labelJa: '複写ボタン', labelEn: 'Copy button', table: 'TLN_M_GENERAL_APP' },
    'COPY_DL_BTN_NAME_DISP_FORMULA': { section: 'block-detail', labelJa: '複写ボタン', labelEn: 'Copy button', table: 'TLN_M_GENERAL_APP' },
    'ADDLINE_DL_BTN_CND': { section: 'block-detail', labelJa: '行追加ボタン', labelEn: 'Add-row button', table: 'TLN_M_GENERAL_APP' },
    'ADDLINE_BTN_NAME_DISP_FORMULA': { section: 'block-detail', labelJa: '行追加ボタン', labelEn: 'Add-row button', table: 'TLN_M_GENERAL_APP' },
    'DELETE_BTN_CND': { section: 'block-detail', labelJa: '削除ボタン', labelEn: 'Delete button', table: 'TLN_M_GENERAL_APP' },
    'DELETE_BTN_NAME_DISP_FORMULA': { section: 'block-detail', labelJa: '削除ボタン', labelEn: 'Delete button', table: 'TLN_M_GENERAL_APP' },
    'FORE_COLOR_TR_CODE_': { section: 'block-detail', labelJa: '行文字色', labelEn: 'Row foreground color', table: 'TLN_M_GENERAL_APP' },
    'FORE_COLOR_TR_KBN_': { section: 'block-detail', labelJa: '行文字色', labelEn: 'Row foreground color', table: 'TLN_M_GENERAL_APP' },
    'FORE_COLOR_TR_CND_': { section: 'block-detail', labelJa: '行文字色', labelEn: 'Row foreground color', table: 'TLN_M_GENERAL_APP' },
    'BACK_COLOR_TR_CODE_': { section: 'block-detail', labelJa: '行背景色', labelEn: 'Row background color', table: 'TLN_M_GENERAL_APP' },
    'BACK_COLOR_TR_KBN_': { section: 'block-detail', labelJa: '行背景色', labelEn: 'Row background color', table: 'TLN_M_GENERAL_APP' },
    'BACK_COLOR_TR_CND_': { section: 'block-detail', labelJa: '行背景色', labelEn: 'Row background color', table: 'TLN_M_GENERAL_APP' },
    'SAVE_BTN_CND': { section: 'block-detail', labelJa: '保存ボタン', labelEn: 'Save button', table: 'TLN_M_GENERAL_APP' },
    'SAVE_BTN_NAME_DISP_FORMULA': { section: 'block-detail', labelJa: '保存ボタン', labelEn: 'Save button', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_TITLE_COL': { section: 'block-detail', labelJa: 'タスクコード', labelEn: 'Task code', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_GRID_TOP': { section: 'block-detail', labelJa: '時間グリッドのスクロールTOP', labelEn: 'Time grid scroll TOP', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_FROM_DATE_COL': { section: 'block-detail', labelJa: '開始日時', labelEn: 'Start datetime', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_TO_DATE_COL': { section: 'block-detail', labelJa: '終了日時', labelEn: 'End datetime', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_START_WEEK': { section: 'block-detail', labelJa: '開始曜日', labelEn: 'Start day of week', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_INIT_SCALE': { section: 'block-detail', labelJa: '描画期間初期値', labelEn: 'Initial draw period', table: 'TLN_M_GENERAL_APP' },
    'IS_SCALE_HIDDEN_MONTH': { section: 'block-detail', labelJa: '描画期間スケールボタン表示', labelEn: 'Scale button visibility', table: 'TLN_M_GENERAL_APP' },
    'IS_SCALE_HIDDEN_WEEK': { section: 'block-detail', labelJa: '描画期間スケールボタン表示', labelEn: 'Scale button visibility', table: 'TLN_M_GENERAL_APP' },
    'IS_SCALE_HIDDEN_DAY': { section: 'block-detail', labelJa: '描画期間スケールボタン表示', labelEn: 'Scale button visibility', table: 'TLN_M_GENERAL_APP' },
    'IS_ALL_DAY_CHECK_ON': { section: 'block-detail', labelJa: 'All Day チェックボックス状態', labelEn: 'All-day checkbox state', table: 'TLN_M_GENERAL_APP' },
    'CALENDAR_SIKIBETU_CODE': { section: 'block-detail', labelJa: 'カレンダー識別コード', labelEn: 'Calendar code', table: 'TLN_M_GENERAL_APP' },
    'IS_BAR_UPDATE_CONFIRM': { section: 'block-detail', labelJa: 'イベントバーの変更時確認', labelEn: 'Confirm bar update', table: 'TLN_M_GENERAL_APP' },
    'IS_SCHEDULE_UIWAIT_LOCK': { section: 'block-detail', labelJa: '処理中ロック', labelEn: 'Lock while processing', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_TITLE_DISP_COL': { section: 'block-detail', labelJa: 'タスク表示名', labelEn: 'Task display name', table: 'TLN_M_GENERAL_APP' },
    'IS_TASK_GROUING_DISP': { section: 'block-detail', labelJa: 'タスク名の全種表示', labelEn: 'Show all task names', table: 'TLN_M_GENERAL_APP' },
    'TASK_AREA_WIDTH': { section: 'block-detail', labelJa: 'タスク領域幅', labelEn: 'Task area width', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_EVENT_TEXT_COL': { section: 'block-detail', labelJa: 'イベント内容項目', labelEn: 'Event content field', table: 'TLN_M_GENERAL_APP' },
    'IS_FIT_EVENT_BAR_MAX_WIDTH': { section: 'block-detail', labelJa: 'イベント内容項目', labelEn: 'Event content field', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_EVENT_TOOLTIP_COL': { section: 'block-detail', labelJa: 'ツールチップ項目', labelEn: 'Tooltip field', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_UNIQUE_COL': { section: 'block-detail', labelJa: '関係線KEY項目', labelEn: 'Relation key field', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_CONNECT_FROM_COL': { section: 'block-detail', labelJa: '関係線FROM', labelEn: 'Relation FROM', table: 'TLN_M_GENERAL_APP' },
    'SCHEDULE_CONNECT_TO_COL': { section: 'block-detail', labelJa: '関係線TO', labelEn: 'Relation TO', table: 'TLN_M_GENERAL_APP' },
    'LABEL_DSP_CNT': { section: 'block-detail', labelJa: '日時ラベル最大表示数', labelEn: 'Max date labels', table: 'TLN_M_GENERAL_APP' },
    'IS_GRID_SNAP_OFF': { section: 'block-detail', labelJa: 'イベントバーのグリッドスナップ', labelEn: 'Snap bar to grid', table: 'TLN_M_GENERAL_APP' },
    'IS_ST_ED_TOOLTIP_HIDDEN': { section: 'block-detail', labelJa: '開始-終了日時ツールチップ', labelEn: 'Start/end datetime tooltip', table: 'TLN_M_GENERAL_APP' },
    'IS_BAR_MOUSE_ALLOW_RESIZING': { section: 'block-detail', labelJa: 'イベントバーのマウス操作', labelEn: 'Bar mouse interaction', table: 'TLN_M_GENERAL_APP' },
    'IS_BAR_MOUSE_ALLOW_MOVING': { section: 'block-detail', labelJa: 'イベントバーのマウス操作', labelEn: 'Bar mouse interaction', table: 'TLN_M_GENERAL_APP' },
    // GANTT 固有設定 (カタログ §7C 準拠): スケールボタン表示8種 + グリッド初期値8種 + 時間スケール3種
    'IS_GANTT_DISP_HOUR_BTN':    { section: 'block-detail', labelJa: 'スケールボタン > 時ボタン表示',       labelEn: 'Scale btn > Hour',         table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_DAY_BTN':     { section: 'block-detail', labelJa: 'スケールボタン > 日ボタン表示',       labelEn: 'Scale btn > Day',          table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_WEEK_BTN':    { section: 'block-detail', labelJa: 'スケールボタン > 週ボタン表示',       labelEn: 'Scale btn > Week',         table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_MONTH_BTN':   { section: 'block-detail', labelJa: 'スケールボタン > 月ボタン表示',       labelEn: 'Scale btn > Month',        table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_QUARTERLY_BTN': { section: 'block-detail', labelJa: 'スケールボタン > 四半期ボタン表示', labelEn: 'Scale btn > Quarter',      table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_HALF_YEAR_BTN': { section: 'block-detail', labelJa: 'スケールボタン > 半年ボタン表示',   labelEn: 'Scale btn > Half year',    table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_YEAR_BTN':    { section: 'block-detail', labelJa: 'スケールボタン > 年ボタン表示',       labelEn: 'Scale btn > Year',         table: 'TLN_M_GENERAL_APP' },
    'IS_GANTT_DISP_YEARS_BTN':   { section: 'block-detail', labelJa: 'スケールボタン > 複数年ボタン表示',   labelEn: 'Scale btn > Multi-year',   table: 'TLN_M_GENERAL_APP' },
    'GANTT_HOUR_GRID_INIT_VAL':  { section: 'block-detail', labelJa: 'グリッド初期値 > 時グリッド',         labelEn: 'Grid init > Hour',         table: 'TLN_M_GENERAL_APP' },
    'GANTT_DAY_GRID_INIT_VAL':   { section: 'block-detail', labelJa: 'グリッド初期値 > 日グリッド',         labelEn: 'Grid init > Day',          table: 'TLN_M_GENERAL_APP' },
    'GANTT_WEEK_GRID_INIT_VAL':  { section: 'block-detail', labelJa: 'グリッド初期値 > 週グリッド',         labelEn: 'Grid init > Week',         table: 'TLN_M_GENERAL_APP' },
    'GANTT_MONTH_GRID_INIT_VAL': { section: 'block-detail', labelJa: 'グリッド初期値 > 月グリッド',         labelEn: 'Grid init > Month',        table: 'TLN_M_GENERAL_APP' },
    'GANTT_QTR_YEAR_GRID_INIT_VAL': { section: 'block-detail', labelJa: 'グリッド初期値 > 四半期グリッド',  labelEn: 'Grid init > Quarter',      table: 'TLN_M_GENERAL_APP' },
    'GANTT_HALF_YEAR_GRID_INIT_VAL': { section: 'block-detail', labelJa: 'グリッド初期値 > 半年グリッド',   labelEn: 'Grid init > Half year',    table: 'TLN_M_GENERAL_APP' },
    'GANTT_ONE_YEAR_GRID_INIT_VAL': { section: 'block-detail', labelJa: 'グリッド初期値 > 年グリッド',      labelEn: 'Grid init > Year',         table: 'TLN_M_GENERAL_APP' },
    'GANTT_YEARS_GRID_INIT_VAL': { section: 'block-detail', labelJa: 'グリッド初期値 > 複数年グリッド',     labelEn: 'Grid init > Multi-year',   table: 'TLN_M_GENERAL_APP' },
    'GANTT_HOUR_FROM_INIT_VAL':  { section: 'block-detail', labelJa: '時間スケール > 時間FROM初期値',       labelEn: 'Time scale > Hour FROM',   table: 'TLN_M_GENERAL_APP' },
    'GANTT_HOUR_LIMIT_INIT_VAL': { section: 'block-detail', labelJa: '時間スケール > 時間LIMIT初期値',      labelEn: 'Time scale > Hour LIMIT',  table: 'TLN_M_GENERAL_APP' },
    'GANTT_YEARS_INIT_VAL':      { section: 'block-detail', labelJa: '時間スケール > 複数年初期値',         labelEn: 'Time scale > Multi-year',  table: 'TLN_M_GENERAL_APP' },
    'GANTT_REF_UPDATE_TABLE':    { section: 'block-detail', labelJa: 'GANTT参照更新テーブル',              labelEn: 'GANTT ref update table',   table: 'TLN_M_GENERAL_APP' },
    'BUTTON_BAT': { section: 'block-proc', labelJa: 'JavaScript', labelEn: 'JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_BAT_CLIENT_JAVASCRIPT': { section: 'block-proc', labelJa: 'JavaScript', labelEn: 'JavaScript', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_BAT_': { section: 'block-proc', labelJa: 'プロシージャ', labelEn: 'Procedure', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'BUTTON_NEXT_': { section: 'block-othernext', labelJa: '設定（機能ID指定あり）', labelEn: 'Settings (with function ID)', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_OUT_BUTTON': { section: 'block-fileio', labelJa: 'ファイル出力', labelEn: 'File output', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_OUT_BUTTON_OPTION': { section: 'block-fileio', labelJa: 'ファイル出力', labelEn: 'File output', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_OUT_BUTTON_FILE': { section: 'block-fileio', labelJa: 'ファイル出力', labelEn: 'File output', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_OUT_BUTTON_COL': { section: 'block-fileio', labelJa: 'ファイル出力', labelEn: 'File output', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_LOAD_BUTTON': { section: 'block-fileio', labelJa: 'DB登録', labelEn: 'DB register', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_LOAD_BUTTON_OPTION': { section: 'block-fileio', labelJa: 'DB登録', labelEn: 'DB register', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_LOAD_BUTTON_FILE': { section: 'block-fileio', labelJa: 'DB登録', labelEn: 'DB register', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CSV_LOAD_BUTTON_COL': { section: 'block-fileio', labelJa: 'DB登録', labelEn: 'DB register', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'OTHER_FUNC': { section: 'block-otherfunc', labelJa: '式', labelEn: 'Formula', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'OTHER_FUNC_': { section: 'block-otherfunc', labelJa: '項目設定', labelEn: 'Item setting', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'UPDATE_TABLE': { section: 'block-other', labelJa: 'SELECT式', labelEn: 'SELECT formula', table: 'TLN_M_GENERAL_APP' },
    'OTHER_BLOCK_FUNC': { section: 'block-other', labelJa: '他ブロック', labelEn: 'Other block', table: 'TLN_M_GENERAL_APP' },
    'CHART_MARK': { section: 'block-chart-series', labelJa: 'マーカー', labelEn: 'Marker', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    // CHART タブ群 (カタログ §8 準拠) — 全般 / 凡例 / X軸 / Y軸 / Y2軸 / 系列
    'CHART_FUNC_INFO':                 { section: 'block-chart-base',  labelJa: 'グラフ種類',           labelEn: 'Chart type',                table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_BASE':                      { section: 'block-chart-base',  labelJa: '全般',                 labelEn: 'General',                   table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_LEGEND_BASE':               { section: 'block-chart-base',  labelJa: '凡例',                 labelEn: 'Legend',                    table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_AXIS_X_BASE':               { section: 'block-chart-axis-x', labelJa: 'X軸 基本',            labelEn: 'X axis',                    table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_AXIS_X_LABEL_BASE':         { section: 'block-chart-axis-x', labelJa: 'X軸 タイトルラベル',   labelEn: 'X axis label',              table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_AXIS_X_TICK_BASE':          { section: 'block-chart-axis-x', labelJa: 'X軸 目盛りラベル',     labelEn: 'X axis tick',               table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_GRID_X_BASE':               { section: 'block-chart-axis-x', labelJa: 'X軸 グリッド',         labelEn: 'X axis grid',               table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_AXIS_Y_BASE':               { section: 'block-chart-axis-y', labelJa: 'Y軸 基本',            labelEn: 'Y axis',                    table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_AXIS_Y_LABEL_BASE':         { section: 'block-chart-axis-y', labelJa: 'Y軸 タイトルラベル',   labelEn: 'Y axis label',              table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_AXIS_Y_TICK_BASE':          { section: 'block-chart-axis-y', labelJa: 'Y軸 目盛りラベル',     labelEn: 'Y axis tick',               table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_GRID_Y_BASE':               { section: 'block-chart-axis-y', labelJa: 'Y軸 グリッド',         labelEn: 'Y axis grid',               table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_AXIS_Y_R_BASE':             { section: 'block-chart-axis-y2', labelJa: 'Y2軸 基本',          labelEn: 'Y2 axis',                   table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_AXIS_Y_R_LABEL_BASE':       { section: 'block-chart-axis-y2', labelJa: 'Y2軸 タイトルラベル', labelEn: 'Y2 axis label',             table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_AXIS_Y_R_TICK_BASE':        { section: 'block-chart-axis-y2', labelJa: 'Y2軸 目盛りラベル',   labelEn: 'Y2 axis tick',              table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_SERIES_BASE':               { section: 'block-chart-series', labelJa: '系列 基本',            labelEn: 'Series',                    table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_SERIES_ONCLICK':            { section: 'block-chart-series', labelJa: '系列 ドリルダウン',     labelEn: 'Series drill-down',         table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'CHART_SERIES_ONCLICK_WINSIZE':    { section: 'block-chart-series', labelJa: '系列 ドリルダウン Window 寸法', labelEn: 'Drill-down window size', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    'FUNC_TOP_AREA': { section: 'free-layout', labelJa: '機能実行画面デザイン', labelEn: 'Function screen design', table: 'TLN_M_GENERAL_POSITION' },
    'FUNC_BUTTON_AREA_HEAD': { section: 'free-layout', labelJa: '機能実行画面デザイン', labelEn: 'Function screen design', table: 'TLN_M_GENERAL_POSITION' },
    'CONDITION_AREA': { section: 'free-layout', labelJa: '機能実行画面デザイン', labelEn: 'Function screen design', table: 'TLN_M_GENERAL_POSITION' },
    'FUNC_BUTTON_AREA_TOP': { section: 'free-layout', labelJa: '機能実行画面デザイン', labelEn: 'Function screen design', table: 'TLN_M_GENERAL_POSITION' },
    'RESULT_AREA': { section: 'free-layout', labelJa: '機能実行画面デザイン', labelEn: 'Function screen design', table: 'TLN_M_GENERAL_POSITION' },
    'FUNC_BUTTON_AREA_BTM': { section: 'free-layout', labelJa: '機能実行画面デザイン', labelEn: 'Function screen design', table: 'TLN_M_GENERAL_POSITION' },
    'BLOCK': { section: 'free-layout', labelJa: 'ブロックデザイン(明細)', labelEn: 'Block design (list)', table: 'TLN_M_GENERAL_POSITION' },
    'CONDITION': { section: 'free-layout', labelJa: 'ブロックデザイン(検索条件)', labelEn: 'Block design (search)', table: 'TLN_M_GENERAL_POSITION' },

    // === DB スキャンで未対応だった追加分 (TLN_M_GENERAL_APP) ===
    'EXECUTE_BTN_DISP_NAME': { section: 'app-application', labelJa: '確定ボタン表示名', labelEn: 'Confirm button display name', table: 'TLN_M_GENERAL_APP' },
    'HELP_LINK_NM': { section: 'app-application', labelJa: 'ヘルプリンク表示名', labelEn: 'Help link name', table: 'TLN_M_GENERAL_APP' },
    'HELP_URL': { section: 'app-application', labelJa: 'ヘルプURL', labelEn: 'Help URL', table: 'TLN_M_GENERAL_APP' },

    // === DB スキャンで未対応だった追加分 (TLN_M_GENERAL_ITEM_OPTN) ===
    //  ※ BUTTON_AJAX_<N>, BUTTON_BAT_<N>, BUTTON_NEXT_<N>, OTHER_FUNC_<N>, SEND_MAIL_<N> 系は
    //    _<digits> サフィックスのフォールバック解決でカバーされる (TFC.funcKbnInfo 参照)
    //  ※ PLOT / PLOT_BTN_CND / PLOT_COL / PLOT_COL_MARKER_STYLE / PLOT_COL_PIE_OPTION は
    //     TALON 6.2 ソースに存在せず削除 (CHART 系は CHART_BASE / CHART_SERIES_BASE 等に置き換え済)
    'BUTTON_LIST_OPT': { section: 'block-otherfunc', labelJa: 'LIST明細選択ボタンオプション', labelEn: 'LIST row select button option', table: 'TLN_M_GENERAL_ITEM_OPTN' },

    // === DB設定マスタ.csv (talon-docs) との突合で判明した追加分 ===
    // 機能タブ アプリケーション (FUNC_SEQ=-1)
    'SEARCH_FLG': { section: 'app-application', labelJa: '検索ボタン表示', labelEn: 'Show search button', table: 'TLN_M_GENERAL_APP' },
    'CLEAR_FLG': { section: 'app-application', labelJa: 'クリアボタン表示', labelEn: 'Show clear button', table: 'TLN_M_GENERAL_APP' },
    'EXCEL_OUT_FLG': { section: 'app-application', labelJa: 'Excel出力ボタン表示', labelEn: 'Show Excel out button', table: 'TLN_M_GENERAL_APP' },
    'PDF_OUT_FLG': { section: 'app-application', labelJa: 'PDF出力ボタン表示', labelEn: 'Show PDF out button', table: 'TLN_M_GENERAL_APP' },

    // ブロック設定 詳細 (FUNC_SEQ != -1) — _<N> サフィックス連番系の基底キーとして登録
    'BACK_COLOR_TR_CODE': { section: 'block-detail', labelJa: '行背景色 動的キー', labelEn: 'Row background color (dynamic key)', table: 'TLN_M_GENERAL_APP' },
    'FORE_COLOR_TR_CODE': { section: 'block-detail', labelJa: '行文字色 動的キー', labelEn: 'Row foreground color (dynamic key)', table: 'TLN_M_GENERAL_APP' },

    // ブロック 検索呼出 (DLプロシージャ)
    'PL_SQL_NAME_DL': { section: 'block-proc', labelJa: '検索前プロシージャ (引出)', labelEn: 'Pre-search procedure (DL)', table: 'TLN_M_GENERAL_APP' },
    'PL_SQL_NAME_AFTER_DL': { section: 'block-proc', labelJa: '検索後プロシージャ (引出)', labelEn: 'Post-search procedure (DL)', table: 'TLN_M_GENERAL_APP' },

    // 項目情報 (TLN_M_GENERAL_ITEM_OPTN)
    'ZERO_INT': { section: 'block-item', labelJa: 'ゼロ値ハイフン表示', labelEn: 'Show hyphen for zero', table: 'TLN_M_GENERAL_ITEM_OPTN' },
    };

    
    // FUNC_KBN は同種設定が複数登録されると `_<N>` 連番サフィックスが付くことがある
    //   例: BUTTON_NEXT, BUTTON_NEXT_0, BUTTON_NEXT_1, ... (同じ FUNC_KBN 系列を別レコードとして保持)
    //   この場合、辞書に基底キーがあればフォールバックで該当エントリを返す
    function _resolveBaseKbn(funcKbn) {
        if (!funcKbn) return null;
        if (FUNC_KBN_DICT[funcKbn]) return FUNC_KBN_DICT[funcKbn];
        // _<digits> 末尾を削って再検索
        var m = funcKbn.match(/^(.+?)_(\d+)$/);
        if (m && FUNC_KBN_DICT[m[1]]) return FUNC_KBN_DICT[m[1]];
        return null;
    }

    TFC.funcKbnInfo = function (funcKbn) {
        return _resolveBaseKbn(funcKbn);
    };

    TFC.isKnownFuncKbn = function (funcKbn) {
        return _resolveBaseKbn(funcKbn) != null;
    };

    // FUNC_KBN コード → 「ラベル (コード)」形式の表示文字列。
    //   lang='en' で labelEn があればそれを使用、なければ labelJa にフォールバック。
    //   labelEn の翻訳率は段階的に上げる方針。
    TFC.fkLabel = function (funcKbn, lang) {
        var info = _resolveBaseKbn(funcKbn);
        if (!info) return funcKbn || '';
        var label = null;
        if (lang === 'en' && info.labelEn) label = info.labelEn;
        if (!label) label = info.labelJa;
        return label ? (label + ' (' + funcKbn + ')') : (funcKbn || '');
    };

    // ============================================================
    // HTML テンプレート部品
    // ============================================================
    // favicon: TALON ロゴを 32x32 PNG に縮小し base64 化したもの (data URL で各HTMLに埋め込み)
    //   元画像: _local/talon_cs2 - ロゴ（イメージ）.png (252x243 RGBA)
    //   _local/favicon_32.png 経由で生成 / 約 1.5KB → base64 約 2KB
    TFC.FAVICON_DATA_URL = 'data:image/png;base64,' +
        'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAFxElEQVR42uWWXYgdZxnHf887X+fs2bPb' +
        'PUk0bSLSFlFaP/ADxAvpBsWLNpRo2YJYK60liY3bbUwolV6cHCkI0qpUQ+1aP8CLyMYgNSUfbWyyF2KF' +
        'VFHjYkWsF8KaZLO753POzLzzPl6cs5tuY9PdNb3yD8PMMMzz/Oed////vMI1hQr6ulsBEOWaY2zKY0o9' +
        'pvrnatWst5RcU2L3P1tGhgKoA8NQ8IWDn7vEwy/eQaH8TZJWjiIUSoakOc53PjPtr351VRBRdh95B2Hh' +
        '22B8wBKVApLGr3lq+ySDN0wRlT9OOmzxQ488uwi8D5ERwuIHyLogAkEBuq3rAFZP4MABAZSgWCYqfwE/' +
        'hDyDUgXSOAMmEbMBPxrBpuCF4HLtSyMl7VryzCIipF0PsGsjsAQjOWkcY5MA1QzTCDA0e43o4rIMdRaX' +
        '+ah2++8EhAWfLPYRgbAASctfH4E8FbxihPEMuTUYz6Aa9J9eR2EoQAkICmDnK1SrhgW7QLf1KjbNQAVj' +
        'PNTW10fACxWhi+YBQobmAXgpAM4eozX/d7JOTtrxcPkluNXnqd+c4BZOUZy9bMlXnrHrdIEK1TMRjYvC' +
        '0CalEQnt0DL5sWw9xlm7C/aeHGHR+zqm4tGwOdGAh8z/FjjMQyf2URi6kawNJvDJbYPvfvoR9r30UcKB' +
        '+4mbDgxERYNNnubJbefW7oIkqTC4cT9+CDaBYhm69etR/QUTJ/dS2bqF+ix4AbQupcAjOL2V4vCDONez' +
        'YXEIFmdPAefWnmCBsyTtJnHDoQ5cDrh5RJQ8fZy51ybpNmZJYgtyftkdcT0j6cQk7d61agqwdgIu8igM' +
        'ljEmw9pDLJ6/nYXZx9h55HoGKqd54rZdpPF2NDdA1MtbNWACIAAJwASYnv7WRqB62ieJO8SNcRZmb6Ld' +
        'ehSjN7Lh3b+kNPwXooG/8vALP+HcKzPYxICGlzXkVh6rFqGqcOCMR22bhZpj5zNzUHqVkc0HUe6kOGSw' +
        'KSRtJbeg7jWma13ec+Rd5HkCQFuPk89/iDTudZZU8LN/Xt2GqsJhDHdLDsDOX21kcPBeYCdR6b2oQtIG' +
        'dbaXD4HgbJv2+ZsZqOygOBLRbTdpDx+6mkXl6l8M7Dq6hWJxN8Y8QFTajE3ApvlSMAOCOsvgRp/Gv/dg' +
        '3Tk2bJ1GFdpzCTYbxosrMPQR0k7vPb9oSJtn+cFdF/w3BIyHiAUsu45uoVTcA+YBwuIm0hjihgUxCN7r' +
        'CDvCkk/70p+Y/d2zbP3kDHHT4jJQ5vje7Ql7T32K8qaf0Vns2bBQhqbsAJ7zL6+EKDUs901tYmTjXsSM' +
        'U6oMksX0ppsPmntvWDXFGAdqSFv3cMMnHqU4fDOdxQQvDBBn+i7ISGOHTS2CkPoenrc0DbXX/MHnNxMW' +
        '92PMOFEpJK7PUZ+dwUij32ozfvh+8hyW9l3qcoojPq25Jzj42T8zceLniAEviAgLEKeDPesaBXFAP4lE' +
        'enWWXDB+bCte+EN80yDPdrN44WUS+y9+vKO5Qh8Tx79GVH6yr2YlGvRpL/ye2eZjjE15xM0vIVIhiR1Z' +
        'W3C210XyEsUhH8395SRM22GfgCgcu0incxeTd3auHDwInDHUtlliDiGdbyHGw/g5Nu2Qtu7h8N0pVTXU' +
        '5Ox/Dy9eJl7cR9pxqEpPuPrHK11QPd3XxKijhi7vaHvFla8e/SDhwB9wLqdY9mnO3cf3t/+U6mmf2jZL' +
        'VQ0zhy/XvGVMqYlb7TSUZetdgTMGyPHCD+NHYHyf1sKPVjQH3rTZkrVXDLfRHBH1Vyj6zTBzUQFF3R0U' +
        'ykL9wln42x7Gpjxqo/lb771Fl/aAy6itOv+rvbD58nPvZP90nf3Ti3zl+ZuWf83/iFUUGDWAUo6+yMDI' +
        'EN3653l6+z+YUu+t/u+1gIAKt1V9Jl5sMX7sGyvF+nZjqdFDxx9n4uQLb0fzqxerjeZUqz4LLif2x0CF' +
        'Gjn/f6iq6c2Ma4//AF9eqeub4bVbAAAAAElFTkSuQmCC';
    TFC.FAVICON_LINK = '<link rel="icon" type="image/png" href="' + TFC.FAVICON_DATA_URL + '">';

    TFC.htmlHead = function (titleText, lang) {
        var l = lang || 'ja';
        var t = TFC.escapeHtml(titleText);
        return '<!DOCTYPE html>\n' +
            '<html lang="' + l + '">\n' +
            '<head>\n' +
            '<meta charset="UTF-8">\n' +
            '<meta name="viewport" content="width=device-width,initial-scale=1.0">\n' +
            // ★ <head> 内で scrollRestoration=manual を確定 (戻る時の auto scroll と我々の scrollTo の競合を回避)
            //   <body> 末尾 script に置くと、ブラウザの auto restoration が先に走ってしまう。
            '<script>if("scrollRestoration" in history){try{history.scrollRestoration="manual";}catch(e){}}</script>\n' +
            TFC.FAVICON_LINK + '\n' +
            '<title>' + t + '</title>\n' +
            '<style>' + TFC.CSS + '</style>\n' +
            '</head>\n<body>\n';
    };

    TFC.htmlTail = function () {
        return '\n<script>' + TFC.JS_TAIL + '</script>\n</body>\n</html>\n';
    };

    TFC.tabBadge = function (isOn, count, lang) {
        var l = (lang === 'en') ? 'en' : 'ja';
        if (isOn) {
            var unit = TFC.t('badge.unit', l);
            var on = '● ' + TFC.t('badge.set', l) + ' (' + count + (unit ? ' ' + unit : '') + ')';
            return '<span class="tab-status tab-status-on">' + on + '</span>';
        }
        return '<span class="tab-status tab-status-off">○ ' + TFC.t('badge.none', l) + '</span>';
    };

    TFC.htmlSection = function (titleHtml, bodyHtml, classes) {
        var c = classes ? ' ' + classes : '';
        var body = bodyHtml || '';
        // body 内に展開可能 <details> が複数含まれる場合、タブ単位の「全展開/全閉じる」
        // ツールバーを上部に自動付加。tab-on (= 設定あり) のセクションのみ対象。
        var isOn = c.indexOf('tab-on') >= 0;
        if (isOn && (body.match(/<details/g) || []).length >= 2) {
            var lang = (typeof TFC.LANG === 'string' && TFC.LANG) ? TFC.LANG : 'ja';
            var btnLblExp = (lang === 'en') ? 'Expand all' : '全て展開';
            var btnLblCls = (lang === 'en') ? 'Collapse all' : '全て閉じる';
            body = '<div class="tfc-item-toolbar">' +
                '<button class="tfc-item-toolbar-btn" onclick="tfcTabExpandAll(this)">▶ ' + btnLblExp + '</button>' +
                '<button class="tfc-item-toolbar-btn" onclick="tfcTabCollapseAll(this)">▼ ' + btnLblCls + '</button>' +
                '</div>' + body;
        }
        return '<details class="screen-section' + c + '">\n' +
            '<summary>' + titleHtml + '</summary>\n' +
            '<div class="section-body">\n' + body + '\n</div>\n' +
            '</details>\n';
    };

    // よくある「タブセクション = ラベル + バッジ + body」パターンの便利ラッパ。
    //   labelKey: TFC.t() のキー (例: 'sec.funcDesc')
    //   bodyHtml: セクション本文 (空文字列なら off 扱い)
    //   count:    バッジ件数 (省略時は body が空でなければ 1 扱い)
    //   lang:     'ja' | 'en'
    // body が空なら tab-off + 件数 0、そうでなければ tab-on + 件数 N を表示する。
    TFC.tabSection = function (labelKey, bodyHtml, count, lang) {
        var hasBody = bodyHtml != null && String(bodyHtml).length > 0;
        var n = (count == null) ? (hasBody ? 1 : 0) : count;
        var on = n > 0 && hasBody;
        var summary = TFC.t(labelKey, lang) + ' ' + TFC.tabBadge(on, n, lang);
        return TFC.htmlSection(summary, hasBody ? bodyHtml : '', on ? 'tab-on' : 'tab-off');
    };

    /* 初期表示: 全設定タブは func-card (1レベル目) のみ open、内側はすべて close
       全展開・全閉じ・カードのみ・設定ありのみ等の操作は controls ボタンから行う
       ★ 注意: 「全閉じ」は FuncDoc.html (details.func-card がある画面) でしか望ましくない。
                Domains.html / DomainMatrix.html / er-diagram.html 等の他ページでは details
                の構造が違うので、 func-card が無い場合はこのロジック自体をスキップする。 */
    TFC.JS_TAIL =
        "document.addEventListener('DOMContentLoaded',function(){" +
        // FuncDoc.html (= details.func-card を持つ) でのみ全閉じ + カード展開を行う。
        // 他ページでは details の初期状態を尊重 (HTML の open 属性に従う)
        "if(document.querySelector('details.func-card')){" +
        "document.querySelectorAll('details').forEach(function(d){d.open=false;});" +
        "document.querySelectorAll('details.func-card,details.shared-card').forEach(function(d){d.open=true;});" +
        "}" +
        // コードブック sidebar クリック → 対象コードブロックへスムーズスクロール + フラッシュ表示
        "document.querySelectorAll('.tfc-cb-side a').forEach(function(a){" +
        "a.addEventListener('click',function(ev){" +
        "var hr=a.getAttribute('href')||'';" +
        "if(hr.charAt(0)!=='#')return;" +
        "var tgt=document.getElementById(hr.substring(1));" +
        "if(!tgt)return;" +
        "ev.preventDefault();" +
        "document.querySelectorAll('.tfc-cb-side a.tfc-cb-active').forEach(function(x){x.classList.remove('tfc-cb-active');});" +
        "a.classList.add('tfc-cb-active');" +
        "document.querySelectorAll('.tfc-fn-block.tfc-fn-target').forEach(function(x){x.classList.remove('tfc-fn-target');});" +
        "tgt.classList.add('tfc-fn-target');" +
        "tgt.scrollIntoView({behavior:'smooth',block:'start'});" +
        "});" +
        "});" +
        "});" +
        "function tfcAll(open){document.querySelectorAll('details').forEach(function(d){d.open=open;});}" +
        "function tfcCardOnly(){document.querySelectorAll('details.func-card,details.shared-card').forEach(function(d){d.open=true;});" +
        "document.querySelectorAll('details.func-card details, details.shared-card details').forEach(function(d){d.open=false;});}" +
        "function tfcOnOnly(){document.querySelectorAll('details').forEach(function(d){d.open=true;});" +
        "document.querySelectorAll('details.tab-off').forEach(function(d){d.open=false;});}";

    // 仕様書 §8 の色パレットを採用
    TFC.CSS = "body{font-family:'Segoe UI',Meiryo,sans-serif;background:#f1f5f9;color:#1e293b;margin:0;padding:0 12px 32px;line-height:1.55}" +
        "h1{font-size:1.5em;margin:18px 0 8px}" +
        ".meta{font-size:.9em;color:#475569;margin-bottom:6px}" +
        ".legend{font-size:.85em;color:#475569;margin:6px 0}" +
        ".controls{position:sticky;top:0;background:#fff;padding:8px;border-bottom:1px solid #cbd5e1;z-index:10;margin-bottom:12px}" +
        ".controls button{margin-right:6px;padding:4px 10px;font-size:.9em;cursor:pointer;border:1px solid #94a3b8;background:#f8fafc;border-radius:3px}" +
        ".controls button:hover{background:#e2e8f0}" +
        "details.func-card{border:2px solid #cbd5e1;border-radius:6px;background:#fff;margin:14px 0;padding:6px 10px}" +
        "details.func-card[open]{border-color:#7dd3fc}" +
        "details.func-card>summary{font-weight:bold;font-size:1.1em;cursor:pointer;padding:4px 0}" +
        "details.shared-card{border:2px solid #f59e0b;border-radius:6px;background:#fef3c7;margin:14px 0;padding:6px 10px}" +
        "details.block-card{border:1px solid #7dd3fc;border-radius:4px;margin:8px 0;padding:4px 8px;background:#f0f9ff}" +
        "details.screen-section{border:1px solid #e2e8f0;border-radius:3px;margin:6px 0;padding:4px 8px;background:#f8fafc}" +
        "details.screen-section.tab-on{border-color:#86efac;background:#f0fdf4}" +
        "details.screen-section.tab-off{border-color:#e2e8f0;background:#f8fafc;opacity:.85}" +
        "details>summary{cursor:pointer;outline:none}" +
        ".tab-status{font-size:.85em;margin-left:8px}" +
        ".tab-status-on{color:#15803d}" +
        ".tab-status-off{color:#94a3b8}" +
        ".section-body{padding:6px 0 6px 12px}" +
        "table.kv{border-collapse:collapse;margin:4px 0;width:auto}" +
        "table.kv th,table.kv td{border:1px solid #cbd5e1;padding:3px 8px;font-size:.92em;text-align:left;vertical-align:top}" +
        "table.kv th{background:#f1f5f9;color:#475569;white-space:nowrap;min-width:160px}" +
        "table.kv td.val{background:#fff}" +
        "table.kv td.kv-code{background:#f8fafc;color:#64748b;font-size:.78em;width:1%;white-space:nowrap;font-family:Consolas,monospace}" +
        "table.kv-compact{table-layout:auto;width:auto}" +
        "table.kv-compact th{min-width:0;padding:2px 6px;white-space:nowrap;font-size:.85em}" +
        "table.kv-compact td{padding:2px 6px;font-size:.88em;white-space:nowrap;max-width:280px;overflow:hidden;text-overflow:ellipsis}" +
        "table.kv-compact td:hover{overflow:visible;white-space:normal;background:#fef3c7}" +
        "code,pre{font-family:Consolas,'Courier New',monospace}" +
        "pre.sql-code,pre.js-code{background:#0f172a;color:#a5f3fc;padding:8px 10px;border-radius:4px;overflow:auto;font-size:.85em;margin:4px 0;white-space:pre-wrap;word-break:break-word}" +
        "details.tfc-code-box{display:block;margin:4px 0;border-left:3px solid #38bdf8;padding-left:8px;background:#f0f9ff}" +
        "details.tfc-code-box>summary{cursor:pointer;color:#0369a1;font-weight:bold;padding:4px 6px;list-style:none}" +
        "details.tfc-code-box>summary::-webkit-details-marker{display:none}" +
        "details.tfc-code-box>summary::before{content:'\\25B8';display:inline-block;margin-right:6px;transition:transform .15s}" +
        "details.tfc-code-box[open]>summary::before{transform:rotate(90deg)}" +
        "details.tfc-code-box .tfc-code-len{color:#64748b;font-weight:normal;font-size:.85em}" +
        ".kbn{display:inline-block;background:#fef3c7;color:#b45309;padding:1px 6px;border-radius:3px;font-size:.82em;font-family:Consolas,monospace}";

    // ============================================================
    // PG 由来 SELECT 結果の キー大文字化 (DB 横断対応)
    //   PostgreSQL は bare alias を lowercase 化するため、 row['FUNC_ID'] (uppercase 直書き)
    //   ではアクセスできない。 全 row を JS object に変換 + キーを uppercase 化して、
    //   コード本体は DB 種別を意識せず row['FUNC_ID'] で書けるようにする。
    //   - TALON.select() / TALON.getBlockData_List() 等の戻り値はすべて selectU 経由が望ましい
    //   - 副作用なしの純粋な正規化 (元の Java Map は変更しない)
    // ============================================================
    TFC.normalizeRows = function (rows) {
        if (rows == null) return rows;
        var n = (typeof rows.size === 'function') ? rows.size() : rows.length;
        for (var ni = 0; ni < n; ni++) {
            var src = rows[ni];
            if (src == null) continue;
            if (typeof src.entrySet !== 'function') continue;  // 既に純 JS object 化済
            var dst = {};
            var iter = src.entrySet().iterator();
            while (iter.hasNext()) {
                var e = iter.next();
                dst[String(e.getKey()).toUpperCase()] = e.getValue();
            }
            if (typeof rows.set === 'function') rows.set(ni, dst);
        }
        return rows;
    };
    // TFC.selectU(sql): TALON.select() のラッパで返り値を normalize する。
    // DB 横断の SELECT は必ずこれを使うこと (PG / SQL Server / MySQL / Oracle 共通)
    // ※ ユーザー入力を含む WHERE 句がある場合は TFC.selectPS (PreparedStatement) を使うこと。
    TFC.selectU = function (sql) { return TFC.normalizeRows(TALON.select(sql)); };

    // TFC.selectUByConn(conn, sql): 任意の DB 接続 (= 複数DB接続の外部 DB) で SELECT。
    //   conn は TALON.getOtherDBConn("N") (N=1..15) で取得する TalonConfig。
    //   主 TALON DB の場合は TFC.selectU でも TALON.getDbConfig() でも可。
    //   manual §5.20.10 / API 4.8.3 準拠。
    //
    //   Nashorn ではグローバル TalonDbUtil が利用可能 (TALON が import 済)。
    //   存在判定は typeof で行う (Java.type 解決の package パスに依存しない)。
    TFC.selectUByConn = function (conn, sql) {
        if (!conn) return TFC.selectU(sql);
        if (typeof TalonDbUtil === 'undefined') {
            // フォールバック: TalonDbUtil グローバルが見つからない → 主 DB の TALON.select で代替
            try { TALON.getLogger().writeWarn('[TFC] selectUByConn: TalonDbUtil グローバル未定義 → 主 DB で代替'); } catch (ig) {}
            return TFC.selectU(sql);
        }
        return TFC.normalizeRows(TalonDbUtil.select(conn, sql));
    };

    // ============================================================
    // SQL インジェクション対策 (PreparedStatement パターン)
    //   セキュア設定マニュアル「6.1. ＳＱＬインジェクション対応」の
    //   V6.2.18 以前バージョン向け実装に準拠。
    //   ユーザー入力 (検索条件・チェック行の値・URL パラメータ等) を SQL に
    //   組み込む箇所では 必ず TFC.selectPS / TFC.updatePS を使うこと。
    //
    //   使い方:
    //     var rows = TFC.selectPS(
    //         "SELECT FUNC_ID, FUNC_NM FROM TLN_M_GENERAL_FUNC WHERE FUNC_ID = ?",
    //         [funcId]                                           // ← JS Array で OK
    //     );
    //     // rows: [{FUNC_ID: 'TLN_FUNC_DOC', FUNC_NM: '...'}, ...] (キーは uppercase 正規化済)
    //
    //     var cnt = TFC.updatePS(
    //         "UPDATE tln_m_general_item SET col_name = ? WHERE func_id = ? AND col_name = ?",
    //         [lowerNm, funcId, upperNm]
    //     );
    // ============================================================
    var _HashMap = Java.type('java.util.HashMap');

    // 内部: Connection 取得 (トランザクション未開始時は beginTransaction)
    function _getConn(dbConfig) {
        try {
            return dbConfig.getDataSource().getConnection();
        } catch (e) {
            try { TalonDbUtil.beginTransaction(dbConfig); }
            catch (e2) { /* 既に begin 済 */ }
            return dbConfig.getDataSource().getConnection();
        }
    }

    // 内部: PreparedStatement にパラメータを bind (setObject で型自動判別)
    function _bindParams(stmt, params) {
        if (params == null) return;
        var n = (typeof params.length === 'function') ? params.length() :
                (typeof params.length === 'number'   ? params.length    : params.size());
        for (var i = 0; i < n; i++) {
            var v = (typeof params.get === 'function') ? params.get(i) : params[i];
            stmt.setObject(i + 1, v);
        }
    }

    // 内部: ResultSet を [{COL_NAME: value, ...}, ...] 形式 (uppercase キー) で読み出し
    function _readResultSet(rs) {
        var md = rs.getMetaData();
        var nc = md.getColumnCount();
        var result = [];
        while (rs.next()) {
            var row = {};
            for (var c = 1; c <= nc; c++) {
                // getColumnLabel は AS 句の alias も取れる。 PG では lowercase で返るが
                // uppercase に正規化して DB 横断対応とする。
                row[String(md.getColumnLabel(c)).toUpperCase()] = rs.getObject(c);
            }
            result.push(row);
        }
        // selectU (Java List) との互換性のため size() メソッドを生やす
        result.size = function () { return this.length; };
        return result;
    }

    /**
     * SELECT を PreparedStatement で実行 (SQL インジェクション安全).
     * @param sql プレースホルダ「?」を含む SELECT 文
     * @param params JS Array または java.util.ArrayList (省略可)
     * @returns Array<{COL_NAME: value, ...}> (uppercase キー)
     */
    TFC.selectPS = function (sql, params) {
        var dbConfig = TALON.getDbConfig();
        var conn = _getConn(dbConfig);
        var stmt = null, rs = null;
        try {
            stmt = conn.prepareStatement(sql);
            _bindParams(stmt, params);
            rs = stmt.executeQuery();
            return _readResultSet(rs);
        } finally {
            if (rs != null)   { try { rs.close();   } catch (e) {} }
            if (stmt != null) { try { stmt.close(); } catch (e) {} }
            // Connection は TALON のトランザクション管理対象のため close しない
        }
    };

    /**
     * INSERT/UPDATE/DELETE を PreparedStatement で実行.
     * @param sql プレースホルダ「?」を含む SQL
     * @param params JS Array または java.util.ArrayList (省略可)
     * @returns 影響行数 (int)
     */
    TFC.updatePS = function (sql, params) {
        var dbConfig = TALON.getDbConfig();
        var conn = _getConn(dbConfig);
        var stmt = null;
        try {
            stmt = conn.prepareStatement(sql);
            _bindParams(stmt, params);
            return stmt.executeUpdate();
        } finally {
            if (stmt != null) { try { stmt.close(); } catch (e) {} }
            // Connection は閉じない (上記と同じ理由)
        }
    };

    // ============================================================
    // DB タイプ判定 (実行時) — JDBC DatabaseMetaData ベース
    //   返り値: 'oracle' | 'postgres' | 'mysql' | 'sqlserver' | 'db2'
    //          | 'cdata' | 'cdata-<subdriver>' (例: 'cdata-salesforce')
    //          | 'unknown'
    //
    //   実装は Connection.getMetaData() の URL + productName を見て分類する:
    //     1. URL prefix 優先 (確実)  jdbc:oracle: / jdbc:postgresql: / jdbc:mysql:
    //                                jdbc:mariadb: / jdbc:sqlserver: / jdbc:microsoft:sqlserver:
    //                                jdbc:db2: / jdbc:cdata:<sub>:
    //     2. URL から取れない場合: productName のキーワードでマッチ
    //          'Oracle...' → oracle, 'PostgreSQL...' → postgres, 'DB2/...' → db2,
    //          'MySQL...' → mysql, 'Microsoft SQL Server' → sqlserver,
    //          '...CData...' → cdata
    //     3. 不明: productName をそのまま小文字化して返す (見えない種別を残す)
    //
    //   キャッシュ無し: getMetaData() は JDBC pool が最適化済みで安価 (probe SQL 4 本より高速)。
    //     deploy 後の stale を避けるため毎回新規に判定する。
    // ============================================================

    // 内部: URL prefix と productName から正規化 DB type を導出
    function _classifyDbType(url, productName) {
        var u = String(url || '').toLowerCase();
        var p = String(productName || '').toLowerCase();
        // CData: jdbc:cdata:salesforce:User=... → 'cdata-salesforce'
        //   サブドライバ識別子 (salesforce/rest/excel/...) を含めて返す
        var mC = u.match(/^jdbc:cdata:([a-z0-9_]+)/);
        if (mC) return 'cdata-' + mC[1];
        if (u.indexOf('jdbc:oracle:') === 0)        return 'oracle';
        if (u.indexOf('jdbc:postgresql:') === 0)    return 'postgres';
        if (u.indexOf('jdbc:mysql:') === 0)         return 'mysql';
        if (u.indexOf('jdbc:mariadb:') === 0)       return 'mysql';
        if (u.indexOf('jdbc:sqlserver:') === 0)     return 'sqlserver';
        if (u.indexOf('jdbc:microsoft:sqlserver:') === 0) return 'sqlserver';
        if (u.indexOf('jdbc:db2:') === 0)           return 'db2';
        // CData 直接サブプロトコル URL (cdata: prefix 無し): jdbc:googlesheets: / jdbc:salesforce: /
        //   jdbc:kintone: / jdbc:rest: / jdbc:excel: 等。 CData JDBC ドライバは バージョン/設定で
        //   URL prefix が 'jdbc:cdata:<sub>:' か 'jdbc:<sub>:' の両形式を取りうるため、
        //   既知 RDB 以外の jdbc:<X>: URL は CData サブドライバ '<X>' として扱う
        //   (sys_tables / sys_tablecolumns カタログにフォールバックして スキーマ取得を試みる)。
        var mP = u.match(/^jdbc:([a-z0-9_]+):/);
        if (mP) return 'cdata-' + mP[1];
        // URL でマッチしない場合は productName で判定
        if (p.indexOf('cdata') >= 0)        return 'cdata';
        if (p.indexOf('oracle') >= 0)       return 'oracle';
        if (p.indexOf('postgresql') >= 0)   return 'postgres';
        if (p.indexOf('mysql') >= 0)        return 'mysql';
        if (p.indexOf('mariadb') >= 0)      return 'mysql';
        if (p.indexOf('microsoft sql server') >= 0 || p.indexOf('sql server') >= 0) return 'sqlserver';
        if (p.indexOf('db2') === 0 || p.indexOf('db2 ') >= 0 || p.indexOf('db2/') >= 0) return 'db2';
        // 不明な種別は productName を返す (独自JDBCに対応)
        return p || 'unknown';
    }

    // 内部: URL から データベース/サービス/カタログ名を抽出
    //   例:
    //     jdbc:oracle:thin:@//host:1521/XEPDB1                 → 'XEPDB1'
    //     jdbc:oracle:thin:@host:1521:XEPDB1                   → 'XEPDB1' (SID)
    //     jdbc:postgresql://host:5432/mydb                     → 'mydb'
    //     jdbc:mysql://host:3306/mydb?useSSL=false             → 'mydb'
    //     jdbc:sqlserver://host:1433;databaseName=mydb;...     → 'mydb'
    //     jdbc:db2://host:50000/mydb                           → 'mydb'
    //     jdbc:cdata:salesforce:User=u@org.com;OAuthClientId=… → '' (catalog 経由で取得)
    function _dbNameFromUrl(url) {
        if (!url) return '';
        var u = String(url);
        // Oracle service name (slash 経由)
        var mOraSvc = u.match(/jdbc:oracle:[^:]+:@\/\/[^\/]+\/([^?;]+)/i);
        if (mOraSvc) return mOraSvc[1];
        // Oracle SID (colon 経由)
        var mOraSid = u.match(/jdbc:oracle:[^:]+:@[^:\/]+:\d+:([^?;]+)/i);
        if (mOraSid) return mOraSid[1];
        // PG / MySQL / MariaDB / DB2
        var mDb = u.match(/jdbc:(?:postgresql|mysql|mariadb|db2):\/\/[^\/]+\/([^?;]+)/i);
        if (mDb) return mDb[1];
        // SQL Server (databaseName=xxx 形式)
        var mSs = u.match(/databaseName=([^;]+)/i);
        if (mSs) return mSs[1];
        return '';
    }

    // 内部: TalonConfig (= getOtherDBConn の戻り値) または null から JDBC metadata 経由で
    //   DB type / URL / DB 名 / productName を取得。 null = 主 TALON DB。
    //   返り値: { type: 'oracle'|...'cdata-salesforce'|'unknown',
    //            url: string, dbName: string, productName: string }
    //
    //   トランザクション扱い:
    //     主 DB はもうユーザー処理がトランザクション内にいる前提。 外部 DB は
    //     getOtherDBConn 直後の状態で getDataSource().getConnection() が
    //     TransactionNotYetBegunException を投げる。 そのため
    //       try dbConfig.begin() → connection → metadata → dbConfig.rollback()
    //     の順で 検出専用の短命トランザクションを張る。 既に begin 済の場合は
    //     2 度目の begin() は失敗するので、 そのときは rollback もスキップする。
    function _detectDbInfoViaMetaData(dbConfig) {
        var cfg = dbConfig || TALON.getDbConfig();
        var beganHere = false;
        var info = { type: 'unknown', url: '', dbName: '', productName: '' };
        try {
            try { cfg.begin(); beganHere = true; } catch (eB) { /* 既に begin 済 */ }
            var conn = cfg.getDataSource().getConnection();
            var md  = conn.getMetaData();
            try { info.url         = String(md.getURL() || ''); } catch (eU) {}
            try { info.productName = String(md.getDatabaseProductName() || ''); } catch (eN) {}
            info.type = _classifyDbType(info.url, info.productName);
            try { TALON.getLogger().writeInfo('[TFC] detectDbInfo: url=' + info.url + ', productName=' + info.productName + ', type=' + info.type); } catch (igL) {}
            // DB 名: まず Connection.getCatalog() を試す (CData は OAuth Org 名等が入る)、
            //   取れなければ URL からパースする (Oracle SERVICE/SID, PG/MySQL/DB2 のパス, SS databaseName)
            try {
                var cat = String(conn.getCatalog() || '');
                if (cat) info.dbName = cat;
            } catch (eC) {}
            if (!info.dbName) info.dbName = _dbNameFromUrl(info.url);
            return info;
        } catch (e) {
            try { TALON.getLogger().writeWarn('[TFC] detectDbInfo: metadata 取得失敗 → unknown フォールバック: ' + e); } catch (ig) {}
            return info;
        } finally {
            if (beganHere) { try { cfg.rollback(); } catch (eR) {} }
        }
    }

    // type 文字列のみ返す互換 API (既存呼出は こちら)
    TFC.detectDbType = function () {
        return _detectDbInfoViaMetaData(null).type;
    };
    TFC.detectDbTypeByConn = function (conn) {
        if (!conn) return TFC.detectDbType();
        return _detectDbInfoViaMetaData(conn).type;
    };
    // 詳細 info を返す新 API (DB 名等が必要なときに使う)
    TFC.detectDbInfo = function () {
        return _detectDbInfoViaMetaData(null);
    };
    TFC.detectDbInfoByConn = function (conn) {
        if (!conn) return TFC.detectDbInfo();
        return _detectDbInfoViaMetaData(conn);
    };

    // ============================================================
    // ER 図出力 (A5:SQL Mk-2 ネイティブ + DDL 生成)
    // ============================================================
    // TFC.generateErDiagram(tableNames, opts)
    //   tableNames: string[]    対象テーブル物理名
    //   opts: { dbType: 'oracle'|'postgres'|'mysql'|'sqlserver'|'db2'
    //                  (default: opts.conn ? detectDbTypeByConn(conn) : detectDbType()),
    //           conn:  TalonConfig  (省略時 = 主 TALON DB)
    //                  TALON.getOtherDBConn('1') 等で取得した外部 DB 接続。
    //                  指定するとそのコネクションでスキーマ情報を取得する (複数DB接続対応)。
    //           includeFks: true (default: true) }
    //   戻り値: { meta: {tables, fks}, a5er: string, ddl: string }
    // テーブル定義・FK・テーブル/列コメントを TalonDbUtil.select で DB スキーマビューから取得し、
    // .a5er (A5:SQL Mk-2 ネイティブ INI 風 + UTF-8 BOM + CRLF) と .sql (DDL) を生成。
    TFC.generateErDiagram = function (tableNames, opts) {
        opts = opts || {};
        var conn = opts.conn || null;
        var dbType = (opts.dbType || (conn ? TFC.detectDbTypeByConn(conn) : TFC.detectDbType()) || 'oracle').toLowerCase();
        // 'postgresql' エイリアスを 'postgres' に正規化
        if (dbType === 'postgresql') dbType = 'postgres';
        // 'mysql_linux' / 'mysql_windows' → 'mysql'
        if (dbType.indexOf('mysql') === 0) dbType = 'mysql';
        // 'cdata-salesforce' / 'cdata-rest' / ... → 'cdata' (sys_* カタログは 全サブドライバ共通)
        //   サブドライバ名は FK スキーマ系統の選択 (Salesforce = Referenced* 系) に使うため保持
        var cdataSub = '';
        if (dbType.indexOf('cdata-') === 0) {
            cdataSub = dbType.substring(6);
            dbType = 'cdata';
        }
        var includeFks = opts.includeFks !== false;
        // 未知 DB: カタログビューが どの dialect とも 合致しない → テーブル名スタブだけ返す
        //   (依存関係タブ / 全設定タブの DB バッジ表示用 = accessDb / dbType の伝播)
        if (dbType === 'unknown') {
            var stubTables = [];
            for (var sti = 0; sti < tableNames.length; sti++) {
                stubTables.push({ name: tableNames[sti], comment: '', cols: [], pkCols: [] });
            }
            return { meta: { tables: stubTables, fks: [] }, a5er: '', ddl: '' };
        }
        // CData も SYS カタログ経由で 通常の DB と同じく メタ取得する。 catalog query が
        //   失敗 (= 一部 CData ドライバで sys_* が無い場合) は スタブにフォールバック。
        if (dbType === 'cdata') {
            try {
                var metaC = _fetchErMeta(tableNames, dbType, includeFks, conn, cdataSub);
                return {
                    meta: metaC,
                    a5er: _erToA5er(metaC),
                    ddl:  _erToDdl(metaC, dbType)
                };
            } catch (eCD) {
                try { TALON.getLogger().writeWarn('[TFC] CData ER メタ取得失敗 → テーブル名スタブにフォールバック: ' + eCD); } catch (ig) {}
                var stubC = [];
                for (var stj = 0; stj < tableNames.length; stj++) {
                    stubC.push({ name: tableNames[stj], comment: '', cols: [], pkCols: [] });
                }
                return { meta: { tables: stubC, fks: [] }, a5er: '', ddl: '' };
            }
        }
        var meta = _fetchErMeta(tableNames, dbType, includeFks, conn);
        return {
            meta: meta,
            a5er: _erToA5er(meta),
            ddl:  _erToDdl(meta, dbType)
        };
    };

    // ============================================================
    // テーブル名 正規化キー (★抜本対応 2026-05-29)
    // ============================================================
    // 「表示用名前」 と「検索用キー」 の責任分離。
    //   - 表示 (HTML / DDL / A5er / tooltip) : DB 由来の元 case をそのまま使う
    //     (例: PG なら lowercase / Oracle なら UPPER / Salesforce 等 case-sensitive
    //     データソースでは PascalCase など、 取得元のものをそのまま見せる)
    //   - 検索 / Map キー / HTML anchor ID  : _tblKey() で UPPER 正規化 (環境横断で安定)
    //
    // すべての内部 Map (erTableBgRead/Write / funcTableRefs / byTable / fkChildCols /
    // physMatch.byTable など) は _tblKey() を通したキーで統一する。 anchor ID
    // (er-diagram.html#tbl-XXX) も _tblKey() で統一することで、 環境別の case 違いに
    // 関係なくリンクが解決する。
    TFC._tblKey = function (name) { return String(name || '').toUpperCase(); };

    // CData (Salesforce) の Description boilerplate からラベルを抽出する。
    //   Salesforce ドライバは sys_tablecolumns.ColumnLabel を持たない代わりに、
    //   Description にフィールドラベルを定型文で包んで返す:
    //     JA: "'顧客 ID' ラベルはこのフィールドに一致します。" → "顧客 ID"
    //     EN: "Label 'Account ID' corresponds to this field."  → "Account ID"
    //   定型文にマッチしない Description (= 利用者が設定した説明等) はそのまま返す。
    function _cdataCommentToLabel(s) {
        if (!s) return s;
        var str = String(s);
        var m = str.match(/^'(.+)'\s*ラベルはこのフィールドに一致します。?$/);
        if (m) return m[1];
        m = str.match(/^Label\s+'(.+)'\s+corresponds\s+to\s+this\s+field\.?$/i);
        if (m) return m[1];
        return s;
    }

    // テーブル メタデータ取得 (DB エンジン別)
    //   返り値: {tables: [{name, comment, cols:[{name, type, len, prec, scale, nullable, isPk}]}],
    //            fks:    [{childTable, childCol, parentTable, parentCol, name}]}
    //
    //   `tables[i].name` は DB 由来の元 case を保持する。 内部 Map のキーとしては
    //   _tblKey(t.name) を使うこと。
    function _fetchErMeta(tableNames, dbType, includeFks, conn, cdataSub) {
        var meta = { tables: [], fks: [] };
        if (!tableNames || tableNames.length === 0) return meta;
        // 接続別 SELECT。 conn=null/undefined のときは主 TALON DB (TFC.selectU)。
        function sel(sql) { return conn ? TFC.selectUByConn(conn, sql) : TFC.selectU(sql); }
        // SQL の IN 句用に bind 化されない文字列リテラルでエスケープ (常に大文字化)
        //   inListExact は呼出側から渡された元 case のままの IN リスト。 CData では
        //   UPPER(TableName) 比較だと フィルタがドライバにプッシュダウンされず 全テーブルの
        //   メタデータ列挙 (Salesforce 等では数分) になるため、 exact-match を優先する。
        var inList = '';
        var inListExact = '';
        var upperNames = [];
        for (var i = 0; i < tableNames.length; i++) {
            var nameUp = TFC._tblKey(tableNames[i]).replace(/'/g, "''");
            upperNames.push(nameUp);
            if (i > 0) { inList += ','; inListExact += ','; }
            inList += "'" + nameUp + "'";
            inListExact += "'" + String(tableNames[i] || '').replace(/'/g, "''") + "'";
        }
        var queries = _erQueries(dbType, inList, inListExact, cdataSub);
        // 列定義 (selectUByConn 経由で PG の lowercase キー → uppercase 化)
        var colRows = sel(queries.cols);
        // CData の exact-match で 0 件 (= 設定由来の case が実テーブル名と不一致) の場合は
        //   UPPER() 比較版で再試行する (全メタデータ列挙になるため低速だが確実)
        if (dbType === 'cdata' && colRows.size() === 0 && inListExact !== inList) {
            try { TALON.getLogger().writeWarn('[TFC] CData exact-match 0 件 → UPPER 比較で再試行: ' + inListExact); } catch (igUx) {}
            queries = _erQueries(dbType, inList, null, cdataSub);
            colRows = sel(queries.cols);
        }
        var byTable = {};
        for (var ci = 0; ci < colRows.size(); ci++) {
            var r = colRows[ci];
            var tn = TFC.s(r['TABLE_NAME']);            // 元 case 保持 (表示用)
            var tnKey = TFC._tblKey(tn);                // 内部 Map キー (UPPER)
            if (!byTable[tnKey]) byTable[tnKey] = { name: tn, comment: '', cols: [], colByName: {} };
            // CData: 列コメント (Description) は cols クエリに統合済 (COL_COMMENT)。
            //   ボイラープレートを除外し、 定型文からラベル (= 論理名相当) を抽出する。
            var colCmt = '';
            if (dbType === 'cdata') {
                var rawCc = TFC.s(r['COL_COMMENT']);
                if (rawCc) {
                    var lcCc = rawCc.toLowerCase().replace(/\s+/g, ' ').replace(/\.\s*$/, '').trim();
                    if (lcCc !== 'autogenerated' && lcCc !== 'no description' && lcCc !== 'no information') {
                        colCmt = _cdataCommentToLabel(rawCc);
                    }
                }
            }
            var colObj = {
                name:     TFC.s(r['COLUMN_NAME']),
                type:     TFC.s(r['DATA_TYPE']),
                len:      TFC.s(r['DATA_LENGTH']),
                prec:     TFC.s(r['DATA_PRECISION']),
                scale:    TFC.s(r['DATA_SCALE']),
                nullable: TFC.s(r['NULLABLE']) !== 'N',
                isPk:     TFC.s(r['IS_PK']) === 'Y',
                comment:  colCmt
            };
            byTable[tnKey].cols.push(colObj);
            byTable[tnKey].colByName[colObj.name] = colObj;
        }
        // テーブルコメント (オプション)
        //   ※ CData はサブドライバごとにカタログスキーマが異なるため、 コメント / FK は
        //     クエリ単位で非致命化する (失敗しても列定義だけは生かす)。
        if (queries.comments) {
            try {
                var cmtRows = sel(queries.comments);
                for (var mi = 0; mi < cmtRows.size(); mi++) {
                    var cr = cmtRows[mi];
                    var tn2 = TFC._tblKey(TFC.s(cr['TABLE_NAME']));
                    if (byTable[tn2]) byTable[tn2].comment = TFC.s(cr['COMMENTS']);
                }
            } catch (eCmt) {
                try { TALON.getLogger().writeWarn('[TFC] テーブルコメント取得失敗 (続行): ' + eCmt); } catch (igC1) {}
            }
        }
        // 列コメント (= 論理名相当) を取得して各列に紐付け
        if (queries.colComments) {
            try {
                var ccRows = sel(queries.colComments);
                for (var ki = 0; ki < ccRows.size(); ki++) {
                    var ccr = ccRows[ki];
                    var tn3 = TFC._tblKey(TFC.s(ccr['TABLE_NAME']));
                    var cn3 = TFC.s(ccr['COLUMN_NAME']);
                    var cmt3 = TFC.s(ccr['COMMENTS']);
                    // CData: Description の定型文からフィールドラベルを抽出
                    if (dbType === 'cdata') cmt3 = _cdataCommentToLabel(cmt3);
                    if (byTable[tn3] && byTable[tn3].colByName[cn3]) {
                        byTable[tn3].colByName[cn3].comment = cmt3;
                    }
                }
            } catch (eCc) {
                try { TALON.getLogger().writeWarn('[TFC] 列コメント取得失敗 (続行): ' + eCc); } catch (igC2) {}
            }
        }
        // 並び順: tableNames の指定順を維持 (upperNames で照合)
        for (var ti = 0; ti < upperNames.length; ti++) {
            var name = upperNames[ti];
            if (byTable[name]) meta.tables.push(byTable[name]);
        }
        // FK: childTable / parentTable は表示にも検索にも使うため、 元 case 保持。
        //   利用側で必要に応じて _tblKey() で正規化する。
        //   CData: sys_foreignkeys のスキーマが 2 系統ある
        //     (ForeignKeyTable/PrimaryKeyTable 系 と TableName/ReferencedTableName 系)。
        //   本命が失敗したら fksFallback で再試行し、 それも失敗したら FK 無しで続行する。
        if (includeFks && queries.fks) {
            var fkRows = null;
            try {
                fkRows = sel(queries.fks);
            } catch (eFk1) {
                if (queries.fksFallback) {
                    try { TALON.getLogger().writeWarn('[TFC] FK クエリ失敗 → 代替スキーマで再試行: ' + eFk1); } catch (igF1) {}
                    try { fkRows = sel(queries.fksFallback); }
                    catch (eFk2) {
                        try { TALON.getLogger().writeWarn('[TFC] FK 代替クエリも失敗 (FK 無しで続行): ' + eFk2); } catch (igF2) {}
                    }
                } else {
                    try { TALON.getLogger().writeWarn('[TFC] FK クエリ失敗 (FK 無しで続行): ' + eFk1); } catch (igF3) {}
                }
            }
            if (fkRows) {
                for (var fi = 0; fi < fkRows.size(); fi++) {
                    var fr = fkRows[fi];
                    meta.fks.push({
                        childTable:  TFC.s(fr['CHILD_TABLE']),
                        childCol:    TFC.s(fr['CHILD_COL']),
                        parentTable: TFC.s(fr['PARENT_TABLE']),
                        parentCol:   TFC.s(fr['PARENT_COL']),
                        name:        TFC.s(fr['CONSTRAINT_NAME'])
                    });
                }
            }
        }
        return meta;
    }

    function _erQueries(dbType, inList, inListExact, cdataSub) {
        // 大文字小文字不一致対策: 全 IN 比較を UPPER() 両側で行う。
        //   inList は呼出側で常に大文字化済。 各 DB ビュー側の値も UPPER 関数を適用。
        //   inListExact (元 case の IN リスト) は CData 専用: UPPER() 比較だと CData が
        //   フィルタをドライバにプッシュダウンできず全テーブルのメタデータ列挙になるため、
        //   exact-match で照会する (RDB 系カタログビューは高速なので UPPER のまま)。
        if (dbType === 'oracle') {
            return {
                cols:
                    "SELECT c.table_name, c.column_name, c.data_type, c.data_length, " +
                    "       c.data_precision, c.data_scale, c.nullable, c.column_id, " +
                    "       CASE WHEN pk.column_name IS NOT NULL THEN 'Y' ELSE 'N' END AS is_pk " +
                    "FROM   user_tab_columns c " +
                    "LEFT JOIN ( " +
                    "   SELECT cc.table_name, cc.column_name " +
                    "   FROM   user_constraints uc " +
                    "   JOIN   user_cons_columns cc ON uc.constraint_name = cc.constraint_name " +
                    "   WHERE  uc.constraint_type = 'P' " +
                    ") pk ON pk.table_name = c.table_name AND pk.column_name = c.column_name " +
                    "WHERE  UPPER(c.table_name) IN (" + inList + ") " +
                    "ORDER  BY c.table_name, c.column_id",
                comments:
                    "SELECT table_name, comments " +
                    "FROM   user_tab_comments " +
                    "WHERE  UPPER(table_name) IN (" + inList + ")",
                colComments:
                    "SELECT table_name, column_name, comments " +
                    "FROM   user_col_comments " +
                    "WHERE  UPPER(table_name) IN (" + inList + ") " +
                    "AND    comments IS NOT NULL",
                fks:
                    "SELECT a.table_name AS child_table, a.column_name AS child_col, " +
                    "       r.table_name AS parent_table, r.column_name AS parent_col, " +
                    "       c.constraint_name " +
                    "FROM   user_constraints c " +
                    "JOIN   user_cons_columns a ON c.constraint_name   = a.constraint_name " +
                    "JOIN   user_cons_columns r ON c.r_constraint_name = r.constraint_name " +
                    "                          AND a.position           = r.position " +
                    "WHERE  c.constraint_type = 'R' " +
                    "AND    UPPER(a.table_name) IN (" + inList + ") " +
                    "ORDER  BY a.table_name, c.constraint_name, a.position"
            };
        }
        if (dbType === 'postgres' || dbType === 'postgresql') {
            return {
                cols:
                    "SELECT c.table_name AS \"TABLE_NAME\", c.column_name AS \"COLUMN_NAME\", " +
                    "       c.data_type AS \"DATA_TYPE\", c.character_maximum_length AS \"DATA_LENGTH\", " +
                    "       c.numeric_precision AS \"DATA_PRECISION\", c.numeric_scale AS \"DATA_SCALE\", " +
                    "       c.is_nullable AS \"NULLABLE\", c.ordinal_position AS \"COLUMN_ID\", " +
                    "       CASE WHEN pk.column_name IS NOT NULL THEN 'Y' ELSE 'N' END AS \"IS_PK\" " +
                    "FROM   information_schema.columns c " +
                    "LEFT JOIN ( " +
                    "   SELECT kcu.table_name, kcu.column_name " +
                    "   FROM   information_schema.table_constraints tc " +
                    "   JOIN   information_schema.key_column_usage kcu USING (constraint_name) " +
                    "   WHERE  tc.constraint_type = 'PRIMARY KEY' " +
                    ") pk ON pk.table_name = c.table_name AND pk.column_name = c.column_name " +
                    "WHERE  c.table_schema = current_schema() " +
                    "AND    UPPER(c.table_name) IN (" + inList + ") " +
                    "ORDER  BY c.table_name, c.ordinal_position",
                comments:
                    "SELECT c.relname AS \"TABLE_NAME\", d.description AS \"COMMENTS\" " +
                    "FROM   pg_class c " +
                    "JOIN   pg_description d ON d.objoid = c.oid AND d.objsubid = 0 " +
                    "WHERE  c.relkind = 'r' " +
                    "AND    UPPER(c.relname) IN (" + inList + ")",
                colComments:
                    "SELECT c.relname AS \"TABLE_NAME\", a.attname AS \"COLUMN_NAME\", " +
                    "       d.description AS \"COMMENTS\" " +
                    "FROM   pg_class c " +
                    "JOIN   pg_attribute a ON a.attrelid = c.oid AND a.attnum > 0 " +
                    "JOIN   pg_description d ON d.objoid = c.oid AND d.objsubid = a.attnum " +
                    "WHERE  c.relkind = 'r' " +
                    "AND    UPPER(c.relname) IN (" + inList + ")",
                fks:
                    "SELECT tc.table_name AS \"CHILD_TABLE\", kcu.column_name AS \"CHILD_COL\", " +
                    "       ccu.table_name AS \"PARENT_TABLE\", ccu.column_name AS \"PARENT_COL\", " +
                    "       tc.constraint_name AS \"CONSTRAINT_NAME\" " +
                    "FROM   information_schema.table_constraints tc " +
                    "JOIN   information_schema.key_column_usage kcu USING (constraint_name) " +
                    "JOIN   information_schema.constraint_column_usage ccu USING (constraint_name) " +
                    "WHERE  tc.constraint_type = 'FOREIGN KEY' " +
                    "AND    UPPER(tc.table_name) IN (" + inList + ")"
            };
        }
        if (dbType === 'mysql') {
            // MySQL: information_schema を使用。テーブルコメントは TABLES.TABLE_COMMENT、
            //   列コメントは COLUMNS.COLUMN_COMMENT。スキーマは DATABASE() (現在 DB)。
            return {
                cols:
                    "SELECT c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, " +
                    "       c.CHARACTER_MAXIMUM_LENGTH AS DATA_LENGTH, " +
                    "       c.NUMERIC_PRECISION AS DATA_PRECISION, c.NUMERIC_SCALE AS DATA_SCALE, " +
                    "       c.IS_NULLABLE AS NULLABLE, c.ORDINAL_POSITION AS COLUMN_ID, " +
                    "       CASE WHEN c.COLUMN_KEY = 'PRI' THEN 'Y' ELSE 'N' END AS IS_PK " +
                    "FROM   information_schema.COLUMNS c " +
                    "WHERE  c.TABLE_SCHEMA = DATABASE() " +
                    "AND    UPPER(c.TABLE_NAME) IN (" + inList + ") " +
                    "ORDER  BY c.TABLE_NAME, c.ORDINAL_POSITION",
                comments:
                    "SELECT TABLE_NAME, TABLE_COMMENT AS COMMENTS " +
                    "FROM   information_schema.TABLES " +
                    "WHERE  TABLE_SCHEMA = DATABASE() " +
                    "AND    UPPER(TABLE_NAME) IN (" + inList + ")",
                colComments:
                    "SELECT TABLE_NAME, COLUMN_NAME, COLUMN_COMMENT AS COMMENTS " +
                    "FROM   information_schema.COLUMNS " +
                    "WHERE  TABLE_SCHEMA = DATABASE() " +
                    "AND    UPPER(TABLE_NAME) IN (" + inList + ") " +
                    "AND    COLUMN_COMMENT <> ''",
                fks:
                    "SELECT kcu.TABLE_NAME AS CHILD_TABLE, kcu.COLUMN_NAME AS CHILD_COL, " +
                    "       kcu.REFERENCED_TABLE_NAME AS PARENT_TABLE, " +
                    "       kcu.REFERENCED_COLUMN_NAME AS PARENT_COL, " +
                    "       kcu.CONSTRAINT_NAME " +
                    "FROM   information_schema.KEY_COLUMN_USAGE kcu " +
                    "WHERE  kcu.TABLE_SCHEMA = DATABASE() " +
                    "AND    kcu.REFERENCED_TABLE_NAME IS NOT NULL " +
                    "AND    UPPER(kcu.TABLE_NAME) IN (" + inList + ") " +
                    "ORDER  BY kcu.TABLE_NAME, kcu.CONSTRAINT_NAME, kcu.ORDINAL_POSITION"
            };
        }
        if (dbType === 'sqlserver') {
            // SQL Server: sys.* + sys.extended_properties (MS_Description) でコメント
            return {
                cols:
                    // 桁数 (DATA_LENGTH): sys.columns.max_length は バイト長。
                    //   ・nchar/nvarchar は 2 バイト/文字 なので /2 して文字数に
                    //   ・ntext/text/image/xml (LOB) と max(-1) は固定桁数が無いので NULL
                    //   ・それ以外 (char/varchar/binary 等) は max_length をそのまま
                    "SELECT t.name AS TABLE_NAME, c.name AS COLUMN_NAME, " +
                    "       TYPE_NAME(c.user_type_id) AS DATA_TYPE, " +
                    "       CASE WHEN c.max_length = -1 THEN NULL " +
                    "            WHEN TYPE_NAME(c.user_type_id) IN ('ntext','text','image','xml') THEN NULL " +
                    "            WHEN TYPE_NAME(c.user_type_id) IN ('nchar','nvarchar') THEN c.max_length / 2 " +
                    "            ELSE c.max_length END AS DATA_LENGTH, " +
                    "       c.precision AS DATA_PRECISION, c.scale AS DATA_SCALE, " +
                    "       CASE WHEN c.is_nullable = 1 THEN 'Y' ELSE 'N' END AS NULLABLE, " +
                    "       c.column_id AS COLUMN_ID, " +
                    "       CASE WHEN EXISTS ( " +
                    "         SELECT 1 FROM sys.index_columns ic " +
                    "         JOIN sys.indexes i ON i.object_id = ic.object_id AND i.index_id = ic.index_id " +
                    "         WHERE  ic.object_id = c.object_id AND ic.column_id = c.column_id AND i.is_primary_key = 1 " +
                    "       ) THEN 'Y' ELSE 'N' END AS IS_PK " +
                    "FROM   sys.columns c " +
                    "JOIN   sys.tables  t ON t.object_id = c.object_id " +
                    "WHERE  UPPER(t.name) IN (" + inList + ") " +
                    "ORDER  BY t.name, c.column_id",
                comments:
                    "SELECT t.name AS TABLE_NAME, CAST(ep.value AS NVARCHAR(MAX)) AS COMMENTS " +
                    "FROM   sys.tables t " +
                    "LEFT JOIN sys.extended_properties ep ON ep.major_id = t.object_id " +
                    "       AND ep.minor_id = 0 AND ep.name = 'MS_Description' " +
                    "WHERE  UPPER(t.name) IN (" + inList + ") AND ep.value IS NOT NULL",
                colComments:
                    "SELECT t.name AS TABLE_NAME, c.name AS COLUMN_NAME, " +
                    "       CAST(ep.value AS NVARCHAR(MAX)) AS COMMENTS " +
                    "FROM   sys.tables t " +
                    "JOIN   sys.columns c ON c.object_id = t.object_id " +
                    "JOIN   sys.extended_properties ep ON ep.major_id = t.object_id " +
                    "       AND ep.minor_id = c.column_id AND ep.name = 'MS_Description' " +
                    "WHERE  UPPER(t.name) IN (" + inList + ")",
                fks:
                    "SELECT tc.name AS CHILD_TABLE, cc.name AS CHILD_COL, " +
                    "       tp.name AS PARENT_TABLE, cp.name AS PARENT_COL, " +
                    "       fk.name AS CONSTRAINT_NAME " +
                    "FROM   sys.foreign_keys fk " +
                    "JOIN   sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id " +
                    "JOIN   sys.tables  tc ON tc.object_id = fkc.parent_object_id " +
                    "JOIN   sys.columns cc ON cc.object_id = fkc.parent_object_id AND cc.column_id = fkc.parent_column_id " +
                    "JOIN   sys.tables  tp ON tp.object_id = fkc.referenced_object_id " +
                    "JOIN   sys.columns cp ON cp.object_id = fkc.referenced_object_id AND cp.column_id = fkc.referenced_column_id " +
                    "WHERE  UPPER(tc.name) IN (" + inList + ") " +
                    "ORDER  BY tc.name, fk.name, fkc.constraint_column_id"
            };
        }
        if (dbType === 'cdata') {
            // CData JDBC (Salesforce / REST / Excel / SharePoint / 200+ ドライバ群)
            //   全ドライバ共通の SYS カタログ:
            //     - sys_tables:        TableName / TableType / Description
            //     - sys_tablecolumns:  TableName / ColumnName / DataTypeName / Length /
            //                          NumericPrecision / NumericScale / IsKey / IsNullable /
            //                          Description / Ordinal / IsHidden / IsReadOnly
            //     - sys_foreignkeys:   PrimaryKeyTable / PrimaryKeyColumn / ForeignKeyTable /
            //                          ForeignKeyColumn / ForeignKeyName / KeySeq
            //   テーブル名は ソース上の case を保持 (Salesforce: 'Account' / REST: 任意)。
            //   UPPER() による IN 句で 大小区別なくマッチ可能。
            //   IsNullable / IsKey は boolean (true/false or 1/0) のため CASE で 'Y'/'N' に正規化。
            //   IsHidden 列は除外 (内部用途の カラム)。
            // exact-match (元 case) を優先し、 無ければ UPPER 比較 (低速) にフォールバック。
            //   _fetchErMeta 側で exact 0 件時に inListExact=null で再呼出しされる。
            var cdT  = inListExact ? ("TableName IN (" + inListExact + ")")
                                   : ("UPPER(TableName) IN (" + inList + ")");
            var cdTc = inListExact ? ("c.TableName IN (" + inListExact + ")")
                                   : ("UPPER(c.TableName) IN (" + inList + ")");
            var cdFk = inListExact ? ("ForeignKeyTable IN (" + inListExact + ")")
                                   : ("UPPER(ForeignKeyTable) IN (" + inList + ")");
            // FK クエリ: sys_foreignkeys のスキーマは 2 系統ある:
            //   legacy: ForeignKeyTable/ForeignKeyColumn/PrimaryKeyTable/PrimaryKeyColumn (Google Sheets 等)
            //   ref:    TableName/ColumnName/ReferencedTableName/ReferencedColumnName (Salesforce 25.0 で確認)
            //   未知列を含むクエリは CData が全メタデータ列挙に落ちて失敗まで数分かかるため、
            //   サブドライバ名が分かる場合は正しい側を本命にし、 もう一方をフォールバックに回す。
            var _cdFkLegacy =
                "SELECT ForeignKeyTable AS CHILD_TABLE, ForeignKeyColumn AS CHILD_COL, " +
                "       PrimaryKeyTable AS PARENT_TABLE, PrimaryKeyColumn AS PARENT_COL, " +
                "       ForeignKeyName AS CONSTRAINT_NAME " +
                "FROM   sys_foreignkeys " +
                "WHERE  " + cdFk + " " +
                "ORDER  BY ForeignKeyTable, ForeignKeyName, KeySeq";
            var _cdFkRef =
                "SELECT TableName AS CHILD_TABLE, ColumnName AS CHILD_COL, " +
                "       ReferencedTableName AS PARENT_TABLE, ReferencedColumnName AS PARENT_COL, " +
                "       ForeignKeyName AS CONSTRAINT_NAME " +
                "FROM   sys_foreignkeys " +
                "WHERE  " + cdT + " " +
                "ORDER  BY TableName, ForeignKeyName";
            return {
                cols:
                    // 注: ColumnLabel 列は SELECT しない。 Salesforce ドライバ (25.0) には
                    //   存在せず、 未知列を含むクエリは CData が全メタデータ列挙に落ちて
                    //   失敗までに数分かかる。 ラベル相当は Description の定型文
                    //   ("'X' ラベルはこのフィールドに一致します。") から抽出する
                    //   (_cdataCommentToLabel)。 Google Sheets 等の ColumnLabel は
                    //   ColumnName と同値のため SELECT する価値が無い。
                    // ★ 性能: 列コメント (Description) を cols に統合し、 別途 colComments で
                    //   sys_tablecolumns を 2 回スキャンしていたのを 1 回に削減 (colComments=null)。
                    "SELECT c.TableName AS TABLE_NAME, c.ColumnName AS COLUMN_NAME, " +
                    "       c.DataTypeName AS DATA_TYPE, c.Length AS DATA_LENGTH, " +
                    "       c.NumericPrecision AS DATA_PRECISION, c.NumericScale AS DATA_SCALE, " +
                    "       CASE WHEN c.IsNullable = true THEN 'Y' ELSE 'N' END AS NULLABLE, " +
                    "       c.Ordinal AS COLUMN_ID, " +
                    "       CASE WHEN c.IsKey = true THEN 'Y' ELSE 'N' END AS IS_PK, " +
                    "       c.Description AS COL_COMMENT " +
                    "FROM   sys_tablecolumns c " +
                    "WHERE  " + cdTc + " " +
                    "AND    (c.IsHidden IS NULL OR c.IsHidden = false) " +
                    "ORDER  BY c.TableName, c.Ordinal",
                comments:
                    // CData boilerplate ('autogenerated.' / 'No description.') は除外
                    "SELECT TableName AS TABLE_NAME, Description AS COMMENTS " +
                    "FROM   sys_tables " +
                    "WHERE  " + cdT + " " +
                    "AND    Description IS NOT NULL " +
                    "AND    Description != 'autogenerated.' AND Description != 'autogenerated' " +
                    "AND    Description != 'No description.' AND Description != 'No description'",
                // colComments は cols に統合済 (sys_tablecolumns の再スキャンを廃止して高速化)
                colComments: null,
                fks:      (cdataSub === 'salesforce') ? _cdFkRef : _cdFkLegacy,
                fksFallback: (cdataSub === 'salesforce') ? _cdFkLegacy : _cdFkRef
            };
        }
        if (dbType === 'db2') {
            // DB2: SYSCAT.* カタログビュー。 既定スキーマは CURRENT SCHEMA。
            //   - SYSCAT.COLUMNS: TABNAME / COLNAME / TYPENAME / LENGTH / SCALE / NULLS
            //                     (NULLS='Y' が NULL 許可) / COLNO / KEYSEQ (>0 が PK) / REMARKS
            //   - SYSCAT.TABLES:  TABNAME / REMARKS (テーブルコメント)
            //   - SYSCAT.REFERENCES + SYSCAT.KEYCOLUSE: FK 関係 (子 KEYCOLUSE と親 KEYCOLUSE を
            //                     COLSEQ で対応付けて 1 列ずつ展開)
            return {
                cols:
                    "SELECT c.TABNAME AS TABLE_NAME, c.COLNAME AS COLUMN_NAME, " +
                    "       c.TYPENAME AS DATA_TYPE, c.LENGTH AS DATA_LENGTH, " +
                    "       c.LENGTH AS DATA_PRECISION, c.SCALE AS DATA_SCALE, " +
                    "       c.NULLS AS NULLABLE, c.COLNO AS COLUMN_ID, " +
                    "       CASE WHEN c.KEYSEQ > 0 THEN 'Y' ELSE 'N' END AS IS_PK " +
                    "FROM   SYSCAT.COLUMNS c " +
                    "WHERE  c.TABSCHEMA = CURRENT SCHEMA " +
                    "AND    UPPER(c.TABNAME) IN (" + inList + ") " +
                    "ORDER  BY c.TABNAME, c.COLNO",
                comments:
                    "SELECT TABNAME AS TABLE_NAME, REMARKS AS COMMENTS " +
                    "FROM   SYSCAT.TABLES " +
                    "WHERE  TABSCHEMA = CURRENT SCHEMA " +
                    "AND    UPPER(TABNAME) IN (" + inList + ") AND REMARKS IS NOT NULL",
                colComments:
                    "SELECT TABNAME AS TABLE_NAME, COLNAME AS COLUMN_NAME, REMARKS AS COMMENTS " +
                    "FROM   SYSCAT.COLUMNS " +
                    "WHERE  TABSCHEMA = CURRENT SCHEMA " +
                    "AND    UPPER(TABNAME) IN (" + inList + ") AND REMARKS IS NOT NULL",
                fks:
                    "SELECT r.TABNAME AS CHILD_TABLE, kc.COLNAME AS CHILD_COL, " +
                    "       r.REFTABNAME AS PARENT_TABLE, kp.COLNAME AS PARENT_COL, " +
                    "       r.CONSTNAME AS CONSTRAINT_NAME " +
                    "FROM   SYSCAT.REFERENCES r " +
                    "JOIN   SYSCAT.KEYCOLUSE kc ON kc.CONSTNAME = r.CONSTNAME " +
                    "                          AND kc.TABSCHEMA = r.TABSCHEMA " +
                    "                          AND kc.TABNAME   = r.TABNAME " +
                    "JOIN   SYSCAT.KEYCOLUSE kp ON kp.CONSTNAME = r.REFKEYNAME " +
                    "                          AND kp.TABSCHEMA = r.REFTABSCHEMA " +
                    "                          AND kp.TABNAME   = r.REFTABNAME " +
                    "                          AND kp.COLSEQ    = kc.COLSEQ " +
                    "WHERE  r.TABSCHEMA = CURRENT SCHEMA " +
                    "AND    UPPER(r.TABNAME) IN (" + inList + ") " +
                    "ORDER  BY r.TABNAME, r.CONSTNAME, kc.COLSEQ"
            };
        }
        throw new Error('Unsupported dbType: ' + dbType);
    }

    // ============================================================
    // DDL (CREATE TABLE + ALTER TABLE ADD CONSTRAINT) 生成
    // ============================================================
    // draw.io / MySQL Workbench / A5:SQL Mk-2 / DBeaver 等 ほぼ全ての ER 図ツールで
    // 「DDL リバース」入力として使える業界標準形式。 副次的にバックアップ・移植にも使える。
    function _erToDdl(meta, dbType) {
        var s = '-- Generated by TLN_FUNC_DOC_ER_DIAGRAM_COMMON  (dbType=' + dbType + ')\n';
        s += '-- ' + new Date() + '\n\n';
        // CREATE TABLE
        for (var ti = 0; ti < meta.tables.length; ti++) {
            var t = meta.tables[ti];
            s += '-- ============================================================\n';
            s += '-- ' + t.name + (t.comment ? '  (' + t.comment + ')' : '') + '\n';
            s += '-- ============================================================\n';
            s += 'CREATE TABLE ' + t.name + ' (\n';
            var pkCols = [];
            for (var ci = 0; ci < t.cols.length; ci++) {
                var c = t.cols[ci];
                s += '  ' + c.name + ' ' + _ddlType(c, dbType);
                if (!c.nullable) s += ' NOT NULL';
                s += (ci < t.cols.length - 1) ? ',\n' : '\n';
                if (c.isPk) pkCols.push(c.name);
            }
            s += ');\n';
            if (pkCols.length > 0) {
                s += 'ALTER TABLE ' + t.name +
                    ' ADD CONSTRAINT PK_' + t.name +
                    ' PRIMARY KEY (' + pkCols.join(', ') + ');\n';
            }
            // テーブルコメント (Oracle / PostgreSQL ともに COMMENT ON TABLE 構文)
            if (t.comment) {
                s += "COMMENT ON TABLE " + t.name + " IS '" + _ddlEsc(t.comment) + "';\n";
            }
            // 列コメント (= 論理名相当)
            for (var ck = 0; ck < t.cols.length; ck++) {
                var cc = t.cols[ck];
                if (cc.comment) {
                    s += "COMMENT ON COLUMN " + t.name + "." + cc.name + " IS '" + _ddlEsc(cc.comment) + "';\n";
                }
            }
            s += '\n';
        }
        // FK 制約
        if (meta.fks.length > 0) {
            s += '-- ============================================================\n';
            s += '-- Foreign Key Constraints\n';
            s += '-- ============================================================\n';
            for (var fi = 0; fi < meta.fks.length; fi++) {
                var f = meta.fks[fi];
                s += 'ALTER TABLE ' + f.childTable +
                    ' ADD CONSTRAINT ' + (f.name || ('FK_' + f.childTable + '_' + (fi + 1))) +
                    ' FOREIGN KEY (' + f.childCol + ')' +
                    ' REFERENCES ' + f.parentTable + ' (' + f.parentCol + ');\n';
            }
        }
        return s;
    }

    function _ddlType(c, dbType) {
        var t = String(c.type || '').toUpperCase();
        if ((t === 'NUMBER' || t === 'NUMERIC' || t === 'DECIMAL')) {
            if (c.prec) {
                return t + '(' + c.prec + (c.scale && c.scale !== '0' ? ',' + c.scale : '') + ')';
            }
            return t;
        }
        if ((t.indexOf('CHAR') >= 0 || t.indexOf('VARCHAR') >= 0) && c.len && c.len !== '0') {
            return t + '(' + c.len + ')';
        }
        return t || 'VARCHAR2(255)';
    }

    function _ddlEsc(s) {
        return String(s || '').replace(/'/g, "''");
    }

    // ============================================================
    // A5:SQL Mk-2 ネイティブ形式 (.a5er) 生成
    // ============================================================
    // 公式仕様: A5:SQL Mk-2 (https://a5m2.mmatsubara.com/) の独自 INI 風テキスト形式。
    //   - 文字コード: UTF-8 (BOM 付き)
    //   - 改行: CRLF
    //   - ヘッダ + [Manager] + [Entity]* + [Relation]* セクション
    //   - Field 行: "物理名","論理名","型","制約",PKフラグ,"","",$色,"コメント"
    //   - Relation 行: Entity1=子 / Entity2=親 / Fields1=子側列 / Fields2=親側列 (論理名)
    //   - 自動配置: テーブルを横 4 列 × 縦 N 行のグリッドに配置
    function _erToA5er(meta) {
        // レイアウト方針:
        //   4 列固定 × 列ごとに Y を独立して詰めるパッキングレイアウト。
        //   各エンティティのボックス高は HDR_H + (列数 × ROW_H) + FOOTER_H で算出し、
        //   列数の多いテーブル (TLN_M_GENERAL_ITEM 等) が <続きあり> で切れないようにする。
        //   テーブル数が多くキャンバスから溢れる場合は、A5:SQL Mk-2 側で
        //   [設定 → ER図のプロパティ → 用紙サイズ/ページ数] を手動拡張する想定。
        var ENT_W = 600, SP_X = 200, SP_Y = 100, COLS = 4;
        var HDR_H = 70;        // テーブル名ヘッダ部 + 上余白
        var ROW_H = 36;        // 列 1 行あたりの logical unit (実測: 旧 ENT_H=500 / 13 列 ≈ 34)
        var FOOTER_H = 30;     // 下マージン + <続きあり> マーカー領域分
        var MIN_H = 200;       // 列が極端に少ない場合の最小高
        var TOP0 = 100, LEFT0 = 100;
        var N = meta.tables.length;

        // 列ごとに Y を独立して詰める (行ベース配置だと行内最大高に揃わず無駄な空きが出るため)
        var positions = new Array(N);
        var colY = new Array(COLS);
        for (var ci0 = 0; ci0 < COLS; ci0++) colY[ci0] = TOP0;
        for (var ti0 = 0; ti0 < N; ti0++) {
            var t0 = meta.tables[ti0];
            var nc0 = (t0.cols && t0.cols.length) || 0;
            var h0  = Math.max(MIN_H, HDR_H + nc0 * ROW_H + FOOTER_H);
            var col0 = ti0 % COLS;
            var L0 = LEFT0 + col0 * (ENT_W + SP_X);
            var T0 = colY[col0];
            colY[col0] = T0 + h0 + SP_Y;
            positions[ti0] = { left: L0, top: T0, height: h0 };
        }

        var L = [];
        // ヘッダ
        L.push('# A5:ER FORMAT:21');
        L.push('# A5:ER ENCODING:UTF8');
        L.push('# A5:ER Mk-1 Copyright © 2007 m.matsubara');
        L.push('# A5:SQL Mk-2 Generated by TLN_FUNC_DOC_ER_DIAGRAM_COMMON');
        L.push('#  https://a5m2.mmatsubara.com');
        L.push('');
        // Manager セクション
        L.push('[Manager]');
        L.push('ProjectName=');
        L.push('Author=');
        L.push('MaxEntityRowShow=1000');
        L.push('ReadOnlyRecommend=0');
        L.push('PageInfo="Main",3,"A3Landscape",$FFFFFF');
        L.push('LogicalView=0');
        L.push('DecodeDomain=0');
        L.push('ViewFormat=0');
        L.push('UseNondependenceDashLine=0');
        L.push('FontName=Tahoma');
        L.push('FontSize=9');
        L.push('PaperSize=A4Landscape');
        L.push('ShowPageoutRelation=1');
        L.push('DefaultPkName=%0:s_PKC');
        L.push('DefaultPkIndexName=%0:s_PKI');
        L.push('DefaultIndexName=%0:s_IX%1:d');
        L.push('DefaultFkName=%0:s_FK%1:d');
        L.push('SqlSeparator=0');
        L.push('UpperCaseKeyword=0');
        L.push('ShowTag=1');
        L.push('ShowCommonAttributes=0');
        L.push('ShowDisableAttributes=0');
        L.push('BugFixEntityWidth=1');
        L.push('');
        // Entities (事前計算した positions を使用)
        var stamp = _a5erTimestamp();
        for (var ti = 0; ti < N; ti++) {
            var t = meta.tables[ti];
            var p = positions[ti];
            L.push('[Entity]');
            L.push('PName=' + t.name);
            L.push('LName=' + (t.comment || t.name));
            L.push('Comment=');
            L.push('TableInnerOption=');
            L.push('TableOption=');
            L.push('Page=Main');
            L.push('Left=' + p.left);
            L.push('Top=' + p.top);
            for (var ci = 0; ci < t.cols.length; ci++) {
                var c = t.cols[ci];
                var notNull = c.nullable ? '' : 'NOT NULL';
                // Field="論理名","物理名","型","制約",PKフラグ(0/1),"","",$色,"コメント"
                //   論理名 = USER_COL_COMMENTS / pg_description の列コメント。 無ければ物理名で代替
                var lname = c.comment || c.name;
                L.push('Field="' + _a5erStr(lname) + '","' + _a5erStr(c.name) +
                       '","' + _a5erStr(_a5erType(c)) + '","' + notNull + '",' +
                       (c.isPk ? '1' : '0') + ',"","",$FFFFFFFF,""');
            }
            L.push('EffectMode=None');
            L.push('Color=$000000');
            L.push('BkColor=$FFFFFF');
            L.push('ModifiedDateTime=' + stamp);
            L.push('Position="Main",' + p.left + ',' + p.top + ',' + ENT_W + ',' + p.height);
            L.push('ZOrder=' + (ti + 1));
            L.push('');
        }
        // Relations (FK) — 物理列名で参照 (A5 は Fields1/Fields2 を Field の論理名で
        // マッチする仕様だが、 当ライブラリでは物理名=論理名 で生成しているため同値)
        for (var fi = 0; fi < meta.fks.length; fi++) {
            var f = meta.fks[fi];
            L.push('[Relation]');
            L.push('Entity1=' + f.childTable);
            L.push('Entity2=' + f.parentTable);
            L.push('RelationType1=1');
            L.push('RelationType2=3');
            L.push('Fields1=' + f.childCol);
            L.push('Fields2=' + f.parentCol);
            L.push('Cardinarity1=');
            L.push('Cardinarity2=');
            L.push('Position="MAIN",0,1438,8562,1812,R,R,""');
            L.push('Dependence=0');
            L.push('Caption=');
            L.push('PName=');
            L.push('LineMode=0');
            L.push('Bar1=144');
            L.push('Bar2=856');
            L.push('Bar3=181');
            L.push('TermPos1=R');
            L.push('TermPos2=R');
            L.push('ZOrder=' + (meta.tables.length + fi + 1));
            L.push('');
        }
        // UTF-8 BOM (﻿) + CRLF 連結
        return '﻿' + L.join('\r\n');
    }

    function _a5erType(c) {
        var t = String(c.type || '').toUpperCase();
        if ((t === 'NUMBER' || t === 'NUMERIC' || t === 'DECIMAL') && c.prec) {
            return t + '(' + c.prec + (c.scale && c.scale !== '0' ? ',' + c.scale : '') + ')';
        }
        if ((t.indexOf('CHAR') >= 0 || t.indexOf('VARCHAR') >= 0) && c.len && c.len !== '0') {
            return t + '(' + c.len + ')';
        }
        return t || 'VARCHAR2';
    }

    function _a5erStr(s) {
        // " 文字を "" でエスケープ (CSV 風)
        return String(s || '').replace(/"/g, '""');
    }

    function _a5erTimestamp() {
        var d = new Date();
        function p(n) { n = '' + n; return n.length < 2 ? '0' + n : n; }
        return '' + d.getFullYear() + p(d.getMonth() + 1) + p(d.getDate()) +
               p(d.getHours()) + p(d.getMinutes()) + p(d.getSeconds());
    }

    // ============================================================
    // ZIP 出力 (Java util.zip)
    // ============================================================
    // entries: [{name: 'a.html', content: 'string'}, {name: 'b.drawio', content: byte[]}]
    //   content は string (= UTF-8 でエンコード) または Java byte[] (= そのまま書き込み)
    //   バイナリファイル (.drawio 圧縮 XML / 画像 等) は byte[] で渡すこと
    // 戻り値: byte[] (Java)
    TFC.zip = function (entries) {
        var baos = new ByteArrayOutputStream();
        var zos = new ZipOutputStream(baos, Charset.forName('UTF-8'));
        try {
            for (var i = 0; i < entries.length; i++) {
                var e = entries[i];
                zos.putNextEntry(new ZipEntry(e.name));
                var bytes;
                // Java byte[] (= getClass().getName() === '[B') ならそのまま使う
                if (e.content && typeof e.content === 'object' &&
                    e.content.getClass && e.content.getClass().getName() === '[B') {
                    bytes = e.content;
                } else {
                    bytes = new JString(e.content).getBytes(Charset.forName('UTF-8'));
                }
                zos.write(bytes, 0, bytes.length);
                zos.closeEntry();
            }
        } finally {
            zos.close();
        }
        return baos.toByteArray();
    };

    // ============================================================
    // Markdown テンプレート部品
    // ============================================================
    TFC.mdHeader = function (title) {
        return '# ' + (title || '') + '\n\n';
    };

    TFC.mdSection = function (level, heading, body) {
        var hashes = '';
        for (var i = 0; i < (level || 2); i++) hashes += '#';
        return hashes + ' ' + (heading || '') + '\n\n' + (body || '') + '\n';
    };

    TFC.mdKvTable = function (rows, lang) {
        // rows: [[key, val], ...] / lang: 'ja' or 'en' (省略時は 'ja')
        if (!rows || rows.length === 0) return '';
        var head = '| ' + TFC.t('th.item', lang) + ' | ' + TFC.t('th.value', lang) + ' |\n|------|----|\n';
        var s = head;
        for (var i = 0; i < rows.length; i++) {
            var k = TFC.escapeMd(rows[i][0]);
            var v = TFC.escapeMd(rows[i][1] != null ? String(rows[i][1]) : '');
            s += '| ' + k + ' | ' + v + ' |\n';
        }
        return s + '\n';
    };

    TFC.mdCodeBlock = function (lang, code) {
        return '```' + (lang || '') + '\n' + (code || '') + '\n```\n\n';
    };

    // セル値を raw 扱い (escapeMd しない) でテーブルに埋め込むためのマーカー。
    //   inline HTML (<a>...</a> 等) を MD テーブルセルに入れたいときに使う。
    TFC.mdRaw = function (s) { return { __mdRaw: true, value: String(s || '') }; };

    // 任意列のテーブル: headers=['項目1','項目2',...], rows=[[v,v,...],[v,v,...]]
    //   セル値は文字列 (escapeMd 適用) または TFC.mdRaw(...) オブジェクト (raw 通過)
    TFC.mdTable = function (headers, rows) {
        if (!headers || headers.length === 0) return '';
        var s = '|';
        for (var h = 0; h < headers.length; h++) s += ' ' + TFC.escapeMd(headers[h]) + ' |';
        s += '\n|';
        for (var d = 0; d < headers.length; d++) s += '------|';
        s += '\n';
        if (rows) {
            for (var r = 0; r < rows.length; r++) {
                s += '|';
                for (var c = 0; c < rows[r].length; c++) {
                    var cv = rows[r][c];
                    var v;
                    if (cv != null && typeof cv === 'object' && cv.__mdRaw) {
                        // raw: pipe だけは MD テーブルセル区切りと衝突するためエスケープ
                        v = String(cv.value).replace(/\|/g, '\\|').replace(/\r?\n/g, '<br>');
                    } else {
                        v = (cv != null ? String(cv) : '');
                        v = TFC.escapeMd(v).replace(/\r?\n/g, '<br>');
                    }
                    s += ' ' + v + ' |';
                }
                s += '\n';
            }
        }
        return s + '\n';
    };

    // ============================================================
    // ユーティリティ
    // ============================================================
    TFC.s = function (v) {
        if (v == null) return '';
        var s = String(v);
        // NUM 系列の DB エンジン差を正規化:
        //   Oracle  : "1"
        //   SQL Server / MySQL : "1.000000" (BigDecimal scale が CSV 取込時に保持される)
        //   → 整数化可能なら "1" に揃える。 比較 (=== '1') が DB 横断で動くようにする。
        //   実数値 ("1.5" 等) は変更しない。
        if (s.length > 2 && s.indexOf('.') > 0 && /^-?\d+\.0+$/.test(s)) {
            return s.replace(/\.0+$/, '');
        }
        return s;
    };
    TFC.isEmpty = function (v) { return v == null || String(v).length === 0; };
    TFC.coalesce = function () {
        for (var i = 0; i < arguments.length; i++) {
            if (!TFC.isEmpty(arguments[i])) return arguments[i];
        }
        return '';
    };

    // export
    global.TFC = TFC;
    return TFC;

})(this);

```

#### サーバJS ライブラリ: TLN_FUNC_TEST_JAVA (TLN_FUNC_TEST_JAVA)

```javascript
//
```

#### サーバJS ライブラリ: WCRG_COMMON (WCRG_共通クラス群)

```javascript
function createPoolRanking(_CND_DTYEAR, _CND_KBPOOL) {

    var sql = "" +
    "SELECT  " + 
    "  POINT_LIST.DTYEAR " + 
    ", POINT_LIST.KBPOOL " + 
    ", POINT_LIST.IDTEAM " + 
    ", POINT_LIST.TXNAME " + 
    ", SUM(POINT_LIST.POINT_SCORE)                        AS VLPOINT " + 
    ", SUM(POINT_LIST.SCORE_M - POINT_LIST.SCORE_A)       AS VLTOKUSITTEN  " +  
    ", SUM(POINT_LIST.VLTRYCNT_M - POINT_LIST.VLTRYCNT_A) AS VLTRYSASU     " +  
    ", SUM(POINT_LIST.SCORE_M)                            AS VLTOKUTEN     " +  
    ", SUM(POINT_LIST.VLTRYCNT_M)                         AS VLTRYSU       " +  
    ", WCRG_AT040.VLRANKW                                                " +  
    ", 0 AS VLWINPOINT " + 
    "FROM ( " + 
    "    SELECT  " + 
    "      WCRG_V_LEAGUE_LIST.DTYEAR " + 
    "    , WCRG_V_LEAGUE_LIST.KBPOOL " + 
    "    , WCRG_V_LEAGUE_LIST.IDTEAM1      AS IDTEAM " + 
    "    , WCRG_V_LEAGUE_LIST.TXNAME1      AS TXNAME " + 
    "    , case when WCRG_V_LEAGUE_LIST.POINT_SCORE1 is null then 0 else WCRG_V_LEAGUE_LIST.POINT_SCORE1 end AS POINT_SCORE " + 
    "    , WCRG_V_LEAGUE_LIST.SCORE1       AS SCORE_M " + 
    "    , WCRG_V_LEAGUE_LIST.SCORE2       AS SCORE_A " + 
    "    , WCRG_V_LEAGUE_LIST.VLTRYCNT1    AS VLTRYCNT_M " + 
    "    , WCRG_V_LEAGUE_LIST.VLTRYCNT2    AS VLTRYCNT_A " + 
    "    FROM WCRG_V_LEAGUE_LIST " + 
    "    WHERE WCRG_V_LEAGUE_LIST.DTYEAR = '" + _CND_DTYEAR + "' " + 
    "      AND WCRG_V_LEAGUE_LIST.KBPOOL = '" + _CND_KBPOOL + "' " + 
    "     " + 
    "    UNION ALL " + 
    "     " + 
    "    SELECT  " + 
    "      DTYEAR " + 
    "    , KBPOOL " + 
    "    , IDTEAM2      AS IDTEAM " + 
    "    , TXNAME2      AS TXNAME " + 
    "    , case when POINT_SCORE2 is null then 0 else POINT_SCORE2 end AS POINT_SCORE " + 
    "    , WCRG_V_LEAGUE_LIST.SCORE2       AS SCORE_M " + 
    "    , WCRG_V_LEAGUE_LIST.SCORE1       AS SCORE_A " + 
    "    , WCRG_V_LEAGUE_LIST.VLTRYCNT2    AS VLTRYCNT_M " + 
    "    , WCRG_V_LEAGUE_LIST.VLTRYCNT1    AS VLTRYCNT_A " + 
    "    FROM WCRG_V_LEAGUE_LIST " + 
    "    WHERE WCRG_V_LEAGUE_LIST.DTYEAR = '" + _CND_DTYEAR + "' " + 
    "      AND WCRG_V_LEAGUE_LIST.KBPOOL = '" + _CND_KBPOOL + "' " + 
    ") POINT_LIST " + 
    " " + 
    "LEFT OUTER JOIN WCRG_AT040 " + 
    "  ON POINT_LIST.DTYEAR = WCRG_AT040.DTYEAR " + 
    " AND POINT_LIST.IDTEAM = WCRG_AT040.IDTEAM " + 
    " " + 
    "GROUP BY  " + 
    "  POINT_LIST.DTYEAR " + 
    ", POINT_LIST.KBPOOL " + 
    ", POINT_LIST.IDTEAM " + 
    ", POINT_LIST.TXNAME " + 
    ", WCRG_AT040.VLRANKW  " + 
    " " + 
    "ORDER BY  " + 
    "  POINT_LIST.DTYEAR " + 
    ", POINT_LIST.KBPOOL " + 
    ", SUM(POINT_LIST.POINT_SCORE) DESC  " + 
    ", SUM(POINT_LIST.SCORE_M - POINT_LIST.SCORE_A) DESC " + 
    ", SUM(POINT_LIST.VLTRYCNT_M - POINT_LIST.VLTRYCNT_A) DESC " + 
    ", SUM(POINT_LIST.SCORE_M) DESC " + 
    ", SUM(POINT_LIST.VLTRYCNT_M) DESC " + 
    ", WCRG_AT040.VLRANKW  " + 
    " ";

    var itemSelectListMain = TalonDbUtil.select( TALON.getDbConfig() , sql );
    var itemSelectListSub  = itemSelectListMain;

    for (var iMain = 0; iMain < itemSelectListMain.length; iMain++) {
        var lineDataMapMain = itemSelectListMain[iMain];
        var _DTYEAR         = lineDataMapMain['DTYEAR'];
        var _KBPOOL         = lineDataMapMain['KBPOOL'];
        var _M_IDTEAM       = lineDataMapMain['IDTEAM'];
        var _M_TXNAME       = lineDataMapMain['TXNAME'];
        var _M_VLPOINT      = lineDataMapMain['VLPOINT'];
        var _M_VLTOKUSITTEN = lineDataMapMain['VLTOKUSITTEN'];
        var _M_VLTRYSASU    = lineDataMapMain['VLTRYSASU'];
        var _M_VLTOKUTEN    = lineDataMapMain['VLTOKUTEN'];
        var _M_VLTRYSU      = lineDataMapMain['VLTRYSU'];
        var _M_VLRANKW      = lineDataMapMain['VLPOINT'];

        var _M_VLWINPOINT = 0;
        for (var iSub = 0; iSub < itemSelectListSub.length; iSub++) {
            var lineDataMapSub = itemSelectListSub[iMain];
            var _S_IDTEAM      = lineDataMapSub['IDTEAM'];
            var _S_VLPOINT     = lineDataMapSub['VLPOINT'];

            if (_M_VLPOINT == _S_VLPOINT) {
                _M_VLWINPOINT = _M_VLWINPOINT + getWinPoint(_DTYEAR, _KBPOOL, _M_IDTEAM, _S_IDTEAM);
            }
        }
        lineDataMapMain['VLWINPOINT'] = _M_VLWINPOINT;

        var sql = "" +
        "INSERT INTO WCRG_WK020 ( " + 
        "      DTYEAR            " + 
        "    , KBPOOL            " + 
        "    , IDTEAM            " + 
        "    , TXNAME            " + 
        "    , VLPOINT           " + 
        "    , VLWINPOINT        " + 
        "    , VLTOKUSITTEN      " + 
        "    , VLTRYSASU         " + 
        "    , VLTOKUTEN         " + 
        "    , VLTRYSU           " + 
        "    , VLRANKW           " + 
        ") VALUES ( " + 
        "      '" + _DTYEAR + "'" + 
        "    , '" + _KBPOOL + "'" + 
        "    , '" + _M_IDTEAM + "'" + 
        "    , '" + _M_TXNAME + "'" + 
        "    ,  " + _M_VLPOINT      + " " + 
        "    ,  " + _M_VLWINPOINT   + " " + 
        "    ,  " + _M_VLTOKUSITTEN + " " + 
        "    ,  " + _M_VLTRYSASU    + " " + 
        "    ,  " + _M_VLTOKUTEN    + " " + 
        "    ,  " + _M_VLTRYSU      + " " + 
        "    ,  " + _M_VLRANKW      + " " + 
        ") " + 
        " ";
        var insertCount = TalonDbUtil.insert( TALON.getDbConfig() , sql );
    }

    var sql = "" +
    "SELECT " + 
    "  DTYEAR " + 
    ", KBPOOL " + 
    ", IDTEAM " + 
    ", TXNAME " + 
    ", VLPOINT " + 
    ", VLWINPOINT " + 
    ", VLTOKUSITTEN " + 
    ", VLTRYSASU " + 
    ", VLTOKUTEN " + 
    ", VLTRYSU " + 
    ", VLRANKW " + 
    ", VLRANKNUMBER " + 
    "FROM WCRG_WK020 " + 
    "ORDER BY  " + 
    "  VLPOINT " + 
    ", VLWINPOINT " + 
    ", VLTOKUSITTEN " + 
    ", VLTRYSASU " + 
    ", VLTOKUTEN " + 
    ", VLTRYSU " + 
    ", VLRANKW " + 
    " ";

    for (var iMain = 0; iMain < itemSelectListMain.length; iMain++) {
        var lineDataMapMain = itemSelectListMain[iMain];
        var _DTYEAR         = lineDataMapMain['DTYEAR'];
        var _KBPOOL         = lineDataMapMain['KBPOOL'];
        var _M_IDTEAM       = lineDataMapMain['IDTEAM'];

        var sql = "" +
        "UPDATE WCRG_WK020 SET " + 
        "      VLRANKNUMBER = " + (iMain + 1) + "  " + 
        "WHERE DTYEAR = '" + _DTYEAR + "'" + 
        "  AND KBPOOL = '" + _KBPOOL + "'" + 
        "  AND IDTEAM = '" + _M_IDTEAM + "'" + 
        " ";
        var updateCount = TalonDbUtil.update( TALON.getDbConfig() , sql );
    }

}

function getWinPoint(_DTYEAR, _KBPOOL, _M_IDTEAM, _S_IDTEAM) {
    var sql = "" +
    "SELECT  " + 
    "WINPTN " + 
    "FROM ( " + 
    "    SELECT  " + 
    "    case when ( (case when SCORE1 is null then 0 else SCORE1 end) > (case when SCORE2 is null then 0 else SCORE2 end) ) then 1 else 0 end AS WINPTN " + 
    "    FROM WCRG_V_LEAGUE_LIST " + 
    "    WHERE DTYEAR = '2019' " + 
    "      AND KBPOOL = 'PL-A' " + 
    "      AND IDTEAM1 = 'TM10' " + 
    "      AND IDTEAM2 = 'TM13' " + 
    "     " + 
    "    UNION ALL " + 
    "     " + 
    "    SELECT  " + 
    "    case when ( (case when SCORE2 is null then 0 else SCORE2 end) > (case when SCORE1 is null then 0 else SCORE1 end) ) then 1 else 0 end AS WINPTN " + 
    "    FROM WCRG_V_LEAGUE_LIST " + 
    "    WHERE DTYEAR = '2019' " + 
    "      AND KBPOOL = 'PL-A' " + 
    "      AND IDTEAM1 = 'TM13' " + 
    "      AND IDTEAM2 = 'TM10' " + 
    ") MN " + 
    " ";

    var itemSelectListPoint = TalonDbUtil.select( TALON.getDbConfig() , sql );

    if (itemSelectListPoint.length == 0 ) {
        var _WINPTN = 0;
    } else {
        var lineDataMapPoint = itemSelectListPoint[0];
        var _WINPTN = lineDataMapPoint['WINPTN'];
    }
    
    return _WINPTN;
}



// -----------------------------------------------------------------------------

function createTournamentList(_CND_DTYEAR){

    //準々決勝：プール戦結果
    var sql = "" +
        "SELECT  " + 
        "  WCRG_AT030.DTYEAR " + 
        ", WCRG_AT030.SQTMATCH " + 
        ", WCRG_AT030.SQTMATCHUP " + 
        ", WCRG_AT030.VLWAKU " + 
        ", WCRG_WK020_1.IDTEAM AS IDTEAM1 " + 
        ", WCRG_WK020_1.TXNAME AS TXNAME1 " + 
        ", WCRG_WK020_2.IDTEAM AS IDTEAM2 " + 
        ", WCRG_WK020_2.TXNAME AS TXNAME2 " + 
        "FROM WCRG_AT030 " + 
        "LEFT OUTER JOIN WCRG_WK020 WCRG_WK020_1 " + 
        "   ON WCRG_AT030.DTYEAR = WCRG_WK020_1.DTYEAR " + 
        " AND WCRG_AT030.KBPOOL1 = WCRG_WK020_1.KBPOOL " + 
        " AND WCRG_WK020_1.VLRANKNUMBER = 1 " + 
        "LEFT OUTER JOIN WCRG_WK020 WCRG_WK020_2 " + 
        "   ON WCRG_AT030.DTYEAR = WCRG_WK020_2.DTYEAR " + 
        " AND WCRG_AT030.KBPOOL2 = WCRG_WK020_2.KBPOOL " + 
        " AND WCRG_WK020_2.VLRANKNUMBER = 2 " + 
        "WHERE WCRG_AT030.KBPOOL1 IS NOT NULL " 
        "  AND WCRG_AT030.DTYEAR = '" + _CND_DTYEAR + "' ";

    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );

    for (var i = 0; i < itemSelectList.length; i++) {
        var lineDataMap = itemSelectList[i];

        insertWCRG_WK030(lineDataMap['DTYEAR'], lineDataMap['SQTMATCH'], lineDataMap['IDTEAM1'], lineDataMap['TXNAME1'], lineDataMap['IDTEAM2'], lineDataMap['TXNAME2']) ;
    }



    //準決勝：準々決勝結果(勝)
    var sql = selectWCRG_WK030(_CND_DTYEAR, 2, 0);
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );

    for (var i = 0; i < itemSelectList.length; i++) {
        var lineDataMap = itemSelectList[i];

        insertWCRG_WK030(lineDataMap['DTYEAR'], lineDataMap['SQTMATCH'], lineDataMap['IDTEAM1'], lineDataMap['TXNAME1'], lineDataMap['IDTEAM2'], lineDataMap['TXNAME2']) ;
    }



    //決勝：準決勝結果(勝)
    var sql = selectWCRG_WK030(_CND_DTYEAR, 0, 0);
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );

    for (var i = 0; i < itemSelectList.length; i++) {
        var lineDataMap = itemSelectList[i];

        insertWCRG_WK030(lineDataMap['DTYEAR'], lineDataMap['SQTMATCH'], lineDataMap['IDTEAM1'], lineDataMap['TXNAME1'], lineDataMap['IDTEAM2'], lineDataMap['TXNAME2']) ;
    }



    //3位決定戦：準決勝結果(負)
    var sql = selectWCRG_WK030(_CND_DTYEAR, 1, 1);
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );

    for (var i = 0; i < itemSelectList.length; i++) {
        var lineDataMap = itemSelectList[i];

        insertWCRG_WK030(lineDataMap['DTYEAR'], lineDataMap['SQTMATCH'], lineDataMap['IDTEAM1'], lineDataMap['TXNAME1'], lineDataMap['IDTEAM2'], lineDataMap['TXNAME2']) ;
    }

}

/*
_VLLEVEL 参照する階層
_KBN     0:勝者チーム 1:敗者チーム
*/
function selectWCRG_WK030(_DTYEAR, _VLLEVEL, _KBN) {
    var sql = "";


    //３位決定戦の場合、決勝の負けを取得
    if (_VLLEVEL == 1) {
        sql = sql + "" +
            "SELECT DTYEAR, SQTMATCH FROM WCRG_AT030 " + 
            "WHERE WCRG_AT030.DTYEAR = '" + _DTYEAR + "' " + 
            "  AND WCRG_AT030.VLLEVEL= " + _VLLEVEL + "  "

        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );
        var lineDataMap = itemSelectList[0];
        var _SQTMATCH = lineDataMap['SQTMATCH'];
    }

    var sql = "";

    if (_VLLEVEL == 1) {
    sql = sql + "" +
        "SELECT  " + 
        " " + 
        "  WCRG_AT030.DTYEAR " + 
        ", '" + _SQTMATCH + "' as SQTMATCH " + 
        " ";

        _VLLEVEL = 0;
    } else {
    sql = sql + "" +
        "SELECT  " + 
        " " + 
        "  WCRG_AT030.DTYEAR " + 
        ", WCRG_AT030.SQTMATCH " + 
        " ";
    }

    if (_KBN == 1) {
    //３位決定戦　：　敗者を取得
    sql = sql + "" +
        ", CASE  " + 
        "    WHEN WCRG_AT030_KEKKA1.ALLSCORE1>WCRG_AT030_KEKKA1.ALLSCORE2 THEN WCRG_AT030_KEKKA1.IDTEAM2 " + 
        "    WHEN WCRG_AT030_KEKKA1.ALLSCORE1<WCRG_AT030_KEKKA1.ALLSCORE2 THEN WCRG_AT030_KEKKA1.IDTEAM1 " + 
        "    ELSE NULL " + 
        "  END AS IDTEAM1 " + 
        " " + 
        ", CASE  " + 
        "    WHEN WCRG_AT030_KEKKA1.ALLSCORE1>WCRG_AT030_KEKKA1.ALLSCORE2 THEN WCRG_AT030_KEKKA1.TXNAME2 " + 
        "    WHEN WCRG_AT030_KEKKA1.ALLSCORE1<WCRG_AT030_KEKKA1.ALLSCORE2 THEN WCRG_AT030_KEKKA1.TXNAME1 " + 
        "    ELSE NULL " + 
        "  END AS TXNAME1 " + 
        " " + 
        ", CASE  " + 
        "    WHEN WCRG_AT030_KEKKA2.ALLSCORE1>WCRG_AT030_KEKKA2.ALLSCORE2 THEN WCRG_AT030_KEKKA2.IDTEAM2 " + 
        "    WHEN WCRG_AT030_KEKKA2.ALLSCORE1<WCRG_AT030_KEKKA2.ALLSCORE2 THEN WCRG_AT030_KEKKA2.IDTEAM1 " + 
        "    ELSE NULL " + 
        "  END AS IDTEAM2 " + 
        " " + 
        ", CASE  " + 
        "    WHEN WCRG_AT030_KEKKA2.ALLSCORE1>WCRG_AT030_KEKKA2.ALLSCORE2 THEN WCRG_AT030_KEKKA2.TXNAME2 " + 
        "    WHEN WCRG_AT030_KEKKA2.ALLSCORE1<WCRG_AT030_KEKKA2.ALLSCORE2 THEN WCRG_AT030_KEKKA2.TXNAME1 " + 
        "    ELSE NULL " + 
        "  END AS TXNAME2 " + 
        " ";
    } else {
    //準決勝・決勝時　：　勝者を取得
    sql = sql + "" +
        ", CASE  " + 
        "    WHEN WCRG_AT030_KEKKA1.ALLSCORE1>WCRG_AT030_KEKKA1.ALLSCORE2 THEN WCRG_AT030_KEKKA1.IDTEAM1 " + 
        "    WHEN WCRG_AT030_KEKKA1.ALLSCORE1<WCRG_AT030_KEKKA1.ALLSCORE2 THEN WCRG_AT030_KEKKA1.IDTEAM2 " + 
        "    ELSE NULL " + 
        "  END AS IDTEAM1 " + 
        " " + 
        ", CASE  " + 
        "    WHEN WCRG_AT030_KEKKA1.ALLSCORE1>WCRG_AT030_KEKKA1.ALLSCORE2 THEN WCRG_AT030_KEKKA1.TXNAME1 " + 
        "    WHEN WCRG_AT030_KEKKA1.ALLSCORE1<WCRG_AT030_KEKKA1.ALLSCORE2 THEN WCRG_AT030_KEKKA1.TXNAME2 " + 
        "    ELSE NULL " + 
        "  END AS TXNAME1 " + 
        " " + 
        ", CASE  " + 
        "    WHEN WCRG_AT030_KEKKA2.ALLSCORE1>WCRG_AT030_KEKKA2.ALLSCORE2 THEN WCRG_AT030_KEKKA2.IDTEAM1 " + 
        "    WHEN WCRG_AT030_KEKKA2.ALLSCORE1<WCRG_AT030_KEKKA2.ALLSCORE2 THEN WCRG_AT030_KEKKA2.IDTEAM2 " + 
        "    ELSE NULL " + 
        "  END AS IDTEAM2 " + 
        " " + 
        ", CASE  " + 
        "    WHEN WCRG_AT030_KEKKA2.ALLSCORE1>WCRG_AT030_KEKKA2.ALLSCORE2 THEN WCRG_AT030_KEKKA2.TXNAME1 " + 
        "    WHEN WCRG_AT030_KEKKA2.ALLSCORE1<WCRG_AT030_KEKKA2.ALLSCORE2 THEN WCRG_AT030_KEKKA2.TXNAME2 " + 
        "    ELSE NULL " + 
        "  END AS TXNAME2 " + 
        " ";
    }

    sql = sql + "" +
        "FROM WCRG_AT030 " + 
        " " + 
        "LEFT OUTER JOIN ( " + 
        "    SELECT  " + 
        "     " + 
        "      WCRG_AT030.DTYEAR " + 
        "    , WCRG_AT030.SQTMATCH " + 
        "    , WCRG_AT030.VLLEVEL " + 
        "    , WCRG_AT030.VLWAKU " + 
        "    , WCRG_AT030.SQTMATCHUP " + 
        "     " + 
        "    , WCRG_WK030.IDTEAM1 " + 
        "    , WCRG_WK030.TXNAME1 " + 
        "    , case when WCRG_AT032_1.ALLSCORE is null then 0 else WCRG_AT032_1.ALLSCORE end AS ALLSCORE1 " + 
        "     " + 
        "    , WCRG_WK030.IDTEAM2 " + 
        "    , WCRG_WK030.TXNAME2 " + 
        "    , case when WCRG_AT032_2.ALLSCORE is null then 0 else WCRG_AT032_2.ALLSCORE end AS ALLSCORE2 " + 
        "     " + 
        "    FROM WCRG_AT030 " + 
        "     " + 
        "    LEFT OUTER JOIN WCRG_WK030 " + 
        "      ON WCRG_AT030.DTYEAR   = WCRG_WK030.DTYEAR " + 
        "     AND WCRG_AT030.SQTMATCH = WCRG_WK030.SQTMATCH " + 
        "     " + 
        "    LEFT OUTER JOIN ( " + 
        "        SELECT  " + 
        "          DTYEAR " + 
        "         ,SQTMATCH " + 
        "         ,IDTEAM " + 
        "         ,SUM(  " + 
        "            ( case when VLTRYCNT is null then 0 else VLTRYCNT end * 5 )  " + 
        "            +  " + 
        "            ( case when VLCNVCNT is null then 0 else VLCNVCNT end * 2 ) " + 
        "            +  " + 
        "            ( case when VLPENCNT is null then 0 else VLPENCNT end * 3 ) " + 
        "            +  " + 
        "            ( case when VLDRPCNT is null then 0 else VLDRPCNT end * 3 ) " + 
        "          ) AS ALLSCORE " + 
        "        FROM WCRG_AT032 " + 
        "        GROUP BY  " + 
        "          DTYEAR " + 
        "         ,SQTMATCH " + 
        "         ,IDTEAM " + 
        "    ) WCRG_AT032_1 " + 
        "      ON WCRG_WK030.DTYEAR   = WCRG_AT032_1.DTYEAR " + 
        "     AND WCRG_WK030.SQTMATCH = WCRG_AT032_1.SQTMATCH " + 
        "     AND WCRG_WK030.IDTEAM1  = WCRG_AT032_1.IDTEAM " + 
        "      " + 
        "    LEFT OUTER JOIN ( " + 
        "        SELECT  " + 
        "          DTYEAR " + 
        "         ,SQTMATCH " + 
        "         ,IDTEAM " + 
        "         ,SUM(  " + 
        "            ( case when VLTRYCNT is null then 0 else VLTRYCNT end * 5 )  " + 
        "            +  " + 
        "            ( case when VLCNVCNT is null then 0 else VLCNVCNT end * 2 ) " + 
        "            +  " + 
        "            ( case when VLPENCNT is null then 0 else VLPENCNT end * 3 ) " + 
        "            +  " + 
        "            ( case when VLDRPCNT is null then 0 else VLDRPCNT end * 3 ) " + 
        "          ) AS ALLSCORE " + 
        "        FROM WCRG_AT032 " + 
        "        GROUP BY  " + 
        "          DTYEAR " + 
        "         ,SQTMATCH " + 
        "         ,IDTEAM " + 
        "    ) WCRG_AT032_2 " + 
        "      ON WCRG_WK030.DTYEAR   = WCRG_AT032_2.DTYEAR " + 
        "     AND WCRG_WK030.SQTMATCH = WCRG_AT032_2.SQTMATCH " + 
        "     AND WCRG_WK030.IDTEAM2  = WCRG_AT032_2.IDTEAM " + 
        "    WHERE WCRG_AT030.VLWAKU = 1 " + 
        ") WCRG_AT030_KEKKA1 " + 
        "  ON WCRG_AT030.DTYEAR   = WCRG_AT030_KEKKA1.DTYEAR " + 
        " AND WCRG_AT030.SQTMATCH = WCRG_AT030_KEKKA1.SQTMATCHUP " + 
        "  " + 
        "LEFT OUTER JOIN ( " + 
        "    SELECT  " + 
        "     " + 
        "      WCRG_AT030.DTYEAR " + 
        "    , WCRG_AT030.SQTMATCH " + 
        "    , WCRG_AT030.VLLEVEL " + 
        "    , WCRG_AT030.VLWAKU " + 
        "    , WCRG_AT030.SQTMATCHUP " + 
        "     " + 
        "    , WCRG_WK030.IDTEAM1 " + 
        "    , WCRG_WK030.TXNAME1 " + 
        "    , WCRG_AT032_1.ALLSCORE AS ALLSCORE1 " + 
        "     " + 
        "    , WCRG_WK030.IDTEAM2 " + 
        "    , WCRG_WK030.TXNAME2 " + 
        "    , WCRG_AT032_2.ALLSCORE AS ALLSCORE2 " + 
        "     " + 
        "    FROM WCRG_AT030 " + 
        "     " + 
        "    LEFT OUTER JOIN WCRG_WK030 " + 
        "      ON WCRG_AT030.DTYEAR   = WCRG_WK030.DTYEAR " + 
        "     AND WCRG_AT030.SQTMATCH = WCRG_WK030.SQTMATCH " + 
        "     " + 
        "    LEFT OUTER JOIN ( " + 
        "        SELECT  " + 
        "          DTYEAR " + 
        "         ,SQTMATCH " + 
        "         ,IDTEAM " + 
        "         ,SUM(  " + 
        "            ( case when VLTRYCNT is null then 0 else VLTRYCNT end * 5 )  " + 
        "            +  " + 
        "            ( case when VLCNVCNT is null then 0 else VLCNVCNT end * 2 ) " + 
        "            +  " + 
        "            ( case when VLPENCNT is null then 0 else VLPENCNT end * 3 ) " + 
        "            +  " + 
        "            ( case when VLDRPCNT is null then 0 else VLDRPCNT end * 3 ) " + 
        "          ) AS ALLSCORE " + 
        "        FROM WCRG_AT032 " + 
        "        GROUP BY  " + 
        "          DTYEAR " + 
        "         ,SQTMATCH " + 
        "         ,IDTEAM " + 
        "    ) WCRG_AT032_1 " + 
        "      ON WCRG_WK030.DTYEAR   = WCRG_AT032_1.DTYEAR " + 
        "     AND WCRG_WK030.SQTMATCH = WCRG_AT032_1.SQTMATCH " + 
        "     AND WCRG_WK030.IDTEAM1  = WCRG_AT032_1.IDTEAM " + 
        "      " + 
        "    LEFT OUTER JOIN ( " + 
        "        SELECT  " + 
        "          DTYEAR " + 
        "         ,SQTMATCH " + 
        "         ,IDTEAM " + 
        "         ,SUM(  " + 
        "            ( case when VLTRYCNT is null then 0 else VLTRYCNT end * 5 )  " + 
        "            +  " + 
        "            ( case when VLCNVCNT is null then 0 else VLCNVCNT end * 2 ) " + 
        "            +  " + 
        "            ( case when VLPENCNT is null then 0 else VLPENCNT end * 3 ) " + 
        "            +  " + 
        "            ( case when VLDRPCNT is null then 0 else VLDRPCNT end * 3 ) " + 
        "          ) AS ALLSCORE " + 
        "        FROM WCRG_AT032 " + 
        "        GROUP BY  " + 
        "          DTYEAR " + 
        "         ,SQTMATCH " + 
        "         ,IDTEAM " + 
        "    ) WCRG_AT032_2 " + 
        "      ON WCRG_WK030.DTYEAR   = WCRG_AT032_2.DTYEAR " + 
        "     AND WCRG_WK030.SQTMATCH = WCRG_AT032_2.SQTMATCH " + 
        "     AND WCRG_WK030.IDTEAM2  = WCRG_AT032_2.IDTEAM " + 
        "    WHERE WCRG_AT030.VLWAKU = 2 " + 
        ") WCRG_AT030_KEKKA2 " + 
        "  ON WCRG_AT030.DTYEAR   = WCRG_AT030_KEKKA2.DTYEAR " + 
        " AND WCRG_AT030.SQTMATCH = WCRG_AT030_KEKKA2.SQTMATCHUP " + 
        "  " + 
        "WHERE WCRG_AT030.DTYEAR = '" + _DTYEAR + "' " + 
        "  AND WCRG_AT030.VLLEVEL= " + _VLLEVEL + "  " + 
        " ";
    return sql;
}


function insertWCRG_WK030(_DTYEAR, _SQTMATCH, _IDTEAM1, _TXNAME1, _IDTEAM2, _TXNAME2 ) {
    if (_IDTEAM1 == null) { _IDTEAM1 = ""; }
    if (_TXNAME1 == null) { _TXNAME1 = ""; }
    if (_IDTEAM2 == null) { _IDTEAM2 = ""; }
    if (_TXNAME2 == null) { _TXNAME2 = ""; }

    var sql = "" +
        "INSERT INTO WCRG_WK030 ( " + 
        "  DTYEAR " + 
        ", SQTMATCH " + 
        ", IDTEAM1 " + 
        ", TXNAME1 " + 
        ", IDTEAM2 " + 
        ", TXNAME2 " + 
        ") VALUES ( " + 
        "  '" + _DTYEAR   + "' " + 
        ", '" + _SQTMATCH + "' " + 
        ", '" + _IDTEAM1  + "' " + 
        ", '" + _TXNAME1  + "' " + 
        ", '" + _IDTEAM2  + "' " + 
        ", '" + _TXNAME2  + "' " + 
        ") ";

    var insertCount = TalonDbUtil.insert( TALON.getDbConfig() , sql );
}



```

#### サーバJS ライブラリ: WFS_COMMON ([共通]ワークフローシステム)

```javascript
/**
 * WFS_COMMON : [共通]ワークフローシステム
 *
 * 最終更新：　WFS_2_0_3
 * @version   2025/07/29
 */


//-------------------------------------------
//［共通］部品
//-------------------------------------------
var _USER_ID = '';
var _FUNC_ID = '';
function tln_com_escape(val) {
    var toStr = Object.prototype.toString;
    var tType = toStr.call( val ).slice(8, -1).toUpperCase();
    if (tType == 'STRING' ) {
        return val.replace( /'/g , "''" );
    } else {
        return val;
    }
}
function tln_com_nowdate() {
    var sysDate = new java.util.Date();
    return sysDate;
}
function tln_com_todate(val) {
    y = parseInt(val.split("/")[0]) - 1900;
    m = parseInt(val.split("/")[1]) - 1;
    d = parseInt(val.split("/")[2]);

    var sysDate = new java.util.Date(y,m,d);
    return sysDate;
}
function tln_com_func_id() {
    if (_FUNC_ID == '') {
        _FUNC_ID = TALON.getUserInfoMap().get("FUNC_ID");
    }
    return _FUNC_ID;
}
function tln_com_user_id() {
    if (_USER_ID == '') {
        var lineDataMap = TALON.getUserInfoMap();
        _USER_ID = getMapVal( lineDataMap , 'USER_ID' );
    }
    return _USER_ID;
}
function tln_com_log(val) {
    var log = TALON.getLogger();
    log.writeDebug(val);
}



//-------------------------------------------
//［共通］部品０
//-------------------------------------------
function tln_insertByMap(tbl, lst ,name) {
    if ( chkLowercase() ) {
        TalonDbUtil.insertByMap( TALON.getDbConfig(),  tbl.toLowerCase(), lst , name );
    } else {
        TalonDbUtil.insertByMap( TALON.getDbConfig(),  tbl              , lst , name );
    }
}
function tln_updateByMap(tbl, lst ,name ,where) {
    if ( chkLowercase() ) {
        TalonDbUtil.updateByMap( TALON.getDbConfig(),  tbl.toLowerCase(), lst , name , where);
    } else {
        TalonDbUtil.updateByMap( TALON.getDbConfig(),  tbl              , lst , name , where);
    }
}
function tln_deleteByMap(tbl, lst ,name) {
    if ( chkLowercase() ) {
        TalonDbUtil.deleteByMap( TALON.getDbConfig(),  tbl.toLowerCase(), lst , name );
    } else {
        TalonDbUtil.deleteByMap( TALON.getDbConfig(),  tbl              , lst , name );
    }
}



//-------------------------------------------
//［共通］処理０
//-------------------------------------------
function getMapVal(map , id) {
    var _rec = null;
    _rec = map[id];
    if (_rec == null) {
        _rec = map[id.toLowerCase()];
    }
    return _rec;
}
function setMapVal(map , id , val) {
    if ( TALON.getDbConfig().isPostgres() ) {
        map[ id.toLowerCase() ]   = val;
    } else {
        map[ id ]   = val;
    }
}
function putBindVal(key , val) {
    if ( TALON.getDbConfig().isPostgres() ) {
        TALON.putBindValue( key.toLowerCase() , val );
    } else {
        TALON.putBindValue( key , val );
    }
}
function chkLowercase() {
    if ( TALON.getDbConfig().isPostgres() ) {
        return true;
    } else if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(),  "SELECT COUNT(*) AS CNT FROM TLN_M_NAME_MANAGER WHERE BINARY TABLE_NAME = BINARY 'WFS_M_AUTH' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal( lineDataMap , 'CNT' );
        if (_CNT == 0) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}
function editLowList(obj) {
    if ( TALON.getDbConfig().isPostgres() ) {
        for(var lop = 0; lop < obj.length; lop++) {
            obj[lop] = obj[lop].toLowerCase();
        }
    }
    return obj;
}



//-------------------------------------------
//［共通］処理
//-------------------------------------------
//-------------------------------------------
//WFSワークフロー管理マスタ
function selectWFS_M_CONTROL(_WORK_ID) {
    var sql = 
        "SELECT " +
        "     WORK_ID          " + 
        ",    WORK_NM          " + 
        ",    LVL_ROWS         " + 
        ",    REJECT_KBN       " + 
        ",    DAIRI_FLG        " + 
        ",    MAIL_SEND_FLG    " + 
        ",    CREATED_DATE     " + 
        ",    CREATED_BY       " + 
        ",    CREATED_PRG_NM   " + 
        ",    UPDATED_DATE     " + 
        ",    UPDATED_BY       " + 
        ",    UPDATED_PRG_NM   " + 
        ",    MODIFY_COUNT     " + 
        "FROM WFS_M_CONTROL "       +
        "WHERE WORK_ID = '" + tln_com_escape( _WORK_ID ) + "'"
    ;
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}

//-------------------------------------------
//WFSワークフロー階層マスタ
function selectWFS_M_LEVEL(_WORK_ID, _LVL, _ROUTE_ID) {
    var sql = 
        "SELECT " +
        "     WFS_M_LEVEL.WORK_ID           " + 
        ",    WFS_M_LEVEL.LVL               " + 
        ",    WFS_M_LEVEL.LVL_NM            " + 
        ",    CASE WHEN WFS_M_LEVEL.SYONIN_PTN IS NOT NULL THEN WFS_M_LEVEL.SYONIN_PTN ELSE WFS_M_AUTH.SYONIN_PTN END AS SYONIN_PTN " +
        ",    WFS_M_LEVEL.CREATED_DATE      " + 
        ",    WFS_M_LEVEL.CREATED_BY        " + 
        ",    WFS_M_LEVEL.CREATED_PRG_NM    " + 
        ",    WFS_M_LEVEL.UPDATED_DATE      " + 
        ",    WFS_M_LEVEL.UPDATED_BY        " + 
        ",    WFS_M_LEVEL.UPDATED_PRG_NM    " + 
        ",    WFS_M_LEVEL.MODIFY_COUNT      " + 
        "FROM WFS_M_LEVEL "       +
        "LEFT OUTER JOIN WFS_M_AUTH " + 
        "  ON WFS_M_LEVEL.WORK_ID = WFS_M_AUTH.WORK_ID " + 
        " AND WFS_M_LEVEL.LVL     = WFS_M_AUTH.LVL " + 
        " AND '" + tln_com_escape( _ROUTE_ID ) + "' = WFS_M_AUTH.ROUTE_ID " + 
        "WHERE WFS_M_LEVEL.WORK_ID = '" + tln_com_escape( _WORK_ID ) + "'" + 
        "  AND WFS_M_LEVEL.LVL     = '" + tln_com_escape( _LVL )     + "'"
    ;
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}
function selectWFS_M_LEVEL_NEXTPRE(_WORK_ID,_ROUTE_ID,_LVL,_FLG) {
    //_FLG : 1 = 次のレベル　/ ELSE = 前のレベル
    var wh = '';
    if (_FLG == '1') {
        wh = "  AND WFS_M_LEVEL.LVL > '" + _LVL + "' " + 
             "ORDER BY WFS_M_LEVEL.LVL ";
    } else {
        wh = "  AND WFS_M_LEVEL.LVL < '" + _LVL + "' " + 
             "ORDER BY WFS_M_LEVEL.LVL DESC ";
    }
    var sql = 
        "SELECT " +
        "  WFS_M_LEVEL.LVL  " + 
        "FROM WFS_M_LEVEL   " +
        "INNER JOIN WFS_M_AUTH " + 
        "   ON WFS_M_AUTH.WORK_ID    = WFS_M_LEVEL.WORK_ID " +
        "  AND WFS_M_AUTH.LVL        = WFS_M_LEVEL.LVL " + 
        "  AND WFS_M_AUTH.ROUTE_ID = '" + tln_com_escape( _ROUTE_ID ) + "'" + 
        "WHERE WFS_M_LEVEL.WORK_ID = '" + tln_com_escape( _WORK_ID  ) + "'" + 
        wh
    ;
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}

//-------------------------------------------
//WFSワークフローグループ権限割り付けマスタ
function selectWFS_M_AUTH(_WORK_ID,_LVL,_ROUTE_ID) {
    var sql = 
        "SELECT " +
        "     WORK_ID       " + 
        ",    LVL           " + 
        ",    ROUTE_ID    " + 
        ",    USR_GRP_ID    " + 
        ",    CREATED_DATE      " + 
        ",    CREATED_BY        " + 
        ",    CREATED_PRG_NM    " + 
        ",    UPDATED_DATE      " + 
        ",    UPDATED_BY        " + 
        ",    UPDATED_PRG_NM    " + 
        ",    MODIFY_COUNT      " + 
        "FROM WFS_M_AUTH "       +
        "WHERE WORK_ID    = '" + tln_com_escape( _WORK_ID  )  + "'" + 
        "  AND LVL        = '" + tln_com_escape( _LVL      )  + "'" + 
        "  AND ROUTE_ID   = '" + tln_com_escape( _ROUTE_ID )  + "'" 
    ;
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}

//-------------------------------------------
//WFSワークフローグループ権限割り付けマスタ
function selectWFS_M_AUTH_TANTO_CNT(_WORK_ID,_LVL,_ROUTE_ID,_OBJECT_ID) {
    //承認者指定を行っている場合はその人数が次階層に移動する基準となる
    var sql = 
        "SELECT  " + 
        " WFS_M_AUTH.WORK_ID " + 
        ",WFS_M_AUTH.LVL " + 
        ",WFS_M_AUTH.ROUTE_ID " + 
        ",WFS_M_AUTH.USR_GRP_ID " + 
        ",CASE WHEN WFS_T_WORKAPPROVALRES_CNT.CNT IS NULL THEN COUNT(*) ELSE WFS_T_WORKAPPROVALRES_CNT.CNT END as TANTO_CNT  " + 
        "FROM WFS_M_AUTH " + 
        "INNER JOIN WFS_M_USR_GRP_DEPDTL " + 
        "   ON WFS_M_USR_GRP_DEPDTL.USR_GRP_ID = WFS_M_AUTH.USR_GRP_ID " + 
        "LEFT OUTER JOIN ( " + 
        "   SELECT  " + 
        "      WORK_ID " + 
        "     ,OBJECT_ID " + 
        "     ,LVL " + 
        "     ,COUNT(*) AS CNT  " + 
        "   FROM WFS_T_WORKAPPROVALRES  " + 
        "   GROUP BY  " + 
        "      WORK_ID " + 
        "     ,OBJECT_ID " + 
        "     ,LVL " + 
        " ) WFS_T_WORKAPPROVALRES_CNT " + 
        "   ON WFS_M_AUTH.WORK_ID    = WFS_T_WORKAPPROVALRES_CNT.WORK_ID " + 
        "  AND '" + _OBJECT_ID + "'  = WFS_T_WORKAPPROVALRES_CNT.OBJECT_ID " + 
        "  AND WFS_M_AUTH.LVL        = WFS_T_WORKAPPROVALRES_CNT.LVL " + 
        "WHERE WFS_M_AUTH.WORK_ID    = '" + tln_com_escape( _WORK_ID  ) + "'" + 
        "  AND WFS_M_AUTH.LVL        = '" + tln_com_escape( _LVL      ) + "'" + 
        "  AND WFS_M_AUTH.ROUTE_ID   = '" + tln_com_escape( _ROUTE_ID ) + "'"  + 
        "GROUP BY  " + 
        " WFS_M_AUTH.WORK_ID " + 
        ",WFS_M_AUTH.LVL " + 
        ",WFS_M_AUTH.ROUTE_ID " + 
        ",WFS_M_AUTH.USR_GRP_ID " +
        ",WFS_T_WORKAPPROVALRES_CNT.CNT "
    ;
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}

//-------------------------------------------
function selectWFS_T_WORKFLOW(_WORK_ID,_OBJECT_ID,_STEP) {
    var sql = 
        "SELECT " +
        "     WORK_ID          " + 
        ",    OBJECT_ID        " + 
        ",    STEP             " + 
        ",    OBJECT_NM        " + 
        ",    ROUTE_ID       " + 
        ",    USR_ID           " + 
        ",    STATUS           " + 
        ",    LVL              " + 
        ",    APP_MEMO         " + 
        ",    RES_MEMO         " + 
        ",    REJECT_KBN       " + 
        ",    CURENT_FLG       " + 
        ",    CREATED_DATE     " + 
        ",    CREATED_BY       " + 
        ",    CREATED_PRG_NM   " + 
        ",    UPDATED_DATE     " + 
        ",    UPDATED_BY       " + 
        ",    UPDATED_PRG_NM   " + 
        ",    MODIFY_COUNT     " + 
        "FROM WFS_T_WORKFLOW "       +
        "WHERE WORK_ID   = '" + tln_com_escape( _WORK_ID   ) + "'" + 
        "  AND OBJECT_ID = '" + tln_com_escape( _OBJECT_ID ) + "'" + 
        "  AND STEP      = '" + tln_com_escape( _STEP      ) + "'" 
    ;
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}

//-------------------------------------------
if ( TALON.getDbConfig().isPostgres() ) {
    var itemColName_WFS_T_WORKFLOW = [
         'work_id'
        ,'object_id'
        ,'step'
        ,'object_nm'
        ,'route_id'
        ,'usr_id'
        ,'status'
        ,'lvl'
        ,'app_memo'
        ,'res_memo'
        ,'curent_flg'
        ,'active_flg'
        ,'created_date'
        ,'created_by'
        ,'created_prg_nm'
        ,'updated_date'
        ,'updated_by'
        ,'updated_prg_nm'
        ,'modify_count'
    ];
} else {
    var itemColName_WFS_T_WORKFLOW = [
         'WORK_ID'
        ,'OBJECT_ID'
        ,'STEP'
        ,'OBJECT_NM'
        ,'ROUTE_ID'
        ,'USR_ID'
        ,'STATUS'
        ,'LVL'
        ,'APP_MEMO'
        ,'RES_MEMO'
        ,'CURENT_FLG'
        ,'ACTIVE_FLG'
        ,'CREATED_DATE'
        ,'CREATED_BY'
        ,'CREATED_PRG_NM'
        ,'UPDATED_DATE'
        ,'UPDATED_BY'
        ,'UPDATED_PRG_NM'
        ,'MODIFY_COUNT'
    ];
}

//-------------------------------------------
function insertWFS_T_WORKFLOW(itemDataList) {
    setMapVal( itemDataList , 'CREATED_DATE'   , tln_com_nowdate() );
    setMapVal( itemDataList , 'CREATED_BY'     , tln_com_user_id() );
    setMapVal( itemDataList , 'CREATED_PRG_NM' , tln_com_func_id() );
    setMapVal( itemDataList , 'UPDATED_DATE'   , tln_com_nowdate() );
    setMapVal( itemDataList , 'UPDATED_BY'     , tln_com_user_id() );
    setMapVal( itemDataList , 'UPDATED_PRG_NM' , tln_com_func_id() );
    setMapVal( itemDataList , 'MODIFY_COUNT'   , 1                 );

    setMapVal( itemDataList , 'ACTIVE_FLG'     , '1'               );

    tln_insertByMap( 'WFS_T_WORKFLOW', itemDataList , itemColName_WFS_T_WORKFLOW );
}

//-------------------------------------------
function updateWFS_T_WORKFLOW(itemDataList) {

    setMapVal( itemDataList , 'UPDATED_DATE'   , tln_com_nowdate() );
    setMapVal( itemDataList , 'UPDATED_BY'     , tln_com_user_id() );
    setMapVal( itemDataList , 'UPDATED_PRG_NM' , tln_com_func_id() );
    setMapVal( itemDataList , 'MODIFY_COUNT'   , 1                 );

    if ( TALON.getDbConfig().isPostgres() ) {
        var whereTbl1 = [ null, '=' , 'work_id'   ];
        var whereTbl2 = [ null, '=' , 'object_id' ];
        var whereTbl3 = [ null, '=' , 'step' ];
    } else {
        var whereTbl1 = [ null, '=' , 'WORK_ID'   ];
        var whereTbl2 = [ null, '=' , 'OBJECT_ID' ];
        var whereTbl3 = [ null, '=' , 'STEP' ];
    }

    var whereList = new Array();
    whereList.push(whereTbl1);
    whereList.push(whereTbl2);
    whereList.push(whereTbl3);

    tln_updateByMap( 'WFS_T_WORKFLOW', itemDataList , itemColName_WFS_T_WORKFLOW , whereList );
}

//-------------------------------------------
function updateWFS_T_WORKFLOW_CURENT_FLG(_WORK_ID, _OBJECT_ID) {
    TalonDbUtil.update( TALON.getDbConfig(),  "update WFS_T_WORKFLOW set CURENT_FLG = '0' where WORK_ID = '" + tln_com_escape( _WORK_ID ) + "' and OBJECT_ID = '" + tln_com_escape( _OBJECT_ID ) + "'" );
}

//-------------------------------------------
function updateWFS_T_WORKFLOW_ACTIVE_FLG(_WORK_ID, _OBJECT_ID, _TRG_LVL) {
    TalonDbUtil.update( TALON.getDbConfig(),  
            "update WFS_T_WORKFLOW set ACTIVE_FLG = '0' " +
            "where WORK_ID   = '" + tln_com_escape( _WORK_ID   ) + "' " +
            "  and OBJECT_ID = '" + tln_com_escape( _OBJECT_ID ) + "'" +
            "  and LVL      >=  " + tln_com_escape( _TRG_LVL   ) + ""
    );
}

//-------------------------------------------
function selectWFS_T_WORKFLOW_CURENT_DATA(_WORK_ID,_OBJECT_ID) {
    //承認者も取得する（連続承認者の時の承認省略に使用→and承認の場合は発動しない為MAXで取得）
    var sql = 
        "SELECT " +
        "  COUNT(*) AS CURENT_DATA_CNT " + 
        " ,MAX(SHONIN_ID) AS SHONIN_ID " + 
        "FROM WFS_T_WORKFLOW "       +
        "WHERE WORK_ID    = '" + tln_com_escape( _WORK_ID   ) + "'" + 
        "  AND OBJECT_ID  = '" + tln_com_escape( _OBJECT_ID ) + "'" + 
        "  AND CURENT_FLG = '1'"
    ;
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}

//-------------------------------------------
function selectWFS_T_WORKFLOW_CURENT_MY_DATA(_WORK_ID,_OBJECT_ID,_EXEC_BY) {
    var sql = 
        "SELECT " +
        " COUNT(*) AS MY_DATA_CNT " + 
        "FROM WFS_T_WORKFLOW "       +
        "WHERE WORK_ID    = '" + tln_com_escape( _WORK_ID   ) + "'" + 
        "  AND OBJECT_ID  = '" + tln_com_escape( _OBJECT_ID ) + "'" + 
        "  AND SHONIN_ID  = '" + tln_com_escape( _EXEC_BY   ) + "'" + 
        "  AND CURENT_FLG = '1'" + 
        "  AND STATUS <> '4'"
    ;


    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}

//-------------------------------------------
//取戻時、対象のレベルを取得
function selectWFS_T_WORKFLOW_MY_LVL_BACK(_WORK_ID,_ROUTE_ID,_NOW_LVL,_SHONIN_ID) {
    var sql = 
        "SELECT  " + 
        "  WFS_M_AUTH.WORK_ID " + 
        " ,WFS_M_AUTH.ROUTE_ID " + 
        " ,MAX(WFS_M_AUTH.LVL) AS LVL " + 
        "FROM WFS_M_AUTH " + 
        "INNER JOIN WFS_M_USR_GRP_DEPDTL " + 
        "   ON WFS_M_AUTH.USR_GRP_ID = WFS_M_USR_GRP_DEPDTL.USR_GRP_ID " + 
        "  AND ( " + 
        "       WFS_M_USR_GRP_DEPDTL.USR_ID = '" + tln_com_escape( _SHONIN_ID ) + "' " + 
        "       OR  " + 
        "       1 = (SELECT CASE WHEN ADMIN_USER_ID IS NULL THEN 0 ELSE 1 END FROM WFS_M_USR_ADMIN WHERE ADMIN_USER_ID = '" + tln_com_escape( _SHONIN_ID ) + "' ) " + 
        "      ) " + 
        "WHERE WFS_M_AUTH.WORK_ID  = '" + tln_com_escape( _WORK_ID  ) + "' " + 
        "  AND WFS_M_AUTH.ROUTE_ID = '" + tln_com_escape( _ROUTE_ID ) + "' " + 
        "  AND WFS_M_AUTH.LVL     <=  " + tln_com_escape( _NOW_LVL  ) + " -1 " + 
        "GROUP BY  " + 
        "  WFS_M_AUTH.WORK_ID " + 
        " ,WFS_M_AUTH.ROUTE_ID "
    ;
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}

//引上げ時、対象のレベルを取得
function selectWFS_T_WORKFLOW_MY_LVL_PLUP(_WORK_ID,_ROUTE_ID,_NOW_LVL,_SHONIN_ID) {
    var sql = 
        "SELECT  " + 
        "  WFS_M_AUTH.WORK_ID " + 
        " ,WFS_M_AUTH.ROUTE_ID " + 
        " ,MIN(WFS_M_AUTH.LVL) AS LVL " + 
        "FROM WFS_M_AUTH " + 
        "INNER JOIN WFS_M_USR_GRP_DEPDTL " + 
        "   ON WFS_M_AUTH.USR_GRP_ID = WFS_M_USR_GRP_DEPDTL.USR_GRP_ID " + 
        "  AND ( " + 
        "       WFS_M_USR_GRP_DEPDTL.USR_ID = '" + tln_com_escape( _SHONIN_ID ) + "' " + 
        "       OR  " + 
        "       1 = (SELECT CASE WHEN ADMIN_USER_ID IS NULL THEN 0 ELSE 1 END FROM WFS_M_USR_ADMIN WHERE ADMIN_USER_ID = '" + tln_com_escape( _SHONIN_ID ) + "' ) " + 
        "      ) " + 
        "WHERE WFS_M_AUTH.WORK_ID  = '" + tln_com_escape( _WORK_ID  ) + "' " + 
        "  AND WFS_M_AUTH.ROUTE_ID = '" + tln_com_escape( _ROUTE_ID ) + "' " + 
        "  AND WFS_M_AUTH.LVL      >  " + tln_com_escape( _NOW_LVL  ) + " " + 
        "GROUP BY  " + 
        "  WFS_M_AUTH.WORK_ID " + 
        " ,WFS_M_AUTH.ROUTE_ID "
    ;
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}

//-------------------------------------------
//承認者連続時省略フラグ制御用、同一ルートで承認者が承認可能なリスト
function selectWFS_T_WORKFLOW_APPROVAL(_WORK_ID,_ROUTE_ID,_LVL,_SHONIN_ID, _OBJECT_ID, _LOGIN_USER_ID) {
    //承認者も取得する（連続承認者の時の承認省略に使用→and承認の場合は発動しない為MAXで取得）
    var sql = 
        "SELECT  " + 
        "  WFS_M_CONTROL.WORK_ID " + 
        " ,WFS_M_CONTROL.WORK_NM " + 
        " ,WFS_M_AUTH.ROUTE_ID " + 
        " ,WFS_M_AUTH.LVL " + 
        " ,WFS_M_USR_GRP_DEPDTL.USR_GRP_ID " + 
        " ,WFS_M_USR_GRP_DEPDTL.USR_ID " + 
        " ,CASE WHEN WFS_M_LEVEL.SYONIN_PTN IS NOT NULL THEN WFS_M_LEVEL.SYONIN_PTN ELSE WFS_M_AUTH.SYONIN_PTN END AS SYONIN_PTN " +
        "FROM WFS_M_CONTROL " + 
        "INNER JOIN WFS_M_AUTH " + 
        "   ON WFS_M_CONTROL.WORK_ID = WFS_M_AUTH.WORK_ID " + 
        "  AND '" + _ROUTE_ID + "'   = WFS_M_AUTH.ROUTE_ID " + 
        "  AND " + _LVL + "         <= WFS_M_AUTH.LVL " + 
        "INNER JOIN WFS_M_USR_GRP_DEPDTL " + 
        "   ON WFS_M_AUTH.USR_GRP_ID   = WFS_M_USR_GRP_DEPDTL.USR_GRP_ID " + 
        "  AND '" + _SHONIN_ID + "'    = WFS_M_USR_GRP_DEPDTL.USR_ID " + 
        "LEFT OUTER JOIN WFS_M_LEVEL " + 
        "  ON WFS_M_AUTH.WORK_ID = WFS_M_LEVEL.WORK_ID " + 
        " AND WFS_M_AUTH.LVL     = WFS_M_LEVEL.LVL " + 
        " " + 
        "LEFT OUTER JOIN ( " + 
        "  SELECT  " + 
        "     WORK_ID " + 
        "    ,OBJECT_ID " + 
        "    ,LVL " + 
        "    ,COUNT(*) AS CNT  " + 
        "  FROM WFS_T_WORKAPPROVALRES  " + 
        "  GROUP BY  " + 
        "     WORK_ID " + 
        "    ,OBJECT_ID " + 
        "    ,LVL " + 
        ") WFS_T_WORKAPPROVALRES_CNT " + 
        "  ON WFS_M_AUTH.WORK_ID    = WFS_T_WORKAPPROVALRES_CNT.WORK_ID " + 
        " AND '" + _OBJECT_ID + "'  = WFS_T_WORKAPPROVALRES_CNT.OBJECT_ID " + 
        " AND WFS_M_AUTH.LVL        = WFS_T_WORKAPPROVALRES_CNT.LVL " + 
        " " + 
        "LEFT OUTER JOIN WFS_T_WORKAPPROVALRES " + 
        "  ON WFS_M_AUTH.WORK_ID          = WFS_T_WORKAPPROVALRES.WORK_ID " + 
        " AND '" + _OBJECT_ID + "'        = WFS_T_WORKAPPROVALRES.OBJECT_ID " + 
        " AND WFS_M_AUTH.LVL              = WFS_T_WORKAPPROVALRES.LVL " + 
        " AND WFS_M_USR_GRP_DEPDTL.USR_ID = WFS_T_WORKAPPROVALRES.USR_ID " + 
        " AND ( " + 
        "   WFS_T_WORKAPPROVALRES.USR_ID = '" + tln_com_escape( _LOGIN_USER_ID ) + "' " + 
        "   OR " + 
        "   WFS_T_WORKAPPROVALRES.USR_ID IN (SELECT USR_ID FROM WFS_M_USR_DAIRI WHERE DAIRI_USR_ID = '" + tln_com_escape( _LOGIN_USER_ID ) + "' AND YUKO_KBN = '1' AND SHONIN_FLG = '1') " + 
        "  ) " + 
        " " + 
        "WHERE WFS_M_CONTROL.WORK_ID      = '" + tln_com_escape( _WORK_ID ) + "' " + 
        "  AND WFS_M_CONTROL.APPROVAL_FLG = '1' " + 
        "  AND ( " + 
        "    WFS_T_WORKAPPROVALRES_CNT.CNT IS NULL  " + 
        "    OR  " + 
        "    WFS_T_WORKAPPROVALRES_CNT.CNT = 0 " + 
        "    OR  " + 
        "    (  " + 
        "        WFS_T_WORKAPPROVALRES_CNT.CNT IS NOT NULL  " + 
        "        AND  " + 
        "        WFS_T_WORKAPPROVALRES.WORK_ID IS NOT NULL " + 
        "    ) " + 
        "  ) " + 
        "ORDER BY LVL "
    ;
    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), sql);

    return itemSelectList;
}
function updateWFS_T_WORKFLOW_STATUS(_WORK_ID, _OBJECT_ID, _STATUS, _STEP, _RES_MEMO, _SHONIN_ID) {
    TalonDbUtil.update( TALON.getDbConfig(),  
        "update WFS_T_WORKFLOW set " + 
        "  STATUS    = '" + tln_com_escape( _STATUS    ) + "' " + 
        " ,RES_MEMO  = '" + tln_com_escape( _RES_MEMO  ) + "' " + 
        " ,SHONIN_ID = '" + tln_com_escape( _SHONIN_ID ) + "' " + 
        "where WORK_ID   = '" + tln_com_escape( _WORK_ID   ) + "' " +
        "  and OBJECT_ID = '" + tln_com_escape( _OBJECT_ID ) + "' " + 
        "  and STEP      = '" + tln_com_escape( _STEP      ) + "' " 
    );
}


function execWorkFlow() {
    //入力値取得
    var itemBlockListHed = TALON.getBlockData_List(1);
    var lineDataMap = itemBlockListHed[0];

    return execWorkFlowMain(lineDataMap);
}

var _WFS_SYORI_KBN_SHINSEI      = '10';        //申請
var _WFS_SYORI_KBN_SHONIN       = '20';        //承認（次階層あり）
var _WFS_SYORI_KBN_KESSAI       = '21';        //承認（次階層なし＝決裁）
var _WFS_SYORI_KBN_SASHIMODOSHI = '30';        //差戻
var _WFS_SYORI_KBN_HININ        = '90';        //否認
var _WFS_SYORI_KBN_TORIMODOSHIS = '50';        //取戻（申請者取戻）
var _WFS_SYORI_KBN_TORIKESHI    = '60';        //取消
var _WFS_SYORI_KBN_TORIMODOSHIS = '70';        //取戻（承認者取戻）
var _WFS_SYORI_KBN_HIKIAGE      = '80';        //引上

function execWorkFlowMain(lineDataMap) {
    //入力値取得
    //var itemBlockListHed = TALON.getBlockData_List(1);
    //var lineDataMap = itemBlockListHed[0];

    var lineUserDataMap = TALON.getUserInfoMap();
    var _LOGIN_USER_ID  = getMapVal( lineUserDataMap , 'USER_ID' );

    //承認結果が申請の場合
    if (getMapVal( lineDataMap , 'STATUS' ) == '1') {

        //階層テーブルにて次のレベルが存在するかチェック
        var itemSelectList = selectWFS_M_LEVEL_NEXTPRE( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'ROUTE_ID' ), getMapVal( lineDataMap , 'LVL' ), '1');
        if (itemSelectList.length > 0) {
            var lineSelectDataMap = itemSelectList[0];
            var _NX_LVL = getMapVal( lineSelectDataMap , 'LVL' );

            //次期対象以外のCURENT_FLGを０に更新
            updateWFS_T_WORKFLOW_CURENT_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ));


            //データありの場合のみ　次レコード作成
            var itemDataList = new Array();

            setMapVal( itemDataList , 'WORK_ID'     ,   getMapVal( lineDataMap , 'WORK_ID'   )       );
            setMapVal( itemDataList , 'OBJECT_ID'   ,   getMapVal( lineDataMap , 'OBJECT_ID' )       );
            setMapVal( itemDataList , 'STEP'        ,   parseInt( getMapVal( lineDataMap , 'STEP' ) + 1 ) );
            setMapVal( itemDataList , 'OBJECT_NM'   ,   getMapVal( lineDataMap , 'OBJECT_NM' )       );
            setMapVal( itemDataList , 'ROUTE_ID'    ,   getMapVal( lineDataMap , 'ROUTE_ID'  )       );
            setMapVal( itemDataList , 'USR_ID'      ,   getMapVal( lineDataMap , 'USR_ID'    )       );
            setMapVal( itemDataList , 'STATUS'      ,   '4'      );
            setMapVal( itemDataList , 'LVL'         ,   _NX_LVL  );
            setMapVal( itemDataList , 'APP_MEMO'    ,   getMapVal( lineDataMap , 'APP_MEMO'  )       );
            setMapVal( itemDataList , 'CURENT_FLG'  ,   '1' );

            insertWFS_T_WORKFLOW(itemDataList);

            execWorkFlowCustom(getMapVal( lineDataMap , 'WORK_ID'  ) , getMapVal( lineDataMap , 'OBJECT_ID' ) , _WFS_SYORI_KBN_SHINSEI);
        }
    }

    //承認結果が取戻の場合（申請者が取り戻す）
    if ( getMapVal( lineDataMap , 'STATUS' ) == '5' ) {

        //次期対象以外のCURENT_FLGを０に更新
        updateWFS_T_WORKFLOW_CURENT_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ) );

        //申請者に戻すのでLVLが１以上のデータのACTIVE_FLGをゼロに更新(18/08/07)
        updateWFS_T_WORKFLOW_ACTIVE_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID'), 1 );

        //データありの場合のみ　次レコード作成
        var itemDataList = new Array();

        setMapVal( itemDataList , 'WORK_ID'     ,   getMapVal( lineDataMap , 'WORK_ID'   )      );
        setMapVal( itemDataList , 'OBJECT_ID'   ,   getMapVal( lineDataMap , 'OBJECT_ID' )      );
        setMapVal( itemDataList , 'STEP'        ,   parseInt( getMapVal( lineDataMap , 'STEP' ) + 1 ) );
        setMapVal( itemDataList , 'OBJECT_NM'   ,   getMapVal( lineDataMap , 'OBJECT_NM' )      );
        setMapVal( itemDataList , 'ROUTE_ID'    ,   getMapVal( lineDataMap , 'ROUTE_ID'  )      );
        setMapVal( itemDataList , 'USR_ID'      ,   getMapVal( lineDataMap , 'USR_ID'    )      );
        setMapVal( itemDataList , 'STATUS'      ,   '4'  );
        setMapVal( itemDataList , 'LVL'         ,    1   );
        setMapVal( itemDataList , 'APP_MEMO'    ,   ''   );
        setMapVal( itemDataList , 'CURENT_FLG'  ,   '1'  );

        insertWFS_T_WORKFLOW(itemDataList);

        execWorkFlowCustom(getMapVal( lineDataMap , 'WORK_ID'  ) , getMapVal( lineDataMap , 'OBJECT_ID' ) , _WFS_SYORI_KBN_TORIMODOSHIS);
    }

    //承認結果が取戻の場合（承認者が取り戻す）
    if ( getMapVal( lineDataMap , 'STATUS' ) == '7' ) {

        //次期対象以外のCURENT_FLGを０に更新
        updateWFS_T_WORKFLOW_CURENT_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ) );

        ////取戻時、対象のレベルを取得
        var itemSelectList    = selectWFS_T_WORKFLOW_MY_LVL_BACK( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'ROUTE_ID'  ), getMapVal( lineDataMap , 'LVL' ), tln_com_user_id() );

        var lineSelectDataMap = itemSelectList[0];
        var _MY_LVL       = getMapVal( lineSelectDataMap , 'LVL' );

        //指定したレベルまで戻すのでLVLがその値以上のデータのACTIVE_FLGをゼロに更新(18/08/07)
        updateWFS_T_WORKFLOW_ACTIVE_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID'), _MY_LVL );

        //データありの場合のみ　次レコード作成
        var itemDataList = new Array();

        setMapVal( itemDataList , 'WORK_ID'     ,   getMapVal( lineDataMap , 'WORK_ID'   )      );
        setMapVal( itemDataList , 'OBJECT_ID'   ,   getMapVal( lineDataMap , 'OBJECT_ID' )      );
        setMapVal( itemDataList , 'STEP'        ,   parseInt( getMapVal( lineDataMap , 'STEP' ) + 1 ) );
        setMapVal( itemDataList , 'OBJECT_NM'   ,   getMapVal( lineDataMap , 'OBJECT_NM' )      );
        setMapVal( itemDataList , 'ROUTE_ID'    ,   getMapVal( lineDataMap , 'ROUTE_ID'  )      );
        setMapVal( itemDataList , 'USR_ID'      ,   getMapVal( lineDataMap , 'USR_ID'    )      );
        setMapVal( itemDataList , 'STATUS'      ,   '4'  );
        setMapVal( itemDataList , 'LVL'         ,    _MY_LVL );
        setMapVal( itemDataList , 'APP_MEMO'    ,   ''   );
        setMapVal( itemDataList , 'CURENT_FLG'  ,   '1'  );

        insertWFS_T_WORKFLOW(itemDataList);

        execWorkFlowCustom(getMapVal( lineDataMap , 'WORK_ID'  ) , getMapVal( lineDataMap , 'OBJECT_ID' ) , _WFS_SYORI_KBN_TORIMODOSHIS);
    }

    //承認結果が引上げの場合（承認者が引き上げる）
    if ( getMapVal( lineDataMap , 'STATUS' ) == '8' ) {

        //次期対象以外のCURENT_FLGを０に更新
        updateWFS_T_WORKFLOW_CURENT_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ) );

        ////引上時、対象のレベルを取得
        var itemSelectList    = selectWFS_T_WORKFLOW_MY_LVL_PLUP( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'ROUTE_ID'  ), getMapVal( lineDataMap , 'LVL' ), tln_com_user_id() );

        var lineSelectDataMap = itemSelectList[0];
        var _MY_LVL       = getMapVal( lineSelectDataMap , 'LVL' );

        //データありの場合のみ　次レコード作成
        var itemDataList = new Array();

        setMapVal( itemDataList , 'WORK_ID'     ,   getMapVal( lineDataMap , 'WORK_ID'   )      );
        setMapVal( itemDataList , 'OBJECT_ID'   ,   getMapVal( lineDataMap , 'OBJECT_ID' )      );
        setMapVal( itemDataList , 'STEP'        ,   parseInt( getMapVal( lineDataMap , 'STEP' ) + 1 ) );
        setMapVal( itemDataList , 'OBJECT_NM'   ,   getMapVal( lineDataMap , 'OBJECT_NM' )      );
        setMapVal( itemDataList , 'ROUTE_ID'    ,   getMapVal( lineDataMap , 'ROUTE_ID'  )      );
        setMapVal( itemDataList , 'USR_ID'      ,   getMapVal( lineDataMap , 'USR_ID'    )      );
        setMapVal( itemDataList , 'STATUS'      ,   '4'  );
        setMapVal( itemDataList , 'LVL'         ,    _MY_LVL );
        setMapVal( itemDataList , 'APP_MEMO'    ,   ''   );
        setMapVal( itemDataList , 'CURENT_FLG'  ,   '1'  );

        insertWFS_T_WORKFLOW(itemDataList);

        execWorkFlowCustom(getMapVal( lineDataMap , 'WORK_ID'  ) , getMapVal( lineDataMap , 'OBJECT_ID' ) , _WFS_SYORI_KBN_HIKIAGE);
    }




    //承認、差戻、否認の処理で対象階層がAND承認の場合、すでに同一承認者で処理されていればエラーとする。
    if (
          ( getMapVal( lineDataMap , 'STATUS' ) == '2') || 
          ( getMapVal( lineDataMap , 'STATUS' ) == '3') || 
          ( getMapVal( lineDataMap , 'STATUS' ) == '9') 
       ) {
        var itemSelectList    = selectWFS_M_LEVEL( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'LVL' ), getMapVal( lineDataMap , 'ROUTE_ID'  ) );
        var lineSelectDataMap = itemSelectList[0];
        var _SYONIN_PTN       = getMapVal( lineSelectDataMap , 'SYONIN_PTN' );

        if (_SYONIN_PTN == '2') {

            //同一ユーザーで既に当サイクルで承認されている場合はエラーとする  
            //→同一ユーザーを同一承認者ID(SHONIN_ID)で判断するようにする

            var itemSelectList    = selectWFS_T_WORKFLOW_CURENT_MY_DATA( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ), getMapVal( lineDataMap , 'SHONIN_ID' ) );
            var lineSelectDataMap = itemSelectList[0];
            var _MY_DATA_CNT      = getMapVal( lineSelectDataMap , 'MY_DATA_CNT' );

            //ここまでの処理で１件は登録されている為
            if ( _MY_DATA_CNT != 1 ) {
                TALON.addErrorMsg( "既に指定された承認者で「承認／差戻／否認」処理が実施されている為、実行する事は出来ません。" );
                TALON.setIsSuccess(false);

                return false;
            }
        }
    }




    //承認結果が承認の場合
    if ( getMapVal( lineDataMap , 'STATUS' ) == '2') {
        var next_flg = '0';

        var itemSelectList    = selectWFS_M_LEVEL( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'LVL' ), getMapVal( lineDataMap , 'ROUTE_ID'  ) );
        var lineSelectDataMap = itemSelectList[0];
        var _SYONIN_PTN       = getMapVal( lineSelectDataMap , 'SYONIN_PTN' );

        var itemSelectList    = selectWFS_T_WORKFLOW_CURENT_DATA( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ) );
        var lineSelectDataMap = itemSelectList[0];
        var _CURENT_DATA_CNT  = getMapVal( lineSelectDataMap , 'CURENT_DATA_CNT' );
        var _SHONIN_ID        = getMapVal( lineSelectDataMap , 'SHONIN_ID' );

        var itemSelectList    = selectWFS_M_AUTH_TANTO_CNT( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'LVL' ), getMapVal( lineDataMap , 'ROUTE_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' )  );
        var lineSelectDataMap = itemSelectList[0];
        var _TANTO_CNT        = getMapVal( lineSelectDataMap , 'TANTO_CNT' );


        if (_SYONIN_PTN == '1') {
            next_flg = '1';
        }
        if (_SYONIN_PTN == '2') {

            // * 上位でチェックするのでここでは実施しない
            // * -------------------------------------------
            // * //同一ユーザーで既に当サイクルで承認されている場合はエラーとする  →同一ユーザーを同一承認者ID(SHONIN_ID)で判断するようにする
            // * var lineUserDataMap = TALON.getUserInfoMap();
            // * var _LOGIN_USER_ID  = getMapVal( lineUserDataMap , 'USER_ID' );
            // * 
            // * //var itemSelectList  = selectWFS_T_WORKFLOW_CURENT_MY_DATA( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ), _LOGIN_USER_ID );
            // * var itemSelectList    = selectWFS_T_WORKFLOW_CURENT_MY_DATA( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ), getMapVal( lineDataMap , 'SHONIN_ID' ) );
            // * var lineSelectDataMap = itemSelectList[0];
            // * var _MY_DATA_CNT      = getMapVal( lineSelectDataMap , 'MY_DATA_CNT' );
            // * 
            // * //ここまでの処理で１件は登録されている為
            // * if ( _MY_DATA_CNT != 1 ) {
            // *     TALON.addErrorMsg( "既に指定された承認者で「承認」処理が実施されている為、実行する事は出来ません。" );
            // *     TALON.setIsSuccess(false);
            // * 
            // *     return false;
            // * }

            if (_CURENT_DATA_CNT >= _TANTO_CNT) {
                next_flg = '1';
            }
        }

        if (next_flg == '1') {
            //階層テーブルにて次のレベルが存在するかチェック
            var itemSelectList = selectWFS_M_LEVEL_NEXTPRE( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'ROUTE_ID' ), getMapVal( lineDataMap , 'LVL' ), '1');
            if (itemSelectList.length > 0) {

                var lineSelectDataMap = itemSelectList[0];
                var _NX_LVL = getMapVal( lineSelectDataMap , 'LVL' );

                //次期対象以外のCURENT_FLGを０に更新
                updateWFS_T_WORKFLOW_CURENT_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ) );


                //データありの場合のみ　次レコード作成
                var itemDataList = new Array();

                setMapVal( itemDataList , 'WORK_ID'     ,   getMapVal( lineDataMap , 'WORK_ID'   )       );
                setMapVal( itemDataList , 'OBJECT_ID'   ,   getMapVal( lineDataMap , 'OBJECT_ID' )       );
                setMapVal( itemDataList , 'STEP'        ,   parseInt( getMapVal( lineDataMap , 'STEP' ) + 1) );
                setMapVal( itemDataList , 'OBJECT_NM'   ,   getMapVal( lineDataMap , 'OBJECT_NM' )       );
                setMapVal( itemDataList , 'ROUTE_ID'    ,   getMapVal( lineDataMap , 'ROUTE_ID'  )       );
                setMapVal( itemDataList , 'USR_ID'      ,   getMapVal( lineDataMap , 'USR_ID'    )       );
                setMapVal( itemDataList , 'STATUS'      ,   '4'       );
                setMapVal( itemDataList , 'LVL'         ,   _NX_LVL   );
                setMapVal( itemDataList , 'APP_MEMO'    ,   getMapVal( lineDataMap , 'APP_MEMO' )        );
                setMapVal( itemDataList , 'CURENT_FLG'  ,   '1'       );

                insertWFS_T_WORKFLOW(itemDataList);




                //----------------------------------------------------------
                // 以降の階層で今回の承認者が実施可能な階層を抽出
                // OR承認の場合に発動

                var _T_WORK_ID   = getMapVal( lineDataMap , 'WORK_ID'   );
                var _T_OBJECT_ID = getMapVal( lineDataMap , 'OBJECT_ID' );
                var _T_OBJECT_NM = getMapVal( lineDataMap , 'OBJECT_NM' );
                var _T_ROUTE_ID  = getMapVal( lineDataMap , 'ROUTE_ID'  );
                var _T_USR_ID    = getMapVal( lineDataMap , 'USR_ID'    );
                var _T_APP_MEMO  = getMapVal( lineDataMap , 'APP_MEMO'  );
                var _T_RES_MEMO  = getMapVal( lineDataMap , 'RES_MEMO'  );

                var _T_STEP = parseInt( getMapVal( lineDataMap , 'STEP' ) + 1);
                var _T_LVL  = parseInt(_NX_LVL);
                if (_SYONIN_PTN == '1') {

                    var itemSelectListApproval = selectWFS_T_WORKFLOW_APPROVAL( _T_WORK_ID, _T_ROUTE_ID, _NX_LVL, _SHONIN_ID, _T_OBJECT_ID, _LOGIN_USER_ID);
                    for (var i = 0; i < itemSelectListApproval.length; i++) {
                        var lineDataMap = itemSelectListApproval[i];

                        var _NOW_SYONIN_PTN = getMapVal( lineDataMap , 'SYONIN_PTN' );

                        if ( _T_LVL == parseInt( getMapVal( lineDataMap , 'LVL' ) ) && (_NOW_SYONIN_PTN == '1') ) {

                            //承認待ち階層にも承認者の権限あり

                            //上位で作成した承認待ちデータを承認済みに更新
                            //以下を更新
                            // ｽﾃｰﾀｽ＝2承認
                            // 理由＝入力値
                            // 承認者
                            updateWFS_T_WORKFLOW_STATUS( _T_WORK_ID, _T_OBJECT_ID, '2', _T_STEP , _T_RES_MEMO , _SHONIN_ID);

                            //階層テーブルにて次のレベルが存在するかチェック
                            var itemSelectList = selectWFS_M_LEVEL_NEXTPRE( _T_WORK_ID, _T_ROUTE_ID, _T_LVL, '1');
                            if (itemSelectList.length > 0) {

                                var lineSelectDataMap = itemSelectList[0];
                                var _NX_LVL = getMapVal( lineSelectDataMap , 'LVL' );

                                _T_STEP++;

                                //次期対象以外のCURENT_FLGを０に更新
                                updateWFS_T_WORKFLOW_CURENT_FLG( _T_WORK_ID, _T_OBJECT_ID );

                                //データありの場合のみ　次レコード作成
                                var itemDataList = new Array();

                                setMapVal( itemDataList , 'WORK_ID'     ,   _T_WORK_ID       );
                                setMapVal( itemDataList , 'OBJECT_ID'   ,   _T_OBJECT_ID     );
                                setMapVal( itemDataList , 'STEP'        ,   _T_STEP          );
                                setMapVal( itemDataList , 'OBJECT_NM'   ,   _T_OBJECT_NM     );
                                setMapVal( itemDataList , 'ROUTE_ID'    ,   _T_ROUTE_ID      );
                                setMapVal( itemDataList , 'USR_ID'      ,   _T_USR_ID        );
                                setMapVal( itemDataList , 'STATUS'      ,   '4'              );
                                setMapVal( itemDataList , 'LVL'         ,   _NX_LVL          );
                                setMapVal( itemDataList , 'APP_MEMO'    ,   _T_APP_MEMO      );
                                setMapVal( itemDataList , 'CURENT_FLG'  ,   '1'              );

                                insertWFS_T_WORKFLOW(itemDataList);
                            }

                            _T_LVL++;

                        } else {
                            //連続していないので終了
                            break;
                        }
                    }
                }
                //----------------------------------------------------------




                execWorkFlowCustom(getMapVal( lineDataMap , 'WORK_ID'  ) , getMapVal( lineDataMap , 'OBJECT_ID' ) , _WFS_SYORI_KBN_SHONIN);

             } else {
                //決裁
                execWorkFlowCustom(getMapVal( lineDataMap , 'WORK_ID'  ) , getMapVal( lineDataMap , 'OBJECT_ID' ) , _WFS_SYORI_KBN_KESSAI);
             }

        } else {
            //同じ階層で　次レコード作成
            var itemDataList = new Array();

            setMapVal( itemDataList , 'WORK_ID'     ,   getMapVal( lineDataMap , 'WORK_ID'  )      );
            setMapVal( itemDataList , 'OBJECT_ID'   ,   getMapVal( lineDataMap , 'OBJECT_ID')      );
            setMapVal( itemDataList , 'STEP'        ,   parseInt( getMapVal( lineDataMap , 'STEP' ) + 1 ) );
            setMapVal( itemDataList , 'OBJECT_NM'   ,   getMapVal( lineDataMap , 'OBJECT_NM')      );
            setMapVal( itemDataList , 'ROUTE_ID'    ,   getMapVal( lineDataMap , 'ROUTE_ID' )      );
            setMapVal( itemDataList , 'USR_ID'      ,   getMapVal( lineDataMap , 'USR_ID'   )      );
            setMapVal( itemDataList , 'STATUS'      ,   '4'    );
            setMapVal( itemDataList , 'LVL'         ,   getMapVal( lineDataMap , 'LVL'      )      );
            setMapVal( itemDataList , 'APP_MEMO'    ,   getMapVal( lineDataMap , 'APP_MEMO' )      );
            setMapVal( itemDataList , 'CURENT_FLG'  ,   '1'    );

            insertWFS_T_WORKFLOW(itemDataList);
        }
    }

    //承認結果が差戻の場合
    if (getMapVal( lineDataMap , 'STATUS' ) == '3') {
        //否決の動きが申請者に戻るか一つ前に戻るか確認
        
        if (getMapVal( lineDataMap , 'REJECT_KBN' ) == '1') {
            //申請者に戻る場合

            //次期対象以外のCURENT_FLGを０に更新
            updateWFS_T_WORKFLOW_CURENT_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID') );

            //申請者に戻すのでLVLが1以上のデータのACTIVE_FLGをゼロに更新(18/08/07)
            updateWFS_T_WORKFLOW_ACTIVE_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID'), 1 );

            //データありの場合のみ　次レコード作成
            var itemDataList = new Array();

            setMapVal( itemDataList , 'WORK_ID'     ,   getMapVal( lineDataMap , 'WORK_ID'   )       );
            setMapVal( itemDataList , 'OBJECT_ID'   ,   getMapVal( lineDataMap , 'OBJECT_ID' )       );
            setMapVal( itemDataList , 'STEP'        ,   parseInt( getMapVal( lineDataMap , 'STEP' ) + 1 ) );
            setMapVal( itemDataList , 'OBJECT_NM'   ,   getMapVal( lineDataMap , 'OBJECT_NM' )       );
            setMapVal( itemDataList , 'ROUTE_ID'    ,   getMapVal( lineDataMap , 'ROUTE_ID'  )       );
            setMapVal( itemDataList , 'USR_ID'      ,   getMapVal( lineDataMap , 'USR_ID'    )       );
            setMapVal( itemDataList , 'STATUS'      ,   '4'   );
            setMapVal( itemDataList , 'LVL'         ,    1    );
            setMapVal( itemDataList , 'APP_MEMO'    ,   ''    );
            setMapVal( itemDataList , 'CURENT_FLG'  ,   '1'   );

            insertWFS_T_WORKFLOW(itemDataList);

            execWorkFlowCustom(getMapVal( lineDataMap , 'WORK_ID'  ) , getMapVal( lineDataMap , 'OBJECT_ID' ) , _WFS_SYORI_KBN_SASHIMODOSHI);
        }

        if (getMapVal( lineDataMap , 'REJECT_KBN' ) == '2') {
            //ひとつ前に戻る場合

            //階層テーブルにて前のレベルが存在するかチェック
            var itemSelectList = selectWFS_M_LEVEL_NEXTPRE( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'ROUTE_ID' ), getMapVal( lineDataMap , 'LVL' ), '2');
            if (itemSelectList.length > 0) {
                var lineSelectDataMap = itemSelectList[0];
                var _NX_LVL = getMapVal( lineSelectDataMap , 'LVL' );

                //次期対象以外のCURENT_FLGを０に更新
                updateWFS_T_WORKFLOW_CURENT_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ) );

                //申請者に戻すのでLVLが一つ前の値以上のデータのACTIVE_FLGをゼロに更新(18/08/07)
                updateWFS_T_WORKFLOW_ACTIVE_FLG( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID'), _NX_LVL );

                //データありの場合のみ　次レコード作成
                var itemDataList = new Array();

                setMapVal( itemDataList , 'WORK_ID'     ,   getMapVal( lineDataMap , 'WORK_ID'  )      );
                setMapVal( itemDataList , 'OBJECT_ID'   ,   getMapVal( lineDataMap , 'OBJECT_ID')      );
                setMapVal( itemDataList , 'STEP'        ,   parseInt( getMapVal( lineDataMap , 'STEP' ) + 1 ) );
                setMapVal( itemDataList , 'OBJECT_NM'   ,   getMapVal( lineDataMap , 'OBJECT_NM')      );
                setMapVal( itemDataList , 'ROUTE_ID'    ,   getMapVal( lineDataMap , 'ROUTE_ID' )      );
                setMapVal( itemDataList , 'USR_ID'      ,   getMapVal( lineDataMap , 'USR_ID'   )      );
                setMapVal( itemDataList , 'STATUS'      ,   '4'      );
                setMapVal( itemDataList , 'LVL'         ,   _NX_LVL  );
                if (_NX_LVL == 1) {
                    setMapVal( itemDataList , 'APP_MEMO'   ,  '' );
                } else {
                    setMapVal( itemDataList , 'APP_MEMO'   ,  getMapVal( lineDataMap , 'APP_MEMO' )    );
                }
                setMapVal( itemDataList , 'CURENT_FLG'  ,   '1' );

                insertWFS_T_WORKFLOW(itemDataList);

                execWorkFlowCustom(getMapVal( lineDataMap , 'WORK_ID'  ) , getMapVal( lineDataMap , 'OBJECT_ID' ) , _WFS_SYORI_KBN_SASHIMODOSHI);
            }
        }
    }

    //承認結果が否認の場合（当処理としては何もしない（上位TALONで実施済み）
    if ( getMapVal( lineDataMap , 'STATUS' ) == '9' ) {
        
        execWorkFlowCustom(getMapVal( lineDataMap , 'WORK_ID'  ) , getMapVal( lineDataMap , 'OBJECT_ID' ) , _WFS_SYORI_KBN_HININ);
        
    }

    return true;
}



function execWorkFlowStop() {
    //入力値取得
    var itemBlockListHed = TALON.getBlockData_List(1);
    var lineDataMap = itemBlockListHed[0];

    //次ステップのデータが
    //存在する場合はエラーとする
    var itemSelectList = selectWFS_T_WORKFLOW( getMapVal( lineDataMap , 'WORK_ID' ), getMapVal( lineDataMap , 'OBJECT_ID' ), ( getMapVal( lineDataMap , 'STEP' ) + 1 ) );
    if (itemSelectList.length > 0) {
        TALON.addErrorMsg( "既に処理が行われている為、中止処理を実施できません" );
        TALON.setIsSuccess(false);
    } else {
        //データありの場合のみ　次レコード作成
        var itemDataList = new Array();

        setMapVal( itemDataList , 'WORK_ID'     ,  getMapVal( lineDataMap , 'WORK_ID'  )  );
        setMapVal( itemDataList , 'OBJECT_ID'   ,  getMapVal( lineDataMap , 'OBJECT_ID')  );
        setMapVal( itemDataList , 'STEP'        ,  parseInt( getMapVal( lineDataMap , 'STEP' ) ) );
        setMapVal( itemDataList , 'STATUS'      ,  '6'  );

        updateWFS_T_WORKFLOW(itemDataList);

        execWorkFlowCustom(getMapVal( lineDataMap , 'WORK_ID'  ) , getMapVal( lineDataMap , 'OBJECT_ID' ) , _WFS_SYORI_KBN_TORIKESHI);

        TALON.addMsg( "中止処理を実施しました" );
        TALON.setIsSuccess(true);
    }
}



function _mail_data_wfs(_WORK_ID, _STEP, _OBJECT_ID) {
    var mailData = {};

    mailData.WFS_SUBJ   = null;
    mailData.WFS_MAIL   = null;
    mailData.WFS_MLTEXT = null;

    var sql = "" + 
        "SELECT " + 
        " " + 
        " BASE.WORK_ID " + 
        ",BASE.WORK_NM " + 
        ",BASE.STEP " + 
        ",BASE.OBJECT_ID " + 
        ",BASE.USR_ID " + 
        ",BASE.MAIL_ADD AS MAIL " + 
        " " + 
        ",REPLACE( " + 
        "   REPLACE( " + 
        "     REPLACE( " + 
        "       REPLACE( " + 
        "         REPLACE( " + 
        "           REPLACE( " + 
        "             BASE.MAIL_TITLE, " + 
        "             '%1_STEP%', " + 
        "             concat(BASE.STEP ,'') " + 
        "           ), " + 
        "           '%1_OBJECT_NM%', " + 
        "           case when BASE.OBJECT_NM is null then '' else BASE.OBJECT_NM end  " + 
        "         ), " + 
        "         '%1_WORK_ID%', " + 
        "         BASE.WORK_ID  " + 
        "       ), " + 
        "       '%1_WORK_NM%', " + 
        "       case when BASE.WORK_NM is null then '' else BASE.WORK_NM end  " + 
        "     ), " + 
        "     '%1_OBJECT_ID%', " + 
        "     BASE.OBJECT_ID  " + 
        "   ), " + 
        "   '%1_RES_MEMO%', " + 
        "   case when BASE.RES_MEMO is null then '' else BASE.RES_MEMO end  " + 
        " ) AS SUBJ " + 
        " " + 
        " " + 
        ",REPLACE( " + 
        "   REPLACE( " + 
        "     REPLACE( " + 
        "       REPLACE( " + 
        "         REPLACE( " + 
        "           REPLACE( " + 
        "             BASE.MAIL_TEXT, " + 
        "             '%1_STEP%', " + 
        "             concat(BASE.STEP ,'') " + 
        "           ), " + 
        "           '%1_OBJECT_NM%', " + 
        "           case when BASE.OBJECT_NM is null then '' else BASE.OBJECT_NM end  " + 
        "         ), " + 
        "         '%1_WORK_ID%', " + 
        "         BASE.WORK_ID  " + 
        "       ), " + 
        "       '%1_WORK_NM%', " + 
        "       case when BASE.WORK_NM is null then '' else BASE.WORK_NM end  " + 
        "     ), " + 
        "     '%1_OBJECT_ID%', " + 
        "     BASE.OBJECT_ID  " + 
        "   ), " + 
        "   '%1_RES_MEMO%', " + 
        "   case when BASE.RES_MEMO is null then '' else BASE.RES_MEMO end  " + 
        " ) AS MLTEXT " + 
        " " + 
        "FROM ( " + 
        "    SELECT  " + 
        " " + 
        "     WFS_T_WORKFLOW.WORK_ID " + 
        "    ,WFS_M_CONTROL.WORK_NM " + 
        "    ,WFS_T_WORKFLOW.STEP " + 
        "    ,WFS_T_WORKFLOW.OBJECT_ID " + 
        "    ,WFS_T_WORKFLOW.OBJECT_NM " + 
        "    ,WFS_T_WORKFLOW.USR_ID " + 
        "    ,WFS_T_WORKFLOW.LVL " + 
        "    ,WFS_T_WORKFLOW.ROUTE_ID " + 
        "    ,WFS_T_WORKFLOW.STATUS " + 
        "    ,WFS_T_WORKFLOW.RES_MEMO " + 
        " " + 
        "    ,CASE  " + 
        "     WHEN WFS_T_WORKFLOW_NX.WORK_ID IS NULL AND WFS_T_WORKFLOW.STATUS = '2'  THEN '決裁' " + 
        "     WHEN WFS_T_WORKFLOW.LVL = '1'                                           THEN '再申請' " + 
        "     WHEN WFS_T_WORKFLOW_NX.WORK_ID IS NOT NULL AND (WFS_T_WORKFLOW.STATUS = '1' or WFS_T_WORKFLOW.STATUS = '2') THEN '承認' " + 
        "     WHEN WFS_T_WORKFLOW.LVL <> '1' AND WFS_T_WORKFLOW.STATUS = '3'          THEN '否認' " + 
        "     END AS EXEC_FLG " + 
        " " + 
        "    ,CASE  " + 
        "     WHEN WFS_T_WORKFLOW_NX.WORK_ID IS NULL AND WFS_T_WORKFLOW.STATUS = '2'  THEN  " + 
        "        TLN_CONCAT( " + 
        "            WFS_ALL_MAIL(WFS_M_AUTH_FT.USR_GRP_ID, WFS_T_WORKFLOW.USR_ID     ,WFS_T_WORKFLOW.WORK_ID ,WFS_T_WORKFLOW.OBJECT_ID ,WFS_M_AUTH_FT.LVL), " + 
        "            CASE WHEN WFS_M_ROUTE_HED.END_SEND_MAIL IS NULL THEN '' ELSE WFS_M_ROUTE_HED.END_SEND_MAIL END , " + 
        "            ',' " + 
        "        ) " + 
        "     WHEN WFS_T_WORKFLOW.LVL = '1'                                           THEN WFS_ALL_MAIL(WFS_M_AUTH_NX.USR_GRP_ID, NULL     ,WFS_T_WORKFLOW.WORK_ID ,WFS_T_WORKFLOW.OBJECT_ID ,WFS_M_AUTH_NX.LVL) " + 
        "     WHEN WFS_T_WORKFLOW_NX.WORK_ID IS NOT NULL AND (WFS_T_WORKFLOW.STATUS = '1' or WFS_T_WORKFLOW.STATUS = '2') THEN WFS_ALL_MAIL(WFS_M_AUTH_NX.USR_GRP_ID, NULL     ,WFS_T_WORKFLOW.WORK_ID ,WFS_T_WORKFLOW.OBJECT_ID ,WFS_M_AUTH_NX.LVL) " + 
        "     WHEN WFS_T_WORKFLOW.LVL <> '1' AND WFS_T_WORKFLOW_NX.LVL <> '1' AND WFS_T_WORKFLOW.STATUS = '3' THEN WFS_ALL_MAIL(WFS_M_AUTH_NX.USR_GRP_ID, NULL                  ,WFS_T_WORKFLOW.WORK_ID ,WFS_T_WORKFLOW.OBJECT_ID ,WFS_M_AUTH_NX.LVL) " + 
        "     WHEN WFS_T_WORKFLOW.LVL <> '1' AND WFS_T_WORKFLOW_NX.LVL =  '1' AND WFS_T_WORKFLOW.STATUS = '3' THEN WFS_ALL_MAIL(WFS_M_AUTH_FT.USR_GRP_ID, WFS_T_WORKFLOW.USR_ID ,WFS_T_WORKFLOW.WORK_ID ,WFS_T_WORKFLOW.OBJECT_ID ,WFS_M_AUTH_FT.LVL) " + 
        "     WHEN WFS_T_WORKFLOW.STATUS = '9'                                        THEN WFS_ALL_MAIL(WFS_M_AUTH_FT.USR_GRP_ID, WFS_T_WORKFLOW.USR_ID     ,WFS_T_WORKFLOW.WORK_ID ,WFS_T_WORKFLOW.OBJECT_ID ,WFS_M_AUTH_FT.LVL) " + 
        "     END AS MAIL_ADD " + 
        " " + 
        "    ,CASE  " + 
        "     WHEN WFS_T_WORKFLOW_NX.WORK_ID IS NULL AND WFS_T_WORKFLOW.STATUS = '2'  THEN WFS_M_CONTROL.MAIL_TITLE_KESSAI " + 
        "     WHEN WFS_T_WORKFLOW.LVL = '1'                                           THEN WFS_M_CONTROL.MAIL_TITLE_SINSEI " + 
        "     WHEN WFS_T_WORKFLOW_NX.WORK_ID IS NOT NULL AND (WFS_T_WORKFLOW.STATUS = '1' or WFS_T_WORKFLOW.STATUS = '2') THEN WFS_M_CONTROL.MAIL_TITLE_SYONIN " + 
        "     WHEN WFS_T_WORKFLOW.LVL <> '1' AND WFS_T_WORKFLOW.STATUS = '3'          THEN WFS_M_CONTROL.MAIL_TITLE_HININ " + 
        "     WHEN WFS_T_WORKFLOW.STATUS = '9'                                        THEN WFS_M_CONTROL.MAIL_TITLE_HININ2 " + 
        "     END AS MAIL_TITLE " + 
        " " + 
        "    ,CASE  " + 
        "     WHEN WFS_T_WORKFLOW_NX.WORK_ID IS NULL AND WFS_T_WORKFLOW.STATUS = '2'  THEN WFS_M_CONTROL.MAIL_TEXT_KESSAI " + 
        "     WHEN WFS_T_WORKFLOW.LVL = '1'                                           THEN WFS_M_CONTROL.MAIL_TEXT_SINSEI " + 
        "     WHEN WFS_T_WORKFLOW_NX.WORK_ID IS NOT NULL AND (WFS_T_WORKFLOW.STATUS = '1' or WFS_T_WORKFLOW.STATUS = '2') THEN WFS_M_CONTROL.MAIL_TEXT_SYONIN " + 
        "     WHEN WFS_T_WORKFLOW.LVL <> '1' AND WFS_T_WORKFLOW.STATUS = '3'          THEN WFS_M_CONTROL.MAIL_TEXT_HININ " + 
        "     WHEN WFS_T_WORKFLOW.STATUS = '9'                                        THEN WFS_M_CONTROL.MAIL_TEXT_HININ2 " + 
        "     END AS MAIL_TEXT " + 
        " " + 
        "    FROM WFS_T_WORKFLOW " + 
        " " + 
        "    INNER JOIN WFS_M_CONTROL " + 
        "       ON WFS_M_CONTROL.WORK_ID       = WFS_T_WORKFLOW.WORK_ID " + 
        " " + 
        "    LEFT OUTER JOIN WFS_T_WORKFLOW WFS_T_WORKFLOW_NX " + 
        "      ON WFS_T_WORKFLOW.WORK_ID       = WFS_T_WORKFLOW_NX.WORK_ID   " + 
        "     AND WFS_T_WORKFLOW.OBJECT_ID     = WFS_T_WORKFLOW_NX.OBJECT_ID " + 
        "     AND WFS_T_WORKFLOW.STEP + 1      = WFS_T_WORKFLOW_NX.STEP " + 
        " " + 
        "    LEFT OUTER JOIN WFS_M_AUTH WFS_M_AUTH_NX " + 
        "      ON WFS_T_WORKFLOW_NX.WORK_ID   = WFS_M_AUTH_NX.WORK_ID " + 
        "     AND WFS_T_WORKFLOW_NX.LVL       = WFS_M_AUTH_NX.LVL " + 
        "     AND WFS_T_WORKFLOW_NX.ROUTE_ID  = WFS_M_AUTH_NX.ROUTE_ID  " + 
        " " + 
        "    LEFT OUTER JOIN WFS_T_WORKFLOW WFS_T_WORKFLOW_FT " + 
        "      ON WFS_T_WORKFLOW.WORK_ID       = WFS_T_WORKFLOW_FT.WORK_ID  " + 
        "     AND WFS_T_WORKFLOW.OBJECT_ID     = WFS_T_WORKFLOW_FT.OBJECT_ID " + 
        "     AND 1                            = WFS_T_WORKFLOW_FT.STEP " + 
        " " + 
        "    LEFT OUTER JOIN WFS_M_AUTH WFS_M_AUTH_FT " + 
        "      ON WFS_T_WORKFLOW_FT.WORK_ID  = WFS_M_AUTH_FT.WORK_ID " + 
        "     AND WFS_T_WORKFLOW_FT.LVL      = WFS_M_AUTH_FT.LVL " + 
        "     AND WFS_T_WORKFLOW_FT.ROUTE_ID = WFS_M_AUTH_FT.ROUTE_ID  " + 
        " " + 
        "    LEFT OUTER JOIN WFS_M_ROUTE_HED " + 
        "       ON WFS_T_WORKFLOW.ROUTE_ID = WFS_M_ROUTE_HED.ROUTE_ID " + 
        " " + 
        "    WHERE WFS_T_WORKFLOW.WORK_ID   = '" + tln_com_escape( _WORK_ID   ) + "' " + 
        "      AND WFS_T_WORKFLOW.STEP      = '" + tln_com_escape( _STEP      ) + "' " + 
        "      AND WFS_T_WORKFLOW.OBJECT_ID = '" + tln_com_escape( _OBJECT_ID ) + "' " + 
        " " + 
        ") BASE " + 
        " "; 


    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );
    if (itemSelectList.length > 0) {
        var lineDataMap = itemSelectList[0];

        mailData.WFS_SUBJ   = getMapVal( lineDataMap , 'SUBJ' );
        mailData.WFS_MAIL   = getMapVal( lineDataMap , 'MAIL' );
        mailData.WFS_MLTEXT = getMapVal( lineDataMap , 'MLTEXT' );
    }

    return mailData;

}



function _mail_data_reminder(_WORK_ID, _STEP, _OBJECT_ID) {
    var mailData = {};

    mailData.WFS_SUBJ   = null;
    mailData.WFS_MAIL   = null;
    mailData.WFS_MLTEXT = null;

    var sql = "" + 
        "SELECT " + 
        " " + 
        " BASE.WORK_ID " + 
        ",BASE.WORK_NM " + 
        ",BASE.STEP as STEP " + 
        ",BASE.REMINDER_ID " + 
        " " + 
        ",BASE.OBJECT_ID " + 
        ",BASE.USR_ID " + 
        ",BASE.MAIL_ADD AS MAIL " + 
        " " + 
        ",REPLACE( " + 
        "   REPLACE( " + 
        "     REPLACE( " + 
        "       REPLACE( " + 
        "         REPLACE( " + 
        "           REPLACE( " + 
        "             BASE.MAIL_TITLE, " + 
        "             '%1_STEP%', " + 
        "             concat(BASE.STEP ,'') " + 
        "           ), " + 
        "           '%1_OBJECT_NM%', " + 
        "           case when BASE.OBJECT_NM is null then '' else BASE.OBJECT_NM end  " + 
        "         ), " + 
        "         '%1_WORK_ID%', " + 
        "         BASE.WORK_ID  " + 
        "       ), " + 
        "       '%1_WORK_NM%', " + 
        "       case when BASE.WORK_NM is null then '' else BASE.WORK_NM end  " + 
        "     ), " + 
        "     '%1_OBJECT_ID%', " + 
        "     BASE.OBJECT_ID  " + 
        "   ), " + 
        "   '%1_RES_MEMO%', " + 
        "   case when BASE.RES_MEMO is null then '' else BASE.RES_MEMO end  " + 
        " ) AS SUBJ " + 
        " " + 
        ",REPLACE( " + 
        "   REPLACE( " + 
        "     REPLACE( " + 
        "       REPLACE( " + 
        "         REPLACE( " + 
        "           REPLACE( " + 
        "             BASE.MAIL_TEXT, " + 
        "             '%1_STEP%', " + 
        "             concat(BASE.STEP ,'') " + 
        "           ), " + 
        "           '%1_OBJECT_NM%', " + 
        "           case when BASE.OBJECT_NM is null then '' else BASE.OBJECT_NM end  " + 
        "         ), " + 
        "         '%1_WORK_ID%', " + 
        "         BASE.WORK_ID  " + 
        "       ), " + 
        "       '%1_WORK_NM%', " + 
        "       case when BASE.WORK_NM is null then '' else BASE.WORK_NM end  " + 
        "     ), " + 
        "     '%1_OBJECT_ID%', " + 
        "     BASE.OBJECT_ID  " + 
        "   ), " + 
        "   '%1_RES_MEMO%', " + 
        "   case when BASE.RES_MEMO is null then '' else BASE.RES_MEMO end  " + 
        " ) AS MLTEXT " + 
        " " + 
        "FROM ( " + 
        " " + 
        "    SELECT  " + 
        "     WFS_T_WORKREMINDER.WORK_ID " + 
        "    ,WFS_M_CONTROL.WORK_NM " + 
        "    ,WFS_T_WORKREMINDER.STEP " + 
        "    ,WFS_T_WORKREMINDER.OBJECT_ID " + 
        "    ,WFS_T_WORKFLOW.OBJECT_NM " + 
        "    ,WFS_T_WORKREMINDER.REMINDER_ID " + 
        "    ,WFS_T_WORKFLOW.USR_ID " + 
        "    ,WFS_T_WORKFLOW.LVL " + 
        "    ,WFS_T_WORKFLOW.ROUTE_ID " + 
        "    ,WFS_T_WORKFLOW.STATUS " + 
        "    ,WFS_T_WORKREMINDER.RES_MEMO " + 
        " " + 
        "    ,WFS_ALL_MAIL(WFS_M_AUTH.USR_GRP_ID, NULL    , WFS_T_WORKREMINDER.WORK_ID , WFS_T_WORKREMINDER.OBJECT_ID , WFS_M_AUTH.LVL) AS MAIL_ADD " + 
        " " + 
        "    ,WFS_M_CONTROL.MAIL_TITLE_SAISOKU AS MAIL_TITLE " + 
        " " + 
        "    ,WFS_M_CONTROL.MAIL_TEXT_SAISOKU AS MAIL_TEXT " + 
        " " + 
        "    FROM WFS_T_WORKREMINDER " + 
        " " + 
        "    INNER JOIN WFS_T_WORKFLOW " + 
        "       ON WFS_T_WORKREMINDER.WORK_ID   = WFS_T_WORKFLOW.WORK_ID " + 
        "      AND WFS_T_WORKREMINDER.OBJECT_ID = WFS_T_WORKFLOW.OBJECT_ID " + 
        "      AND WFS_T_WORKREMINDER.STEP      = WFS_T_WORKFLOW.STEP " + 
        " " + 
        "    INNER JOIN WFS_M_CONTROL " + 
        "       ON WFS_M_CONTROL.WORK_ID        = WFS_T_WORKFLOW.WORK_ID " + 
        " " + 
        "    LEFT OUTER JOIN WFS_M_AUTH WFS_M_AUTH " + 
        "      ON WFS_T_WORKFLOW.WORK_ID    = WFS_M_AUTH.WORK_ID " + 
        "     AND WFS_T_WORKFLOW.LVL        = WFS_M_AUTH.LVL " + 
        "     AND WFS_T_WORKFLOW.ROUTE_ID   = WFS_M_AUTH.ROUTE_ID " + 
        " " + 
        "    WHERE WFS_T_WORKFLOW.WORK_ID   = '" + tln_com_escape( _WORK_ID   ) + "' " + 
        "      AND WFS_T_WORKFLOW.STEP      = '" + tln_com_escape( _STEP      ) + "' " + 
        "      AND WFS_T_WORKFLOW.OBJECT_ID = '" + tln_com_escape( _OBJECT_ID ) + "' " + 
        " " + 
        ") BASE " + 
        " ";


    var itemSelectList = TalonDbUtil.select( TALON.getDbConfig() , sql );
    if (itemSelectList.length > 0) {
        var lineDataMap = itemSelectList[itemSelectList.length - 1]; // STEPが進行しないまま複数回の催促が起こり得るため、最後の催促内容をメール送信する

        mailData.WFS_SUBJ   = getMapVal( lineDataMap , 'SUBJ' );
        mailData.WFS_MAIL   = getMapVal( lineDataMap , 'MAIL' );
        mailData.WFS_MLTEXT = getMapVal( lineDataMap , 'MLTEXT' );
    }

    return mailData;

}



```

#### サーバJS ライブラリ: WFS_CUSTOM ([共通]ワークフローシステム（ユーザー処理用）)

```javascript
/**
 * WFS_CUSTOM : [共通]ワークフローシステム（ユーザー処理用）
 *
 * @version   2019/03/01
 */


//-------------------------------------------------------
// パラメータ
//     work_id        ワークフローＩＤ
//     object_id      オブジェクトＩＤ
//     syori_kbn      処理区分
//         10 : 申請                       [ STATUS = 1 ]
//         20 : 承認（次階層あり）         [ STATUS = 2 ]
//         21 : 承認（次階層なし=決裁）    [ STATUS = 2 ]
//         30 : 差戻                       [ STATUS = 3 ]
//         90 : 否認                       [ STATUS = 9 ]
//         50 : 取戻（申請者取戻）         [ STATUS = 5 ]
//         60 : 取消                       [ STATUS = 6 ]
//         70 : 取戻（承認者取戻）         [ STATUS = 7 ]
//         80 : 引上                       [ STATUS = 8 ]
//-------------------------------------------------------

var _WFS_SYORI_KBN_SHINSEI      = '10';		//申請
var _WFS_SYORI_KBN_SHONIN       = '20';		//承認（次階層あり）
var _WFS_SYORI_KBN_KESSAI       = '21';		//承認（次階層なし＝決裁）
var _WFS_SYORI_KBN_SASHIMODOSHI = '30';		//差戻
var _WFS_SYORI_KBN_HININ        = '90';		//否認
var _WFS_SYORI_KBN_TORIMODOSHIS = '50';		//取戻（申請者取戻）
var _WFS_SYORI_KBN_TORIKESHI    = '60';		//取消
var _WFS_SYORI_KBN_TORIMODOSHIS = '70';		//取戻（承認者取戻）
var _WFS_SYORI_KBN_HIKIAGE      = '80';		//引上

function execWorkFlowCustom(work_id , obj_id , syori_kbn) {

	var status = '';
	var table  = '';
	var join   = '';
	var param  = '';

	switch (work_id) {
	//(WORK_ID:XXXXXXXXXX) 
	case 'XXXXXXXXXX':
		break;


	//(WORK_ID:XXXXXXXXXX) 
	case 'XXXXXXXXXX':
		break;


	default:
		break;
	}

}

```

#### サーバJS ライブラリ: WFS_SETUP ([共通]ワークフローシステム（環境構築）)

```javascript
/**
 * WFS_SETUP : [共通]ワークフローシステム（環境構築）
 * 
 * 最終更新：WFS_2_0_2
 * @version   2023/11/13
 */


//--------------------------------------------
// セットアップ関連共通
//--------------------------------------------
function table_exists(nm) {
    if ( TALON.getDbConfig().isOra() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM USER_TABLES WHERE TABLE_NAME = '" + nm + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    }
    if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT DSP1 FROM TLN_M_HANYO_CODE_MAIN WHERE SIKIBETU_CODE='TLN_GENERAL' AND KEY_CODE='DB_NAME'" );
        var lineDataMap = itemSelectList[0];
        var _DSP1 = getMapVal(lineDataMap,'DSP1');
        
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM information_schema.tables WHERE table_name = '" + nm + "' AND table_schema = '" + _DSP1 + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isMssql() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM sys.objects WHERE type = 'U' AND name = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(DISTINCT table_name) AS CNT FROM information_schema.columns WHERE LOWER(table_name) = LOWER('" + nm + "')" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function function_exists(nm) {
    if ( TALON.getDbConfig().isOra() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM USER_PROCEDURES WHERE OBJECT_TYPE = 'FUNCTION' AND OBJECT_NAME = '" + nm + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    }
    if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT DSP1 FROM TLN_M_HANYO_CODE_MAIN WHERE SIKIBETU_CODE='TLN_GENERAL' AND KEY_CODE='DB_NAME'" );
        var lineDataMap = itemSelectList[0];
        var _DSP1 = getMapVal(lineDataMap,'DSP1');
        
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION' AND ROUTINE_SCHEMA = '" + _DSP1 + "' AND SPECIFIC_NAME = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isMssql() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM sys.objects WHERE type = 'FN' AND name = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM pg_proc WHERE proname = LOWER('" + nm + "')" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function view_exists(nm) {
    if ( TALON.getDbConfig().isOra() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM USER_OBJECTS WHERE OBJECT_TYPE = 'VIEW' AND OBJECT_NAME = '" + nm + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    }
    if ( TALON.getDbConfig().isMy() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT DSP1 FROM TLN_M_HANYO_CODE_MAIN WHERE SIKIBETU_CODE='TLN_GENERAL' AND KEY_CODE='DB_NAME'" );
        var lineDataMap = itemSelectList[0];
        var _DSP1 = getMapVal(lineDataMap,'DSP1');
        
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = '" + nm + "' AND TABLE_SCHEMA = '" + _DSP1 + "' " );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isMssql() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM sys.objects WHERE type = 'V' AND name = '" + nm + "'" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM pg_class WHERE relkind = 'v' and relname = LOWER('" + nm + "')" );
        var lineDataMap = itemSelectList[0];
        var _CNT = getMapVal(lineDataMap,'CNT');
    };
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function field_exists(nm,fl) {
    if ( !TALON.getDbConfig().isPostgres() ) {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM TLN_M_NAME_MANAGER WHERE TABLE_NAME = '" + nm + "' AND COLUMN_NAME = '" + fl + "' " );
    } else {
        var itemSelectList = TalonDbUtil.select( TALON.getDbConfig(), "SELECT COUNT(*) AS CNT FROM TLN_M_NAME_MANAGER WHERE TABLE_NAME = LOWER('" + nm + "') AND COLUMN_NAME = LOWER('" + fl + "') " );
    }
    var lineDataMap = itemSelectList[0];
    var _CNT = getMapVal(lineDataMap,'CNT');
    if (_CNT == 0) {
        return false;
    } else {
        return true;
    }
}
function executeSQL(sql) {
    if ( TALON.getDbConfig().isOra() ) {
        //Oracleの場合true
        TALON.executeSQL(sql);
    };
    if ( TALON.getDbConfig().isMy() ) {
        //MySQLの場合true
        TalonDbUtil.update( TALON.getDbConfig(), sql);
    };
    if ( TALON.getDbConfig().isMssql() ) {
        //MsSqlServerの場合true
        TalonDbUtil.update( TALON.getDbConfig(), sql);
    };
    if ( TALON.getDbConfig().isPostgres() ) {
        //Postgresの場合true
        TalonDbUtil.update( TALON.getDbConfig(), sql);
    };
}
function table_exists_drop(nm) {
    if (table_exists(nm)) {
        if ( !TALON.getDbConfig().isPostgres() ) {
            executeSQL( "DROP TABLE " + nm ) ;
        } else {
            executeSQL( "DROP TABLE " + nm.toLowerCase() ) ;
        }
    }
}
function function_exists_drop(nm) {
    if (function_exists(nm)) {
        if ( !TALON.getDbConfig().isPostgres() ) {
            executeSQL( "DROP FUNCTION " + nm ) ;
        } else {
            executeSQL( "DROP FUNCTION " + nm.toLowerCase() ) ;
        }
    }
}
function view_exists_drop(nm) {
    if (view_exists(nm)) {
        if ( !TALON.getDbConfig().isPostgres() ) {
            executeSQL( "DROP VIEW " + nm ) ;
        } else {
            executeSQL( "DROP VIEW " + nm.toLowerCase() ) ;
        }
    }
}



//--------------------------------------------
// セットアップ後環境別データ修正
//--------------------------------------------
function exec_custom() {


    if ( TALON.getDbConfig().isMy() ) {
        //MySQLの場合true

        if ( chkLowercase() ) {
            //lowercaseとして判断
            TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_APP SET VALUE  = LOWER(VALUE) WHERE FUNC_KBN = 'UPDATE_TABLE' AND FUNC_ID LIKE 'WFS_%' ");
        }

    }



    if ( TALON.getDbConfig().isMssql() ) {
        //MsSqlServerの場合true
        var array = ["TLN_DATE_TO_CHAR","TLN_CHAR_TO_DATE","TLN_SYSDATE","TLN_CONCAT","TLN_CHARINDEX","TLN_CHAR_TO_NUMBER","WFS_ALL_MAIL","WFS_AUTH_MAIN","WFS_AUTH_SHINSEI","WFS_AUTH_SHONIN","WFS_WF_EXISTS","WFS_WF_STEP"];

        var i;
        var num = array.length;
        for(i=0;i < num;i++){
            //--------------
            //TLN_M_GENERAL_FUNC_SQL
            TalonDbUtil.update( TALON.getDbConfig(), 
            " UPDATE TLN_M_GENERAL_FUNC_SQL " + 
            " SET " + 
            "  BODY_SQL  = REPLACE(REPLACE(BODY_SQL ,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " ,TITLE_SQL = REPLACE(REPLACE(TITLE_SQL,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " WHERE FUNC_ID LIKE 'WFS_%' "
            );

            //--------------
            //TLN_M_GENERAL_ITEM_OPTN
            TalonDbUtil.update( TALON.getDbConfig(), 
            " UPDATE TLN_M_GENERAL_ITEM_OPTN " + 
            " SET " + 
            "  CHR_TEXT = REPLACE(REPLACE(CHR_TEXT,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_ID <> 'WFS_M000' " + 
            " AND (FUNC_KBN = 'JAVA_SCRIPT_ENGINE' OR (FUNC_KBN = 'BUTTON_BAT' AND FLAG = 2)) "
            );

            //--------------
            //TLN_M_HANYO_CODE_MAIN
            TalonDbUtil.update( TALON.getDbConfig(), 
            " UPDATE TLN_M_HANYO_CODE_MAIN " + 
            " SET " + 
            "  NOTE = REPLACE(REPLACE(NOTE,'" + array[i] + "','dbo." + array[i] + "'),'dbo.dbo.','dbo.') " + 
            " WHERE SIKIBETU_CODE = 'TLN_GENERAL_JAVASCRIPT_ENGINE' " + 
            "   AND KEY_CODE <> 'WFS_SETUP' "

            );
        }

    }



    if ( TALON.getDbConfig().isPostgres() ) {
        //PostgreSQLの場合true

        //lower
        //--------------
        //TLN_M_GENERAL_ITEM 
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM SET COL_NAME = LOWER(COL_NAME) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_ID <> 'WFS_M000' ");

        //--------------
        //TLN_M_GENERAL_FUNC_SQL 
        // * TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = LOWER(BODY_SQL) WHERE FUNC_ID LIKE 'WFS_%' ");
        // * TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET TITLE_SQL = LOWER(TITLE_SQL) WHERE FUNC_ID LIKE 'WFS_%' ");
        // * 
        // * TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'tln_login_user','TLN_LOGIN_USER') WHERE FUNC_ID LIKE 'WFS_%' ");
        // * TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'wfs_all_chk'   ,'WFS_ALL_CHK'   ) WHERE FUNC_ID LIKE 'WFS_%' ");
        // * 
        // * WFS_M034のみバインド変数を小文字化
        // * TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%WORK_ID%**/'   ,'/**%work_id%**/'   ) WHERE FUNC_ID LIKE 'WFS_M034' ");
        // * TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%WORK_NM%**/'   ,'/**%work_nm%**/'   ) WHERE FUNC_ID LIKE 'WFS_M034' ");
        // * TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%ROUTE_ID%**/'  ,'/**%route_id%**/'  ) WHERE FUNC_ID LIKE 'WFS_M034' ");

        //機能内で使用しているバインド変数を小文字に変換
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%APP_MEMO_SEL%**/'   ,'/**%app_memo_sel%**/'   ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%ID%**/'             ,'/**%id%**/'             ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%JOB_ID%**/'         ,'/**%job_id%**/'         ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%LVL%**/'            ,'/**%lvl%**/'            ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%NOT_END_FLG%**/'    ,'/**%not_end_flg%**/'    ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%OBJECT_ID%**/'      ,'/**%object_id%**/'      ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%OBJECT_NM%**/'      ,'/**%object_nm%**/'      ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%PARAM_CTL_UMU%**/'  ,'/**%param_ctl_umu%**/'  ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%PARAM_TRG%**/'      ,'/**%param_trg%**/'      ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%ROUTE_ID%**/'       ,'/**%route_id%**/'       ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%SEL_CHK_NO%**/'     ,'/**%sel_chk_no%**/'     ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%SEL_DEL_FLG%**/'    ,'/**%sel_del_flg%**/'    ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%SEL_WORK_ID%**/'    ,'/**%sel_work_id%**/'    ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%TENKAI_HOUKOU%**/'  ,'/**%tenkai_houkou%**/'  ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%USR_ID%**/'         ,'/**%usr_id%**/'         ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%WORK_ID%**/'        ,'/**%work_id%**/'        ) WHERE FUNC_ID LIKE 'WFS_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_FUNC_SQL SET BODY_SQL = REPLACE(BODY_SQL,'/**%WORK_NM%**/'        ,'/**%work_nm%**/'        ) WHERE FUNC_ID LIKE 'WFS_%' ");

        //--------------
        //TLN_M_GENERAL_ITEM_OPTN
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR4 = LOWER(CHR4) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'BUTTON_NEXT' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR4 = replace(CHR4,'sample_work01','SAMPLE_WORK01') WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'BUTTON_NEXT' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR4 = replace(CHR4,'sample_work02','SAMPLE_WORK02') WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'BUTTON_NEXT' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = LOWER(KIND), CHR1 = LOWER(CHR1), CHR_TEXT = LOWER(CHR_TEXT), CHR4 = LOWER(CHR4) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'SEND_MAIL' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = LOWER(KIND) WHERE FUNC_ID LIKE 'WFS_%' AND ( FUNC_KBN LIKE 'BUTTON_NEXT_%' or FUNC_KBN = 'INPUT_CONDITION' ) ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1), CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'WFS_%' AND ( FUNC_KBN = 'SUB_SEARCH' OR FUNC_KBN = 'LOOK_UP' ) ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'REGIST_VALUE' AND CHR1 NOT LIKE '%WFS%' AND CHR1 NOT LIKE '%SYSDATE%' AND CHR1 NOT LIKE '%LOGIN_ID%' AND CHR1 NOT LIKE '%TLN_M%'"); //システムバインド変数、機能ID、URLはそのまま
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'REGIST_VALUE' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET KIND = LOWER(KIND) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'MATCH_PATTERN' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1) , CHR2 = LOWER(CHR2) , CHR3 = LOWER(CHR3) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'SUGGEST' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'FORE_COLOR' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'INIT_VALUE_TEXT' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'OTHER_FUNC' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = LOWER(CHR1), CHR3 = LOWER(CHR3) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN LIKE 'OTHER_FUNC_%' ");
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR3 = replace(CHR3,'%login_id%','%LOGIN_ID%') WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN LIKE 'OTHER_FUNC_%' "); //他機能呼出のシステム変数は大文字
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR2 = LOWER(CHR2) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'BACK_COLOR' ");
        
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET CHR1 = REPLACE(CHR1,'%2_ROUTE_SET_KBN_NULL%' ,'%2_route_set_kbn_null%' ) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'REGIST_VALUE' ");

        //--------------
        //TLN_M_GENERAL_ITEM_OPTN 
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_ITEM_OPTN SET COL_NAME = LOWER(COL_NAME) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN NOT IN ('SEND_MAIL' , 'OTHER_FUNC' , 'JAVA_SCRIPT_ENGINE' , 'JAVA_SCRIPT' , 'BUTTON_NEXT' , 'BUTTON_BAT' , 'BUTTON_DSP_POS' ) AND FUNC_KBN NOT LIKE 'BUTTON_AJAX%' ");

        //TLN_M_GENERAL_APP
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_APP SET VALUE = LOWER(VALUE) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_KBN = 'UPDATE_TABLE' ");

        //TLN_M_GENERAL_USES
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_USES SET KEY_CODE = LOWER(KEY_CODE) WHERE FUNC_ID LIKE 'WFS_%' AND USER_CODE = 'TLN_GEN_ALL' ");


        //--------------
        //TLN_M_GENERAL_POSITION
        TalonDbUtil.update( TALON.getDbConfig(), " UPDATE TLN_M_GENERAL_POSITION SET NAME = LOWER(NAME) WHERE FUNC_ID LIKE 'WFS_%' AND FUNC_ID <> 'WFS_M000' AND CHR1='ITEM' ");

    }

}




//--------------------------------------------
// Ver1.4へのバージョンアップ
//--------------------------------------------

function exec_ver_up_14( _func_chk ){

    //テーブルの追加
    exec_ver_up_14_TableModify();

    //データのパッチ（補填）
    exec_ver_up_patch_14_DataPatch();

    //画面でファンクションの再構築が設定された場合（初回インストールは固定１で呼び出される)
    if ( _func_chk == '1' ) {
        //ファンクションの再構築　→ファンクション・Viewはパッチ毎に最新を作成
        exec_create_Function();

        //Ｖｉｅｗの再構築　　　　→ファンクション・Viewはパッチ毎に最新を作成
        exec_create_View();
    } 

}

function exec_ver_up_14_TableModify(){

    //テーブル変更、追加処理
    //------------------------------
    if ( TALON.getDbConfig().isOra() ) {

        //--------------------------------------
        //[変更]WFS_M_CONTROL
        if (!field_exists('WFS_M_AUTH','SYONIN_PTN')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_AUTH ADD ( " + 
            "SYONIN_PTN         VARCHAR2(20) NULL " + 
            ")" + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_M_CONTROL
        if (!field_exists('WFS_M_CONTROL','APPROVAL_FLG')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_CONTROL MODIFY ( " + 
            "MAIL_TEXT_KESSAI   VARCHAR2(3000)  , " + 
            "MAIL_TEXT_SINSEI   VARCHAR2(3000)  , " + 
            "MAIL_TEXT_SYONIN   VARCHAR2(3000)  , " + 
            "MAIL_TEXT_HININ    VARCHAR2(3000)    " + 
            ")" + 
            "");
            executeSQL( 
            "ALTER TABLE WFS_M_CONTROL ADD ( " + 
            "APPROVAL_FLG       VARCHAR2(20)   NULL  , " + 
            "ROUTE_SET_KBN      VARCHAR2(50)   NULL  , " + 
            "ROUTE_STRUCT_ID    VARCHAR2(50)   NULL  , " + 
            "MAIL_TITLE_HININ2  VARCHAR2(100)  NULL  , " + 
            "MAIL_TEXT_HININ2   VARCHAR2(3000) NULL  , " + 
            "MAIL_TITLE_SAISOKU VARCHAR2(100)  NULL  , " + 
            "MAIL_TEXT_SAISOKU  VARCHAR2(3000) NULL  , " + 
            "CATEGORY_ID        VARCHAR2(50)   NULL   " + 
            ")" + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_M_ROUTE_HED
        if (!field_exists('WFS_M_ROUTE_HED','PARAM_FM')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_ROUTE_HED ADD ( " + 
            "PARAM_FM           VARCHAR2(50)  NULL  , " + 
            "PARAM_VAL          VARCHAR2(100) NULL  , " + 
            "PARAM_TP           VARCHAR2(50)  NULL  , " + 
            "END_SEND_MAIL      VARCHAR2(100) NULL  , " + 
            "DEL_FLG            VARCHAR2(10)  NULL    " + 
            ")" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_STRUCT_HED
        if (!table_exists('WFS_M_STRUCT_HED')) {
            executeSQL( 
            " CREATE TABLE WFS_M_STRUCT_HED " + "\n" + 
            "     (" + "\n" + 
            "         ID                              VARCHAR2(50)  NOT NULL," + "\n" + 
            "         TITLE                           VARCHAR2(100) ," + "\n" + 
            "         CREATED_DATE                    DATE          ," + "\n" + 
            "         CREATED_BY                      VARCHAR2(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR2(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATE          ," + "\n" + 
            "         UPDATED_BY                      VARCHAR2(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR2(50)  ," + "\n" + 
            "         MODIFY_COUNT                    NUMBER(10)     " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_STRUCT_HED " + "\n" + 
            "         ADD ( CONSTRAINT PK_WFS_M_STRUCT_HED PRIMARY KEY  (ID) USING INDEX ) " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_STRUCT_DTL
        if (!table_exists('WFS_M_STRUCT_DTL')) {
            executeSQL( 
            " CREATE TABLE WFS_M_STRUCT_DTL " + "\n" + 
            "     (" + "\n" + 
            "         ID                              VARCHAR2(50)  NOT NULL," + "\n" + 
            "         SEQ                             NUMBER(10)       NOT NULL," + "\n" + 
            "         CHILD_ID                        VARCHAR2(50)  ," + "\n" + 
            "         OYA_ID                          VARCHAR2(50)  ," + "\n" + 
            "         BOTTOM_FLG                      VARCHAR2(10)  ," + "\n" + 
            "         SYONIN_PTN                      VARCHAR2(20)  ," + "\n" + 
            "         CREATED_DATE                    DATE          ," + "\n" + 
            "         CREATED_BY                      VARCHAR2(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR2(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATE          ," + "\n" + 
            "         UPDATED_BY                      VARCHAR2(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR2(50)  ," + "\n" + 
            "         MODIFY_COUNT                    NUMBER(10)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_STRUCT_DTL " + "\n" + 
            "         ADD ( CONSTRAINT PK_WFS_M_STRUCT_DTL PRIMARY KEY  (ID, SEQ) USING INDEX ) " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STRUCT_TEMP
        if (!table_exists('WFS_W_STRUCT_TEMP')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STRUCT_TEMP " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          VARCHAR2(50)  NOT NULL," + "\n" + 
            "         ID                              VARCHAR2(50)  ," + "\n" + 
            "         SEQ                             NUMBER(10)       NOT NULL," + "\n" + 
            "         CHILD_ID                        VARCHAR2(50)  ," + "\n" + 
            "         OYA_ID                          VARCHAR2(50)  ," + "\n" + 
            "         BOTTOM_FLG                      VARCHAR2(10)  ," + "\n" + 
            "         SYONIN_PTN                      VARCHAR2(20)  ," + "\n" + 
            "         CREATED_DATE                    DATE          ," + "\n" + 
            "         CREATED_BY                      VARCHAR2(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR2(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATE          ," + "\n" + 
            "         UPDATED_BY                      VARCHAR2(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR2(50)  ," + "\n" + 
            "         MODIFY_COUNT                    NUMBER(10)     " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STRUCT_TEMP " + "\n" + 
            "         ADD ( CONSTRAINT PK_WFS_W_STRUCT_TEMP PRIMARY KEY  (JOB_ID, SEQ) USING INDEX ) " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STRUCT_LIST
        if (!table_exists('WFS_W_STRUCT_LIST')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STRUCT_LIST " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          VARCHAR2(50)  NOT NULL," + "\n" + 
            "         ID                              VARCHAR2(50)  ," + "\n" + 
            "         SEQ                             NUMBER(10)       NOT NULL," + "\n" + 
            "         SORT                            VARCHAR2(50)  ," + "\n" + 
            "         LVL                             VARCHAR2(10)  ," + "\n" + 
            "         OYA_ID                          VARCHAR2(50)  ," + "\n" + 
            "         CHILD_ID                        VARCHAR2(50)  ," + "\n" + 
            "         SYONIN_PTN                      VARCHAR2(20)  ," + "\n" + 
            "         CREATED_DATE                    DATE          ," + "\n" + 
            "         CREATED_BY                      VARCHAR2(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR2(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATE          ," + "\n" + 
            "         UPDATED_BY                      VARCHAR2(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR2(50)  ," + "\n" + 
            "         MODIFY_COUNT                    NUMBER(10)     " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STRUCT_LIST " + "\n" + 
            "         ADD ( CONSTRAINT PK_WFS_W_STRUCT_LIST PRIMARY KEY  (JOB_ID, SEQ) USING INDEX ) " + "\n" + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_T_WORKFLOW
        if (!field_exists('WFS_T_WORKFLOW','SHONIN_ID')) { 
            executeSQL( 
            "ALTER TABLE WFS_T_WORKFLOW ADD ( " + 
            "SHONIN_ID      VARCHAR2(100)  NULL   , " + 
            "ACTIVE_FLG     VARCHAR2(20)   NULL   , " + 
            "HOLD_FLG       VARCHAR2(20)   NULL     " + 
            ")" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STAT_LIST
        if (!table_exists('WFS_W_STAT_LIST')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STAT_LIST " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID   VARCHAR2(100) NOT NULL  ," + "\n" + 
            "         OBJECT_ID VARCHAR2(100) NOT NULL  ," + "\n" + 
            "         LVL01_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL01_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL01_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL02_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL02_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL02_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL03_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL03_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL03_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL04_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL04_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL04_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL05_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL05_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL05_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL06_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL06_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL06_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL07_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL07_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL07_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL08_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL08_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL08_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL09_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL09_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL09_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL10_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL10_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL10_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL11_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL11_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL11_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL12_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL12_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL12_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL13_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL13_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL13_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL14_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL14_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL14_US  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL15_NM  VARCHAR2(100) DEFAULT NULL  ," + "\n" + 
            "         LVL15_DT  DATE          DEFAULT NULL  ," + "\n" + 
            "         LVL15_US  VARCHAR2(100) DEFAULT NULL   " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STAT_LIST " + "\n" + 
            "         ADD ( CONSTRAINT PK_WFS_W_STAT_LIST PRIMARY KEY  (WORK_ID, OBJECT_ID) USING INDEX ) " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_USR_DAIRI
        if (!table_exists('WFS_M_USR_DAIRI')) {
            executeSQL( 
            " CREATE TABLE WFS_M_USR_DAIRI " + "\n" + 
            "     (" + "\n" + 
            "         USR_ID                          VARCHAR2(100)  NOT NULL," + "\n" + 
            "         DAIRI_USR_ID                    VARCHAR2(100)  NOT NULL," + "\n" + 
            "         SHINSEI_FLG                     VARCHAR2(10)  ," + "\n" + 
            "         SHONIN_FLG                      VARCHAR2(10)  ," + "\n" + 
            "         YUKO_KBN                        VARCHAR2(10)  ," + "\n" + 
            "         CREATED_DATE                    DATE          ," + "\n" + 
            "         CREATED_BY                      VARCHAR2(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR2(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATE          ," + "\n" + 
            "         UPDATED_BY                      VARCHAR2(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR2(50)  ," + "\n" + 
            "         MODIFY_COUNT                    NUMBER(10)     " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_USR_DAIRI " + "\n" + 
            "         ADD ( CONSTRAINT PK_WFS_M_USR_DAIRI PRIMARY KEY  (USR_ID, DAIRI_USR_ID) USING INDEX ) " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_T_WORKREMINDER
        if (!table_exists('WFS_T_WORKREMINDER')) {
            executeSQL( 
            " CREATE TABLE WFS_T_WORKREMINDER " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID                         VARCHAR2(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       VARCHAR2(100)  NOT NULL," + "\n" + 
            "         STEP                            DECIMAL(10,0)  NOT NULL," + "\n" + 
            "         REMINDER_ID                     VARCHAR2(100)  NOT NULL," + "\n" + 
            "         ROUTE_ID                        VARCHAR2(100)  ," + "\n" + 
            "         LVL                             DECIMAL(10,0)  ," + "\n" + 
            "         RES_MEMO                        VARCHAR2(4000) ," + "\n" + 
            "         SEND_ADDRESS                    VARCHAR2(500)  ," + "\n" + 
            "         SEND_TITLE                      VARCHAR2(500)  ," + "\n" + 
            "         SEND_TEXT                       VARCHAR2(4000) ," + "\n" + 
            "         CREATED_DATE                    DATE           ," + "\n" + 
            "         CREATED_BY                      VARCHAR2(50)   ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR2(50)   ," + "\n" + 
            "         UPDATED_DATE                    DATE           ," + "\n" + 
            "         UPDATED_BY                      VARCHAR2(50)   ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR2(50)   ," + "\n" + 
            "         MODIFY_COUNT                    NUMBER(10)     " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_T_WORKREMINDER " + "\n" + 
            "         ADD ( CONSTRAINT PK_WFS_T_WORKREMINDER PRIMARY KEY  (WORK_ID, OBJECT_ID, STEP, REMINDER_ID) USING INDEX ) " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_T_WORKAPPROVALRES
        if (!table_exists('WFS_T_WORKAPPROVALRES')) {
            executeSQL( 
            " CREATE TABLE WFS_T_WORKAPPROVALRES " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID                         VARCHAR2(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       VARCHAR2(100)  NOT NULL," + "\n" + 
            "         LVL                             DECIMAL(10,0)  NOT NULL," + "\n" + 
            "         ROUTE_ID                        VARCHAR2(100)  ," + "\n" + 
            "         USR_GRP_ID                      VARCHAR2(100)  ," + "\n" + 
            "         USR_ID                          VARCHAR2(100)  NOT NULL," + "\n" + 
            "         CREATED_DATE                    DATE           ," + "\n" + 
            "         CREATED_BY                      VARCHAR2(50)   ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR2(50)   ," + "\n" + 
            "         UPDATED_DATE                    DATE           ," + "\n" + 
            "         UPDATED_BY                      VARCHAR2(50)   ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR2(50)   ," + "\n" + 
            "         MODIFY_COUNT                    NUMBER(10)      " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_T_WORKAPPROVALRES " + "\n" + 
            "         ADD ( CONSTRAINT PK_WFS_T_WORKAPPROVALRES PRIMARY KEY  (WORK_ID, OBJECT_ID, LVL, USR_ID) USING INDEX ) " + "\n" + 
            "");
        }
    }
    if ( TALON.getDbConfig().isMy() ) {

        //--------------------------------------
        //[変更]WFS_M_CONTROL
        if (!field_exists('WFS_M_AUTH','SYONIN_PTN')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_AUTH  " + 
            "ADD COLUMN SYONIN_PTN VARCHAR(20) NULL " + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_M_CONTROL
        if (!field_exists('WFS_M_CONTROL','APPROVAL_FLG')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_CONTROL " + 
            "CHANGE COLUMN MAIL_TEXT_KESSAI MAIL_TEXT_KESSAI TEXT NULL DEFAULT NULL , " + 
            "CHANGE COLUMN MAIL_TEXT_SINSEI MAIL_TEXT_SINSEI TEXT NULL DEFAULT NULL , " + 
            "CHANGE COLUMN MAIL_TEXT_SYONIN MAIL_TEXT_SYONIN TEXT NULL DEFAULT NULL , " + 
            "CHANGE COLUMN MAIL_TEXT_HININ  MAIL_TEXT_HININ  TEXT NULL DEFAULT NULL , " + 
            "ADD COLUMN APPROVAL_FLG       VARCHAR(20)   NULL  , " + 
            "ADD COLUMN ROUTE_SET_KBN      VARCHAR(50)   NULL  , " + 
            "ADD COLUMN ROUTE_STRUCT_ID    VARCHAR(50)   NULL  , " + 
            "ADD COLUMN MAIL_TITLE_HININ2  VARCHAR(100)  NULL  , " + 
            "ADD COLUMN MAIL_TEXT_HININ2   TEXT NULL  , " + 
            "ADD COLUMN MAIL_TITLE_SAISOKU VARCHAR(100)  NULL  , " + 
            "ADD COLUMN MAIL_TEXT_SAISOKU  TEXT NULL  , " + 
            "ADD COLUMN CATEGORY_ID        VARCHAR(50)   NULL   " + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_M_ROUTE_HED
        if (!field_exists('WFS_M_ROUTE_HED','PARAM_FM')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_ROUTE_HED  " + 
            "ADD COLUMN PARAM_FM      VARCHAR(50)  NULL  , " + 
            "ADD COLUMN PARAM_VAL     VARCHAR(100) NULL  , " + 
            "ADD COLUMN PARAM_TP      VARCHAR(50)  NULL  , " + 
            "ADD COLUMN END_SEND_MAIL VARCHAR(100) NULL  , " + 
            "ADD COLUMN DEL_FLG       VARCHAR(10)  NULL    " + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_STRUCT_HED
        if (!table_exists('WFS_M_STRUCT_HED')) {
            executeSQL( 
            " CREATE TABLE WFS_M_STRUCT_HED " + "\n" + 
            "     (" + "\n" + 
            "         ID                              VARCHAR(50)  NOT NULL," + "\n" + 
            "         TITLE                           VARCHAR(100) ," + "\n" + 
            "         CREATED_DATE                    DATETIME     ," + "\n" + 
            "         CREATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME     ," + "\n" + 
            "         UPDATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    BIGINT(10)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_STRUCT_HED " + "\n" + 
            "         ADD CONSTRAINT  PRIMARY KEY  (ID)" + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_STRUCT_DTL
        if (!table_exists('WFS_M_STRUCT_DTL')) {
            executeSQL( 
            " CREATE TABLE WFS_M_STRUCT_DTL " + "\n" + 
            "     (" + "\n" + 
            "         ID                              VARCHAR(50)  NOT NULL," + "\n" + 
            "         SEQ                             INT(10)      NOT NULL," + "\n" + 
            "         CHILD_ID                        VARCHAR(50)  ," + "\n" + 
            "         OYA_ID                          VARCHAR(50)  ," + "\n" + 
            "         BOTTOM_FLG                      VARCHAR(10)  ," + "\n" + 
            "         SYONIN_PTN                      VARCHAR(20)  ," + "\n" + 
            "         CREATED_DATE                    DATETIME     ," + "\n" + 
            "         CREATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME     ," + "\n" + 
            "         UPDATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    BIGINT(10)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_STRUCT_DTL " + "\n" + 
            "         ADD CONSTRAINT  PRIMARY KEY  (ID, SEQ)" + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STRUCT_TEMP
        if (!table_exists('WFS_W_STRUCT_TEMP')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STRUCT_TEMP " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          VARCHAR(50)  NOT NULL," + "\n" + 
            "         ID                              VARCHAR(50)  ," + "\n" + 
            "         SEQ                             INT(10)      NOT NULL," + "\n" + 
            "         CHILD_ID                        VARCHAR(50)  ," + "\n" + 
            "         OYA_ID                          VARCHAR(50)  ," + "\n" + 
            "         BOTTOM_FLG                      VARCHAR(10)  ," + "\n" + 
            "         SYONIN_PTN                      VARCHAR(20)  ," + "\n" + 
            "         CREATED_DATE                    DATETIME     ," + "\n" + 
            "         CREATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME     ," + "\n" + 
            "         UPDATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    BIGINT(10)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STRUCT_TEMP " + "\n" + 
            "         ADD CONSTRAINT  PRIMARY KEY  (JOB_ID, SEQ)" + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STRUCT_LIST
        if (!table_exists('WFS_W_STRUCT_LIST')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STRUCT_LIST " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          VARCHAR(50)  NOT NULL," + "\n" + 
            "         ID                              VARCHAR(50)  ," + "\n" + 
            "         SEQ                             INT(10)      NOT NULL," + "\n" + 
            "         SORT                            VARCHAR(50)  ," + "\n" + 
            "         LVL                             VARCHAR(10)  ," + "\n" + 
            "         OYA_ID                          VARCHAR(50)  ," + "\n" + 
            "         CHILD_ID                        VARCHAR(50)  ," + "\n" + 
            "         SYONIN_PTN                      VARCHAR(20)  ," + "\n" + 
            "         CREATED_DATE                    DATETIME     ," + "\n" + 
            "         CREATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME     ," + "\n" + 
            "         UPDATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    BIGINT(10)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STRUCT_LIST " + "\n" + 
            "         ADD CONSTRAINT  PRIMARY KEY  (JOB_ID, SEQ)" + "\n" + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_T_WORKFLOW
        if (!field_exists('WFS_T_WORKFLOW','SHONIN_ID')) { 
            executeSQL( 
            "ALTER TABLE WFS_T_WORKFLOW  " + 
            "ADD COLUMN SHONIN_ID      VARCHAR(100)  NULL  , " + 
            "ADD COLUMN ACTIVE_FLG     VARCHAR(20)   NULL  , " + 
            "ADD COLUMN HOLD_FLG       VARCHAR(20)   NULL    " + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STAT_LIST
        if (!table_exists('WFS_W_STAT_LIST')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STAT_LIST " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID   VARCHAR(100) NOT NULL  ," + "\n" + 
            "         OBJECT_ID VARCHAR(100) NOT NULL  ," + "\n" + 
            "         LVL01_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL01_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL01_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL02_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL02_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL02_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL03_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL03_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL03_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL04_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL04_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL04_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL05_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL05_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL05_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL06_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL06_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL06_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL07_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL07_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL07_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL08_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL08_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL08_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL09_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL09_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL09_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL10_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL10_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL10_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL11_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL11_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL11_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL12_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL12_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL12_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL13_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL13_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL13_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL14_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL14_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL14_US  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL15_NM  VARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL15_DT  DATETIME     DEFAULT NULL  ," + "\n" + 
            "         LVL15_US  VARCHAR(100) DEFAULT NULL   " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STAT_LIST " + "\n" + 
            "         ADD CONSTRAINT  PRIMARY KEY  (WORK_ID, OBJECT_ID)" + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_USR_DAIRI
        if (!table_exists('WFS_M_USR_DAIRI')) {
            executeSQL( 
            " CREATE TABLE WFS_M_USR_DAIRI " + "\n" + 
            "     (" + "\n" + 
            "         USR_ID                          VARCHAR(100)  NOT NULL," + "\n" + 
            "         DAIRI_USR_ID                    VARCHAR(100)  NOT NULL," + "\n" + 
            "         SHINSEI_FLG                     VARCHAR(10)  ," + "\n" + 
            "         SHONIN_FLG                      VARCHAR(10)  ," + "\n" + 
            "         YUKO_KBN                        VARCHAR(10)  ," + "\n" + 
            "         CREATED_DATE                    DATETIME     ," + "\n" + 
            "         CREATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME     ," + "\n" + 
            "         UPDATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    BIGINT(10)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_USR_DAIRI " + "\n" + 
            "         ADD CONSTRAINT  PRIMARY KEY  (USR_ID, DAIRI_USR_ID)" + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_T_WORKREMINDER
        if (!table_exists('WFS_T_WORKREMINDER')) {
            executeSQL( 
            " CREATE TABLE WFS_T_WORKREMINDER " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID                         VARCHAR(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       VARCHAR(100)  NOT NULL," + "\n" + 
            "         STEP                            DECIMAL(10,0) NOT NULL," + "\n" + 
            "         REMINDER_ID                     VARCHAR(100)  NOT NULL," + "\n" + 
            "         ROUTE_ID                        VARCHAR(100)   ," + "\n" + 
            "         LVL                             DECIMAL(10,0)  ," + "\n" + 
            "         RES_MEMO                        VARCHAR(4000)  ," + "\n" + 
            "         SEND_ADDRESS                    VARCHAR(500)   ," + "\n" + 
            "         SEND_TITLE                      VARCHAR(500)   ," + "\n" + 
            "         SEND_TEXT                       VARCHAR(4000)  ," + "\n" + 
            "         CREATED_DATE                    DATETIME     ," + "\n" + 
            "         CREATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME     ," + "\n" + 
            "         UPDATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    BIGINT(10)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_T_WORKREMINDER " + "\n" + 
            "         ADD CONSTRAINT  PRIMARY KEY  (WORK_ID, OBJECT_ID, STEP, REMINDER_ID)" + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_T_WORKAPPROVALRES
        if (!table_exists('WFS_T_WORKAPPROVALRES')) {
            executeSQL( 
            " CREATE TABLE WFS_T_WORKAPPROVALRES " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID                         VARCHAR(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       VARCHAR(100)  NOT NULL," + "\n" + 
            "         LVL                             DECIMAL(10,0) NOT NULL," + "\n" + 
            "         ROUTE_ID                        VARCHAR(100)  ," + "\n" + 
            "         USR_GRP_ID                      VARCHAR(100)  ," + "\n" + 
            "         USR_ID                          VARCHAR(100)  NOT NULL," + "\n" + 
            "         CREATED_DATE                    DATETIME     ," + "\n" + 
            "         CREATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME     ," + "\n" + 
            "         UPDATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    BIGINT(10)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_T_WORKAPPROVALRES " + "\n" + 
            "         ADD CONSTRAINT  PRIMARY KEY  (WORK_ID, OBJECT_ID, LVL, USR_ID)" + "\n" + 
            "");
        }
    };
    if ( TALON.getDbConfig().isMssql() ) {

        //--------------------------------------
        //[変更]WFS_M_CONTROL
        if (!field_exists('WFS_M_AUTH','SYONIN_PTN')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_AUTH ADD " + 
            "SYONIN_PTN         NVARCHAR(20) NULL " + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_M_CONTROL
        if (!field_exists('WFS_M_CONTROL','APPROVAL_FLG')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_CONTROL ALTER COLUMN  MAIL_TEXT_KESSAI   NVARCHAR(3000) ; " + 
            "");
            executeSQL( 
            "ALTER TABLE WFS_M_CONTROL ALTER COLUMN  MAIL_TEXT_SINSEI   NVARCHAR(3000) ; " + 
            "");
            executeSQL( 
            "ALTER TABLE WFS_M_CONTROL ALTER COLUMN  MAIL_TEXT_SYONIN   NVARCHAR(3000) ; " + 
            "");
            executeSQL( 
            "ALTER TABLE WFS_M_CONTROL ALTER COLUMN  MAIL_TEXT_HININ   NVARCHAR(3000) ; " + 
            "");
            executeSQL( 
            "ALTER TABLE WFS_M_CONTROL ADD " + 
            "APPROVAL_FLG       NVARCHAR(20)   NULL  , " + 
            "ROUTE_SET_KBN      NVARCHAR(50)   NULL  , " + 
            "ROUTE_STRUCT_ID    NVARCHAR(50)   NULL  , " + 
            "MAIL_TITLE_HININ2  NVARCHAR(100)  NULL  , " + 
            "MAIL_TEXT_HININ2   NVARCHAR(3000) NULL  , " + 
            "MAIL_TITLE_SAISOKU NVARCHAR(100)  NULL  , " + 
            "MAIL_TEXT_SAISOKU  NVARCHAR(3000) NULL  , " + 
            "CATEGORY_ID        NVARCHAR(50)   NULL   " + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_M_ROUTE_HED
        if (!field_exists('WFS_M_ROUTE_HED','PARAM_FM')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_ROUTE_HED ADD " + 
            "PARAM_FM           NVARCHAR(50)  NULL  , " + 
            "PARAM_VAL          NVARCHAR(100) NULL  , " + 
            "PARAM_TP           NVARCHAR(50)  NULL  , " + 
            "END_SEND_MAIL      NVARCHAR(100) NULL  , " + 
            "DEL_FLG            NVARCHAR(10)  NULL    " + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_STRUCT_HED
        if (!table_exists('WFS_M_STRUCT_HED')) {
            executeSQL( 
            " CREATE TABLE WFS_M_STRUCT_HED " + "\n" + 
            "     (" + "\n" + 
            "         ID                              NVARCHAR(50)  NOT NULL," + "\n" + 
            "         TITLE                           NVARCHAR(100) ," + "\n" + 
            "         CREATED_DATE                    DATETIME      ," + "\n" + 
            "         CREATED_BY                      NVARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  NVARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME      ," + "\n" + 
            "         UPDATED_BY                      NVARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  NVARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    NUMERIC(10)     " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_STRUCT_HED " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_M_STRUCT_HED PRIMARY KEY NONCLUSTERED (ID)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_STRUCT_DTL
        if (!table_exists('WFS_M_STRUCT_DTL')) {
            executeSQL( 
            " CREATE TABLE WFS_M_STRUCT_DTL " + "\n" + 
            "     (" + "\n" + 
            "         ID                              NVARCHAR(50)  NOT NULL," + "\n" + 
            "         SEQ                             NUMERIC(10)   NOT NULL," + "\n" + 
            "         CHILD_ID                        NVARCHAR(50)  ," + "\n" + 
            "         OYA_ID                          NVARCHAR(50)  ," + "\n" + 
            "         BOTTOM_FLG                      NVARCHAR(10)  ," + "\n" + 
            "         SYONIN_PTN                      NVARCHAR(20)  ," + "\n" + 
            "         CREATED_DATE                    DATETIME      ," + "\n" + 
            "         CREATED_BY                      NVARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  NVARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME      ," + "\n" + 
            "         UPDATED_BY                      NVARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  NVARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    NUMERIC(10)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_STRUCT_DTL " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_M_STRUCT_DTL PRIMARY KEY NONCLUSTERED (ID, SEQ)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STRUCT_TEMP
        if (!table_exists('WFS_W_STRUCT_TEMP')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STRUCT_TEMP " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          NVARCHAR(50)  NOT NULL," + "\n" + 
            "         ID                              NVARCHAR(50)  ," + "\n" + 
            "         SEQ                             NUMERIC(10)   NOT NULL," + "\n" + 
            "         CHILD_ID                        NVARCHAR(50)  ," + "\n" + 
            "         OYA_ID                          NVARCHAR(50)  ," + "\n" + 
            "         BOTTOM_FLG                      NVARCHAR(10)  ," + "\n" + 
            "         SYONIN_PTN                      NVARCHAR(20)  ," + "\n" + 
            "         CREATED_DATE                    DATETIME      ," + "\n" + 
            "         CREATED_BY                      NVARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  NVARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME      ," + "\n" + 
            "         UPDATED_BY                      NVARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  NVARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    NUMERIC(10)     " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STRUCT_TEMP " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_W_STRUCT_TEMP PRIMARY KEY NONCLUSTERED (JOB_ID, SEQ)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STRUCT_LIST
        if (!table_exists('WFS_W_STRUCT_LIST')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STRUCT_LIST " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          NVARCHAR(50)  NOT NULL," + "\n" + 
            "         ID                              NVARCHAR(50)  ," + "\n" + 
            "         SEQ                             NUMERIC(10)   NOT NULL," + "\n" + 
            "         SORT                            NVARCHAR(50)  ," + "\n" + 
            "         LVL                             NVARCHAR(10)  ," + "\n" + 
            "         OYA_ID                          NVARCHAR(50)  ," + "\n" + 
            "         CHILD_ID                        NVARCHAR(50)  ," + "\n" + 
            "         SYONIN_PTN                      NVARCHAR(20)  ," + "\n" + 
            "         CREATED_DATE                    DATETIME      ," + "\n" + 
            "         CREATED_BY                      NVARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  NVARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME      ," + "\n" + 
            "         UPDATED_BY                      NVARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  NVARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    NUMERIC(10)     " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STRUCT_LIST " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_W_STRUCT_LIST PRIMARY KEY NONCLUSTERED (JOB_ID, SEQ)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_T_WORKFLOW
        if (!field_exists('WFS_T_WORKFLOW','SHONIN_ID')) { 
            executeSQL( 
            "ALTER TABLE WFS_T_WORKFLOW ADD " + 
            "SHONIN_ID      NVARCHAR(100)  NULL   , " + 
            "ACTIVE_FLG     NVARCHAR(20)   NULL   , " + 
            "HOLD_FLG       NVARCHAR(20)   NULL     " + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STAT_LIST
        if (!table_exists('WFS_W_STAT_LIST')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STAT_LIST " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID   NVARCHAR(100) NOT NULL  ," + "\n" + 
            "         OBJECT_ID NVARCHAR(100) NOT NULL  ," + "\n" + 
            "         LVL01_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL01_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL01_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL02_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL02_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL02_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL03_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL03_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL03_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL04_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL04_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL04_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL05_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL05_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL05_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL06_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL06_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL06_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL07_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL07_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL07_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL08_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL08_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL08_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL09_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL09_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL09_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL10_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL10_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL10_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL11_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL11_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL11_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL12_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL12_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL12_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL13_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL13_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL13_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL14_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL14_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL14_US  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL15_NM  NVARCHAR(100) DEFAULT NULL  ," + "\n" + 
            "         LVL15_DT  DATETIME      DEFAULT NULL  ," + "\n" + 
            "         LVL15_US  NVARCHAR(100) DEFAULT NULL   " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STAT_LIST " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_W_STAT_LIST PRIMARY KEY NONCLUSTERED (WORK_ID, OBJECT_ID)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_USR_DAIRI
        if (!table_exists('WFS_M_USR_DAIRI')) {
            executeSQL( 
            " CREATE TABLE WFS_M_USR_DAIRI " + "\n" + 
            "     (" + "\n" + 
            "         USR_ID                          NVARCHAR(100)  NOT NULL," + "\n" + 
            "         DAIRI_USR_ID                    NVARCHAR(100)  NOT NULL," + "\n" + 
            "         SHINSEI_FLG                     NVARCHAR(10)  ," + "\n" + 
            "         SHONIN_FLG                      NVARCHAR(10)  ," + "\n" + 
            "         YUKO_KBN                        NVARCHAR(10)  ," + "\n" + 
            "         CREATED_DATE                    DATETIME      ," + "\n" + 
            "         CREATED_BY                      NVARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  NVARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME      ," + "\n" + 
            "         UPDATED_BY                      NVARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  NVARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    NUMERIC(10)     " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_USR_DAIRI " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_M_USR_DAIRI PRIMARY KEY NONCLUSTERED (USR_ID, DAIRI_USR_ID)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_T_WORKREMINDER
        if (!table_exists('WFS_T_WORKREMINDER')) {
            executeSQL( 
            " CREATE TABLE WFS_T_WORKREMINDER " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID                         NVARCHAR(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       NVARCHAR(100)  NOT NULL," + "\n" + 
            "         STEP                            NUMERIC(10,0)  NOT NULL," + "\n" + 
            "         REMINDER_ID                     NVARCHAR(100)  NOT NULL," + "\n" + 
            "         ROUTE_ID                        NVARCHAR(100)  ," + "\n" + 
            "         LVL                             NUMERIC(10,0)  ," + "\n" + 
            "         RES_MEMO                        NVARCHAR(4000) ," + "\n" + 
            "         SEND_ADDRESS                    NVARCHAR(500)  ," + "\n" + 
            "         SEND_TITLE                      NVARCHAR(500)  ," + "\n" + 
            "         SEND_TEXT                       NVARCHAR(4000) ," + "\n" + 
            "         CREATED_DATE                    DATETIME       ," + "\n" + 
            "         CREATED_BY                      NVARCHAR(50)   ," + "\n" + 
            "         CREATED_PRG_NM                  NVARCHAR(50)   ," + "\n" + 
            "         UPDATED_DATE                    DATETIME       ," + "\n" + 
            "         UPDATED_BY                      NVARCHAR(50)   ," + "\n" + 
            "         UPDATED_PRG_NM                  NVARCHAR(50)   ," + "\n" + 
            "         MODIFY_COUNT                    NUMERIC(10)     " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_T_WORKREMINDER " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_T_WORKREMINDER PRIMARY KEY NONCLUSTERED (WORK_ID, OBJECT_ID, STEP, REMINDER_ID)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_T_WORKAPPROVALRES
        if (!table_exists('WFS_T_WORKAPPROVALRES')) {
            executeSQL( 
            " CREATE TABLE WFS_T_WORKAPPROVALRES " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID                         NVARCHAR(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       NVARCHAR(100)  NOT NULL," + "\n" + 
            "         LVL                             NUMERIC(10,0)  NOT NULL," + "\n" + 
            "         ROUTE_ID                        NVARCHAR(100)  ," + "\n" + 
            "         USR_GRP_ID                      NVARCHAR(100)  ," + "\n" + 
            "         USR_ID                          NVARCHAR(100)  NOT NULL," + "\n" + 
            "         CREATED_DATE                    DATETIME       ," + "\n" + 
            "         CREATED_BY                      NVARCHAR(50)   ," + "\n" + 
            "         CREATED_PRG_NM                  NVARCHAR(50)   ," + "\n" + 
            "         UPDATED_DATE                    DATETIME       ," + "\n" + 
            "         UPDATED_BY                      NVARCHAR(50)   ," + "\n" + 
            "         UPDATED_PRG_NM                  NVARCHAR(50)   ," + "\n" + 
            "         MODIFY_COUNT                    NUMERIC(10)      " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_T_WORKAPPROVALRES " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_T_WORKAPPROVALRES PRIMARY KEY NONCLUSTERED (WORK_ID, OBJECT_ID, LVL, USR_ID)  " + "\n" + 
            "");
        }

    };
    if ( TALON.getDbConfig().isPostgres() ) {

        //--------------------------------------
        //[変更]WFS_M_CONTROL
        if (!field_exists('WFS_M_AUTH','SYONIN_PTN')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_AUTH  " + 
            "ADD SYONIN_PTN         character varying(20) NULL " + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_M_CONTROL
        if (!field_exists('WFS_M_CONTROL','APPROVAL_FLG')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_CONTROL  " + 
            "ALTER COLUMN  MAIL_TEXT_KESSAI   TYPE character varying(3000)  , " + 
            "ALTER COLUMN  MAIL_TEXT_SINSEI   TYPE character varying(3000)  , " + 
            "ALTER COLUMN  MAIL_TEXT_SYONIN   TYPE character varying(3000)  , " + 
            "ALTER COLUMN  MAIL_TEXT_HININ    TYPE character varying(3000)    " + 
            "");
            executeSQL( 
            "ALTER TABLE WFS_M_CONTROL  " + 
            "ADD  APPROVAL_FLG       character varying(20)   NULL  , " + 
            "ADD  ROUTE_SET_KBN      character varying(50)   NULL  , " + 
            "ADD  ROUTE_STRUCT_ID    character varying(50)   NULL  , " + 
            "ADD  MAIL_TITLE_HININ2  character varying(100)  NULL  , " + 
            "ADD  MAIL_TEXT_HININ2   character varying(3000) NULL  , " + 
            "ADD  MAIL_TITLE_SAISOKU character varying(100)  NULL  , " + 
            "ADD  MAIL_TEXT_SAISOKU  character varying(3000) NULL  , " + 
            "ADD  CATEGORY_ID        character varying(50)   NULL   " + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_M_ROUTE_HED
        if (!field_exists('WFS_M_ROUTE_HED','PARAM_FM')) { 
            executeSQL( 
            "ALTER TABLE WFS_M_ROUTE_HED  " + 
            "ADD  PARAM_FM           character varying(50)  NULL  , " + 
            "ADD  PARAM_VAL          character varying(100) NULL  , " + 
            "ADD  PARAM_TP           character varying(50)  NULL  , " + 
            "ADD  END_SEND_MAIL      character varying(100) NULL  , " + 
            "ADD  DEL_FLG            character varying(10)  NULL    " + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_STRUCT_HED
        if (!table_exists('WFS_M_STRUCT_HED')) {
            executeSQL( 
            " CREATE TABLE WFS_M_STRUCT_HED " + "\n" + 
            "     (" + "\n" + 
            "         ID                              character varying(50)  NOT NULL," + "\n" + 
            "         TITLE                           character varying(100) ," + "\n" + 
            "         CREATED_DATE                    timestamp          ," + "\n" + 
            "         CREATED_BY                      character varying(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  character varying(50)  ," + "\n" + 
            "         UPDATED_DATE                    timestamp          ," + "\n" + 
            "         UPDATED_BY                      character varying(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  character varying(50)  ," + "\n" + 
            "         MODIFY_COUNT                    numeric(10,0)   " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_STRUCT_HED " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_M_STRUCT_HED PRIMARY KEY  (ID) " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_STRUCT_DTL
        if (!table_exists('WFS_M_STRUCT_DTL')) {
            executeSQL( 
            " CREATE TABLE WFS_M_STRUCT_DTL " + "\n" + 
            "     (" + "\n" + 
            "         ID                              character varying(50)  NOT NULL," + "\n" + 
            "         SEQ                             numeric(10,0)          NOT NULL," + "\n" + 
            "         CHILD_ID                        character varying(50)  ," + "\n" + 
            "         OYA_ID                          character varying(50)  ," + "\n" + 
            "         BOTTOM_FLG                      character varying(10)  ," + "\n" + 
            "         SYONIN_PTN                      character varying(20)  ," + "\n" + 
            "         CREATED_DATE                    timestamp          ," + "\n" + 
            "         CREATED_BY                      character varying(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  character varying(50)  ," + "\n" + 
            "         UPDATED_DATE                    timestamp          ," + "\n" + 
            "         UPDATED_BY                      character varying(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  character varying(50)  ," + "\n" + 
            "         MODIFY_COUNT                    numeric(10,0)  " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_STRUCT_DTL " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_M_STRUCT_DTL PRIMARY KEY  (ID, SEQ)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STRUCT_TEMP
        if (!table_exists('WFS_W_STRUCT_TEMP')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STRUCT_TEMP " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          character varying(50)  NOT NULL," + "\n" + 
            "         ID                              character varying(50)  ," + "\n" + 
            "         SEQ                             numeric(10,0)          NOT NULL," + "\n" + 
            "         CHILD_ID                        character varying(50)  ," + "\n" + 
            "         OYA_ID                          character varying(50)  ," + "\n" + 
            "         BOTTOM_FLG                      character varying(10)  ," + "\n" + 
            "         SYONIN_PTN                      character varying(20)  ," + "\n" + 
            "         CREATED_DATE                    timestamp          ," + "\n" + 
            "         CREATED_BY                      character varying(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  character varying(50)  ," + "\n" + 
            "         UPDATED_DATE                    timestamp          ," + "\n" + 
            "         UPDATED_BY                      character varying(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  character varying(50)  ," + "\n" + 
            "         MODIFY_COUNT                    numeric(10,0)   " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STRUCT_TEMP " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_W_STRUCT_TEMP PRIMARY KEY  (JOB_ID, SEQ)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STRUCT_LIST
        if (!table_exists('WFS_W_STRUCT_LIST')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STRUCT_LIST " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          character varying(50)  NOT NULL," + "\n" + 
            "         ID                              character varying(50)  ," + "\n" + 
            "         SEQ                             numeric(10,0)          NOT NULL," + "\n" + 
            "         SORT                            character varying(50)  ," + "\n" + 
            "         LVL                             character varying(10)  ," + "\n" + 
            "         OYA_ID                          character varying(50)  ," + "\n" + 
            "         CHILD_ID                        character varying(50)  ," + "\n" + 
            "         SYONIN_PTN                      character varying(20)  ," + "\n" + 
            "         CREATED_DATE                    timestamp          ," + "\n" + 
            "         CREATED_BY                      character varying(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  character varying(50)  ," + "\n" + 
            "         UPDATED_DATE                    timestamp          ," + "\n" + 
            "         UPDATED_BY                      character varying(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  character varying(50)  ," + "\n" + 
            "         MODIFY_COUNT                    numeric(10,0)   " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STRUCT_LIST " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_W_STRUCT_LIST PRIMARY KEY  (JOB_ID, SEQ)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[変更]WFS_T_WORKFLOW
        if (!field_exists('WFS_T_WORKFLOW','SHONIN_ID')) { 
            executeSQL( 
            "ALTER TABLE WFS_T_WORKFLOW  " + 
            "ADD  SHONIN_ID      character varying(100)  NULL   , " + 
            "ADD  ACTIVE_FLG     character varying(20)   NULL   , " + 
            "ADD  HOLD_FLG       character varying(20)   NULL     " + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_STAT_LIST
        if (!table_exists('WFS_W_STAT_LIST')) {
            executeSQL( 
            " CREATE TABLE WFS_W_STAT_LIST " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID   character varying(100) NOT NULL  ," + "\n" + 
            "         OBJECT_ID character varying(100) NOT NULL  ," + "\n" + 
            "         LVL01_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL01_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL01_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL02_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL02_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL02_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL03_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL03_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL03_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL04_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL04_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL04_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL05_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL05_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL05_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL06_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL06_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL06_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL07_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL07_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL07_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL08_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL08_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL08_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL09_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL09_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL09_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL10_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL10_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL10_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL11_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL11_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL11_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL12_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL12_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL12_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL13_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL13_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL13_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL14_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL14_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL14_US  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL15_NM  character varying(100) DEFAULT NULL  ," + "\n" + 
            "         LVL15_DT  timestamp          DEFAULT NULL  ," + "\n" + 
            "         LVL15_US  character varying(100) DEFAULT NULL   " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_STAT_LIST " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_W_STAT_LIST PRIMARY KEY  (WORK_ID, OBJECT_ID)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_M_USR_DAIRI
        if (!table_exists('WFS_M_USR_DAIRI')) {
            executeSQL( 
            " CREATE TABLE WFS_M_USR_DAIRI " + "\n" + 
            "     (" + "\n" + 
            "         USR_ID                          character varying(100)  NOT NULL," + "\n" + 
            "         DAIRI_USR_ID                    character varying(100)  NOT NULL," + "\n" + 
            "         SHINSEI_FLG                     character varying(10)  ," + "\n" + 
            "         SHONIN_FLG                      character varying(10)  ," + "\n" + 
            "         YUKO_KBN                        character varying(10)  ," + "\n" + 
            "         CREATED_DATE                    timestamp          ," + "\n" + 
            "         CREATED_BY                      character varying(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  character varying(50)  ," + "\n" + 
            "         UPDATED_DATE                    timestamp          ," + "\n" + 
            "         UPDATED_BY                      character varying(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  character varying(50)  ," + "\n" + 
            "         MODIFY_COUNT                    numeric(10,0)   " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_M_USR_DAIRI " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_M_USR_DAIRI PRIMARY KEY  (USR_ID, DAIRI_USR_ID)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_T_WORKREMINDER
        if (!table_exists('WFS_T_WORKREMINDER')) {
            executeSQL( 
            " CREATE TABLE WFS_T_WORKREMINDER " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID                         character varying(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       character varying(100)  NOT NULL," + "\n" + 
            "         STEP                            numeric(10,0)  NOT NULL," + "\n" + 
            "         REMINDER_ID                     character varying(100)  NOT NULL," + "\n" + 
            "         ROUTE_ID                        character varying(100)  ," + "\n" + 
            "         LVL                             numeric(10,0)  ," + "\n" + 
            "         RES_MEMO                        character varying(4000) ," + "\n" + 
            "         SEND_ADDRESS                    character varying(500)  ," + "\n" + 
            "         SEND_TITLE                      character varying(500)  ," + "\n" + 
            "         SEND_TEXT                       character varying(4000) ," + "\n" + 
            "         CREATED_DATE                    timestamp           ," + "\n" + 
            "         CREATED_BY                      character varying(50)   ," + "\n" + 
            "         CREATED_PRG_NM                  character varying(50)   ," + "\n" + 
            "         UPDATED_DATE                    timestamp           ," + "\n" + 
            "         UPDATED_BY                      character varying(50)   ," + "\n" + 
            "         UPDATED_PRG_NM                  character varying(50)   ," + "\n" + 
            "         MODIFY_COUNT                    numeric(10,0)   " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_T_WORKREMINDER " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_T_WORKREMINDER PRIMARY KEY  (WORK_ID, OBJECT_ID, STEP, REMINDER_ID)  " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_T_WORKAPPROVALRES
        if (!table_exists('WFS_T_WORKAPPROVALRES')) {
            executeSQL( 
            " CREATE TABLE WFS_T_WORKAPPROVALRES " + "\n" + 
            "     (" + "\n" + 
            "         WORK_ID                         character varying(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       character varying(100)  NOT NULL," + "\n" + 
            "         LVL                             numeric(10,0)  NOT NULL," + "\n" + 
            "         ROUTE_ID                        character varying(100)  ," + "\n" + 
            "         USR_GRP_ID                      character varying(100)  ," + "\n" + 
            "         USR_ID                          character varying(100)  NOT NULL," + "\n" + 
            "         CREATED_DATE                    timestamp           ," + "\n" + 
            "         CREATED_BY                      character varying(50)   ," + "\n" + 
            "         CREATED_PRG_NM                  character varying(50)   ," + "\n" + 
            "         UPDATED_DATE                    timestamp           ," + "\n" + 
            "         UPDATED_BY                      character varying(50)   ," + "\n" + 
            "         UPDATED_PRG_NM                  character varying(50)   ," + "\n" + 
            "         MODIFY_COUNT                    numeric(10,0)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_T_WORKAPPROVALRES " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_T_WORKAPPROVALRES PRIMARY KEY  (WORK_ID, OBJECT_ID, LVL, USR_ID)  " + "\n" + 
            "");
        }
    };

}


function exec_ver_up_patch_14_DataPatch(){

    //データパッチ処理 : バージョンアップに伴いデータ修正が必要となった際のパッチ処理
    //------------------------------

    // WFS_T_WORKFLOW の ACTIVE_FLG 
    // function patch_WORKFLOW_ACTIVE_FLG()
    //-------
    var sql = "" + 
              "SELECT WORK_ID , OBJECT_ID FROM WFS_T_WORKFLOW " + 
              "WHERE ACTIVE_FLG IS NULL " + 
              "GROUP BY WORK_ID , OBJECT_ID  ";

    var itemSelectListMain = TalonDbUtil.select( TALON.getDbConfig(), sql );

    for (var i = 0; i < itemSelectListMain.length; i++) {
        var lineDataMap = itemSelectListMain[i];

        var _WORK_ID   = getMapVal( lineDataMap , 'WORK_ID'   );
        var _OBJECT_ID = getMapVal( lineDataMap , 'OBJECT_ID' );

        //ひとまず全ACTIVE_FLGを1にセット
        var sql = "" + 
                  "UPDATE WFS_T_WORKFLOW SET ACTIVE_FLG = '1' " +
                  "WHERE WORK_ID   = '" + _WORK_ID   + "' " + 
                  " AND  OBJECT_ID = '" + _OBJECT_ID + "' ";
        TalonDbUtil.update( TALON.getDbConfig(),  sql );

        var sql = "" + 
                  "SELECT WORK_ID , OBJECT_ID , STEP , STATUS , LVL FROM WFS_T_WORKFLOW " + 
                  "WHERE WORK_ID   = '" + _WORK_ID   + "' " + 
                  " AND  OBJECT_ID = '" + _OBJECT_ID + "' " + 
                  "ORDER BY STEP ";
        var itemSelectListSub = TalonDbUtil.select( TALON.getDbConfig(), sql );

        for (var ii = 0; ii < itemSelectListSub.length; ii++) {
            var lineDataMap = itemSelectListSub[ii];

            // * var _STEP   = lineDataMap['STEP'];
            // * var _STATUS = lineDataMap['STATUS'];
            // * var _LVL    = lineDataMap['LVL'];
            var _STEP   = getMapVal( lineDataMap , 'STEP'   );
            var _STATUS = getMapVal( lineDataMap , 'STATUS' );
            var _LVL    = getMapVal( lineDataMap , 'LVL'    );

            //自分より下のSTEPで、自分のLVL以上のデータはACTIVE_FLGを0
            var sql = "" + 
                      "UPDATE WFS_T_WORKFLOW SET ACTIVE_FLG = '0' " +
                      "WHERE WORK_ID   = '" + _WORK_ID   + "' " + 
                      "  AND OBJECT_ID = '" + _OBJECT_ID + "' " + 
                      "  AND STEP <  " + _STEP + " " +
                      "  AND LVL  >= " + _LVL  + " ";
            TalonDbUtil.update( TALON.getDbConfig(),  sql );

        }

    }


    // WFS_M_CONTROL の CATEGORY_ID (nullのデータについて99を更新)
    //
    //-------
    TalonDbUtil.update( TALON.getDbConfig(), "UPDATE WFS_M_CONTROL SET CATEGORY_ID   = '99' WHERE CATEGORY_ID   IS NULL ");
    TalonDbUtil.update( TALON.getDbConfig(), "UPDATE WFS_M_CONTROL SET APPROVAL_FLG  = '0'  WHERE APPROVAL_FLG  IS NULL ");
    TalonDbUtil.update( TALON.getDbConfig(), "UPDATE WFS_M_CONTROL SET ROUTE_SET_KBN = '0'  WHERE ROUTE_SET_KBN IS NULL ");

}

//--------------------------------------------
// Ver1.7へのバージョンアップ
//--------------------------------------------

function exec_ver_up_17( _func_chk ){

    //テーブルの追加
    exec_ver_up_17_TableModify();

    //データのパッチ（補填）
    exec_ver_up_patch_17_DataPatch();

}

function exec_ver_up_17_TableModify(){

    //テーブル変更、追加処理
    //------------------------------
    if ( TALON.getDbConfig().isOra() ) {

        //--------------------------------------
        //[新規]WFS_W_WORKFLOW
        if (!table_exists('WFS_W_WORKFLOW')) {
            executeSQL( 
            " CREATE TABLE WFS_W_WORKFLOW " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          VARCHAR2(100) NOT NULL," + "\n" + 
            "         WORK_ID                         VARCHAR2(100) NOT NULL," + "\n" + 
            "         OBJECT_ID                       VARCHAR2(100) NOT NULL," + "\n" + 
            "         STEP                            NUMBER(10,0) NOT NULL," + "\n" + 
            "         OBJECT_NM                       VARCHAR2(500)," + "\n" + 
            "         ROUTE_ID                        VARCHAR2(100)," + "\n" + 
            "         USR_ID                          VARCHAR2(100)," + "\n" + 
            "         STATUS                          VARCHAR2(20)," + "\n" + 
            "         LVL                             NUMBER(10,0)," + "\n" + 
            "         APP_MEMO                        VARCHAR2(4000)," + "\n" + 
            "         RES_MEMO                        VARCHAR2(4000)," + "\n" + 
            "         REJECT_KBN                      VARCHAR2(20)," + "\n" + 
            "         CURENT_FLG                      VARCHAR2(20)," + "\n" + 
            "         CREATED_DATE                    DATE," + "\n" + 
            "         CREATED_BY                      VARCHAR2(50)," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR2(50)," + "\n" + 
            "         UPDATED_DATE                    DATE," + "\n" + 
            "         UPDATED_BY                      VARCHAR2(50)," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR2(50)," + "\n" + 
            "         MODIFY_COUNT                    NUMBER(10,0)," + "\n" + 
            "         SHONIN_ID                       VARCHAR2(100)," + "\n" + 
            "         ACTIVE_FLG                      VARCHAR2(20)," + "\n" + 
            "         HOLD_FLG                        VARCHAR2(20) " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_WORKFLOW " + "\n" + 
            "         ADD(CONSTRAINT PK_WFS_W_WORKFLOW PRIMARY KEY (JOB_ID) USING INDEX)" + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_WORKAPPROVALRES
        if (!table_exists('WFS_W_WORKAPPROVALRES')) {
            executeSQL( 
            " CREATE TABLE WFS_W_WORKAPPROVALRES " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          VARCHAR2(100)  NOT NULL," + "\n" + 
            "         WORK_ID                         VARCHAR2(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       VARCHAR2(100)  NOT NULL," + "\n" + 
            "         LVL                             DECIMAL(10,0)  NOT NULL," + "\n" + 
            "         ROUTE_ID                        VARCHAR2(100)  ," + "\n" + 
            "         USR_GRP_ID                      VARCHAR2(100)  ," + "\n" + 
            "         USR_ID                          VARCHAR2(100)  NOT NULL," + "\n" + 
            "         CREATED_DATE                    DATE           ," + "\n" + 
            "         CREATED_BY                      VARCHAR2(50)   ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR2(50)   ," + "\n" + 
            "         UPDATED_DATE                    DATE           ," + "\n" + 
            "         UPDATED_BY                      VARCHAR2(50)   ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR2(50)   ," + "\n" + 
            "         MODIFY_COUNT                    NUMBER(10)      " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_WORKAPPROVALRES " + "\n" + 
            "         ADD ( CONSTRAINT PK_WFS_W_WORKAPPROVALRES PRIMARY KEY  (JOB_ID, WORK_ID, OBJECT_ID, LVL, USR_ID) USING INDEX ) " + "\n" + 
            "");
        }


    }
    if ( TALON.getDbConfig().isMy() ) {

        //--------------------------------------
        //[新規]WFS_W_WORKFLOW 
        if (!table_exists('WFS_W_WORKFLOW ')) {
            executeSQL( 
            " CREATE TABLE WFS_W_WORKFLOW " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          VARCHAR(100) NOT NULL," + "\n" + 
            "         WORK_ID                         VARCHAR(100) NOT NULL," + "\n" + 
            "         OBJECT_ID                       VARCHAR(100) NOT NULL," + "\n" + 
            "         STEP                            DECIMAL(10,0) NOT NULL," + "\n" + 
            "         OBJECT_NM                       VARCHAR(500)," + "\n" + 
            "         ROUTE_ID                        VARCHAR(100)," + "\n" + 
            "         USR_ID                          VARCHAR(100)," + "\n" + 
            "         STATUS                          VARCHAR(20)," + "\n" + 
            "         LVL                             DECIMAL(10,0)," + "\n" + 
            "         APP_MEMO                        TEXT," + "\n" + 
            "         RES_MEMO                        TEXT," + "\n" + 
            "         REJECT_KBN                      VARCHAR(20)," + "\n" + 
            "         CURENT_FLG                      VARCHAR(20)," + "\n" + 
            "         CREATED_DATE                    DATETIME," + "\n" + 
            "         CREATED_BY                      VARCHAR(50)," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR(50)," + "\n" + 
            "         UPDATED_DATE                    DATETIME," + "\n" + 
            "         UPDATED_BY                      VARCHAR(50)," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR(50)," + "\n" + 
            "         MODIFY_COUNT                    BIGINT(10)," + "\n" + 
            "         SHONIN_ID                       VARCHAR(100)," + "\n" + 
            "         ACTIVE_FLG                      VARCHAR(20)," + "\n" + 
            "         HOLD_FLG                        VARCHAR(20) " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_WORKFLOW " + "\n" + 
            "         ADD CONSTRAINT  PRIMARY KEY  (JOB_ID)" + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_WORKAPPROVALRES
        if (!table_exists('WFS_W_WORKAPPROVALRES')) {
            executeSQL( 
            " CREATE TABLE WFS_W_WORKAPPROVALRES " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          VARCHAR(100)  NOT NULL," + "\n" + 
            "         WORK_ID                         VARCHAR(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       VARCHAR(100)  NOT NULL," + "\n" + 
            "         LVL                             DECIMAL(10,0) NOT NULL," + "\n" + 
            "         ROUTE_ID                        VARCHAR(100)  ," + "\n" + 
            "         USR_GRP_ID                      VARCHAR(100)  ," + "\n" + 
            "         USR_ID                          VARCHAR(100)  NOT NULL," + "\n" + 
            "         CREATED_DATE                    DATETIME     ," + "\n" + 
            "         CREATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         CREATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         UPDATED_DATE                    DATETIME     ," + "\n" + 
            "         UPDATED_BY                      VARCHAR(50)  ," + "\n" + 
            "         UPDATED_PRG_NM                  VARCHAR(50)  ," + "\n" + 
            "         MODIFY_COUNT                    BIGINT(10)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_WORKAPPROVALRES " + "\n" + 
            "         ADD CONSTRAINT  PRIMARY KEY  (JOB_ID, WORK_ID, OBJECT_ID, LVL, USR_ID)" + "\n" + 
            "");
        }

    };
    if ( TALON.getDbConfig().isMssql() ) {

        //--------------------------------------
        //[新規]WFS_W_WORKFLOW 
        if (!table_exists('WFS_W_WORKFLOW ')) {
            executeSQL( 
            " CREATE TABLE WFS_W_WORKFLOW " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          NVARCHAR(100) NOT NULL," + "\n" + 
            "         WORK_ID                         NVARCHAR(100) NOT NULL," + "\n" + 
            "         OBJECT_ID                       NVARCHAR(100) NOT NULL," + "\n" + 
            "         STEP                            NUMERIC(10,0) NOT NULL," + "\n" + 
            "         OBJECT_NM                       NVARCHAR(500) NULL," + "\n" + 
            "         ROUTE_ID                        NVARCHAR(100) NULL," + "\n" + 
            "         USR_ID                          NVARCHAR(100) NULL," + "\n" + 
            "         STATUS                          NVARCHAR(20) NULL," + "\n" + 
            "         LVL                             NUMERIC(10,0) NULL," + "\n" + 
            "         APP_MEMO                        NVARCHAR(4000) NULL," + "\n" + 
            "         RES_MEMO                        NVARCHAR(4000) NULL," + "\n" + 
            "         REJECT_KBN                      NVARCHAR(20) NULL," + "\n" + 
            "         CURENT_FLG                      NVARCHAR(20) NULL," + "\n" + 
            "         CREATED_DATE                    DATETIME NULL," + "\n" + 
            "         CREATED_BY                      NVARCHAR(50) NULL," + "\n" + 
            "         CREATED_PRG_NM                  NVARCHAR(50) NULL," + "\n" + 
            "         UPDATED_DATE                    DATETIME NULL," + "\n" + 
            "         UPDATED_BY                      NVARCHAR(50) NULL," + "\n" + 
            "         UPDATED_PRG_NM                  NVARCHAR(50) NULL," + "\n" + 
            "         MODIFY_COUNT                    NUMERIC(10,0) NULL," + "\n" + 
            "         SHONIN_ID                       NVARCHAR(100)," + "\n" + 
            "         ACTIVE_FLG                      NVARCHAR(20)," + "\n" + 
            "         HOLD_FLG                        NVARCHAR(20) " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_WORKFLOW " + "\n" + 
            "         ADD CONSTRAINT PK_WFS_W_WORKFLOW PRIMARY KEY NONCLUSTERED (JOB_ID)" + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_WORKAPPROVALRES
        if (!table_exists('WFS_W_WORKAPPROVALRES')) {
            executeSQL( 
            " CREATE TABLE WFS_W_WORKAPPROVALRES " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          NVARCHAR(100)  NOT NULL," + "\n" + 
            "         WORK_ID                         NVARCHAR(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       NVARCHAR(100)  NOT NULL," + "\n" + 
            "         LVL                             NUMERIC(10,0)  NOT NULL," + "\n" + 
            "         ROUTE_ID                        NVARCHAR(100)  ," + "\n" + 
            "         USR_GRP_ID                      NVARCHAR(100)  ," + "\n" + 
            "         USR_ID                          NVARCHAR(100)  NOT NULL," + "\n" + 
            "         CREATED_DATE                    DATETIME       ," + "\n" + 
            "         CREATED_BY                      NVARCHAR(50)   ," + "\n" + 
            "         CREATED_PRG_NM                  NVARCHAR(50)   ," + "\n" + 
            "         UPDATED_DATE                    DATETIME       ," + "\n" + 
            "         UPDATED_BY                      NVARCHAR(50)   ," + "\n" + 
            "         UPDATED_PRG_NM                  NVARCHAR(50)   ," + "\n" + 
            "         MODIFY_COUNT                    NUMERIC(10)      " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_WORKAPPROVALRES " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_W_WORKAPPROVALRES PRIMARY KEY NONCLUSTERED (JOB_ID, WORK_ID, OBJECT_ID, LVL, USR_ID)  " + "\n" + 
            "");
        }

    };
    if ( TALON.getDbConfig().isPostgres() ) {

        //--------------------------------------
        //[新規]WFS_W_WORKFLOW
        if (!table_exists('WFS_W_WORKFLOW')) {
            executeSQL( 
            " CREATE TABLE WFS_W_WORKFLOW " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          character varying(100) NOT NULL," + "\n" + 
            "         WORK_ID                         character varying(100) NOT NULL," + "\n" + 
            "         OBJECT_ID                       character varying(100) NOT NULL," + "\n" + 
            "         STEP                            numeric(10,0) NOT NULL," + "\n" + 
            "         OBJECT_NM                       character varying(500)," + "\n" + 
            "         ROUTE_ID                        character varying(100)," + "\n" + 
            "         USR_ID                          character varying(100)," + "\n" + 
            "         STATUS                          character varying(20)," + "\n" + 
            "         LVL                             numeric(10,0)," + "\n" + 
            "         APP_MEMO                        character varying(4000)," + "\n" + 
            "         RES_MEMO                        character varying(4000)," + "\n" + 
            "         REJECT_KBN                      character varying(20)," + "\n" + 
            "         CURENT_FLG                      character varying(20)," + "\n" + 
            "         CREATED_DATE                    timestamp," + "\n" + 
            "         CREATED_BY                      character varying(50)," + "\n" + 
            "         CREATED_PRG_NM                  character varying(50)," + "\n" + 
            "         UPDATED_DATE                    timestamp," + "\n" + 
            "         UPDATED_BY                      character varying(50)," + "\n" + 
            "         UPDATED_PRG_NM                  character varying(50)," + "\n" + 
            "         MODIFY_COUNT                    numeric(10,0)," + "\n" + 
            "         SHONIN_ID                       character varying(100)," + "\n" + 
            "         ACTIVE_FLG                      character varying(20)," + "\n" + 
            "         HOLD_FLG                        character varying(20) " + "\n" + 

            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_WORKFLOW " + "\n" + 
            "         ADD CONSTRAINT PK_WFS_W_WORKFLOW PRIMARY KEY (JOB_ID) " + "\n" + 
            "");
        }

        //--------------------------------------
        //[新規]WFS_W_WORKAPPROVALRES
        if (!table_exists('WFS_W_WORKAPPROVALRES')) {
            executeSQL( 
            " CREATE TABLE WFS_W_WORKAPPROVALRES " + "\n" + 
            "     (" + "\n" + 
            "         JOB_ID                          character varying(100)  NOT NULL," + "\n" + 
            "         WORK_ID                         character varying(100)  NOT NULL," + "\n" + 
            "         OBJECT_ID                       character varying(100)  NOT NULL," + "\n" + 
            "         LVL                             numeric(10,0)  NOT NULL," + "\n" + 
            "         ROUTE_ID                        character varying(100)  ," + "\n" + 
            "         USR_GRP_ID                      character varying(100)  ," + "\n" + 
            "         USR_ID                          character varying(100)  NOT NULL," + "\n" + 
            "         CREATED_DATE                    timestamp           ," + "\n" + 
            "         CREATED_BY                      character varying(50)   ," + "\n" + 
            "         CREATED_PRG_NM                  character varying(50)   ," + "\n" + 
            "         UPDATED_DATE                    timestamp           ," + "\n" + 
            "         UPDATED_BY                      character varying(50)   ," + "\n" + 
            "         UPDATED_PRG_NM                  character varying(50)   ," + "\n" + 
            "         MODIFY_COUNT                    numeric(10,0)    " + "\n" + 
            "     )" + "\n" + 
            "");
            //--------------------
            executeSQL( 
            " ALTER TABLE WFS_W_WORKAPPROVALRES " + "\n" + 
            "         ADD  CONSTRAINT PK_WFS_W_WORKAPPROVALRES PRIMARY KEY  (JOB_ID, WORK_ID, OBJECT_ID, LVL, USR_ID)  " + "\n" + 
            "");
        }

    };

}

function exec_ver_up_patch_17_DataPatch(){

}

function exec_create_Function() {

    //≪FUNCTION DROP≫
    //--------------------
    //[FUNCTION]WFS_ALL_MAIL
    function_exists_drop('WFS_ALL_MAIL');

    //[FUNCTION]WFS_AUTH_SHINSEI
    function_exists_drop('WFS_AUTH_SHINSEI');

    //[FUNCTION]WFS_WF_EXISTS
    function_exists_drop('WFS_WF_EXISTS');

    //[FUNCTION]Ver14追加分 WFS_AUTH_MAIN
    function_exists_drop('WFS_AUTH_MAIN');

    //[FUNCTION]Ver14追加分 WFS_AUTH_SHONIN
    function_exists_drop('WFS_AUTH_SHONIN');

    //[FUNCTION]Ver14追加分 WFS_WF_STEP
    function_exists_drop('WFS_WF_STEP');

    if ( TALON.getDbConfig().isOra() ) {

            //--------------------
            //WFS_ALL_MAIL
            executeSQL( 
            "CREATE FUNCTION WFS_ALL_MAIL(  " + "\n" + 
            "      P_USR_GRP_ID IN VARCHAR2 " + "\n" + 
            "     ,P_USR_ID     IN VARCHAR2 " + "\n" + 
            "     ,P_WORK_ID    IN VARCHAR2 " + "\n" + 
            "     ,P_OBJECT_ID  IN VARCHAR2 " + "\n" + 
            "     ,P_LVL        IN DECIMAL  " + "\n" + 
            "     )  " + "\n" + 
            "RETURN VARCHAR2  " + "\n" + 
            "AS  " + "\n" + 
            "    REC VARCHAR2(4000);   " + "\n" + 
            "    TMP VARCHAR2(100);  " + "\n" + 
            "BEGIN  " + "\n" + 
            "    REC := NULL;  " + "\n" + 
            "    TMP := NULL; " + "\n" + 
            " " + "\n" + 
            "    DECLARE  " + "\n" + 
            "    CURSOR CUR_MAIL IS  " + "\n" + 
            "    SELECT  " + "\n" + 
            "        WFS_M_USR_GRP_DEPDTL.MAIL as MAIL " + "\n" + 
            "    FROM WFS_M_USR_GRP_DEPDTL   " + "\n" + 
            "    LEFT OUTER JOIN ( " + "\n" + 
            "        SELECT  " + "\n" + 
            "            COUNT(*) AS CNT  " + "\n" + 
            "        FROM WFS_T_WORKAPPROVALRES  " + "\n" + 
            "        WHERE WORK_ID   = P_WORK_ID " + "\n" + 
            "          AND OBJECT_ID = P_OBJECT_ID " + "\n" + 
            "          AND LVL       = P_LVL " + "\n" + 
            "    ) WFS_T_WORKAPPROVALRES_CNT " + "\n" + 
            "      ON 1 = 1 " + "\n" + 
            "    LEFT OUTER JOIN ( " + "\n" + 
            "        SELECT  " + "\n" + 
            "            USR_ID " + "\n" + 
            "        FROM WFS_T_WORKAPPROVALRES " + "\n" + 
            "        WHERE WORK_ID   = P_WORK_ID " + "\n" + 
            "          AND OBJECT_ID = P_OBJECT_ID " + "\n" + 
            "          AND LVL       = P_LVL " + "\n" + 
            "    ) WFS_T_WORKAPPROVALRES " + "\n" + 
            "      ON WFS_M_USR_GRP_DEPDTL.USR_ID = WFS_T_WORKAPPROVALRES.USR_ID " + "\n" + 
            "    WHERE WFS_M_USR_GRP_DEPDTL.USR_GRP_ID = P_USR_GRP_ID   " + "\n" + 
            "      AND (WFS_M_USR_GRP_DEPDTL.USR_ID = P_USR_ID OR P_USR_ID IS NULL)  " + "\n" + 
            "      AND ( " + "\n" + 
            "              WFS_T_WORKAPPROVALRES_CNT.CNT IS NULL  " + "\n" + 
            "              OR  " + "\n" + 
            "              WFS_T_WORKAPPROVALRES_CNT.CNT = 0 " + "\n" + 
            "              OR  " + "\n" + 
            "              ( " + "\n" + 
            "                  WFS_T_WORKAPPROVALRES_CNT.CNT IS NOT NULL  " + "\n" + 
            "                  AND  " + "\n" + 
            "                  WFS_M_USR_GRP_DEPDTL.USR_ID = WFS_T_WORKAPPROVALRES.USR_ID " + "\n" + 
            "              ) " + "\n" + 
            "          ); " + "\n" + 
            "   BEGIN  " + "\n" + 
            "     FOR RCD IN CUR_MAIL LOOP  " + "\n" + 
            "       IF (RCD.MAIL IS NOT NULL) THEN   " + "\n" + 
            "         IF (REC IS NULL) THEN   " + "\n" + 
            "           REC := RCD.MAIL;  " + "\n" + 
            "         ELSE  " + "\n" + 
            "           REC := REC || ',' || RCD.MAIL;  " + "\n" + 
            "         END IF;  " + "\n" + 
            "       END IF;  " + "\n" + 
            "     END LOOP;  " + "\n" + 
            "   END;  " + "\n" + 
            " " + "\n" + 
            "   RETURN REC;  " + "\n" + 
            " " + "\n" + 
            "END WFS_ALL_MAIL;  " + "\n" + 
            ""
            );


            //--------------------
            //WFS_AUTH_MAIN
            executeSQL( 
            "CREATE FUNCTION WFS_AUTH_MAIN(  " + "\n" + 
            "      P_WORK_ID  IN VARCHAR " + "\n" + 
            "     ,P_ROUTE_ID IN VARCHAR " + "\n" + 
            "     ,P_USR_ID   IN VARCHAR " + "\n" + 
            "     ,P_LVL      IN DECIMAL " + "\n" + 
            "     ,P_KBN      IN VARCHAR " + "\n" + 
            "     )  " + "\n" + 
            "RETURN VARCHAR2  " + "\n" + 
            "AS  " + "\n" + 
            "    -- P_KBN 1:申請 2:承認 " + "\n" + 
            "    REC VARCHAR2(20);  " + "\n" + 
            "BEGIN  " + "\n" + 
            "    REC := NULL; " + "\n" + 
            " " + "\n" + 
            "     SELECT    " + "\n" + 
            "     CASE    " + "\n" + 
            "      WHEN COUNT(*) = 0 THEN '0'    " + "\n" + 
            "      ELSE '1'   " + "\n" + 
            "     END STATUS INTO REC   " + "\n" + 
            "     FROM ( " + "\n" + 
            "        SELECT  " + "\n" + 
            "          WFS_M_AUTH.WORK_ID " + "\n" + 
            "         ,WFS_M_AUTH.ROUTE_ID " + "\n" + 
            "         ,WFS_M_AUTH.LVL " + "\n" + 
            "         ,WFS_M_USR_GRP_DEPDTL.USR_ID  " + "\n" + 
            "         ,'0' AS KBN  " + "\n" + 
            "         ,'' AS SEIKI_USR_ID " + "\n" + 
            "        FROM WFS_M_AUTH " + "\n" + 
            "        INNER JOIN WFS_M_USR_GRP_DEPDTL   " + "\n" + 
            "        ON WFS_M_USR_GRP_DEPDTL.USR_GRP_ID = WFS_M_AUTH.USR_GRP_ID   " + "\n" + 
            " " + "\n" + 
            "        UNION ALL  " + "\n" + 
            " " + "\n" + 
            "        SELECT  " + "\n" + 
            "          WFS_M_AUTH.WORK_ID " + "\n" + 
            "         ,WFS_M_AUTH.ROUTE_ID " + "\n" + 
            "         ,WFS_M_AUTH.LVL " + "\n" + 
            "         ,WFS_M_USR_DAIRI.DAIRI_USR_ID AS USR_ID " + "\n" + 
            "         ,'1' AS KBN  " + "\n" + 
            "         ,WFS_M_USR_DAIRI.USR_ID AS SEIKI_USR_ID " + "\n" + 
            "        FROM WFS_M_AUTH " + "\n" + 
            "        INNER JOIN WFS_M_USR_GRP_DEPDTL   " + "\n" + 
            "          ON WFS_M_AUTH.USR_GRP_ID = WFS_M_USR_GRP_DEPDTL.USR_GRP_ID " + "\n" + 
            "        INNER JOIN WFS_M_USR_DAIRI " + "\n" + 
            "          ON WFS_M_USR_GRP_DEPDTL.USR_ID = WFS_M_USR_DAIRI.USR_ID " + "\n" + 
            "         AND WFS_M_USR_DAIRI.YUKO_KBN = '1' " + "\n" + 
            "         AND WFS_M_USR_DAIRI.SHINSEI_FLG = CASE WHEN P_KBN = '1' THEN '1' ELSE '0' END  " + "\n" + 
            "         AND WFS_M_USR_DAIRI.SHONIN_FLG  = CASE WHEN P_KBN = '2' THEN '1' ELSE '0' END  " + "\n" + 
            "     ) MN   " + "\n" + 
            "     WHERE MN.WORK_ID  = P_WORK_ID   " + "\n" + 
            "       AND MN.ROUTE_ID = P_ROUTE_ID   " + "\n" + 
            "       AND MN.LVL      = P_LVL  " + "\n" + 
            "       AND MN.USR_ID   = P_USR_ID   " + "\n" + 
            "     ; " + "\n" + 
            " " + "\n" + 
            "     RETURN REC;  " + "\n" + 
            " " + "\n" + 
            " END WFS_AUTH_MAIN; " + "\n" + 
            ""
            );


            //--------------------
            //WFS_AUTH_SHINSEI
            executeSQL( 
            "CREATE FUNCTION WFS_AUTH_SHINSEI (  " + "\n" + 
            "      P_WORK_ID  VARCHAR2  " + "\n" + 
            "     ,P_ROUTE_ID VARCHAR2  " + "\n" + 
            "     ,P_USR_ID   VARCHAR2  " + "\n" + 
            ")  " + "\n" + 
            "RETURN VARCHAR2 " + "\n" + 
            "AS " + "\n" + 
            "    REC VARCHAR2(20); " + "\n" + 
            "BEGIN  " + "\n" + 
            "    REC := WFS_AUTH_MAIN(P_WORK_ID,P_ROUTE_ID,P_USR_ID,1,'1'); " + "\n" + 
            "    RETURN REC;  " + "\n" + 
            "END WFS_AUTH_SHINSEI; " + "\n" + 
            ""
            );


            //--------------------
            //WFS_AUTH_SHINSEI
            executeSQL( 
            "CREATE FUNCTION WFS_AUTH_SHONIN (  " + "\n" + 
            "      P_WORK_ID  VARCHAR2  " + "\n" + 
            "     ,P_ROUTE_ID VARCHAR2  " + "\n" + 
            "     ,P_USR_ID   VARCHAR2  " + "\n" + 
            "     ,P_LVL      DECIMAL " + "\n" + 
            ")  " + "\n" + 
            "RETURN VARCHAR2 " + "\n" + 
            "AS " + "\n" + 
            "    REC VARCHAR2(20); " + "\n" + 
            "BEGIN  " + "\n" + 
            "    REC := WFS_AUTH_MAIN(P_WORK_ID,P_ROUTE_ID,P_USR_ID,P_LVL,'2'); " + "\n" + 
            "    RETURN REC;  " + "\n" + 
            "END WFS_AUTH_SHONIN; " + "\n" + 
            ""
            );


            //--------------------
            //WFS_WF_EXISTS
            executeSQL( 
            "CREATE FUNCTION WFS_WF_EXISTS(  " + "\n" + 
            "     P_WORK_ID   VARCHAR2  " + "\n" + 
            "    ,P_OBJECT_ID VARCHAR2  " + "\n" + 
            ")  " + "\n" + 
            "RETURN VARCHAR2 " + "\n" + 
            "AS " + "\n" + 
            "    REC VARCHAR2(20); " + "\n" + 
            "BEGIN  " + "\n" + 
            "    REC := NULL;  " + "\n" + 
            " " + "\n" + 
            "    SELECT    " + "\n" + 
            "    CASE    " + "\n" + 
            "      WHEN COUNT(*) = 0 THEN '0'    " + "\n" + 
            "      ELSE '1'   " + "\n" + 
            "    END STATUS INTO REC   " + "\n" + 
            "    FROM WFS_T_WORKFLOW   " + "\n" + 
            "    WHERE WORK_ID   = P_WORK_ID   " + "\n" + 
            "      AND OBJECT_ID = P_OBJECT_ID   " + "\n" + 
            "    ;   " + "\n" + 
            " " + "\n" + 
            "    IF (REC = '1') THEN   " + "\n" + 
            "        SELECT    " + "\n" + 
            "        CASE    " + "\n" + 
            "          WHEN WFS_T_WORKFLOW.LVL = 1 AND STATUS <> '6' THEN '1'    " + "\n" + 
            "          WHEN WFS_T_WORKFLOW.LVL = 1 AND STATUS =  '6' THEN '4'    " + "\n" + 
            "          WHEN WFS_LEVEL.LVL = WFS_T_WORKFLOW.LVL AND WFS_T_WORKFLOW.STATUS = '2' THEN '3'    " + "\n" + 
            "          WHEN WFS_T_WORKFLOW.STATUS = '9' THEN '9'    " + "\n" + 
            "          ELSE '2'   " + "\n" + 
            "        END STATUS INTO REC   " + "\n" + 
            "        FROM (   " + "\n" + 
            "            SELECT   " + "\n" + 
            "             S1.WORK_ID   " + "\n" + 
            "            ,S1.OBJECT_ID   " + "\n" + 
            "            ,S1.STEP   " + "\n" + 
            "            ,S1.LVL   " + "\n" + 
            "            ,S1.STATUS   " + "\n" + 
            "            ,S1.ROUTE_ID   " + "\n" + 
            "            FROM WFS_T_WORKFLOW S1   " + "\n" + 
            "            INNER JOIN (   " + "\n" + 
            "                SELECT   " + "\n" + 
            "                  WORK_ID   " + "\n" + 
            "                 ,OBJECT_ID   " + "\n" + 
            "                 ,MAX(STEP) AS STEP   " + "\n" + 
            "                FROM WFS_T_WORKFLOW   " + "\n" + 
            "                GROUP BY    " + "\n" + 
            "                  WORK_ID   " + "\n" + 
            "                 ,OBJECT_ID   " + "\n" + 
            "            ) S2    " + "\n" + 
            "              ON S2.WORK_ID = S1.WORK_ID   " + "\n" + 
            "             AND S2.OBJECT_ID = S1.OBJECT_ID   " + "\n" + 
            "             AND S2.STEP = S1.STEP   " + "\n" + 
            "        ) WFS_T_WORKFLOW   " + "\n" + 
            "        LEFT OUTER JOIN WFS_M_CONTROL   " + "\n" + 
            "          ON WFS_M_CONTROL.WORK_ID = WFS_T_WORKFLOW.WORK_ID    " + "\n" + 
            "        LEFT OUTER JOIN ( SELECT WORK_ID, ROUTE_ID, MAX(LVL) AS LVL  FROM WFS_M_AUTH GROUP BY WORK_ID, ROUTE_ID ) WFS_LEVEL   " + "\n" + 
            "          ON WFS_LEVEL.WORK_ID    = WFS_T_WORKFLOW.WORK_ID   " + "\n" + 
            "         AND WFS_LEVEL.ROUTE_ID = WFS_T_WORKFLOW.ROUTE_ID   " + "\n" + 
            "        WHERE WFS_T_WORKFLOW.WORK_ID   = P_WORK_ID   " + "\n" + 
            "          AND WFS_T_WORKFLOW.OBJECT_ID = P_OBJECT_ID   " + "\n" + 
            "        ;   " + "\n" + 
            "    END IF;   " + "\n" + 
            " " + "\n" + 
            "    RETURN REC;  " + "\n" + 
            " " + "\n" + 
            "END WFS_WF_EXISTS; " + "\n" + 
            ""
            );


            //--------------------
            //WFS_WF_STEP
            executeSQL( 
            "CREATE FUNCTION WFS_WF_STEP (  " + "\n" + 
            "     P_WORK_ID   VARCHAR2  " + "\n" + 
            "    ,P_OBJECT_ID VARCHAR2  " + "\n" + 
            "    )  " + "\n" + 
            "RETURN DECIMAL  " + "\n" + 
            "AS  " + "\n" + 
            "    REC DECIMAL(10,0);  " + "\n" + 
            "BEGIN  " + "\n" + 
            "    REC := 0; " + "\n" + 
            " " + "\n" + 
            "    SELECT  " + "\n" + 
            "      MAX(STEP) AS STEP " + "\n" + 
            "      INTO REC " + "\n" + 
            "    FROM WFS_T_WORKFLOW " + "\n" + 
            "    WHERE WORK_ID   = P_WORK_ID   " + "\n" + 
            "      AND OBJECT_ID = P_OBJECT_ID   " + "\n" + 
            "    ; " + "\n" + 
            " " + "\n" + 
            "    RETURN REC;  " + "\n" + 
            " " + "\n" + 
            "END WFS_WF_STEP; " + "\n" + 
            ""
            );
    };
    if ( TALON.getDbConfig().isMy() ) {
            //SQLファイルで作成

    };
    if ( TALON.getDbConfig().isMssql() ) {

            //--------------------
            //WFS_ALL_MAIL
            executeSQL( 
            " CREATE FUNCTION [dbo].[WFS_ALL_MAIL](  " + "\n" + 
            "       @P_USR_GRP_ID  VARCHAR(100)  " + "\n" + 
            "      ,@P_USR_ID      VARCHAR(100)  " + "\n" + 
            "      ,@P_WORK_ID    VARCHAR(100) " + "\n" + 
            "      ,@P_OBJECT_ID  VARCHAR(100) " + "\n" + 
            "      ,@P_LVL        DECIMAL(10,0)      " + "\n" + 
            " ) RETURNS VARCHAR(4000) AS   " + "\n" + 
            " BEGIN   " + "\n" + 
            "     DECLARE @TMP VARCHAR(100)  " + "\n" + 
            "     DECLARE @REC VARCHAR(4000)  " + "\n" + 
            "   " + "\n" + 
            "     SET @REC = NULL  " + "\n" + 
            "   " + "\n" + 
            "  " + "\n" + 
            "      DECLARE CUR_MAIL CURSOR FOR   " + "\n" + 
            "      SELECT  " + "\n" + 
            "       WFS_M_USR_GRP_DEPDTL.MAIL as MAIL " + "\n" + 
            "      FROM WFS_M_USR_GRP_DEPDTL   " + "\n" + 
            "      LEFT OUTER JOIN ( " + "\n" + 
            "        SELECT  " + "\n" + 
            "          COUNT(*) AS CNT  " + "\n" + 
            "        FROM WFS_T_WORKAPPROVALRES  " + "\n" + 
            "        WHERE WORK_ID   = @P_WORK_ID " + "\n" + 
            "          AND OBJECT_ID = @P_OBJECT_ID " + "\n" + 
            "          AND LVL       = @P_LVL " + "\n" + 
            "      ) WFS_T_WORKAPPROVALRES_CNT " + "\n" + 
            "        ON 1 = 1 " + "\n" + 
            "      LEFT OUTER JOIN ( " + "\n" + 
            "        SELECT  " + "\n" + 
            "          USR_ID " + "\n" + 
            "        FROM WFS_T_WORKAPPROVALRES " + "\n" + 
            "        WHERE WORK_ID   = @P_WORK_ID " + "\n" + 
            "          AND OBJECT_ID = @P_OBJECT_ID " + "\n" + 
            "          AND LVL       = @P_LVL " + "\n" + 
            "      ) WFS_T_WORKAPPROVALRES " + "\n" + 
            "        ON WFS_M_USR_GRP_DEPDTL.USR_ID = WFS_T_WORKAPPROVALRES.USR_ID " + "\n" + 
            "       WHERE WFS_M_USR_GRP_DEPDTL.USR_GRP_ID = @P_USR_GRP_ID   " + "\n" + 
            "         AND (WFS_M_USR_GRP_DEPDTL.USR_ID = @P_USR_ID OR @P_USR_ID IS NULL)  " + "\n" + 
            "         AND ( " + "\n" + 
            "              WFS_T_WORKAPPROVALRES_CNT.CNT IS NULL  " + "\n" + 
            "              OR  " + "\n" + 
            "              WFS_T_WORKAPPROVALRES_CNT.CNT = 0 " + "\n" + 
            "              OR  " + "\n" + 
            "              (  " + "\n" + 
            "                  WFS_T_WORKAPPROVALRES_CNT.CNT IS NOT NULL  " + "\n" + 
            "                  AND  " + "\n" + 
            "                  WFS_M_USR_GRP_DEPDTL.USR_ID = WFS_T_WORKAPPROVALRES.USR_ID " + "\n" + 
            "              ) " + "\n" + 
            "         ) " + "\n" + 
            "  " + "\n" + 
            "     OPEN CUR_MAIL    " + "\n" + 
            "     " + "\n" + 
            "     FETCH NEXT FROM CUR_MAIL INTO @TMP    " + "\n" + 
            "     " + "\n" + 
            "     WHILE @@FETCH_STATUS = 0    " + "\n" + 
            "     BEGIN    " + "\n" + 
            "        IF (@TMP IS NOT NULL)   " + "\n" + 
            "        BEGIN  " + "\n" + 
            "          IF (@REC IS NOT NULL)  " + "\n" + 
            "          BEGIN   " + "\n" + 
            "             SET @REC = @REC + ',' + @TMP  " + "\n" + 
            "          END   " + "\n" + 
            "          IF (@REC IS NULL)  " + "\n" + 
            "          BEGIN   " + "\n" + 
            "             SET @REC = @TMP  " + "\n" + 
            "          END   " + "\n" + 
            "        END  " + "\n" + 
            "        FETCH NEXT FROM CUR_MAIL INTO @TMP  " + "\n" + 
            "     END     " + "\n" + 
            "     CLOSE CUR_MAIL  " + "\n" + 
            "     DEALLOCATE CUR_MAIL  " + "\n" + 
            "   " + "\n" + 
            "     RETURN @REC  " + "\n" + 
            " END " + "\n" + 
            ""
            );


            //--------------------
            //WFS_AUTH_MAIN
            executeSQL( 
            " CREATE FUNCTION [dbo].[WFS_AUTH_MAIN](  " + "\n" + 
            "      @P_WORK_ID     VARCHAR(100)  " + "\n" + 
            "     ,@P_ROUTE_ID    VARCHAR(100)  " + "\n" + 
            "     ,@P_USR_ID      VARCHAR(100)  " + "\n" + 
            "     ,@P_LVL         DECIMAL(10,0)  " + "\n" + 
            "     ,@P_KBN         VARCHAR(10)  " + "\n" + 
            " ) RETURNS VARCHAR(100) AS   " + "\n" + 
            " BEGIN   " + "\n" + 
            "     DECLARE @TMP VARCHAR(100)  " + "\n" + 
            "     DECLARE @REC VARCHAR(20)  " + "\n" + 
            "   " + "\n" + 
            "     SET @REC = NULL  " + "\n" + 
            "   " + "\n" + 
            "     SELECT    " + "\n" + 
            "     @REC =    " + "\n" + 
            "     CASE      " + "\n" + 
            "      WHEN COUNT(*) = 0 THEN '0'    " + "\n" + 
            "      ELSE '1'   " + "\n" + 
            "     END    " + "\n" + 
            "     FROM ( " + "\n" + 
            "        SELECT  " + "\n" + 
            "          WFS_M_AUTH.WORK_ID " + "\n" + 
            "         ,WFS_M_AUTH.ROUTE_ID " + "\n" + 
            "         ,WFS_M_AUTH.LVL " + "\n" + 
            "         ,WFS_M_USR_GRP_DEPDTL.USR_ID  " + "\n" + 
            "         ,'0' AS KBN  " + "\n" + 
            "         ,'' AS SEIKI_USR_ID " + "\n" + 
            "        FROM WFS_M_AUTH " + "\n" + 
            "        INNER JOIN WFS_M_USR_GRP_DEPDTL   " + "\n" + 
            "        ON WFS_M_USR_GRP_DEPDTL.USR_GRP_ID = WFS_M_AUTH.USR_GRP_ID   " + "\n" + 
            "  " + "\n" + 
            "        UNION ALL  " + "\n" + 
            "  " + "\n" + 
            "        SELECT  " + "\n" + 
            "          WFS_M_AUTH.WORK_ID " + "\n" + 
            "         ,WFS_M_AUTH.ROUTE_ID " + "\n" + 
            "         ,WFS_M_AUTH.LVL " + "\n" + 
            "         ,WFS_M_USR_DAIRI.DAIRI_USR_ID AS USR_ID " + "\n" + 
            "         ,'1' AS KBN  " + "\n" + 
            "         ,WFS_M_USR_DAIRI.USR_ID AS SEIKI_USR_ID " + "\n" + 
            "        FROM WFS_M_AUTH " + "\n" + 
            "        INNER JOIN WFS_M_USR_GRP_DEPDTL   " + "\n" + 
            "          ON WFS_M_AUTH.USR_GRP_ID = WFS_M_USR_GRP_DEPDTL.USR_GRP_ID " + "\n" + 
            "        INNER JOIN WFS_M_USR_DAIRI " + "\n" + 
            "          ON WFS_M_USR_GRP_DEPDTL.USR_ID = WFS_M_USR_DAIRI.USR_ID " + "\n" + 
            "         AND WFS_M_USR_DAIRI.YUKO_KBN = '1' " + "\n" + 
            "         AND WFS_M_USR_DAIRI.SHINSEI_FLG = CASE WHEN @P_KBN = '1' THEN '1' ELSE '0' END  " + "\n" + 
            "         AND WFS_M_USR_DAIRI.SHONIN_FLG  = CASE WHEN @P_KBN = '2' THEN '1' ELSE '0' END  " + "\n" + 
            "     ) MN   " + "\n" + 
            "     WHERE MN.WORK_ID  = @P_WORK_ID   " + "\n" + 
            "       AND MN.ROUTE_ID = @P_ROUTE_ID   " + "\n" + 
            "       AND MN.LVL      = @P_LVL  " + "\n" + 
            "       AND MN.USR_ID   = @P_USR_ID   " + "\n" + 
            "   " + "\n" + 
            "     RETURN @REC  " + "\n" + 
            " END " + "\n" + 
            ""
            );


            //--------------------
            //WFS_AUTH_SHINSEI
            executeSQL( 
            " CREATE FUNCTION [dbo].[WFS_AUTH_SHINSEI](  " + "\n" + 
            "      @P_WORK_ID     VARCHAR(100)  " + "\n" + 
            "     ,@P_ROUTE_ID    VARCHAR(100)  " + "\n" + 
            "     ,@P_USR_ID      VARCHAR(100)  " + "\n" + 
            " ) RETURNS VARCHAR(100) AS   " + "\n" + 
            " BEGIN   " + "\n" + 
            "     DECLARE @REC VARCHAR(20)  " + "\n" + 
            "   " + "\n" + 
            "     SET @REC = [dbo].[WFS_AUTH_MAIN](@P_WORK_ID,@P_ROUTE_ID,@P_USR_ID,1,'1') " + "\n" + 
            "   " + "\n" + 
            "     RETURN @REC  " + "\n" + 
            " END " + "\n" + 
            ""
            );


            //--------------------
            //WFS_AUTH_SHINSEI
            executeSQL( 
            " CREATE FUNCTION [dbo].[WFS_AUTH_SHONIN](  " + "\n" + 
            "      @P_WORK_ID     VARCHAR(100)  " + "\n" + 
            "     ,@P_ROUTE_ID    VARCHAR(100)  " + "\n" + 
            "     ,@P_USR_ID      VARCHAR(100)  " + "\n" + 
            "     ,@P_LVL         DECIMAL(10,0)  " + "\n" + 
            " ) RETURNS VARCHAR(100) AS   " + "\n" + 
            " BEGIN   " + "\n" + 
            "     DECLARE @REC VARCHAR(20)  " + "\n" + 
            "   " + "\n" + 
            "     SET @REC = [dbo].[WFS_AUTH_MAIN](@P_WORK_ID,@P_ROUTE_ID,@P_USR_ID,@P_LVL,'2') " + "\n" + 
            "   " + "\n" + 
            "     RETURN @REC  " + "\n" + 
            " END " + "\n" + 
            ""
            );


            //--------------------
            //WFS_WF_EXISTS
            executeSQL( 
            " CREATE FUNCTION [dbo].[WFS_WF_EXISTS](  " + "\n" + 
            "      @P_WORK_ID      VARCHAR(100)  " + "\n" + 
            "     ,@P_OBJECT_ID    VARCHAR(100)  " + "\n" + 
            " ) RETURNS VARCHAR(100) AS   " + "\n" + 
            " BEGIN   " + "\n" + 
            "     DECLARE @TMP VARCHAR(100)  " + "\n" + 
            "     DECLARE @REC VARCHAR(20)  " + "\n" + 
            "   " + "\n" + 
            "     SET @REC = NULL  " + "\n" + 
            "   " + "\n" + 
            "      SELECT    " + "\n" + 
            "     @REC =   " + "\n" + 
            "      CASE    " + "\n" + 
            "       WHEN COUNT(*) = 0 THEN '0'    " + "\n" + 
            "       ELSE '1'   " + "\n" + 
            "      END  " + "\n" + 
            "      FROM WFS_T_WORKFLOW   " + "\n" + 
            "      WHERE WORK_ID   = @P_WORK_ID   " + "\n" + 
            "        AND OBJECT_ID = @P_OBJECT_ID   " + "\n" + 
            "     " + "\n" + 
            "     " + "\n" + 
            "     IF (@REC = '1')  " + "\n" + 
            "     BEGIN   " + "\n" + 
            "          SELECT    " + "\n" + 
            "         @REC =   " + "\n" + 
            "          CASE    " + "\n" + 
            "           WHEN WFS_T_WORKFLOW.LVL = 1 AND STATUS <> '6' THEN '1'    " + "\n" + 
            "           WHEN WFS_T_WORKFLOW.LVL = 1 AND STATUS =  '6' THEN '4'    " + "\n" + 
            "           WHEN WFS_LEVEL.LVL = WFS_T_WORKFLOW.LVL AND WFS_T_WORKFLOW.STATUS = '2' THEN '3'    " + "\n" + 
            "           WHEN WFS_T_WORKFLOW.STATUS = '9' THEN '9'    " + "\n" + 
            "           ELSE '2'   " + "\n" + 
            "          END   " + "\n" + 
            "          FROM (   " + "\n" + 
            "              SELECT   " + "\n" + 
            "               S1.WORK_ID   " + "\n" + 
            "              ,S1.OBJECT_ID   " + "\n" + 
            "              ,S1.STEP   " + "\n" + 
            "              ,S1.LVL   " + "\n" + 
            "              ,S1.STATUS   " + "\n" + 
            "              ,S1.ROUTE_ID   " + "\n" + 
            "              FROM WFS_T_WORKFLOW S1   " + "\n" + 
            "              INNER JOIN (   " + "\n" + 
            "                  SELECT   " + "\n" + 
            "                    WORK_ID   " + "\n" + 
            "                   ,OBJECT_ID   " + "\n" + 
            "                   ,MAX(STEP) AS STEP   " + "\n" + 
            "                  FROM WFS_T_WORKFLOW   " + "\n" + 
            "                  GROUP BY    " + "\n" + 
            "                    WORK_ID   " + "\n" + 
            "                   ,OBJECT_ID   " + "\n" + 
            "              ) S2    " + "\n" + 
            "                ON S2.WORK_ID = S1.WORK_ID   " + "\n" + 
            "               AND S2.OBJECT_ID = S1.OBJECT_ID   " + "\n" + 
            "               AND S2.STEP = S1.STEP   " + "\n" + 
            "          ) WFS_T_WORKFLOW   " + "\n" + 
            "          LEFT OUTER JOIN WFS_M_CONTROL   " + "\n" + 
            "            ON WFS_M_CONTROL.WORK_ID = WFS_T_WORKFLOW.WORK_ID    " + "\n" + 
            "          LEFT OUTER JOIN ( SELECT WORK_ID, ROUTE_ID, MAX(LVL) AS LVL  FROM WFS_M_AUTH GROUP BY WORK_ID, ROUTE_ID ) WFS_LEVEL   " + "\n" + 
            "            ON WFS_LEVEL.WORK_ID    = WFS_T_WORKFLOW.WORK_ID   " + "\n" + 
            "           AND WFS_LEVEL.ROUTE_ID = WFS_T_WORKFLOW.ROUTE_ID   " + "\n" + 
            "          WHERE WFS_T_WORKFLOW.WORK_ID   = @P_WORK_ID   " + "\n" + 
            "            AND WFS_T_WORKFLOW.OBJECT_ID = @P_OBJECT_ID   " + "\n" + 
            "      " + "\n" + 
            "     END  " + "\n" + 
            "   " + "\n" + 
            "     RETURN @REC  " + "\n" + 
            " END " + "\n" + 
            ""
            );


            //--------------------
            //WFS_WF_STEP
            executeSQL( 
            " CREATE FUNCTION [dbo].[WFS_WF_STEP](  " + "\n" + 
            "      @P_WORK_ID   VARCHAR(100)  " + "\n" + 
            "     ,@P_OBJECT_ID VARCHAR(100)  " + "\n" + 
            " ) RETURNS decimal(10,0) AS   " + "\n" + 
            " BEGIN   " + "\n" + 
            "     DECLARE @REC DECIMAL(10,0) " + "\n" + 
            "   " + "\n" + 
            "     SET @REC = 0 " + "\n" + 
            "   " + "\n" + 
            "     SELECT  " + "\n" + 
            "     @REC =  " + "\n" + 
            "       MAX(STEP)  " + "\n" + 
            "     FROM WFS_T_WORKFLOW " + "\n" + 
            "     WHERE WORK_ID   = @P_WORK_ID   " + "\n" + 
            "       AND OBJECT_ID = @P_OBJECT_ID   " + "\n" + 
            "   " + "\n" + 
            "     RETURN @REC  " + "\n" + 
            " END " + "\n" + 
            ""
            );

    };
    if ( TALON.getDbConfig().isPostgres() ) {
            //SQLファイルで作成

    };
}


function exec_create_View() {

    //≪VIEW DROP≫
    //--------------------
    //[VIEW]Ver14追加分 WFS_WF_STATUS_LIST
    view_exists_drop('WFS_WF_STATUS_LIST');

    //[VIEW]Ver14追加分 WFS_WF_STATUS_LIST_SUB
    view_exists_drop('WFS_WF_STATUS_LIST_SUB');

    if ( TALON.getDbConfig().isOra() ) {

            //--------------------
            //WFS_WF_STATUS_LIST_SUB
            executeSQL( 
            "CREATE VIEW WFS_WF_STATUS_LIST_SUB AS " + "\n" + 
            "    SELECT  " + "\n" + 
            "        WFS_T_WORKFLOW.WORK_ID AS WORK_ID,     " + "\n" + 
            "        WFS_T_WORKFLOW.OBJECT_ID AS OBJECT_ID, " + "\n" + 
            "        WFS_T_WORKFLOW.LVL AS LVL,             " + "\n" + 
            "        MAX(WFS_T_WORKFLOW.STEP) AS STEP       " + "\n" + 
            "    FROM WFS_T_WORKFLOW " + "\n" + 
            "    GROUP BY WFS_T_WORKFLOW.WORK_ID , WFS_T_WORKFLOW.OBJECT_ID , WFS_T_WORKFLOW.LVL " + "\n" + 
            ""
            );

            //--------------------
            //WFS_WF_STATUS_LIST_SUB
            executeSQL( 
            "CREATE VIEW WFS_WF_STATUS_LIST AS " + "\n" + 
            " SELECT   " + "\n" + 
            "  MN.WORK_ID  " + "\n" + 
            " ,MN.OBJECT_ID  " + "\n" + 
            " ,MN.LVL  " + "\n" + 
            " ,MN.STEP  " + "\n" + 
            " ,MN.STATUS  " + "\n" + 
            " ,MN.CREATED_BY  " + "\n" + 
            " ,MN.CREATED_DATE  " + "\n" + 
            " ,MN.UPDATED_BY      AS WFS_ID " + "\n" + 
            " ,TLN_M_USER.USER_NM AS WFS_NAME " + "\n" + 
            " ,MN.UPDATED_DATE    AS WFS_DATE " + "\n" + 
            " FROM WFS_T_WORKFLOW MN  " + "\n" + 
            " INNER JOIN WFS_WF_STATUS_LIST_SUB MX  " + "\n" + 
            "  ON MX.WORK_ID   = MN.WORK_ID  " + "\n" + 
            " AND MX.OBJECT_ID = MN.OBJECT_ID  " + "\n" + 
            " AND MX.LVL       = MN.LVL  " + "\n" + 
            " AND MX.STEP      = MN.STEP  " + "\n" + 
            " AND MN.STATUS IN ('1','2') " + "\n" + 
            " AND MN.ACTIVE_FLG = '1' " + "\n" + 
            " LEFT OUTER JOIN TLN_M_USER " + "\n" + 
            "   ON MN.UPDATED_BY = TLN_M_USER.USER_ID " + "\n" + 
            ""
            );
    };
    if ( TALON.getDbConfig().isMy() ) {
            //SQLファイルで作成

    };
    if ( TALON.getDbConfig().isMssql() ) {

            //--------------------
            //WFS_WF_STATUS_LIST_SUB
            executeSQL( 
            "CREATE VIEW WFS_WF_STATUS_LIST_SUB AS " + "\n" + 
            "    SELECT  " + "\n" + 
            "        WFS_T_WORKFLOW.WORK_ID AS WORK_ID,     " + "\n" + 
            "        WFS_T_WORKFLOW.OBJECT_ID AS OBJECT_ID, " + "\n" + 
            "        WFS_T_WORKFLOW.LVL AS LVL,             " + "\n" + 
            "        MAX(WFS_T_WORKFLOW.STEP) AS STEP       " + "\n" + 
            "    FROM WFS_T_WORKFLOW " + "\n" + 
            "    GROUP BY WFS_T_WORKFLOW.WORK_ID , WFS_T_WORKFLOW.OBJECT_ID , WFS_T_WORKFLOW.LVL " + "\n" + 
            ""
            );

            //--------------------
            //WFS_WF_STATUS_LIST_SUB
            executeSQL( 
            "CREATE VIEW WFS_WF_STATUS_LIST AS " + "\n" + 
            " SELECT   " + "\n" + 
            "  MN.WORK_ID  " + "\n" + 
            " ,MN.OBJECT_ID  " + "\n" + 
            " ,MN.LVL  " + "\n" + 
            " ,MN.STEP  " + "\n" + 
            " ,MN.STATUS  " + "\n" + 
            " ,MN.CREATED_BY  " + "\n" + 
            " ,MN.CREATED_DATE  " + "\n" + 
            " ,MN.UPDATED_BY      AS WFS_ID " + "\n" + 
            " ,TLN_M_USER.USER_NM AS WFS_NAME " + "\n" + 
            " ,MN.UPDATED_DATE    AS WFS_DATE " + "\n" + 
            " FROM WFS_T_WORKFLOW MN  " + "\n" + 
            " INNER JOIN WFS_WF_STATUS_LIST_SUB MX  " + "\n" + 
            "  ON MX.WORK_ID   = MN.WORK_ID  " + "\n" + 
            " AND MX.OBJECT_ID = MN.OBJECT_ID  " + "\n" + 
            " AND MX.LVL       = MN.LVL  " + "\n" + 
            " AND MX.STEP      = MN.STEP  " + "\n" + 
            " AND MN.STATUS IN ('1','2') " + "\n" + 
            " AND MN.ACTIVE_FLG = '1' " + "\n" + 
            " LEFT OUTER JOIN TLN_M_USER " + "\n" + 
            "   ON MN.UPDATED_BY = TLN_M_USER.USER_ID " + "\n" + 
            ""
            );
    };
    if ( TALON.getDbConfig().isPostgres() ) {
            //SQLファイルで作成

    };
}






```

#### サーバJS ライブラリ: XDMF_JS001_0 ([共通]共通)

```javascript
//-------------------------------------------
//［部品］共通
//-------------------------------------------
var _USER_ID = '';
var _FUNC_ID = '';
function tln_com_escape(val) {
    return val.replace("'","''");
}
//システム日付を返す
//更新時、データベースの日付型項目へバインドする際に使用（更新日付など）
function tln_com_nowdate() {
    var sysDate = new java.util.Date();
    return sysDate;
}
//システム日付（文字列 YYYY-MM-DD HH:MI:SS）を返す
//更新時、タイムスタンプ型としてSQLに組み込む際に使用
function tln_com_nowdate_str() {
    var sysDate = new java.util.Date();
    return (sysDate.getYear()+1900) + "-" +  (sysDate.getMonth()+1) + "-" + sysDate.getDate() + " " + sysDate.getHours() + ":" + sysDate.getMinutes() + ":" + sysDate.getSeconds();
}
//文字列型の日付(画面項目)(YYYY/MM/DD)を日付型に変換
function tln_com_todate(val) {
    y = parseInt(val.split("/")[0]) - 1900;
    m = parseInt(val.split("/")[1]) - 1;
    d = parseInt(val.split("/")[2]);

    var sysDate = new java.util.Date(y,m,d);
    return sysDate;
}
//文字列型の日付(YYYY-MM-DD HH:MI)を日付型に変換
function tln_com_todatetime(val) {
    //val = val.replace("-","/")
    var regExp = new RegExp( "-", "g" ) ;
    val = val.replace( regExp , "/" ) ;
    var val1 = val.split(" ")[0];
    var val2 = val.split(" ")[1];

    var y = parseInt(val1.split("/")[0]) - 1900;
    var m = parseInt(val1.split("/")[1]) - 1;
    var d = parseInt(val1.split("/")[2]) + 0;

    var h = parseInt(val2.split(":")[0]);
    var f = parseInt(val2.split(":")[1]);

    var sysDate = new java.util.Date(y,m,d,h,f);
    return sysDate;
}
//日付型を文字列型に変換（単純変換）
function tln_com_date2string(obj) {
    if (obj == null) { 
        return null;
    } else {
        return obj.toString();
    }
}
//日付型を文字列型に変換（YYYY-MM-DD HH:MI:SS変換）
//function tln_com_date2string2(obj) {
//    return (obj.getYear()+1900) + "-" +  tln_com_zpad2(obj.getMonth()+1) + "-" + tln_com_zpad2(obj.getDate()) + " " + tln_com_zpad2(obj.getHours()) + ":" + tln_com_zpad2(obj.getMinutes()) + ":" + tln_com_zpad2(obj.getSeconds());
//}
//日付型を文字列型に変換（YYYY-MM-DD HH:MI:SS変換）
function tln_com_date2string2(obj) {
    var DTYPE = 'DATETIME';
    try {
        var tmp = obj.getHours();
    } catch(e) {
        DTYPE = 'DATE';
    }
    if ( DTYPE == 'DATETIME' ) {
        return (obj.getYear()+1900) + "-" +  tln_com_zpad2(obj.getMonth()+1) + "-" + tln_com_zpad2(obj.getDate()) + " " + tln_com_zpad2(obj.getHours()) + ":" + tln_com_zpad2(obj.getMinutes()) + ":" + tln_com_zpad2(obj.getSeconds());
    } else {
        return (obj.getYear()+1900) + "-" +  tln_com_zpad2(obj.getMonth()+1) + "-" + tln_com_zpad2(obj.getDate()) + " " + "00:00:00";
    }
}
//機能IDを返す（Ver3.2用）
function tln_com_func_id() {
    if (_FUNC_ID == '') {
        _FUNC_ID = TALON.getUserInfoMap().get("FUNC_ID");
    }
    return _FUNC_ID;
}
//ログインユーザーIDを返す
function tln_com_user_id() {
    if (_USER_ID == '') {
        var lineDataMap = TALON.getUserInfoMap();
        _USER_ID = lineDataMap['USER_ID'];
    }
    return _USER_ID;
}
//ログファイルに出力
function tln_com_log(val) {
    var log = TALON.getLogger();
    log.writeDebug(val);
}
//指定文字数でカット
function tln_com_lcut(str,len) {
    return str.substring( 0 , len );
}
//ゼロ詰め（２けた）
function tln_com_zpad2(str) {
    return ( '0' + str ).slice( -2 );
}
//
function tln_timestamp(str) {
    var val = str;
    var regExp = new RegExp( "-", "g" ) ;
    val = val.replace( regExp , "/" ) ;
    var val1  = val.split(" ")[0];
    var val2  = val.split(" ")[1];
    var val2h = val2.split(":")[0];
    var val2m = val2.split(":")[1];
    var val2s = val2.split(":")[2];

    return val1 + " " + val2h + ":" + val2m + ":" + val2s;
}




//-------------------------------------------
//［部品］消費税率
//-------------------------------------------
function getTAX_RATE(_KIJUN) {
    var itemSelectList = TALON.select( "SELECT VLTAXRATE FROM ZT060 WHERE TLN_DATE_TO_CHAR('YMD', DTSTART) <= '" + _KIJUN + "' ORDER BY DTSTART DESC " );
    var lineDataMap = itemSelectList[0];
    var val = lineDataMap['VLTAXRATE'];
    //var val = 0.08;
    return val;
}

//-------------------------------------------
//［部品］会計年度・月序　チェック
//-------------------------------------------
function checkNENDO(_NENDO,GMSEQ) {
    var itemSelectList = TALON.select( "SELECT TXVALUE FROM ZT010 WHERE IDVARIANT = 'ALLOWED_FISCAL_MONTH' " );
    var lineDataMap = itemSelectList[0];
    var _ALLOWED_FISCAL_MONTH = lineDataMap['TXVALUE'];

    if ( ( ( _NENDO * 100 ) + GMSEQ ) < parseInt(_ALLOWED_FISCAL_MONTH) ) {
        TALON.addErrorMsg( "すでに会計締め処理済み取引日のため処理できません" );
        TALON.setIsSuccess(false);
    }

    return true;
}

//-------------------------------------------
//［部品］会計年度
//パラメータ基準日(YYYY/MM/DD)
//-------------------------------------------
function getNENDO(BASE_DATE) {
    var regExp = new RegExp( "-", "g" ) ;
    BASE_DATE = tln_com_date2string2(BASE_DATE).replace( regExp , "/" ) ;
    var BASE_DATE1 = BASE_DATE.split(" ")[0];
    var BASE_DATE2 = BASE_DATE.split(" ")[1];
    BASE_DATE = BASE_DATE1

    var itemSelectList = TALON.select( "SELECT TXVALUE FROM ZT010 WHERE IDVARIANT = 'FIRST_MONTH' " );
    var lineDataMap = itemSelectList[0];
    var _FIRST_MONTH = lineDataMap['TXVALUE'];

    var itemSelectList = TALON.select( "SELECT TXVALUE FROM ZT010 WHERE IDVARIANT = 'LAST_DAY' " );
    var lineDataMap = itemSelectList[0];
    var _LAST_DAY = lineDataMap['TXVALUE'];

    var _END_MONTH = 0;
    var _END_DAY   = 0;
    //END日を取得
    if (_FIRST_MONTH == 1) {
        _END_MONTH = 12;
    } else {
        _END_MONTH = _FIRST_MONTH - 1;
    }
    if (_LAST_DAY == 31) {
        //END_MONTHの最終日(_FIRST_MONTH初日の前日)
        var _TEMP = "1999/" + tln_com_zpad2(_FIRST_MONTH) + "/01" + " "  + "00:00:00";
        var wdate = tln_com_todatetime(_TEMP);
        wdate.setMinutes(wdate.getMinutes() - 1);
        var tdate = tln_com_date2string2(wdate);
        _TEMP = (tdate.toString().split(" ")[0]).substr( 8 , 2 );
        _END_DAY = _TEMP;
    } else {
        if ( ( _END_MONTH == 2 ) && ( _LAST_DAY >= 28 ) ) {
            _END_DAY = 28;
        } else {
            _END_DAY = _LAST_DAY;
        }
    }
    _END_MONTH = tln_com_zpad2(_END_MONTH);
    _END_DAY   = tln_com_zpad2(_END_DAY);
    //TALON.addMsg( _END_MONTH  + "/" + _END_DAY  );

    var _BASE_DATE_NEN = BASE_DATE.split("/")[0];
    var _BASE_DATE_BAS = BASE_DATE.split("/")[1] + BASE_DATE.split("/")[2];
    if ( (_BASE_DATE_BAS >= '0101' ) && (_BASE_DATE_BAS <= ( _END_MONTH + _END_DAY ) ) ) {
        _BASE_DATE_NEN = _BASE_DATE_NEN - 1;
    }

    //TALON.addMsg( _BASE_DATE_NEN );

    return _BASE_DATE_NEN;
}

//-------------------------------------------
//［部品］月例
//パラメータ基準日(YYYY/MM/DD)
//-------------------------------------------
function getGMSEQ(BASE_DATE) {
    var regExp = new RegExp( "-", "g" ) ;
    BASE_DATE = tln_com_date2string2(BASE_DATE).replace( regExp , "/" ) ;
    var BASE_DATE1 = BASE_DATE.split(" ")[0];
    var BASE_DATE2 = BASE_DATE.split(" ")[1];
    BASE_DATE = BASE_DATE1

    var itemSelectList = TALON.select( "SELECT TXVALUE FROM ZT010 WHERE IDVARIANT = 'FIRST_MONTH' " );
    var lineDataMap = itemSelectList[0];
    var _FIRST_MONTH = lineDataMap['TXVALUE'];

    var itemSelectList = TALON.select( "SELECT TXVALUE FROM ZT010 WHERE IDVARIANT = 'LAST_DAY' " );
    var lineDataMap = itemSelectList[0];
    var _LAST_DAY = lineDataMap['TXVALUE'];

    var _BASE_DATE_NEN = BASE_DATE.split("/")[0];
    var _BASE_DATE_MON = BASE_DATE.split("/")[1];
    var _BASE_DATE_DAY = BASE_DATE.split("/")[2];

    //締め日が31の場合はそのまま月で計算
    if (parseInt(_LAST_DAY) == 31) {
        _BASE_DATE_MON = parseInt(_BASE_DATE_MON);
    }

    //締め日が31以外で日付が締め日より大きい場合、翌月数字で計算
    if ( (parseInt(_LAST_DAY) != 31) && (parseInt(_LAST_DAY) < parseInt(_BASE_DATE_DAY)) ) {
        if (_BASE_DATE_MON == 12) {
            _BASE_DATE_MON = 1;
        } else {
            _BASE_DATE_MON = parseInt(_BASE_DATE_MON) + 1;
        }
    }

    //締め日が31以外で日付が締め日より小さい場合、そのままの月数字で計算
    if ( (parseInt(_LAST_DAY) != 31) && (parseInt(_LAST_DAY) >= parseInt(_BASE_DATE_DAY)) ) {
        _BASE_DATE_MON = parseInt(_BASE_DATE_MON);
    }

    var REC = 0;
    if (parseInt(_FIRST_MONTH) > parseInt(_BASE_DATE_MON)) {
        REC = (parseInt(_BASE_DATE_MON) + 12) - (parseInt(_FIRST_MONTH) - 1);
    } else {
        REC = (parseInt(_BASE_DATE_MON)) - (parseInt(_FIRST_MONTH) - 1);
    }

    //TALON.addMsg( REC );

    return REC;
}

//-------------------------------------------
//［部品］休日チェック(1:休日 / 0:平日)
//-------------------------------------------
function getHOLIDAY_FLG(_KBCALENDAR, _DTOFF) {
    var sql = 
        "SELECT  " + 
        "COUNT(*) AS CNT " + 
        "FROM ZT070 " + 
        "WHERE ZT070.KBCALENDAR = '" + _KBCALENDAR + "' " + 
        "  AND ZT070.DTOFF = TLN_CHAR_TO_DATE('YMDHMS','" + tln_timestamp(_DTOFF) + "') "
    ;
    var itemSelectList = TALON.select(sql);
    var lineDataMap    = itemSelectList[0];
    var _CNT = lineDataMap['CNT'];

    return _CNT;
}

//-------------------------------------------
//［部品］品目[BT010]
//-------------------------------------------
function selectBT010(_IDHINMOKU) {
    var sql = 
        "SELECT " +
        " IDHINMOKU "   + 
        ",TXHINBAN "    + 
        ",TXHINMEI "    + 
        ",KBHINSYU "    + 
        ",PRGENKA "     + 
        ",PRHANBAI "    + 
        ",KBUNIT "      + 
        ",KBUNITPUR "   + 
        ",VLKANZAN "    + 
        ",PRKOUNYU "    + 
        ",IDSIIRESAKI " + 
        ",FGZAIKO "     + 
        ",FGKOUNYU "    + 
        ",FGHANBAI "    + 
        ",FGSEIZO "     + 
        ",TXTEKIYO "    + 
        ",CREATED_DATE "   + 
        ",CREATED_BY "     + 
        ",CREATED_PRG_NM " + 
        ",UPDATED_DATE "   + 
        ",UPDATED_BY "     + 
        ",UPDATED_PRG_NM " + 
        ",MODIFY_COUNT "   + 
        "FROM BT010 "       +
        "WHERE IDHINMOKU = '" + _IDHINMOKU + "'"
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;

}

//-------------------------------------------
//［部品］仕入先[DT010]
//-------------------------------------------
function selectDT010(_IDSIIRESAKI) {
    var sql = 
        "SELECT " +
        " IDSIIRESAKI      " + 
        ",KBSIHARAI        " + 
        ",TXHURIKOMI       " + 
        ",TXTEKIYO         " + 
        ",AMKISYUKAIKAKE   " + 
        ",AMSIIRE          " + 
        ",AMSIHARAI        " + 
        ",AMGENKAIKAKE     " + 
        ",CREATED_DATE     " + 
        ",CREATED_BY       " + 
        ",CREATED_PRG_NM   " + 
        ",UPDATED_DATE     " + 
        ",UPDATED_BY       " + 
        ",UPDATED_PRG_NM   " + 
        ",MODIFY_COUNT     " + 
        "FROM DT010 "       +
        "WHERE IDSIIRESAKI = '" + _IDSIIRESAKI + "'"
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}
function updateDT010(itemDataList) {
    //項目
    var itemColNameTbl = [
         'IDSIIRESAKI'
        ,'KBSIHARAI'
        ,'TXHURIKOMI'
        ,'TXTEKIYO'
        ,'AMKISYUKAIKAKE'
        ,'AMSIIRE'
        ,'AMSIHARAI'
        ,'AMGENKAIKAKE'
        ,'CREATED_DATE'
        ,'CREATED_BY'
        ,'CREATED_PRG_NM'
        ,'UPDATED_DATE'
        ,'UPDATED_BY'
        ,'UPDATED_PRG_NM'
        ,'MODIFY_COUNT'
    ];

    var itemSelectList = selectDT010(itemDataList['IDSIIRESAKI']);

    var lineDataMap = itemSelectList[0];
    var _MODIFY_COUNT = lineDataMap['MODIFY_COUNT'];

    //UPDATE
    itemDataList['UPDATED_DATE']   = tln_com_nowdate();
    itemDataList['UPDATED_BY']     = tln_com_user_id();
    itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
    itemDataList['MODIFY_COUNT']   = (_MODIFY_COUNT + 1);

    var whereList = new Array();
    var whereTbl1 = [ null, '=' , 'IDSIIRESAKI' ];
    whereList.push(whereTbl1);

    TALON.updateByMap( 'DT010', itemDataList , itemColNameTbl , whereList );

}

//-------------------------------------------
//［部品］得意先[ET010]
//-------------------------------------------
function selectET010(_IDTOKUISAKI) {
    var sql = 
        "SELECT " +
        " IDTOKUISAKI         " + 
        ",TXTANTOUBUSYO       " + 
        ",TXTANTOUSYA         " + 
        ",TXTANTOUSYASYOKUI   " + 
        ",TXTANTOUSYAEMAIL    " + 
        ",TXTANTOUSYADENWA    " + 
        ",KBSEIKYUHOUSHIKI    " + 
        ",TXSIMEBI            " + 
        ",KBNYUKINHOUHOU      " + 
        ",VLNYUKINSAITO       " + 
        ",AMYOSHIN            " + 
        ",NRTANTOUJYUGYOIN    " + 
        ",TXTEKIYO            " + 
        ",AMKISYUURIKAKE      " + 
        ",AMURIAGE            " + 
        ",AMJYURYO            " + 
        ",AMGENURIKAKE        " + 
        ",CREATED_DATE        " + 
        ",CREATED_BY          " + 
        ",CREATED_PRG_NM      " + 
        ",UPDATED_DATE        " + 
        ",UPDATED_BY          " + 
        ",UPDATED_PRG_NM      " + 
        ",MODIFY_COUNT        " + 
        "FROM ET010 "       +
        "WHERE IDTOKUISAKI = '" + _IDTOKUISAKI + "'"
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}
function updateET010(itemDataList) {
    //項目
    var itemColNameTbl = [
         'IDTOKUISAKI'
        ,'TXTANTOUBUSYO'
        ,'TXTANTOUSYA'
        ,'TXTANTOUSYASYOKUI'
        ,'TXTANTOUSYAEMAIL'
        ,'TXTANTOUSYADENWA'
        ,'KBSEIKYUHOUSHIKI'
        ,'TXSIMEBI'
        ,'KBNYUKINHOUHOU'
        ,'VLNYUKINSAITO'
        ,'AMYOSHIN'
        ,'NRTANTOUJYUGYOIN'
        ,'TXTEKIYO'
        ,'AMKISYUURIKAKE'
        ,'AMURIAGE'
        ,'AMJYURYO'
        ,'AMGENURIKAKE'
        ,'CREATED_DATE'
        ,'CREATED_BY'
        ,'CREATED_PRG_NM'
        ,'UPDATED_DATE'
        ,'UPDATED_BY'
        ,'UPDATED_PRG_NM'
        ,'MODIFY_COUNT'
    ];

    var itemSelectList = selectET010(itemDataList['IDTOKUISAKI']);

    var lineDataMap = itemSelectList[0];
    var _MODIFY_COUNT = lineDataMap['MODIFY_COUNT'];

    //UPDATE
    itemDataList['UPDATED_DATE']   = tln_com_nowdate();
    itemDataList['UPDATED_BY']     = tln_com_user_id();
    itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
    itemDataList['MODIFY_COUNT']   = (_MODIFY_COUNT + 1);

    var whereList = new Array();
    var whereTbl1 = [ null, '=' , 'IDTOKUISAKI' ];
    whereList.push(whereTbl1);

    TALON.updateByMap( 'ET010', itemDataList , itemColNameTbl , whereList );

}

//-------------------------------------------
//［部品］倉庫在庫[FT010]
//-------------------------------------------
function selectFT010(_IDHINMOKU, _CDSOUKO) {
    var sql = 
        "SELECT " +
        " IDHINMOKU "  + 
        ",CDSOUKO "    + 
        ",QTKISYU "    + 
        ",QTNYUKO "    + 
        ",QTSYUKKO "   + 
        ",AMKISYU "    + 
        ",AMNYUKO "    + 
        ",AMSYUKKO "   + 
        ",QTGENZAIKO " + 
        ",AMGENZAIKO " + 
        ",PRGENZAIKO "     + 
        ",CREATED_DATE "   + 
        ",CREATED_BY "     + 
        ",CREATED_PRG_NM " + 
        ",UPDATED_DATE "   + 
        ",UPDATED_BY "     + 
        ",UPDATED_PRG_NM " + 
        ",MODIFY_COUNT "   + 
        "FROM FT010 "       +
        "WHERE IDHINMOKU = '" + _IDHINMOKU + "'" + 
        "  AND CDSOUKO   = '" + _CDSOUKO   + "'"
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}
function selectFT010_CDSOUKO(_CDSOUKO) {
    var sql = 
        "SELECT " +
        " IDHINMOKU "  + 
        ",CDSOUKO "    + 
        ",QTKISYU "    + 
        ",QTNYUKO "    + 
        ",QTSYUKKO "   + 
        ",AMKISYU "    + 
        ",AMNYUKO "    + 
        ",AMSYUKKO "   + 
        ",QTGENZAIKO " + 
        ",AMGENZAIKO " + 
        ",PRGENZAIKO "     + 
        ",CREATED_DATE "   + 
        ",CREATED_BY "     + 
        ",CREATED_PRG_NM " + 
        ",UPDATED_DATE "   + 
        ",UPDATED_BY "     + 
        ",UPDATED_PRG_NM " + 
        ",MODIFY_COUNT "   + 
        "FROM FT010 "       +
        "WHERE CDSOUKO = '" + _CDSOUKO + "'"
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}
function updateFT010(itemDataList) {
    //項目
    var itemColNameTbl = [
         'IDHINMOKU'
        ,'CDSOUKO'
        ,'QTKISYU'
        ,'QTNYUKO'
        ,'QTSYUKKO'
        ,'AMKISYU'
        ,'AMNYUKO'
        ,'AMSYUKKO'
        ,'QTGENZAIKO'
        ,'AMGENZAIKO'
        ,'PRGENZAIKO'
        ,'CREATED_DATE'
        ,'CREATED_BY'
        ,'CREATED_PRG_NM'
        ,'UPDATED_DATE'
        ,'UPDATED_BY'
        ,'UPDATED_PRG_NM'
        ,'MODIFY_COUNT'
    ];

    //共通
    //--------
    //現在庫数
    itemDataList['QTGENZAIKO']     = itemDataList['QTKISYU'] + itemDataList['QTNYUKO'] - itemDataList['QTSYUKKO'];
    //現在庫額
    itemDataList['AMGENZAIKO']     = itemDataList['AMKISYU'] + itemDataList['AMNYUKO'] - itemDataList['AMSYUKKO'];
    //現在庫単価
    if (itemDataList['QTGENZAIKO'] == 0) {
        itemDataList['PRGENZAIKO'] = 0;
    } else {
        itemDataList['PRGENZAIKO'] = itemDataList['AMGENZAIKO'] / itemDataList['QTGENZAIKO'];
    }

    //データが存在する場合はupdate、存在しない場合はinsert

    var itemSelectList = selectFT010(itemDataList['IDHINMOKU'], itemDataList['CDSOUKO']);
    if (itemSelectList.length == 0) {
        //INSERT
        itemDataList['CREATED_DATE']   = tln_com_nowdate();
        itemDataList['CREATED_BY']     = tln_com_user_id();
        itemDataList['CREATED_PRG_NM'] = tln_com_func_id();
        itemDataList['UPDATED_DATE']   = tln_com_nowdate();
        itemDataList['UPDATED_BY']     = tln_com_user_id();
        itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
        itemDataList['MODIFY_COUNT']   = 1;

        TALON.insertByMap( 'FT010', itemDataList , itemColNameTbl );

    } else {
        var lineDataMap = itemSelectList[0];
        var _MODIFY_COUNT = lineDataMap['MODIFY_COUNT'];

        //UPDATE
        itemDataList['UPDATED_DATE']   = tln_com_nowdate();
        itemDataList['UPDATED_BY']     = tln_com_user_id();
        itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
        itemDataList['MODIFY_COUNT']   = (_MODIFY_COUNT + 1);

        var whereList = new Array();
        var whereTbl1 = [ null, '=' , 'IDHINMOKU' ];
        var whereTbl2 = [ null, '=' , 'CDSOUKO'   ];
        whereList.push(whereTbl1);
        whereList.push(whereTbl2);

        TALON.updateByMap( 'FT010', itemDataList , itemColNameTbl , whereList );

    }
}

//-------------------------------------------
//［部品］在庫増減履歴[FT100]
//-------------------------------------------
function selectFT100(_NRZAITORI) {
    var sql = 
        "SELECT " +
        " NRZAITORI " + 
        ",DTTORIHIKI " + 
        ",KBUKEBARAI " + 
        ",KBZAIHURI " + 
        ",KBAKADEN " + 
        ",FGVALID " + 
        ",IDHINMOKU " + 
        ",TXHINBAN " + 
        ",TXHINMEI " + 
        ",KBUNIT " + 
        ",CDSOUKO " + 
        ",TXAITESAKI " + 
        ",PRTORIHIKI " + 
        ",QTTORIHIKI " + 
        ",AMTORIHIKI " + 
        ",AMSAGAKU " + 
        ",NRSOURCE " + 
        ",DTCREATE " + 
        ",TXREFNO " + 
        ",DTNEND " + 
        ",DTMSEQ " + 
        ",QTZOUGEN " + 
        ",AMZOUGEN " + 
        ",CREATED_DATE " + 
        ",CREATED_BY " + 
        ",CREATED_PRG_NM " + 
        ",UPDATED_DATE " + 
        ",UPDATED_BY " + 
        ",UPDATED_PRG_NM " + 
        ",MODIFY_COUNT " + 
        "FROM FT100 "       +
        "WHERE NRZAITORI = '" + _NRZAITORI + "'"
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}
function updateFT100(itemDataList) {
    //項目
    var itemColNameTbl = [
         'NRZAITORI'
        ,'DTTORIHIKI'
        ,'KBUKEBARAI'
        ,'KBZAIHURI'
        ,'KBAKADEN'
        ,'FGVALID'
        ,'IDHINMOKU'
        ,'TXHINBAN'
        ,'TXHINMEI'
        ,'KBUNIT'
        ,'CDSOUKO'
        ,'TXAITESAKI'
        ,'PRTORIHIKI'
        ,'QTTORIHIKI'
        ,'AMTORIHIKI'
        ,'AMSAGAKU'
        ,'NRSOURCE'
        ,'DTCREATE'
        ,'TXREFNO'
        ,'DTNEND'
        ,'DTMSEQ'
        ,'QTZOUGEN'
        ,'AMZOUGEN'
        ,'CREATED_DATE'
        ,'CREATED_BY'
        ,'CREATED_PRG_NM'
        ,'UPDATED_DATE'
        ,'UPDATED_BY'
        ,'UPDATED_PRG_NM'
        ,'MODIFY_COUNT'
    ];

    //関連情報補填(採番)
    //在庫取引№
    var numList = TALON.getNumberingData('XDMF_FF_ZAITORI', 1)
    itemDataList['NRZAITORI']     = numList[0];

    //関連情報補填(品目マスタ)
    var itemSelectList = selectBT010(itemDataList['IDHINMOKU']);
    var lineDataMap = itemSelectList[0];

    //品番
    itemDataList['TXHINBAN']      = lineDataMap['TXHINBAN'];
    //品名
    itemDataList['TXHINMEI']      = lineDataMap['TXHINMEI'];
    //単位区分
    itemDataList['KBUNIT']        = lineDataMap['KBUNIT'];

    //取引差額
    if ( (itemDataList['AMSAGAKU'] == "") || (itemDataList['AMSAGAKU'] == null) ) {
        itemDataList['AMSAGAKU']      = 0;
    }

    //共通
    itemDataList['CREATED_DATE']   = tln_com_nowdate();
    itemDataList['CREATED_BY']     = tln_com_user_id();
    itemDataList['CREATED_PRG_NM'] = tln_com_func_id();
    itemDataList['UPDATED_DATE']   = tln_com_nowdate();
    itemDataList['UPDATED_BY']     = tln_com_user_id();
    itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
    itemDataList['MODIFY_COUNT']   = 1;


    var _NENDO = getNENDO(itemDataList['DTTORIHIKI']);
    var _GMSEQ = getGMSEQ(itemDataList['DTTORIHIKI']);
    checkNENDO(_NENDO, _GMSEQ);
    //年度
    itemDataList['DTNEND']        = _NENDO;
    //月序
    itemDataList['DTMSEQ']        = _GMSEQ;


    TALON.insertByMap( 'FT100', itemDataList , itemColNameTbl );

}
function insertAkaFT100(_NRZAITORI) {

    //関連情報補填(採番)
    //在庫取引№
    var numList = TALON.getNumberingData('XDMF_FF_ZAITORI', 1)
    _NEXT_NRZAITORI     = numList[0];

    //
    TALON.insert(
                " INSERT INTO FT100 ( " + 
                "  NRZAITORI " + 
                " ,DTTORIHIKI " + 
                " ,KBUKEBARAI " + 
                " ,KBZAIHURI " + 
                " ,KBAKADEN " + 
                " ,FGVALID " + 
                " ,IDHINMOKU " + 
                " ,TXHINBAN " + 
                " ,TXHINMEI " + 
                " ,KBUNIT " + 
                " ,CDSOUKO " + 
                " ,TXAITESAKI " + 
                " ,PRTORIHIKI " + 
                " ,QTTORIHIKI " + 
                " ,AMTORIHIKI " + 
                " ,AMSAGAKU " + 
                " ,NRSOURCE " + 
                " ,DTCREATE " + 
                " ,TXREFNO " + 
                " ,DTNEND " + 
                " ,DTMSEQ " + 
                " ,QTZOUGEN " + 
                " ,AMZOUGEN " + 
                " ,CREATED_DATE " + 
                " ,CREATED_BY " + 
                " ,CREATED_PRG_NM " + 
                " ,UPDATED_DATE " + 
                " ,UPDATED_BY " + 
                " ,UPDATED_PRG_NM " + 
                " ,MODIFY_COUNT " + 
                " )  " + 
                " SELECT  " + 
                "  '" + _NEXT_NRZAITORI + "' " + 
                " ,DTTORIHIKI " + 
                " ,KBUKEBARAI " + 
                " ,KBZAIHURI  " + 
                " ,'2' " + 
                " ,'F' " + 
                " ,IDHINMOKU  " + 
                " ,TXHINBAN   " + 
                " ,TXHINMEI   " + 
                " ,KBUNIT     " + 
                " ,CDSOUKO    " + 
                " ,TXAITESAKI " + 
                " ,PRTORIHIKI " + 
                " ,QTTORIHIKI " + 
                " ,AMTORIHIKI " + 
                " ,AMSAGAKU   " + 
                " ,NRSOURCE   " + 
                " ,DTCREATE   " + 
                " ,TXREFNO    " + 
                " ,DTNEND     " + 
                " ,DTMSEQ     " + 
                " ,(QTZOUGEN * -1) " + 
                " ,(AMZOUGEN * -1) " + 
                " ,TLN_CHAR_TO_DATE('YMDHMS','" + tln_timestamp(tln_com_nowdate_str()) + "') " + 
                " ,'" + tln_com_user_id() + "' " + 
                " ,'" + tln_com_func_id() + "' " + 
                " ,TLN_CHAR_TO_DATE('YMDHMS','" + tln_timestamp(tln_com_nowdate_str()) + "') " + 
                " ,'" + tln_com_user_id() + "' " + 
                " ,'" + tln_com_func_id() + "' " + 
                " ,0    " + 
                " FROM FT100       " + 
                " WHERE NRZAITORI = '" + _NRZAITORI + "'"
                );
}


//-------------------------------------------
//［部品］買掛増減履歴[DT100]
//-------------------------------------------
function selectDT100(_NRKAIKAKE) {
    var sql = 
        "SELECT " +
        " NRKAIKAKE " + 
        ",IDSIIRESAKI " + 
        ",DTTORIHIKI " + 
        ",KBKAITORI " + 
        ",KBKAIHURI " + 
        ",KBAKADEN " + 
        ",FGVALID " + 
        ",IDHINMOKU " + 
        ",TXHINBAN " + 
        ",TXHINMEI " + 
        ",KBUNIT " + 
        ",PRTORIHIKI " + 
        ",QTTORIHIKI " + 
        ",AMTORIHIKI " + 
        ",AMTAX " + 
        ",NRSIHARAI " + 
        ",NRSOURCE " + 
        ",DTCREATE " + 
        ",TXREFNO " + 
        ",DTNEND " + 
        ",DTMSEQ " + 
        ",AMZOUGEN " + 
        ",CREATED_DATE " + 
        ",CREATED_BY " + 
        ",CREATED_PRG_NM " + 
        ",UPDATED_DATE " + 
        ",UPDATED_BY " + 
        ",UPDATED_PRG_NM " + 
        ",MODIFY_COUNT " + 
        "FROM DT100 "       +
        "WHERE NRKAIKAKE = '" + _NRKAIKAKE + "'"
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}
function updateDT100(itemDataList) {
    //項目
    var itemColNameTbl = [
         'NRKAIKAKE'
        ,'IDSIIRESAKI'
        ,'DTTORIHIKI'
        ,'KBKAITORI'
        ,'KBKAIHURI'
        ,'KBAKADEN'
        ,'FGVALID'
        ,'IDHINMOKU'
        ,'TXHINBAN'
        ,'TXHINMEI'
        ,'KBUNIT'
        ,'PRTORIHIKI'
        ,'QTTORIHIKI'
        ,'AMTORIHIKI'
        ,'AMTAX'
        ,'NRSIHARAI'
        ,'NRSOURCE'
        ,'DTCREATE'
        ,'TXREFNO'
        ,'DTNEND'
        ,'DTMSEQ'
        ,'AMZOUGEN'
        ,'CREATED_DATE'
        ,'CREATED_BY'
        ,'CREATED_PRG_NM'
        ,'UPDATED_DATE'
        ,'UPDATED_BY'
        ,'UPDATED_PRG_NM'
        ,'MODIFY_COUNT'
    ];

    //関連情報補填(採番)
    //買掛取引№
    var numList = TALON.getNumberingData('XDMF_DF_KAIKAKE', 1)
    itemDataList['NRKAIKAKE']     = numList[0];


    //関連情報補填(品目マスタ) ※品目IDが入っているときのみ
    if (itemDataList['IDHINMOKU'] != '') {
        var itemSelectList = selectBT010(itemDataList['IDHINMOKU']);
        var lineDataMap = itemSelectList[0];

        //品番
        itemDataList['TXHINBAN']      = lineDataMap['TXHINBAN'];
        //品名
        itemDataList['TXHINMEI']      = lineDataMap['TXHINMEI'];
        //単位区分
        itemDataList['KBUNIT']        = lineDataMap['KBUNITPUR'];
    }


    //共通
    itemDataList['CREATED_DATE']   = tln_com_nowdate();
    itemDataList['CREATED_BY']     = tln_com_user_id();
    itemDataList['CREATED_PRG_NM'] = tln_com_func_id();
    itemDataList['UPDATED_DATE']   = tln_com_nowdate();
    itemDataList['UPDATED_BY']     = tln_com_user_id();
    itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
    itemDataList['MODIFY_COUNT']   = 1;


    var _NENDO = getNENDO(itemDataList['DTTORIHIKI']);
    var _GMSEQ = getGMSEQ(itemDataList['DTTORIHIKI']);
    checkNENDO(_NENDO, _GMSEQ);
    //年度
    itemDataList['DTNEND']        = _NENDO;
    //月序
    itemDataList['DTMSEQ']        = _GMSEQ;


    TALON.insertByMap( 'DT100', itemDataList , itemColNameTbl );

}
function insertAkaDT100(_NRKAIKAKE) {

    //関連情報補填(採番)
    //買掛取引№
    var numList = TALON.getNumberingData('XDMF_DF_KAIKAKE', 1)
    _NEXT_NRKAIKAKE     = numList[0];

    //
    TALON.insert(
                " INSERT INTO DT100 ( " + 
                "  NRKAIKAKE " + 
                " ,IDSIIRESAKI " + 
                " ,DTTORIHIKI " + 
                " ,KBKAITORI " + 
                " ,KBKAIHURI " + 
                " ,KBAKADEN " + 
                " ,FGVALID " + 
                " ,IDHINMOKU " + 
                " ,TXHINBAN " + 
                " ,TXHINMEI " + 
                " ,KBUNIT " + 
                " ,PRTORIHIKI " + 
                " ,QTTORIHIKI " + 
                " ,AMTORIHIKI " + 
                " ,AMTAX " + 
                " ,NRSIHARAI " + 
                " ,NRSOURCE " + 
                " ,DTCREATE " + 
                " ,TXREFNO " + 
                " ,DTNEND " + 
                " ,DTMSEQ " + 
                " ,AMZOUGEN " + 
                " ,CREATED_DATE " + 
                " ,CREATED_BY " + 
                " ,CREATED_PRG_NM " + 
                " ,UPDATED_DATE " + 
                " ,UPDATED_BY " + 
                " ,UPDATED_PRG_NM " + 
                " ,MODIFY_COUNT " + 
                " )  " + 
                " SELECT  " + 
                "  '" + _NEXT_NRKAIKAKE + "' " + 
                " ,IDSIIRESAKI " + 
                " ,DTTORIHIKI " + 
                " ,KBKAITORI " + 
                " ,KBKAIHURI " + 
                " ,'2' " + 
                " ,'F' " + 
                " ,IDHINMOKU " + 
                " ,TXHINBAN " + 
                " ,TXHINMEI " + 
                " ,KBUNIT " + 
                " ,PRTORIHIKI " + 
                " ,QTTORIHIKI " + 
                " ,AMTORIHIKI " + 
                " ,AMTAX " + 
                " ,NRSIHARAI " + 
                " ,NRSOURCE " + 
                " ,DTCREATE " + 
                " ,TXREFNO " + 
                " ,DTNEND " + 
                " ,DTMSEQ " + 
                " ,(AMZOUGEN * -1) " + 
                " ,TLN_CHAR_TO_DATE('YMDHMS','" + tln_timestamp(tln_com_nowdate_str()) + "') " + 
                " ,'" + tln_com_user_id() + "' " + 
                " ,'" + tln_com_func_id() + "' " + 
                " ,TLN_CHAR_TO_DATE('YMDHMS','" + tln_timestamp(tln_com_nowdate_str()) + "') " + 
                " ,'" + tln_com_user_id() + "' " + 
                " ,'" + tln_com_func_id() + "' " + 
                " ,0    " + 
                " FROM DT100       " + 
                " WHERE NRKAIKAKE = '" + _NRKAIKAKE + "'"
                );
}

//-------------------------------------------
//［部品］売掛増減履歴[ET100]
//-------------------------------------------
function selectET100(_NRURIKAKE) {
    var sql = 
        "SELECT " +
        " NRURIKAKE " + 
        ",IDTOKUISAKI " + 
        ",DTTORIHIKI " + 
        ",KBURITORI " + 
        ",KBURIHURI " + 
        ",KBAKADEN " + 
        ",FGVALID " + 
        ",IDHINMOKU " + 
        ",TXHINBAN " + 
        ",TXHINMEI " + 
        ",KBUNIT " + 
        ",PRTORIHIKI " + 
        ",QTTORIHIKI " + 
        ",AMTAX " + 
        ",AMGENKA " + 
        ",NRSOURCE " + 
        ",NRSEIKYU " + 
        ",DTCREATE " + 
        ",TXREFNO " + 
        ",DTNEND " + 
        ",DTMSEQ " + 
        ",AMARARI " + 
        ",AMZOUGEN " + 
        ",CREATED_DATE " + 
        ",CREATED_BY " + 
        ",CREATED_PRG_NM " + 
        ",UPDATED_DATE " + 
        ",UPDATED_BY " + 
        ",UPDATED_PRG_NM " + 
        ",MODIFY_COUNT " + 
        ",AMTORIHIKI " + 
        "FROM ET100 "       +
        "WHERE NRURIKAKE = '" + _NRURIKAKE + "'"
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}
function updateET100(itemDataList) {
    //項目
    var itemColNameTbl = [
         'NRURIKAKE'
        ,'IDTOKUISAKI'
        ,'DTTORIHIKI'
        ,'KBURITORI'
        ,'KBURIHURI'
        ,'KBAKADEN'
        ,'FGVALID'
        ,'IDHINMOKU'
        ,'TXHINBAN'
        ,'TXHINMEI'
        ,'KBUNIT'
        ,'PRTORIHIKI'
        ,'QTTORIHIKI'
        ,'AMTAX'
        ,'AMGENKA'
        ,'NRSOURCE'
        ,'NRSEIKYU'
        ,'DTCREATE'
        ,'TXREFNO'
        ,'DTNEND'
        ,'DTMSEQ'
        ,'AMARARI'
        ,'AMZOUGEN'
        ,'CREATED_DATE'
        ,'CREATED_BY'
        ,'CREATED_PRG_NM'
        ,'UPDATED_DATE'
        ,'UPDATED_BY'
        ,'UPDATED_PRG_NM'
        ,'MODIFY_COUNT'
        ,'AMTORIHIKI'
    ];

    //関連情報補填(採番)
    //買掛取引№
    var numList = TALON.getNumberingData('XDMF_EF_URIKAKE', 1)
    itemDataList['NRURIKAKE']     = numList[0];


    //関連情報補填(品目マスタ) ※品目IDが入っているときのみ
    if (itemDataList['IDHINMOKU'] != '') {
        var itemSelectList = selectBT010(itemDataList['IDHINMOKU']);
        var lineDataMap = itemSelectList[0];

        //品番
        itemDataList['TXHINBAN']      = lineDataMap['TXHINBAN'];
        //品名
        itemDataList['TXHINMEI']      = lineDataMap['TXHINMEI'];
        //単位区分
        itemDataList['KBUNIT']        = lineDataMap['KBUNIT'];
    }


    //共通
    itemDataList['CREATED_DATE']   = tln_com_nowdate();
    itemDataList['CREATED_BY']     = tln_com_user_id();
    itemDataList['CREATED_PRG_NM'] = tln_com_func_id();
    itemDataList['UPDATED_DATE']   = tln_com_nowdate();
    itemDataList['UPDATED_BY']     = tln_com_user_id();
    itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
    itemDataList['MODIFY_COUNT']   = 1;


    var _NENDO = getNENDO(itemDataList['DTTORIHIKI']);
    var _GMSEQ = getGMSEQ(itemDataList['DTTORIHIKI']);
    checkNENDO(_NENDO, _GMSEQ);
    //年度
    itemDataList['DTNEND']        = _NENDO;
    //月序
    itemDataList['DTMSEQ']        = _GMSEQ;


    TALON.insertByMap( 'ET100', itemDataList , itemColNameTbl );

}
function insertAkaET100(_NRURIKAKE) {

    //関連情報補填(採番)
    //買掛取引№
    var numList = TALON.getNumberingData('XDMF_EF_URIKAKE', 1)
    _NEXT_NRURIKAKE     = numList[0];

    //
    TALON.insert(
                " INSERT INTO ET100 ( " + 
                "  NRURIKAKE " + 
                " ,IDTOKUISAKI " + 
                " ,DTTORIHIKI " + 
                " ,KBURITORI " + 
                " ,KBURIHURI " + 
                " ,KBAKADEN " + 
                " ,FGVALID " + 
                " ,IDHINMOKU " + 
                " ,TXHINBAN " + 
                " ,TXHINMEI " + 
                " ,KBUNIT " + 
                " ,PRTORIHIKI " + 
                " ,QTTORIHIKI " + 
                " ,AMTAX " + 
                " ,AMGENKA " + 
                " ,NRSOURCE " + 
                " ,NRSEIKYU " + 
                " ,DTCREATE " + 
                " ,TXREFNO " + 
                " ,DTNEND " + 
                " ,DTMSEQ " + 
                " ,AMARARI " + 
                " ,AMZOUGEN " + 
                " ,AMTORIHIKI " + 
                " ,CREATED_DATE " + 
                " ,CREATED_BY " + 
                " ,CREATED_PRG_NM " + 
                " ,UPDATED_DATE " + 
                " ,UPDATED_BY " + 
                " ,UPDATED_PRG_NM " + 
                " ,MODIFY_COUNT " + 
                " )  " + 
                " SELECT  " + 
                "  '" + _NEXT_NRURIKAKE + "' " + 
                " ,IDTOKUISAKI " + 
                " ,DTTORIHIKI " + 
                " ,KBURITORI " + 
                " ,KBURIHURI " + 
                " ,'2' " + 
                " ,'F' " + 
                " ,IDHINMOKU " + 
                " ,TXHINBAN " + 
                " ,TXHINMEI " + 
                " ,KBUNIT " + 
                " ,PRTORIHIKI " + 
                " ,QTTORIHIKI " + 
                " ,AMTAX " + 
                " ,AMGENKA " + 
                " ,NRSOURCE " + 
                " ,NRSEIKYU " + 
                " ,DTCREATE " + 
                " ,TXREFNO " + 
                " ,DTNEND " + 
                " ,DTMSEQ " + 
                " ,AMARARI " + 
                " ,(AMZOUGEN * -1) " + 
                " ,AMTORIHIKI " + 
                " ,TLN_CHAR_TO_DATE('YMDHMS','" + tln_timestamp(tln_com_nowdate_str()) + "') " + 
                " ,'" + tln_com_user_id() + "' " + 
                " ,'" + tln_com_func_id() + "' " + 
                " ,TLN_CHAR_TO_DATE('YMDHMS','" + tln_timestamp(tln_com_nowdate_str()) + "') " + 
                " ,'" + tln_com_user_id() + "' " + 
                " ,'" + tln_com_func_id() + "' " + 
                " ,0    " + 
                " FROM ET100       " + 
                " WHERE NRURIKAKE = '" + _NRURIKAKE + "'"
                );
}

//-------------------------------------------
//［部品］製造指示[JT010]
//-------------------------------------------
function selectJT010(_NRSEIZO) {
    var sql = 
    " SELECT  " + 
    "  NRSEIZO " + 
    " ,IDTOKUISAKI " + 
    " ,SQSYUKKASAKI " + 
    " ,TXTYUMONBANGO " + 
    " ,IDHINMOKU " + 
    " ,DTNOUKI " + 
    " ,QTJYUTYU " + 
    " ,QTSYUKKA " + 
    " ,QTSEIZO " + 
    " ,QTKANSEI " + 
    " ,QTHURYO " + 
    " ,QTHAIKI " + 
    " ,AMGENKA " + 
    " ,PRMITSUMORI " + 
    " ,PRJYUTYU " + 
    " ,TXTEKIYO " + 
    " ,CDSOUKOKAN " + 
    " ,CDSOUKOZAI " + 
    " ,DTCREATE " + 
    " ,DTHAKKO " + 
    " ,DTSYUKKO " + 
    " ,DTKANSEI " + 
    " ,DTSYUKKA " + 
    " ,DTCANCEL " + 
    " ,NRSOURCE " + 
    " ,STSEIZO " + 
    " ,PRYOTEIGEN " + 
    " ,AMHANBAI " + 
    " ,AMARARI " + 
    " ,PRGENKA " + 
    " ,TXSEIZOYOTEI " + 
    " ,CREATED_DATE " + 
    " ,CREATED_BY " + 
    " ,CREATED_PRG_NM " + 
    " ,UPDATED_DATE " + 
    " ,UPDATED_BY " + 
    " ,UPDATED_PRG_NM " + 
    " ,MODIFY_COUNT " + 
    " FROM JT010  " + 
    " WHERE JT010.NRSEIZO = '" + _NRSEIZO + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}
function updateJT010(itemDataList) {
    //項目
    var itemColNameTbl = [
         'NRSEIZO'
        ,'IDTOKUISAKI'
        ,'SQSYUKKASAKI'
        ,'TXTYUMONBANGO'
        ,'IDHINMOKU'
        ,'DTNOUKI'
        ,'QTJYUTYU'
        ,'QTSYUKKA'
        ,'QTSEIZO'
        ,'QTKANSEI'
        ,'QTHURYO'
        ,'QTHAIKI'
        ,'AMGENKA'
        ,'PRMITSUMORI'
        ,'PRJYUTYU'
        ,'TXTEKIYO'
        ,'CDSOUKOKAN'
        ,'CDSOUKOZAI'
        ,'DTCREATE'
        ,'DTHAKKO'
        ,'DTSYUKKO'
        ,'DTKANSEI'
        ,'DTSYUKKA'
        ,'DTCANCEL'
        ,'NRSOURCE'
        ,'STSEIZO'
        ,'PRYOTEIGEN'
        ,'AMHANBAI'
        ,'AMARARI'
        ,'PRGENKA'
        ,'TXSEIZOYOTEI'
        ,'CREATED_DATE'
        ,'CREATED_BY'
        ,'CREATED_PRG_NM'
        ,'UPDATED_DATE'
        ,'UPDATED_BY'
        ,'UPDATED_PRG_NM'
        ,'MODIFY_COUNT'
    ];

    var itemSelectList = selectJT010(itemDataList['NRSEIZO']);

    var lineDataMap = itemSelectList[0];
    var _MODIFY_COUNT = lineDataMap['MODIFY_COUNT'];

    //UPDATE
    itemDataList['UPDATED_DATE']   = tln_com_nowdate();
    itemDataList['UPDATED_BY']     = tln_com_user_id();
    itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
    itemDataList['MODIFY_COUNT']   = (_MODIFY_COUNT + 1);

    var whereList = new Array();
    var whereTbl1 = [ null, '=' , 'NRSEIZO' ];
    whereList.push(whereTbl1);

    TALON.updateByMap( 'JT010', itemDataList , itemColNameTbl , whereList );
}

//-------------------------------------------
//［部品］製造指示工程明細[JT030]
//-------------------------------------------
function selectJT030(_NRSEIZO) {
    var sql = 
    " SELECT  " + 
    "  JT030.NRSEIZO " + 
    " ,JT030.SQKOUTEI " + 
    " ,JT030.CDKOUTEI " + 
    " ,JT030.SQCENTER " + 
    " ,JT030.LTSEIZO " + 
    " ,JT030.DTFROM " + 
    " ,JT030.TMFROM " + 
    " ,JT030.DTTHRU " + 
    " ,JT030.TMTHRU " + 
    " ,JT030.SQLIST " + 
    " ,JT030.TXSAGYOYOTEI " + 
    " ,JT030.AMKAKOU " + 
    " ,JT030.CREATED_DATE " + 
    " ,JT030.CREATED_BY " + 
    " ,JT030.CREATED_PRG_NM " + 
    " ,JT030.UPDATED_DATE " + 
    " ,JT030.UPDATED_BY " + 
    " ,JT030.UPDATED_PRG_NM " + 
    " ,JT030.MODIFY_COUNT " + 
    " ,BT060.RTKAKOU " + 
    " FROM JT030  " + 
    " INNER JOIN BT060 " + 
    "    ON BT060.CDKOUTEI = JT030.CDKOUTEI " + 
    "   AND BT060.SQCENTER = JT030.SQCENTER " + 
    " WHERE JT030.NRSEIZO = '" + _NRSEIZO + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}
function updateJT030(itemDataList) {
    //項目
    var itemColNameTbl = [
         'NRSEIZO'
        ,'SQKOUTEI'
        ,'CDKOUTEI'
        ,'SQCENTER'
        ,'LTSEIZO'
        ,'DTFROM'
        ,'TMFROM'
        ,'DTTHRU'
        ,'TMTHRU'
        ,'SQLIST'
        ,'TXSAGYOYOTEI'
        ,'AMKAKOU'
        ,'CREATED_DATE'
        ,'CREATED_BY'
        ,'CREATED_PRG_NM'
        ,'UPDATED_DATE'
        ,'UPDATED_BY'
        ,'UPDATED_PRG_NM'
        ,'MODIFY_COUNT'
    ];

    var itemSelectList = selectJT030(itemDataList['NRSEIZO']);

    var lineDataMap = itemSelectList[0];
    var _MODIFY_COUNT = lineDataMap['MODIFY_COUNT'];

    //UPDATE
    itemDataList['UPDATED_DATE']   = tln_com_nowdate();
    itemDataList['UPDATED_BY']     = tln_com_user_id();
    itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
    itemDataList['MODIFY_COUNT']   = (_MODIFY_COUNT + 1);

    var whereList = new Array();
    var whereTbl1 = [ null, '=' , 'NRSEIZO' ];
    var whereTbl2 = [ null, '=' , 'SQKOUTEI' ];
    whereList.push(whereTbl1);
    whereList.push(whereTbl2);

    TALON.updateByMap( 'JT030', itemDataList , itemColNameTbl , whereList );

}


//-------------------------------------------
//［部品］製造指示材料明細[JT040]
//-------------------------------------------
function selectJT040(_NRSEIZO) {
    var sql = 
    " SELECT  " + 
    "  JT040.NRSEIZO " + 
    " ,JT040.SQZAIRYO " + 
    " ,JT040.IDHINMOKU " + 
    " ,JT040.QTTOUNYU " + 
    " ,JT040.SQKOUTEI " + 
    " ,JT040.PRYOTEI " + 
    " ,JT040.PRSYUKKO " + 
    " ,JT040.SQLIST " + 
    " ,JT040.CDSOUKO " + 
    " ,JT040.CREATED_DATE " + 
    " ,JT040.CREATED_BY " + 
    " ,JT040.CREATED_PRG_NM " + 
    " ,JT040.UPDATED_DATE " + 
    " ,JT040.UPDATED_BY " + 
    " ,JT040.UPDATED_PRG_NM " + 
    " ,JT040.MODIFY_COUNT " + 
    " FROM JT040  " + 
    " WHERE JT040.NRSEIZO = '" + _NRSEIZO + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}

//-------------------------------------------
//［部品］売掛振替[LT010]
//-------------------------------------------
function selectLT010(_NRURIHURI) {
    var sql = 
    " SELECT  " + 
    "  NRURIHURI " + 
    " ,KBURIHURI " + 
    " ,DTHURIKAE " + 
    " ,IDTOKUISAKI " + 
    " ,AMHURIKAE " + 
    " ,TXTEKIYO " + 
    " ,NRSEIKYU " + 
    " ,NRSOURCE " + 
    " ,CREATED_DATE " + 
    " ,CREATED_BY " + 
    " ,CREATED_PRG_NM " + 
    " ,UPDATED_DATE " + 
    " ,UPDATED_BY " + 
    " ,UPDATED_PRG_NM " + 
    " ,MODIFY_COUNT " + 
    " ,KBZOUGEN " + 
    " FROM LT010  " + 
    " WHERE LT010.NRURIHURI = '" + _NRURIHURI + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}


//-------------------------------------------
//［部品］特殊売上[LT020]
//-------------------------------------------
function selectLT020(_NRTOKUURI) {
    var sql = 
    " SELECT  " + 
    " NRTOKUURI " + 
    ",KBTOKUURI " + 
    ",IDTOKUISAKI " + 
    ",SQSYUKKASAKI " + 
    ",DTTORIHIKI " + 
    ",IDHINMOKU " + 
    ",CDSOUKO " + 
    ",PRTORIHIKI " + 
    ",QTTORIHIKI " + 
    ",PRZAIKO " + 
    ",QTZAIKO " + 
    ",TXTEKIYO " + 
    ",NRSOURCE " + 
    ",AMTORIHIKI " + 
    ",AMTAX " + 
    ",CREATED_DATE " + 
    ",CREATED_BY " + 
    ",CREATED_PRG_NM " + 
    ",UPDATED_DATE " + 
    ",UPDATED_BY " + 
    ",UPDATED_PRG_NM " + 
    ",MODIFY_COUNT  " + 
    " FROM LT020  " + 
    " WHERE LT020.NRTOKUURI = '" + _NRTOKUURI + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}

//-------------------------------------------
//［部品］在庫振替[MT010]
//-------------------------------------------
function selectMT010(_NRZAIHURI) {
    var sql = 
    " SELECT  " + 
    "     NRZAIHURI        " + 
    "    ,CDSOUKO          " + 
    "    ,DTHURIKAE        " + 
    "    ,KBZOUGEN         " + 
    "    ,KBZAIHURI        " + 
    "    ,IDHINMOKU        " + 
    "    ,PRHURIKAE        " + 
    "    ,QTHURIKAE        " + 
    "    ,TXTEKIYO         " + 
    "    ,NRSOURCE         " + 
    "    ,CREATED_DATE     " + 
    "    ,CREATED_BY       " + 
    "    ,CREATED_PRG_NM   " + 
    "    ,UPDATED_DATE     " + 
    "    ,UPDATED_BY       " + 
    "    ,UPDATED_PRG_NM   " + 
    "    ,MODIFY_COUNT     " + 
    " FROM MT010  " + 
    " WHERE NRZAIHURI = '" + _NRZAIHURI + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}

//-------------------------------------------
//［部品］棚卸指示[MT020]
//-------------------------------------------
function selectMT020(_NRTANAOROSI) {
    var sql = 
    " SELECT  " + 
    "     NRTANAOROSI        " + 
    "    ,CDSOUKO            " + 
    "    ,DTKIJYUN           " + 
    "    ,DTKAKUTEI          " + 
    "    ,TXTEKIYO           " + 
    "    ,NRSOURCE           " + 
    "    ,DTKIJYUNWORK       " + 
    "    ,STTANAOROSI        " + 
    "    ,CREATED_DATE       " + 
    "    ,CREATED_BY         " + 
    "    ,CREATED_PRG_NM     " + 
    "    ,UPDATED_DATE       " + 
    "    ,UPDATED_BY         " + 
    "    ,UPDATED_PRG_NM     " + 
    "    ,MODIFY_COUNT       " + 
    " FROM MT020  " + 
    " WHERE NRTANAOROSI = '" + _NRTANAOROSI + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}

//-------------------------------------------
//［部品］棚卸指示明細[MT021]
//-------------------------------------------
function selectMT021(_NRTANAOROSI,_IDHINMOKU) {
    var sql = 
    " SELECT  " + 
    "     NRTANAOROSI         " + 
    "    ,IDHINMOKU           " + 
    "    ,PRKIJYUN            " + 
    "    ,QTKIJYUN            " + 
    "    ,PRJITSUTANA         " + 
    "    ,QTJITSUTANA         " + 
    "    ,QTDIFF              " + 
    "    ,AMDIFF              " + 
    "    ,CREATED_DATE        " + 
    "    ,CREATED_BY          " + 
    "    ,CREATED_PRG_NM      " + 
    "    ,UPDATED_DATE        " + 
    "    ,UPDATED_BY          " + 
    "    ,UPDATED_PRG_NM      " + 
    "    ,MODIFY_COUNT        " + 
    " FROM MT021  " + 
    " WHERE NRTANAOROSI = '" + _NRTANAOROSI + "' " +
    "   AND IDHINMOKU   = '" + _IDHINMOKU + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}
function updateMT021(itemDataList) {
    //項目
    var itemColNameTbl = [
         'NRTANAOROSI'
        ,'IDHINMOKU'
        ,'PRKIJYUN'
        ,'QTKIJYUN'
        ,'PRJITSUTANA'
        ,'QTJITSUTANA'
        ,'QTDIFF'
        ,'AMDIFF'
        ,'CREATED_DATE'
        ,'CREATED_BY'
        ,'CREATED_PRG_NM'
        ,'UPDATED_DATE'
        ,'UPDATED_BY'
        ,'UPDATED_PRG_NM'
        ,'MODIFY_COUNT'
    ];

    //共通
    itemDataList['CREATED_DATE']   = tln_com_nowdate();
    itemDataList['CREATED_BY']     = tln_com_user_id();
    itemDataList['CREATED_PRG_NM'] = tln_com_func_id();
    itemDataList['UPDATED_DATE']   = tln_com_nowdate();
    itemDataList['UPDATED_BY']     = tln_com_user_id();
    itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
    itemDataList['MODIFY_COUNT']   = 1;

    TALON.insertByMap( 'MT021', itemDataList , itemColNameTbl );

}

//-------------------------------------------
//［部品］棚卸指示明細[MT021]
//-------------------------------------------
function selectMT021_NRTANAOROSI(_NRTANAOROSI) {
    var sql = 
    " SELECT  " + 
    "     NRTANAOROSI         " + 
    "    ,IDHINMOKU           " + 
    "    ,PRKIJYUN            " + 
    "    ,QTKIJYUN            " + 
    "    ,PRJITSUTANA         " + 
    "    ,QTJITSUTANA         " + 
    "    ,QTDIFF              " + 
    "    ,AMDIFF              " + 
    "    ,CREATED_DATE        " + 
    "    ,CREATED_BY          " + 
    "    ,CREATED_PRG_NM      " + 
    "    ,UPDATED_DATE        " + 
    "    ,UPDATED_BY          " + 
    "    ,UPDATED_PRG_NM      " + 
    "    ,MODIFY_COUNT        " + 
    " FROM MT021  " + 
    " WHERE NRTANAOROSI = '" + _NRTANAOROSI + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}


//-------------------------------------------
//［部品］在庫移動指示[MT030]
//-------------------------------------------
function selectMT030(_NRZAIIDOU) {
    var sql = 
    " SELECT  " + 
    "     NRZAIIDOU        " + 
    "    ,CDSOUKOFROM      " + 
    "    ,CDSOUKOTHRU      " + 
    "    ,DTSHIJI          " + 
    "    ,DTKANRYOU        " + 
    "    ,TXTEKIYO         " + 
    "    ,NRSOURCE         " + 
    "    ,STZAIIDOU        " + 
    "    ,CREATED_DATE     " + 
    "    ,CREATED_BY       " + 
    "    ,CREATED_PRG_NM   " + 
    "    ,UPDATED_DATE     " + 
    "    ,UPDATED_BY       " + 
    "    ,UPDATED_PRG_NM   " + 
    "    ,MODIFY_COUNT     " + 
    " FROM MT030  " + 
    " WHERE NRZAIIDOU = '" + _NRZAIIDOU + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}


//-------------------------------------------
//［部品］在庫移動指示明細[MT031]
//-------------------------------------------
function selectMT031_NRZAIIDOU(_NRZAIIDOU) {
    var sql = 
    " SELECT  " + 
    "     NRZAIIDOU      " + 
    "    ,IDHINMOKU      " + 
    "    ,PRZAIIDOU      " + 
    "    ,QTZAIIDOU      " + 
    "    ,CREATED_DATE   " + 
    "    ,CREATED_BY     " + 
    "    ,CREATED_PRG_NM " + 
    "    ,UPDATED_DATE   " + 
    "    ,UPDATED_BY     " + 
    "    ,UPDATED_PRG_NM " + 
    "    ,MODIFY_COUNT   " + 
    " FROM MT031  " + 
    " WHERE NRZAIIDOU = '" + _NRZAIIDOU + "' " 
    ;
    var itemSelectList = TALON.select(sql);

    return itemSelectList;
}







//-------------------------------------------
//［部品］工程日付計算リバース
//-------------------------------------------
function calcDTTM_R(sBasDy,sBasTm,sLet,_kakof,_kakot,_calender) {

    var rec  = '';

    var flg1 = true;
    var flg2 = true;

    sBasDy = sBasDy.toString().split(" ")[0];

    tln_com_log("☆R[param       ]" + sBasDy + " / " +  sBasTm + " / " +  sLet + " / " +  _kakof + " / " +  _kakot + " / " + _calender);

    //スタート時点の基準日が既に稼働対象外の場合は直近の稼働に変更する
    if (_kakot < sBasTm ) {
        tln_com_log("☆R[param       ] (1)");
        sBasTm = _kakot;
    }
    if (_kakof > sBasTm ) {
        tln_com_log("☆R[param       ] (2)");
        sBasTm = _kakot;

        //前日完了
        var wdate = tln_com_todatetime(sBasDy + " " + "00:00:00");
        wdate.setMinutes(wdate.getMinutes() - 1);
        var tdate = tln_com_date2string2(wdate);
        sBasDy = tdate.toString().split(" ")[0];

        flg2 = true;
        while (flg2){
            if (getHOLIDAY_FLG(_calender,sBasDy + ' 00:00:00') == '0') {
                flg2 = false;
            } else {
                wdate = tln_com_todatetime(sBasDy + ' 00:00:00');
                wdate.setMinutes(wdate.getMinutes() - 1);

                var tdate = tln_com_date2string2(wdate);
                sBasDy = tdate.toString().split(" ")[0];
            }
        }
    }

    rec = sBasDy + " " + sBasTm;

    while (flg1){
        sBasDy = sBasDy.toString().split(" ")[0];
        var wdate = tln_com_todatetime(sBasDy + " " + sBasTm);
        var wdatl = tln_com_todatetime(sBasDy + " " + sBasTm);
        wdatl.setMinutes(wdate.getMinutes() - sLet);
        var wdats = tln_com_todatetime(sBasDy + " " + _kakof);

        var tdate = tln_com_date2string2(wdatl);
        var tDat = tdate.toString().split(" ")[0];
        var tTim = tdate.toString().split(" ")[1];
        tTim = tln_com_lcut(tTim,5);

        tln_com_log("☆R[wdate       ]" + wdate);
        tln_com_log("☆R[sLet        ]" + sLet);
        tln_com_log("☆R[wdatl       ]" + wdatl);
        tln_com_log("☆R[wdats       ]" + wdats);
        tln_com_log("☆R[tDat        ]" + tDat);
        tln_com_log("☆R[sBasDy      ]" + sBasDy);
        tln_com_log("☆R[tTim        ]" + tTim);
        tln_com_log("☆R[kakof       ]" + _kakof);

        if (tDat == sBasDy && tTim >= _kakof) {
            sBasTm = tTim;

            flg1 = false;
        } else {
            //日付が異なっている場合、もしくは同日でも稼働開始時間より前の開始時刻の場合
            //基準から開始日までの時間を計算し残りリードタイムを計算し
            //基準日を前日、基準時間を稼働終了時刻にして再度実施

            //var sWok = wdats - wdate;
            var sWok = getDiff(tln_com_date2string2(wdats),tln_com_date2string2(wdate));
            if (sWok < 0) {
                sWok = sWok * -1;
            }

            sLet = sLet - sWok;

            tln_com_log("☆R[sWok        ]" + sWok);
            tln_com_log("☆R[sLet        ]" + sLet);

            var wdate = tln_com_todatetime(sBasDy + " " + "00:00:00");
            wdate.setMinutes(wdate.getMinutes() - 1);
            var tdate = tln_com_date2string2(wdate);
            sBasDy = tdate.toString().split(" ")[0];

            flg2 = true;
            while (flg2){
                if (getHOLIDAY_FLG(_calender,sBasDy + ' 00:00:00') == '0') {
                    flg2 = false;
                } else {
                    wdate = tln_com_todatetime(sBasDy + ' 00:00:00');
                    wdate.setMinutes(wdate.getMinutes() - 1);

                    var tdate = tln_com_date2string2(wdate);
                    sBasDy = tdate.toString().split(" ")[0];
                }
            }

            sBasTm = _kakot;
        }
    }

tln_com_log("☆R[return      ]" + (sBasDy + " " + sBasTm + "," + rec));

    return (sBasDy + " " + sBasTm + "," + rec);

}


//-------------------------------------------
//［部品］工程日付計算フォワード
//返り値：(完了日),(開始日) 
//-------------------------------------------
function calcDTTM_F(sBasDy,sBasTm,sLet,_kakof,_kakot,_calender) {

    var rec  = '';

    var flg1 = true;
    var flg2 = true;

    sBasDy = sBasDy.toString().split(" ")[0];

    tln_com_log("☆F[param       ]" + sBasDy + " / " +  sBasTm + " / " +  sLet + " / " +  _kakof + " / " +  _kakot + " / " + _calender);

    //スタート時点の基準日が既に稼働対象外の場合は直近の稼働に変更する
    if (_kakof > sBasTm ) {
        tln_com_log("☆F[param       ] (1)");
        sBasTm = _kakof;
    }
    if (_kakot < sBasTm ) {
        tln_com_log("☆F[param       ] (2)");

        sBasTm = _kakof;

        //翌日開始
        var wdate = tln_com_todatetime(sBasDy + " " + "23:59:00");
        wdate.setMinutes(wdate.getMinutes() + 1);
        var tdate = tln_com_date2string2(wdate);
        sBasDy = tdate.toString().split(" ")[0];

        flg2 = true;
        while (flg2){
            if (getHOLIDAY_FLG(_calender,sBasDy + ' 00:00:00') == '0') {
                flg2 = false;
            } else {
                wdate = tln_com_todatetime(sBasDy + ' 23:59:00');
                wdate.setMinutes(wdate.getMinutes() + 2);

                var tdate = tln_com_date2string2(wdate);
                sBasDy = tdate.toString().split(" ")[0];
            }
        }
    }

    rec = sBasDy + " " + sBasTm;

    while (flg1){
        sBasDy = sBasDy.toString().split(" ")[0];
        var wdate = tln_com_todatetime(sBasDy + " " + sBasTm);
        var wdatl = tln_com_todatetime(sBasDy + " " + sBasTm);
        wdatl.setMinutes(wdate.getMinutes() + sLet);
        var wdats = tln_com_todatetime(sBasDy + " " + _kakot);

        var tdate = tln_com_date2string2(wdatl);
        var tDat = tdate.toString().split(" ")[0];
        var tTim = tdate.toString().split(" ")[1];
        tTim = tln_com_lcut(tTim,5);

        tln_com_log("☆F[wdate       ]" + wdate);
        tln_com_log("☆F[sLet        ]" + sLet);
        tln_com_log("☆F[wdatl       ]" + wdatl);
        tln_com_log("☆F[wdats       ]" + wdats);
        tln_com_log("☆F[tDat        ]" + tDat);
        tln_com_log("☆F[sBasDy      ]" + sBasDy);
        tln_com_log("☆F[tTim        ]" + tTim);
        tln_com_log("☆F[_kakof      ]" + _kakof);

        if (tDat == sBasDy && tTim <= _kakot) {
            sBasTm = tTim;

            flg1 = false;
        } else {
            //日付が異なっている場合、もしくは同日でも稼働完了時間より先の終了時刻の場合
            //基準から終了日までの時間を計算し残りリードタイムを計算し
            //基準日を翌日、基準時間を稼働開始時刻にして再度実施

            //var sWok = wdats - wdate;
            var sWok = getDiff(tln_com_date2string2(wdats),tln_com_date2string2(wdate));
            if (sWok < 0) {
                sWok = sWok * -1;
            }

            sLet = sLet - sWok;

            tln_com_log("☆F[sWok       ]" + sWok);
            tln_com_log("☆F[sLet       ]" + sLet);

            var wdate = tln_com_todatetime(sBasDy + " " + "23:59:00");
            wdate.setMinutes(wdate.getMinutes() + 2);
            var tdate = tln_com_date2string2(wdate);
            sBasDy = tdate.toString().split(" ")[0];

            flg2 = true;
            while (flg2){
                if (getHOLIDAY_FLG(_calender,sBasDy + ' 00:00:00') == '0') {
                    flg2 = false;
                } else {
                    wdate = tln_com_todatetime(sBasDy + ' 23:59:00');
                    wdate.setMinutes(wdate.getMinutes() + 2);

                    var tdate = tln_com_date2string2(wdate);
                    sBasDy = tdate.toString().split(" ")[0];
                }
            }

            sBasTm = _kakof;
        }
    }

    tln_com_log("☆R[return      ]" + (sBasDy + " " + sBasTm + "," + rec));

    return (sBasDy + " " + sBasTm + "," + rec);

}


function getDiff(date1Str, date2Str) {
    var date1 = new Date(date1Str);
    var date2 = new Date(date2Str);
 
    var msDiff = date2.getTime() - date1.getTime();
 
    var daysDiff = Math.floor(msDiff / (1000 * 60));
 
    return (++daysDiff) - 1;
}





```

#### サーバJS ライブラリ: XDMF_JS002_0 ([共通]仕入関連)

```javascript
//-------------------------------------------
//［処理］入庫処理
//-------------------------------------------
//入庫新規登録
//　1 : 品目コード
//　2 : 取引先コード
//　3 : 倉庫コード
//　4 : 取引日
//　5 : 数量
//　6 : 税抜金額
//　7 : ソース番号
//　8 : 参照番号
function exec_nyuko_ins(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _SURYO, _ZEINUKI_KINGAKU, _NRSOURCE, _TXREFNO) {

	//数値準備
	var itemSelectList = selectBT010(_HINMOKU);
	var lineDataMap = itemSelectList[0];

	var _C_SURYO			= _SURYO;
	var _C_ZEIGAKU			= _ZEINUKI_KINGAKU * getTAX_RATE(_TORIHIKIDATE);
	var _C_KINGAKU_NUKI		= _ZEINUKI_KINGAKU;
	var _C_KINGAKU_KOMI		= _ZEINUKI_KINGAKU + _C_ZEIGAKU;
	var _C_TANKA_NUKI		= _C_KINGAKU_NUKI / _C_SURYO;
	var _C_TANKA_KOMI		= _C_KINGAKU_KOMI / _C_SURYO;

	var _C_SURYO_KEISU		= _C_SURYO * lineDataMap['VLKANZAN'];
	var _C_TANKA_KOMI_KEISU	= _C_KINGAKU_KOMI / _C_SURYO_KEISU;



	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数(係数込取引数)
		itemDataList['QTNYUKO']        = _C_SURYO_KEISU;
		//期間出庫数
		itemDataList['QTSYUKKO']       = 0;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額(税込金額)
		itemDataList['AMNYUKO']        = _C_KINGAKU_KOMI;
		//期間出庫額
		itemDataList['AMSYUKKO']       = 0;

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数(係数込取引数)
		itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + _C_SURYO_KEISU;
		//期間出庫数
		itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額(税込金額)
		itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + _C_KINGAKU_KOMI;
		//期間出庫額
		itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];

	}

	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------
	var itemDataList = new Array();

	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//受払区分 (030 : 仕入入庫)
	itemDataList['KBUKEBARAI']    = "030";
	//振替区分 (Null)
	itemDataList['KBZAIHURI']     = "";
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//倉庫Ｃ
	itemDataList['CDSOUKO']       = _SOUKO;
	//相手先名
	itemDataList['TXAITESAKI']    = _TORIHIKISAKI;
	//取引単価(係数込税込単価)
	itemDataList['PRTORIHIKI']    = _C_TANKA_KOMI_KEISU;
	//取引数(係数込取引数)
	itemDataList['QTTORIHIKI']    = _C_SURYO_KEISU;
	//取引額(税込金額)
	itemDataList['AMTORIHIKI']    = _C_KINGAKU_KOMI;
	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減数(係数込取引数)
	itemDataList['QTZOUGEN']      = _C_SURYO_KEISU;
	//残高増減額(税込金額
	itemDataList['AMZOUGEN']      = _C_KINGAKU_KOMI;

	updateFT100(itemDataList);



	//買掛履歴作成
	//--------------------
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']   = _TORIHIKISAKI;
	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//取引区分 (00:入荷仕入)
	itemDataList['KBKAITORI']     = "00";
	//振替区分 (Null)
	itemDataList['KBKAIHURI']     = "";
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//取引単価(税抜単価)
	itemDataList['PRTORIHIKI']    = _C_TANKA_NUKI;
	//取引数
	itemDataList['QTTORIHIKI']    = _C_SURYO;
	//税抜取引額(税抜金額)
	itemDataList['AMTORIHIKI']    = _C_KINGAKU_NUKI;
	//消費税額
	itemDataList['AMTAX']         = _C_ZEIGAKU;
	//支払依頼№
	itemDataList['NRSIHARAI']     = "";
	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減額(税込金額)
	itemDataList['AMZOUGEN']      = _C_KINGAKU_KOMI;

	updateDT100(itemDataList);



	//仕入先情報更新
	//--------------------
	var itemDataList = new Array();

	//仕入先情報取得
	var itemSelectList = selectDT010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']    = lineDataMap['IDSIIRESAKI'];
	//支払方法区分
	itemDataList['KBSIHARAI']      = lineDataMap['KBSIHARAI'];
	//振込銀行口座
	itemDataList['TXHURIKOMI']     = lineDataMap['TXHURIKOMI'];
	//摘要
	itemDataList['TXTEKIYO']       = lineDataMap['TXTEKIYO'];
	//期首買掛残高
	itemDataList['AMKISYUKAIKAKE'] = lineDataMap['AMKISYUKAIKAKE'];
	//期間仕入額(税込金額)
	itemDataList['AMSIIRE']        = lineDataMap['AMSIIRE'] + _C_KINGAKU_KOMI;
	//期間支払額
	itemDataList['AMSIHARAI']      = lineDataMap['AMSIHARAI'];
	//現買掛残高
	itemDataList['AMGENKAIKAKE']   = lineDataMap['AMGENKAIKAKE'];

	updateDT010(itemDataList);


}
//-------------------------------------------
//入庫取消削除
//　1 : 品目コード
//　2 : 取引先
//　3 : 倉庫
//　4 : 取引日
//　5 : 数量
//　6 : 税抜金額
//　7 : ソース番号
//　8 : 参照番号
//
//　* : 在庫取引№
//　* : 買掛取引№
function exec_nyuko_del(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _SURYO, _ZEINUKI_KINGAKU, _NRSOURCE, _TXREFNO, 
					_NRZAITORI, _NRKAIKAKE) {

	//数値準備
	// * var itemSelectList = selectBT010(_HINMOKU);
	// * var lineDataMap = itemSelectList[0];
	// * 
	// * var _C_SURYO			= _SURYO;
	// * var _C_ZEIGAKU			= _ZEINUKI_KINGAKU * getTAX_RATE(_TORIHIKIDATE);
	// * var _C_KINGAKU_NUKI	= _ZEINUKI_KINGAKU;
	// * var _C_KINGAKU_KOMI	= _ZEINUKI_KINGAKU + _C_ZEIGAKU;
	// * var _C_TANKA_NUKI		= _C_KINGAKU_NUKI / _C_SURYO;
	// * var _C_TANKA_KOMI		= _C_KINGAKU_KOMI / _C_SURYO;
	// * 
	// * var _C_SURYO_KEISU		= _C_SURYO * lineDataMap['VLKANZAN'];
	// * var _C_TANKA_KOMI_KEISU	= _C_KINGAKU_KOMI / _C_SURYO_KEISU;

	var itemSelectList = selectFT100(_NRZAITORI);
	var lineDataMapFT100 = itemSelectList[0];
	var itemSelectList = selectDT100(_NRKAIKAKE);
	var lineDataMapDT100 = itemSelectList[0];

	var _C_SURYO			= lineDataMapDT100['QTTORIHIKI'];
	var _C_ZEIGAKU			= lineDataMapDT100['AMTAX'];
	var _C_KINGAKU_NUKI		= lineDataMapDT100['AMTORIHIKI'];
	var _C_KINGAKU_KOMI		= lineDataMapDT100['AMZOUGEN'];
	var _C_TANKA_NUKI		= lineDataMapDT100['PRTORIHIKI'];
	//var _C_TANKA_KOMI		= (使用無し)

	var _C_SURYO_KEISU		= lineDataMapFT100['QTTORIHIKI'];
	var _C_TANKA_KOMI_KEISU	= lineDataMapFT100['PRTORIHIKI'];




	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数(係数込取引数)
		itemDataList['QTNYUKO']        = _C_SURYO_KEISU * -1;
		//期間出庫数
		itemDataList['QTSYUKKO']       = 0;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額(税込金額)
		itemDataList['AMNYUKO']        = _C_KINGAKU_KOMI * -1;
		//期間出庫額
		itemDataList['AMSYUKKO']       = 0;

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数(係数込取引数)
		itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + (_C_SURYO_KEISU * -1);
		//期間出庫数
		itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額(税込金額)
		itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + (_C_KINGAKU_KOMI * -1);
		//期間出庫額
		itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];

	}

	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------

	// * var itemDataList = new Array();
	// * 
	// * //取引日
	// * itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	// * //受払区分 (030 : 仕入入庫)
	// * itemDataList['KBUKEBARAI']    = "030";
	// * //振替区分 (Null)
	// * itemDataList['KBZAIHURI']     = "";
	// * //赤黒     (2:赤伝)
	// * itemDataList['KBAKADEN']      = "2";
	// * //効区     (F:無効)
	// * itemDataList['FGVALID']       = "F";
	// * //品目ID
	// * itemDataList['IDHINMOKU']     = _HINMOKU;
	// * //倉庫Ｃ
	// * itemDataList['CDSOUKO']       = _SOUKO;
	// * //相手先名
	// * itemDataList['TXAITESAKI']    = _TORIHIKISAKI;
	// * //取引単価(係数込税込単価)
	// * itemDataList['PRTORIHIKI']    = _C_TANKA_KOMI_KEISU;
	// * //取引数(係数込取引数)
	// * itemDataList['QTTORIHIKI']    = _C_SURYO_KEISU;
	// * //取引額(税込金額)
	// * itemDataList['AMTORIHIKI']    = _C_KINGAKU_KOMI;
	// * //取引ソース№
	// * itemDataList['NRSOURCE']      = _NRSOURCE;
	// * //登録日時
	// * itemDataList['DTCREATE']      = tln_com_nowdate();
	// * //参照番号
	// * itemDataList['TXREFNO']       = _TXREFNO;
	// * //年度(Null)
	// * itemDataList['DTNEND']        = '';
	// * //月序(Null)
	// * itemDataList['DTMSEQ']        = '';
	// * //残高増減数(係数込取引数)
	// * itemDataList['QTZOUGEN']      = _C_SURYO_KEISU * -1;
	// * //残高増減額(税込金額)
	// * itemDataList['AMZOUGEN']      = _C_KINGAKU_KOMI * -1;
	// *
	// * updateFT100(itemDataList);
	// * 

	insertAkaFT100(_NRZAITORI);



	//入出庫履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）

	TALON.update( " UPDATE FT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBUKEBARAI = '" + "030" + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE   + "'"
				);



	//買掛履歴作成
	//--------------------
	// * var itemDataList = new Array();
	// * 
	// * //仕入先ID
	// * itemDataList['IDSIIRESAKI']   = _TORIHIKISAKI;
	// * //取引日
	// * itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	// * //取引区分 (00:入荷仕入)
	// * itemDataList['KBKAITORI']     = "00";
	// * //振替区分 (Null)
	// * itemDataList['KBKAIHURI']     = "";
	// * //赤黒     (2:赤伝)
	// * itemDataList['KBAKADEN']      = "2";
	// * //効区     (F:無効)
	// * itemDataList['FGVALID']       = "F";
	// * //品目ID
	// * itemDataList['IDHINMOKU']     = _HINMOKU;
	// * //取引単価(税抜単価)
	// * itemDataList['PRTORIHIKI']    = _C_TANKA_NUKI;
	// * //取引数
	// * itemDataList['QTTORIHIKI']    = _C_SURYO;
	// * //税抜取引額(税抜金額)
	// * itemDataList['AMTORIHIKI']    = _C_KINGAKU_NUKI;
	// * //消費税額(消費税額)
	// * itemDataList['AMTAX']         = _C_ZEIGAKU;
	// * //支払依頼№
	// * itemDataList['NRSIHARAI']     = "";
	// * //取引ソース№
	// * itemDataList['NRSOURCE']      = _NRSOURCE;
	// * //登録日時
	// * itemDataList['DTCREATE']      = tln_com_nowdate();
	// * //参照番号
	// * itemDataList['TXREFNO']       = _TXREFNO;
	// * //年度(Null)
	// * itemDataList['DTNEND']        = '';
	// * //月序(Null)
	// * itemDataList['DTMSEQ']        = '';
	// * //残高増減額(税込金額)
	// * itemDataList['AMZOUGEN']      = _C_KINGAKU_KOMI * -1;
	// * 
	// * updateDT100(itemDataList);
	// * 

	insertAkaDT100(_NRKAIKAKE);



	//買掛履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）

	TALON.update( " UPDATE DT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBKAITORI  = '" + "00" + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE  + "'"
				);



	//仕入先情報更新
	//--------------------

	//仕入先情報取得
	var itemSelectList = selectDT010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']    = lineDataMap['IDSIIRESAKI']
	//支払方法区分
	itemDataList['KBSIHARAI']      = lineDataMap['KBSIHARAI']
	//振込銀行口座
	itemDataList['TXHURIKOMI']     = lineDataMap['TXHURIKOMI']
	//摘要
	itemDataList['TXTEKIYO']       = lineDataMap['TXTEKIYO']
	//期首買掛残高
	itemDataList['AMKISYUKAIKAKE'] = lineDataMap['AMKISYUKAIKAKE']
	//期間仕入額(税込金額)
	itemDataList['AMSIIRE']        = lineDataMap['AMSIIRE'] - _C_KINGAKU_KOMI
	//期間支払額
	itemDataList['AMSIHARAI']      = lineDataMap['AMSIHARAI']
	//現買掛残高
	itemDataList['AMGENKAIKAKE']   = lineDataMap['AMGENKAIKAKE']

	updateDT010(itemDataList);

}



//-------------------------------------------
//［処理］買掛振替処理
//-------------------------------------------
//買掛振替新規登録
//　1 : 仕入先
//　2 : 取引日
//  3 : 増減区分
//　4 : 振替区分
//　5 : 適用
//　6 : 取引単価
//　7 : ソース番号
//　8 : 参照番号
function exec_kaihuri_ins(_IDSIIRESAKI, _TORIHIKIDATE, _KBZOUGEN, _KBKAIHURI, _TXTEKIYO, _ZEINUKI_HURIKAE, _NRSOURCE, _TXREFNO) {

	//数値準備
	var _C_SURYO			= 1;
	var _C_ZEIGAKU			= 0;
	var _C_KINGAKU_NUKI		= _ZEINUKI_HURIKAE;
	var _C_KINGAKU_KOMI		= _ZEINUKI_HURIKAE + _C_ZEIGAKU;
	var _C_TANKA_NUKI		= _C_KINGAKU_NUKI / _C_SURYO;
	var _C_TANKA_KOMI		= _C_KINGAKU_KOMI / _C_SURYO;



	//買掛履歴作成
	//--------------------
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']   = _IDSIIRESAKI;
	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//取引区分
	if (_KBZOUGEN == '0') {
		//増減区分=0:残高減 → 10:振替控除
		itemDataList['KBKAITORI']     = "10";
	} else {
		//増減区分=1:残高増 → 11:振替計上
		itemDataList['KBKAITORI']     = "11";
	}
	//振替区分 (Null)
	itemDataList['KBKAIHURI']     = _KBKAIHURI;
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = '';
	//品名／摘要
	itemDataList['TXHINMEI']      = _TXTEKIYO;
	//単位区分
	itemDataList['KBUNIT']        = 'CNT';
	//取引単価(税抜単価)
	itemDataList['PRTORIHIKI']    = _C_TANKA_NUKI;
	//取引数
	itemDataList['QTTORIHIKI']    = _C_SURYO;
	//税抜取引額(税抜金額)
	itemDataList['AMTORIHIKI']    = _C_KINGAKU_NUKI;
	//消費税額
	itemDataList['AMTAX']         = _C_ZEIGAKU;
	//支払依頼№
	itemDataList['NRSIHARAI']     = "";
	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減額(税込金額)
	if (_KBZOUGEN == '0') {
		//増減区分=0:残高減 → 10:振替控除
		var _AMZOUGEN = _C_KINGAKU_KOMI * -1;
	} else {
		//増減区分=1:残高増 → 11:振替計上
		var _AMZOUGEN = _C_KINGAKU_KOMI;
	}
	itemDataList['AMZOUGEN']     = _AMZOUGEN;

	updateDT100(itemDataList);



	//仕入先情報更新
	//--------------------

	//仕入先情報取得
	var itemSelectList = selectDT010(_IDSIIRESAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']    = lineDataMap['IDSIIRESAKI']
	//支払方法区分
	itemDataList['KBSIHARAI']      = lineDataMap['KBSIHARAI']
	//振込銀行口座
	itemDataList['TXHURIKOMI']     = lineDataMap['TXHURIKOMI']
	//摘要
	itemDataList['TXTEKIYO']       = lineDataMap['TXTEKIYO']
	//期首買掛残高
	itemDataList['AMKISYUKAIKAKE'] = lineDataMap['AMKISYUKAIKAKE']
	//期間仕入額(税込金額)
	if (_KBZOUGEN == '0') {
		//増減区分=0:残高減 → 10:振替控除
		var _AMZOUGEN = _C_KINGAKU_KOMI * -1;
	} else {
		//増減区分=1:残高増 → 11:振替計上
		var _AMZOUGEN = _C_KINGAKU_KOMI;
	}
	itemDataList['AMSIIRE']        = lineDataMap['AMSIIRE'] + _AMZOUGEN
	//期間支払額
	itemDataList['AMSIHARAI']      = lineDataMap['AMSIHARAI']
	//現買掛残高
	itemDataList['AMGENKAIKAKE']   = lineDataMap['AMGENKAIKAKE']

	updateDT010(itemDataList);


}
//-------------------------------------------
//買掛振替取消削除
//　1 : 仕入先
//　2 : 取引日
//  3 : 増減区分
//　4 : 振替区分
//　5 : 適用
//　6 : 取引単価
//　7 : ソース番号
//　8 : 参照番号
//
//　* : 買掛取引№
function exec_kaihuri_del(_IDSIIRESAKI, _TORIHIKIDATE, _KBZOUGEN, _KBKAIHURI, _TXTEKIYO, _ZEINUKI_HURIKAE, _NRSOURCE, _TXREFNO,
						  _NRKAIKAKE) {

	//数量準備
	// * var _C_SURYO			= 1;
	// * var _C_ZEIGAKU			= 0;
	// * var _C_KINGAKU_NUKI		= _ZEINUKI_HURIKAE;
	// * var _C_KINGAKU_KOMI		= _ZEINUKI_HURIKAE + _C_ZEIGAKU;
	// * var _C_TANKA_NUKI		= _C_KINGAKU_NUKI / _C_SURYO;
	// * var _C_TANKA_KOMI		= _C_KINGAKU_KOMI / _C_SURYO;

	var itemSelectList = selectDT100(_NRKAIKAKE);
	var lineDataMapDT100 = itemSelectList[0];

	var _C_SURYO			= lineDataMapDT100['QTTORIHIKI'];
	var _C_ZEIGAKU			= lineDataMapDT100['AMTAX'];
	var _C_KINGAKU_NUKI		= lineDataMapDT100['AMTORIHIKI'];
	var _C_KINGAKU_KOMI		= lineDataMapDT100['AMZOUGEN'];
	if (_C_KINGAKU_KOMI < 0 ) { 
		_C_KINGAKU_KOMI = _C_KINGAKU_KOMI * -1;
	}
	var _C_TANKA_NUKI		= lineDataMapDT100['PRTORIHIKI'];
	//var _C_TANKA_KOMI		= (使用無し)




	//買掛履歴作成
	//--------------------
	// * var itemDataList = new Array();
	// * 
	// * //仕入先ID
	// * itemDataList['IDSIIRESAKI']   = _IDSIIRESAKI;
	// * //取引日
	// * itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	// * //取引区分
	// * if (_KBZOUGEN == '0') {
	// * 	//増減区分=0:残高減 → 10:振替控除
	// * 	itemDataList['KBKAITORI']     = "10";
	// * } else {
	// * 	//増減区分=1:残高増 → 11:振替計上
	// * 	itemDataList['KBKAITORI']     = "11";
	// * }
	// * //振替区分 (Null)
	// * itemDataList['KBKAIHURI']     = _KBKAIHURI;
	// * //赤黒     (2:赤伝)
	// * itemDataList['KBAKADEN']      = "2";
	// * //効区     (F:無効)
	// * itemDataList['FGVALID']       = "F";
	// * //品目ID
	// * itemDataList['IDHINMOKU']     = '';
	// * //品名／摘要
	// * itemDataList['TXHINMEI']      = _TXTEKIYO;
	// * //単位区分
	// * itemDataList['KBUNIT']        = 'CNT';
	// * //取引単価(税抜単価)
	// * itemDataList['PRTORIHIKI']    = _C_TANKA_NUKI;
	// * //取引数
	// * itemDataList['QTTORIHIKI']    = _C_SURYO;
	// * //税抜取引額(税抜金額)
	// * itemDataList['AMTORIHIKI']    = _C_KINGAKU_NUKI;
	// * //消費税額
	// * itemDataList['AMTAX']         = _C_ZEIGAKU;
	// * //支払依頼№
	// * itemDataList['NRSIHARAI']     = "";
	// * //取引ソース№
	// * itemDataList['NRSOURCE']      = _NRSOURCE;
	// * //登録日時
	// * itemDataList['DTCREATE']      = tln_com_nowdate();
	// * //参照番号
	// * itemDataList['TXREFNO']       = _TXREFNO;
	// * //年度(Null)
	// * itemDataList['DTNEND']        = '';
	// * //月序(Null)
	// * itemDataList['DTMSEQ']        = '';
	// * //残高増減額(税込金額)
	// * if (_KBZOUGEN == '0') {
	// * 	//増減区分=0:残高減 → 10:振替控除
	// * 	var _AMZOUGEN = _C_KINGAKU_KOMI * -1;
	// * } else {
	// * 	//増減区分=1:残高増 → 11:振替計上
	// * 	var _AMZOUGEN = _C_KINGAKU_KOMI;
	// * }
	// * itemDataList['AMZOUGEN']     = _AMZOUGEN * -1;
	// * 
	// * updateDT100(itemDataList);
	// * 

	insertAkaDT100(_NRKAIKAKE);



	//買掛履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）
	if (_KBZOUGEN == '0') {
		//増減区分=0:残高減 → 10:振替控除
		var _KBKAITORI = "10";
	} else {
		//増減区分=1:残高増 → 11:振替計上
		var _KBKAITORI = "11";
	}
	TALON.update( " UPDATE DT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBKAITORI  = '" + _KBKAITORI + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE  + "'"
				);



	//仕入先情報更新
	//--------------------

	//仕入先情報取得
	var itemSelectList = selectDT010(_IDSIIRESAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']    = lineDataMap['IDSIIRESAKI']
	//支払方法区分
	itemDataList['KBSIHARAI']      = lineDataMap['KBSIHARAI']
	//振込銀行口座
	itemDataList['TXHURIKOMI']     = lineDataMap['TXHURIKOMI']
	//摘要
	itemDataList['TXTEKIYO']       = lineDataMap['TXTEKIYO']
	//期首買掛残高
	itemDataList['AMKISYUKAIKAKE'] = lineDataMap['AMKISYUKAIKAKE']
	//期間仕入額
	//期間仕入額(税込金額)
	if (_KBZOUGEN == '0') {
		//増減区分=0:残高減 → 10:振替控除
		var _AMZOUGEN = _C_KINGAKU_KOMI * -1;
	} else {
		//増減区分=1:残高増 → 11:振替計上
		var _AMZOUGEN = _C_KINGAKU_KOMI;
	}
	itemDataList['AMSIIRE']        = lineDataMap['AMSIIRE'] + (_AMZOUGEN * -1)
	//期間支払額
	itemDataList['AMSIHARAI']      = lineDataMap['AMSIHARAI']
	//現買掛残高
	itemDataList['AMGENKAIKAKE']   = lineDataMap['AMGENKAIKAKE']

	updateDT010(itemDataList);

}



//-------------------------------------------
//［処理］特殊仕入処理
//-------------------------------------------
//特殊仕入新規登録
//　 1 : 品目コード
//　 2 : 取引先コード
//　 3 : 倉庫コード
//　 4 : 取引日
//　 5 : 取引区分
//　 6 : 取引数
//　 7 : 税抜単価
//　 8 : 税抜取引額
//　 9 : 消費税額
//　10 : ソース番号
//　11 : 参照番号
function exec_tsiire_ins(
				_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _KBTOKUSIIRE,
				_SURYO, _ZEINUKI_TANKA, _ZEINUKI_KINGAKU, _ZEIGAKU,
				_NRSOURCE, _TXREFNO) {

	//数値準備
	var itemSelectList = selectBT010(_HINMOKU);
	var lineDataMap = itemSelectList[0];

	var _C_SURYO			= _SURYO;
	var _C_ZEIGAKU			= _ZEIGAKU;
	var _C_KINGAKU_NUKI		= _ZEINUKI_KINGAKU;
	var _C_KINGAKU_KOMI		= _ZEINUKI_KINGAKU + _C_ZEIGAKU;
	var _C_TANKA_NUKI		= _ZEINUKI_TANKA;
	var _C_TANKA_KOMI		= _C_KINGAKU_KOMI / _C_SURYO;

	var _C_SURYO_KEISU		= _C_SURYO * lineDataMap['VLKANZAN'];
	var _C_TANKA_KOMI_KEISU	= _C_KINGAKU_KOMI / _C_SURYO_KEISU;



	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	/*
	取引区分=10:仕入返品 → 買掛取引区分=02:仕入返品　　→出庫
	取引区分=20:直接入荷 → 買掛取引区分=01:直入荷仕入　→入庫
	*/
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;

		if (_KBTOKUSIIRE == '20') {
			//期間入庫数(係数込取引数)
			itemDataList['QTNYUKO']        = _C_SURYO_KEISU;
			//期間出庫数
			itemDataList['QTSYUKKO']       = 0;
			//期間入庫額(税込金額)
			itemDataList['AMNYUKO']        = _C_KINGAKU_KOMI;
			//期間出庫額
			itemDataList['AMSYUKKO']       = 0;
		} else {
			//期間入庫数
			itemDataList['QTNYUKO']        = 0;
			//期間出庫数(係数込取引数)
			itemDataList['QTSYUKKO']       = _C_SURYO_KEISU;
			//期間入庫額
			itemDataList['AMNYUKO']        = 0;
			//期間出庫額(税込金額)
			itemDataList['AMSYUKKO']       = _C_KINGAKU_KOMI;
		}

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];

		if (_KBTOKUSIIRE == '20') {
			//期間入庫数(係数込取引数)
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + _C_SURYO_KEISU;
			//期間出庫数
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
			//期間入庫額
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + _C_KINGAKU_KOMI;
			//期間出庫額
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];
		} else {
			//期間入庫数
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
			//期間出庫数(係数込取引数)
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + _C_SURYO_KEISU;
			//期間入庫額
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
			//期間出庫額
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + _C_KINGAKU_KOMI;
		}

	}

	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------
	var itemDataList = new Array();

	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//受払区分
	//10:仕入返品 → 02:仕入返品   → 140:仕入返品
	//20:直接入荷 → 01:直入荷仕入 → 040:直仕入入庫
	if (_KBTOKUSIIRE == '20') {
		itemDataList['KBUKEBARAI']    = "040";
	} else {
		itemDataList['KBUKEBARAI']    = "140";
	}
	//振替区分 (Null)
	itemDataList['KBZAIHURI']     = "";
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//倉庫Ｃ
	itemDataList['CDSOUKO']       = _SOUKO;
	//相手先名
	itemDataList['TXAITESAKI']    = _TORIHIKISAKI;
	//取引単価(係数込税込単価)
	itemDataList['PRTORIHIKI']    = _C_TANKA_KOMI_KEISU;
	//取引数(係数込取引数)
	itemDataList['QTTORIHIKI']    = _C_SURYO_KEISU;
	//取引額(税込金額)
	itemDataList['AMTORIHIKI']    = _C_KINGAKU_KOMI;
	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	if (_KBTOKUSIIRE == '20') {
		//20:直接入荷 → 01:直入荷仕入 → 040:直仕入入庫
		//残高増減数(係数込税込単価
		itemDataList['QTZOUGEN']      = _C_SURYO_KEISU;
		//残高増減額(税込金額)
		itemDataList['AMZOUGEN']      = _C_KINGAKU_KOMI;
	} else {
		//10:仕入返品 → 02:仕入返品   → 140:仕入返品
		//残高増減数(係数込税込単価
		itemDataList['QTZOUGEN']      = _C_SURYO_KEISU * -1;
		//残高増減額(税込金額)
		itemDataList['AMZOUGEN']      = _C_KINGAKU_KOMI * -1;
	}

	updateFT100(itemDataList);



	//買掛履歴作成
	//--------------------
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']   = _TORIHIKISAKI;
	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//取引区分
	//10:仕入返品 → 02:仕入返品 
	//20:直接入荷 → 01:直入荷仕入
	if (_KBTOKUSIIRE == '20') {
		itemDataList['KBKAITORI']     = "01";
	} else {
		itemDataList['KBKAITORI']     = "02";
	}
	//振替区分 (Null)
	itemDataList['KBKAIHURI']     = "";
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//取引単価(税抜単価)
	itemDataList['PRTORIHIKI']    = _C_TANKA_NUKI;
	//取引数
	itemDataList['QTTORIHIKI']    = _C_SURYO;
	//税抜取引額(税抜金額)
	itemDataList['AMTORIHIKI']    = _C_KINGAKU_NUKI;
	//消費税額
	itemDataList['AMTAX']         = _C_ZEIGAKU;
	//支払依頼№
	itemDataList['NRSIHARAI']     = "";
	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減額(税込金額)
	if (_KBTOKUSIIRE == '20') {
		//20:直接入荷 → 01:直入荷仕入
		itemDataList['AMZOUGEN']     = _C_KINGAKU_KOMI;
	} else {
		//10:仕入返品 → 02:仕入返品 
		itemDataList['AMZOUGEN']     = _C_KINGAKU_KOMI * -1;
	}

	updateDT100(itemDataList);




	//仕入先情報更新
	//--------------------
	var itemDataList = new Array();

	//仕入先情報取得
	var itemSelectList = selectDT010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']    = lineDataMap['IDSIIRESAKI'];
	//支払方法区分
	itemDataList['KBSIHARAI']      = lineDataMap['KBSIHARAI'];
	//振込銀行口座
	itemDataList['TXHURIKOMI']     = lineDataMap['TXHURIKOMI'];
	//摘要
	itemDataList['TXTEKIYO']       = lineDataMap['TXTEKIYO'];
	//期首買掛残高
	itemDataList['AMKISYUKAIKAKE'] = lineDataMap['AMKISYUKAIKAKE'];
	//期間仕入額(税込金額)
	if (_KBTOKUSIIRE == '20') {
		//20:直接入荷 → 01:直入荷仕入
		var _AMSIIRE = _C_KINGAKU_KOMI;
	} else {
		//10:仕入返品 → 02:仕入返品 
		var _AMSIIRE = _C_KINGAKU_KOMI * -1;
	}
	itemDataList['AMSIIRE']        = lineDataMap['AMSIIRE'] + _AMSIIRE;
	//期間支払額
	itemDataList['AMSIHARAI']      = lineDataMap['AMSIHARAI'];
	//現買掛残高
	itemDataList['AMGENKAIKAKE']   = lineDataMap['AMGENKAIKAKE'];

	updateDT010(itemDataList);


}

//-------------------------------------------
//特殊仕入取消削除
//　 1 : 品目コード
//　 2 : 取引先コード
//　 3 : 倉庫コード
//　 4 : 取引日
//　 5 : 取引区分
//　 6 : 取引数
//　 7 : 税抜単価
//　 8 : 税抜取引額
//　 9 : 消費税額
//　10 : ソース番号
//　11 : 参照番号
//
//　* : 在庫取引№
//　* : 買掛取引№
function exec_tsiire_del(
				_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _KBTOKUSIIRE,
				_SURYO, _ZEINUKI_TANKA, _ZEINUKI_KINGAKU, _ZEIGAKU,
				_NRSOURCE, _TXREFNO,
				_NRZAITORI, _NRKAIKAKE) {

	//数値準備
	// * var itemSelectList = selectBT010(_HINMOKU);
	// * var lineDataMap = itemSelectList[0];
	// * 
	// * var _C_SURYO			= _SURYO;
	// * var _C_ZEIGAKU			= _ZEIGAKU;
	// * var _C_KINGAKU_NUKI		= _ZEINUKI_KINGAKU;
	// * var _C_KINGAKU_KOMI		= _ZEINUKI_KINGAKU + _C_ZEIGAKU;
	// * var _C_TANKA_NUKI		= _ZEINUKI_TANKA;
	// * var _C_TANKA_KOMI		= _C_KINGAKU_KOMI / _C_SURYO;
	// * 
	// * var _C_SURYO_KEISU		= _C_SURYO * lineDataMap['VLKANZAN'];
	// * var _C_TANKA_KOMI_KEISU	= _C_KINGAKU_KOMI / _C_SURYO_KEISU;

	var itemSelectList = selectFT100(_NRZAITORI);
	var lineDataMapFT100 = itemSelectList[0];
	var itemSelectList = selectDT100(_NRKAIKAKE);
	var lineDataMapDT100 = itemSelectList[0];

	var _C_SURYO			= lineDataMapDT100['QTTORIHIKI'];
	var _C_ZEIGAKU			= lineDataMapDT100['AMTAX'];
	var _C_KINGAKU_NUKI		= lineDataMapDT100['AMTORIHIKI'];
	var _C_KINGAKU_KOMI		= lineDataMapDT100['AMZOUGEN'];
	if (_C_KINGAKU_KOMI < 0 ) { 
		_C_KINGAKU_KOMI = _C_KINGAKU_KOMI * -1;
	}
	var _C_TANKA_NUKI		= lineDataMapDT100['PRTORIHIKI'];
	//var _C_TANKA_KOMI		= (使用無し)

	var _C_SURYO_KEISU		= lineDataMapFT100['QTTORIHIKI'];
	var _C_TANKA_KOMI_KEISU	= lineDataMapFT100['PRTORIHIKI'];




	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	/*
	取引区分=10:仕入返品 → 買掛取引区分=02:仕入返品　　→出庫
	取引区分=20:直接入荷 → 買掛取引区分=01:直入荷仕入　→入庫
	*/
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;

		if (_KBTOKUSIIRE == '20') {
			//期間入庫数(係数込取引数)
			itemDataList['QTNYUKO']        = _C_SURYO_KEISU * -1;
			//期間出庫数
			itemDataList['QTSYUKKO']       = 0;
			//期間入庫額(税込金額)
			itemDataList['AMNYUKO']        = _C_KINGAKU_KOMI * -1;
			//期間出庫額
			itemDataList['AMSYUKKO']       = 0;
		} else {
			//期間入庫数
			itemDataList['QTNYUKO']        = 0;
			//期間出庫数(係数込取引数)
			itemDataList['QTSYUKKO']       = _C_SURYO_KEISU * -1;
			//期間入庫額
			itemDataList['AMNYUKO']        = 0;
			//期間出庫額(税込金額)
			itemDataList['AMSYUKKO']       = _C_KINGAKU_KOMI * -1;
		}

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];

		if (_KBTOKUSIIRE == '20') {
			//期間入庫数(係数込取引数)
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + (_C_SURYO_KEISU * -1);
			//期間出庫数
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
			//期間入庫額(税込金額)
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + (_C_KINGAKU_KOMI * -1);
			//期間出庫額
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];
		} else {
			//期間入庫数
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
			//期間出庫数(係数込取引数)
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + (_C_SURYO_KEISU * -1);
			//期間入庫額
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
			//期間出庫額(税込金額)
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + (_C_KINGAKU_KOMI * -1);
		}


	}

	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------
	// * var itemDataList = new Array();
	// * 
	// * //取引日
	// * itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	// * //受払区分
	// * //10:仕入返品 → 02:仕入返品   → 140:仕入返品
	// * //20:直接入荷 → 01:直入荷仕入 → 040:直仕入入庫
	// * if (_KBTOKUSIIRE == '20') {
	// * 	itemDataList['KBUKEBARAI']    = "040";
	// * } else {
	// * 	itemDataList['KBUKEBARAI']    = "140";
	// * }
	// * //振替区分 (Null)
	// * itemDataList['KBZAIHURI']     = "";
	// * //赤黒     (2:赤伝)
	// * itemDataList['KBAKADEN']      = "2";
	// * //効区     (F:無効)
	// * itemDataList['FGVALID']       = "F";
	// * //品目ID
	// * itemDataList['IDHINMOKU']     = _HINMOKU;
	// * //倉庫Ｃ
	// * itemDataList['CDSOUKO']       = _SOUKO;
	// * //相手先名
	// * itemDataList['TXAITESAKI']    = _TORIHIKISAKI;
	// * //取引単価(係数込税込単価)
	// * itemDataList['PRTORIHIKI']    = _C_TANKA_KOMI_KEISU;
	// * //取引数(係数込取引数)
	// * itemDataList['QTTORIHIKI']    = _C_SURYO_KEISU;
	// * //取引額(税込金額)
	// * itemDataList['AMTORIHIKI']    = _C_KINGAKU_KOMI;
	// * //取引ソース№
	// * itemDataList['NRSOURCE']      = _NRSOURCE;
	// * //登録日時
	// * itemDataList['DTCREATE']      = tln_com_nowdate();
	// * //参照番号
	// * itemDataList['TXREFNO']       = _TXREFNO;
	// * //年度(Null)
	// * itemDataList['DTNEND']        = '';
	// * //月序(Null)
	// * itemDataList['DTMSEQ']        = '';
	// * if (_KBTOKUSIIRE == '20') {
	// * 	//20:直接入荷 → 01:直入荷仕入 → 040:直仕入入庫
	// * 	//残高増減数(係数込取引数)
	// * 	itemDataList['QTZOUGEN']      = _C_SURYO_KEISU  * -1;
	// * 	//残高増減額(税込金額)
	// * 	itemDataList['AMZOUGEN']      = _C_KINGAKU_KOMI * -1;
	// * } else {
	// * 	//10:仕入返品 → 02:仕入返品   → 140:仕入返品
	// * 	//残高増減数(係数込取引数)
	// * 	itemDataList['QTZOUGEN']      = (_C_SURYO_KEISU  * -1) * -1;
	// * 	//残高増減額(税込金額)
	// * 	itemDataList['AMZOUGEN']      = (_C_KINGAKU_KOMI * -1) * -1;
	// * }
	// * 
	// * updateFT100(itemDataList);
	// * 

	insertAkaFT100(_NRZAITORI);



	//入出庫履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）
	if (_KBTOKUSIIRE == '20') {
		var _KBUKEBARAI    = "040";
	} else {
		var _KBUKEBARAI    = "140";
	}
	TALON.update( " UPDATE FT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBUKEBARAI = '" + _KBUKEBARAI + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE   + "'"
				);



	//買掛履歴作成
	//--------------------
	// * var itemDataList = new Array();
	// * 
	// * //仕入先ID
	// * itemDataList['IDSIIRESAKI']   = _TORIHIKISAKI;
	// * //取引日
	// * itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	// * //取引区分
	// * //10:仕入返品 → 02:仕入返品 
	// * //20:直接入荷 → 01:直入荷仕入
	// * if (_KBTOKUSIIRE == '20') {
	// * 	itemDataList['KBKAITORI']     = "01";
	// * } else {
	// * 	itemDataList['KBKAITORI']     = "02";
	// * }
	// * //振替区分 (Null)
	// * itemDataList['KBKAIHURI']     = "";
	// * //赤黒     (2:赤伝)
	// * itemDataList['KBAKADEN']      = "2";
	// * //効区     (F:無効)
	// * itemDataList['FGVALID']       = "F";
	// * //品目ID
	// * itemDataList['IDHINMOKU']     = _HINMOKU;
	// * //取引単価(税抜単価)
	// * itemDataList['PRTORIHIKI']    = _C_TANKA_NUKI;
	// * //取引数
	// * itemDataList['QTTORIHIKI']    = _C_SURYO;
	// * //税抜取引額(税抜金額)
	// * itemDataList['AMTORIHIKI']    = _C_KINGAKU_NUKI;
	// * //消費税額
	// * itemDataList['AMTAX']         = _C_ZEIGAKU;
	// * //支払依頼№
	// * itemDataList['NRSIHARAI']     = "";
	// * //取引ソース№
	// * itemDataList['NRSOURCE']      = _NRSOURCE;
	// * //登録日時
	// * itemDataList['DTCREATE']      = tln_com_nowdate();
	// * //参照番号
	// * itemDataList['TXREFNO']       = _TXREFNO;
	// * //年度(Null)
	// * itemDataList['DTNEND']        = '';
	// * //月序(Null)
	// * itemDataList['DTMSEQ']        = '';
	// * //残高増減額(税込金額)
	// * if (_KBTOKUSIIRE == '20') {
	// * 	//20:直接入荷 → 01:直入荷仕入
	// * 	itemDataList['AMZOUGEN']     = _C_KINGAKU_KOMI * -1;
	// * } else {
	// * 	//10:仕入返品 → 02:仕入返品 
	// * 	itemDataList['AMZOUGEN']     = (_C_KINGAKU_KOMI * -1) * -1;
	// * }
	// * 
	// * updateDT100(itemDataList);
	// * 

	insertAkaDT100(_NRKAIKAKE);



	//買掛履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）
	if (_KBTOKUSIIRE == '20') {
		//10:仕入返品 → 02:仕入返品 
		var _KBKAITORI     = "01";
	} else {
		//20:直接入荷 → 01:直入荷仕入
		var _KBKAITORI     = "02";
	}
	TALON.update( " UPDATE DT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBKAITORI  = '" + _KBKAITORI + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE  + "'"
				);



	//仕入先情報更新
	//--------------------
	var itemDataList = new Array();

	//仕入先情報取得
	var itemSelectList = selectDT010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']    = lineDataMap['IDSIIRESAKI']
	//支払方法区分
	itemDataList['KBSIHARAI']      = lineDataMap['KBSIHARAI']
	//振込銀行口座
	itemDataList['TXHURIKOMI']     = lineDataMap['TXHURIKOMI']
	//摘要
	itemDataList['TXTEKIYO']       = lineDataMap['TXTEKIYO']
	//期首買掛残高
	itemDataList['AMKISYUKAIKAKE'] = lineDataMap['AMKISYUKAIKAKE']
	//期間仕入額(税込金額)
	if (_KBTOKUSIIRE == '20') {
		//20:直接入荷 → 01:直入荷仕入
		var _AMSIIRE = _C_KINGAKU_KOMI;
	} else {
		//10:仕入返品 → 02:仕入返品 
		var _AMSIIRE = _C_KINGAKU_KOMI * -1;
	}
	itemDataList['AMSIIRE']        = lineDataMap['AMSIIRE'] + (_AMSIIRE * -1);
	//期間支払額
	itemDataList['AMSIHARAI']      = lineDataMap['AMSIHARAI']
	//現買掛残高
	itemDataList['AMGENKAIKAKE']   = lineDataMap['AMGENKAIKAKE']

	updateDT010(itemDataList);


}












//-------------------------------------------
//［処理］仕入関連処理
//-------------------------------------------

//-------------------------------------------
//入荷見出し
function selectHT020(_NRNYUKA) {
	var sql = 
		"SELECT " +
		" NRNYUKA          " + 
		",IDSIIRESAKI      " + 
		",DTNYUKA          " + 
		",DTKENSYU         " + 
		",CDSOUKO          " + 
		",STNYUKA          " + 
		",CREATED_DATE     " + 
		",CREATED_BY       " + 
		",CREATED_PRG_NM   " + 
		",UPDATED_DATE     " + 
		",UPDATED_BY       " + 
		",UPDATED_PRG_NM   " + 
		",MODIFY_COUNT     " + 
		"FROM HT020        " +
		"WHERE NRNYUKA = '" + _NRNYUKA + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}
//発注見出し
function selectHT010(_NRHATTYU) {
	var sql = 
		"SELECT " +
		" HT010.NRHATTYU          " + 
		",HT010.IDSIIRESAKI       " + 
		",HT010.DTHATTYU          " + 
		",HT010.DTCREATE          " + 
		",HT010.CDSOUKO           " + 
		",HT010.TXTEKIYO          " + 
		",HT010.STHATTYU          " + 
		",HT010.CREATED_DATE      " + 
		",HT010.CREATED_BY        " + 
		",HT010.CREATED_PRG_NM    " + 
		",HT010.UPDATED_DATE      " + 
		",HT010.UPDATED_BY        " + 
		",HT010.UPDATED_PRG_NM    " + 
		",HT010.MODIFY_COUNT      " + 

		",HT011.QTHATTYU       " + 
		",HT011.QTKENSYU       " + 

		"FROM HT010            " + 
		"INNER JOIN ( SELECT NRHATTYU, SUM(QTHATTYU) AS QTHATTYU, SUM(QTKENSYU) AS QTKENSYU FROM HT011 GROUP BY NRHATTYU ) HT011 " + 
		"  ON HT011.NRHATTYU = HT010.NRHATTYU " + 
		"WHERE HT010.NRHATTYU = '" + _NRHATTYU + "' "
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}
function updateHT010(itemDataList) {
	//項目
	var itemColNameTbl = [
		 'NRHATTYU'
		,'IDSIIRESAKI'
		,'DTHATTYU'
		,'DTCREATE'
		,'CDSOUKO'
		,'TXTEKIYO'
		,'STHATTYU'
		,'CREATED_DATE'
		,'CREATED_BY'
		,'CREATED_PRG_NM'
		,'UPDATED_DATE'
		,'UPDATED_BY'
		,'UPDATED_PRG_NM'
		,'MODIFY_COUNT'
	];

	var itemSelectList = selectHT010(itemDataList['NRHATTYU']);

	var lineDataMap = itemSelectList[0];
	var _MODIFY_COUNT = lineDataMap['MODIFY_COUNT'];

	//UPDATE
	itemDataList['UPDATED_DATE']   = tln_com_nowdate();
	itemDataList['UPDATED_BY']     = tln_com_user_id();
	itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
	itemDataList['MODIFY_COUNT']   = (_MODIFY_COUNT + 1);

	var whereList = new Array();
	var whereTbl1 = [ null, '=' , 'NRHATTYU' ];
	whereList.push(whereTbl1);

	TALON.updateByMap( 'HT010', itemDataList , itemColNameTbl , whereList );

}
//発注明細(入荷№)
function selectHT011_NRNYUKA(_NRNYUKA) {
	var sql = 
		"SELECT " +
		" HT011.NRHATTYU       " + 
		",HT011.SQHATTYU       " + 
		",HT011.IDHINMOKU      " + 
		",HT011.PRHATTYU       " + 
		",HT011.QTHATTYU       " + 
		",HT011.QTKENSYU       " + 
		",HT011.DTNOUKI        " + 
		",HT011.NRNYUKA        " + 
		",HT011.NRSOURCE       " + 
		",HT011.QTKANZAN       " + 
		",HT011.FGNYUKA        " + 
		",HT011.CREATED_DATE   " + 
		",HT011.CREATED_BY     " + 
		",HT011.CREATED_PRG_NM " + 
		",HT011.UPDATED_DATE   " + 
		",HT011.UPDATED_BY     " + 
		",HT011.UPDATED_PRG_NM " + 
		",HT011.MODIFY_COUNT   " + 

		",HT010.IDSIIRESAKI   " + 
		",HT010.CDSOUKO       " + 

		"FROM HT011            " + 
		"INNER JOIN HT010      " + 
		"  ON HT010.NRHATTYU = HT011.NRHATTYU " +
		"WHERE NRNYUKA = '" + _NRNYUKA + "' "
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}
//在庫増減履歴(受払区分＋取引ソース番号）
function selectFT100_NRSOURCE(_KBUKEBARAI,_NRSOURCE) {
	var sql = 
		"SELECT " +
		" NRZAITORI      " + 
		",DTTORIHIKI     " + 
		",KBUKEBARAI     " + 
		",KBZAIHURI      " + 
		",KBAKADEN       " + 
		",FGVALID        " + 
		",IDHINMOKU      " + 
		",TXHINBAN       " + 
		",TXHINMEI       " + 
		",KBUNIT         " + 
		",CDSOUKO        " + 
		",TXAITESAKI     " + 
		",PRTORIHIKI     " + 
		",QTTORIHIKI     " + 
		",AMTORIHIKI     " + 
		",AMSAGAKU       " + 
		",NRSOURCE       " + 
		",DTCREATE       " + 
		",TXREFNO        " + 
		",DTNEND         " + 
		",DTMSEQ         " + 
		",QTZOUGEN       " + 
		",AMZOUGEN       " + 
		",CREATED_DATE   " + 
		",CREATED_BY     " + 
		",CREATED_PRG_NM " + 
		",UPDATED_DATE   " + 
		",UPDATED_BY     " + 
		",UPDATED_PRG_NM " + 
		",MODIFY_COUNT   " + 
		"FROM FT100      " +
		"WHERE KBUKEBARAI = '" + _KBUKEBARAI + "'" + 
		"  AND FGVALID  = 'T'" + 
		"  AND NRSOURCE = '" + _NRSOURCE + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}
//買掛振替[KT010]
function selectKT010(_NRKAIHURI) {
	var sql = 
		"SELECT " +
		" NRKAIHURI        " + 
		",KBKAIHURI        " + 
		",DTHURIKAE        " + 
		",IDSIIRESAKI      " + 
		",AMHURIKAE        " + 
		",TXTEKIYO         " + 
		",NRSOURCE         " + 
		",CREATED_DATE     " + 
		",CREATED_BY       " + 
		",CREATED_PRG_NM   " + 
		",UPDATED_DATE     " + 
		",UPDATED_BY       " + 
		",UPDATED_PRG_NM   " + 
		",MODIFY_COUNT     " + 
		",KBZOUGEN         " + 
		"FROM KT010        " +
		"WHERE NRKAIHURI = '" + _NRKAIHURI + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}
//買掛増減履歴(受払区分＋取引ソース番号）
function selectDT100_NRSOURCE(_KBKAITORI,_NRSOURCE) {
	var sql = 
		"SELECT " +
		" NRKAIKAKE           " + 
		",IDSIIRESAKI         " + 
		",DTTORIHIKI          " + 
		",KBKAITORI           " + 
		",KBKAIHURI           " + 
		",KBAKADEN            " + 
		",FGVALID             " + 
		",IDHINMOKU           " + 
		",TXHINBAN            " + 
		",TXHINMEI            " + 
		",KBUNIT              " + 
		",PRTORIHIKI          " + 
		",QTTORIHIKI          " + 
		",AMTORIHIKI          " + 
		",AMTAX               " + 
		",NRSIHARAI           " + 
		",NRSOURCE            " + 
		",DTCREATE            " + 
		",TXREFNO             " + 
		",DTNEND              " + 
		",DTMSEQ              " + 
		",AMZOUGEN            " + 
		",CREATED_DATE        " + 
		",CREATED_BY          " + 
		",CREATED_PRG_NM      " + 
		",UPDATED_DATE        " + 
		",UPDATED_BY          " + 
		",UPDATED_PRG_NM      " + 
		",MODIFY_COUNT        " + 
		"FROM DT100      " +
		"WHERE KBKAITORI = '" + _KBKAITORI + "'" + 
		"  AND FGVALID  = 'T'" + 
		"  AND NRSOURCE = '" + _NRSOURCE + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}
//特殊仕入[KT020]
function selectKT020(_NRTOKUSIIRE) {
	var sql = 
		"SELECT " +
		" NRTOKUSIIRE      " + 
		",KBTOKUSIIRE      " + 
		",IDSIIRESAKI      " + 
		",DTTORIHIKI       " + 
		",IDHINMOKU        " + 
		",CDSOUKO          " + 
		",PRTORIHIKI       " + 
		",QTTORIHIKI       " + 
		",PRZAIKO          " + 
		",TXTEKIYO         " + 
		",NRSOURCE         " + 
		",AMTORIHIKI       " + 
		",AMTAX            " + 
		",QTZAITORI        " + 
		",CREATED_DATE     " + 
		",CREATED_BY       " + 
		",CREATED_PRG_NM   " + 
		",UPDATED_DATE     " + 
		",UPDATED_BY       " + 
		",UPDATED_PRG_NM   " + 
		",MODIFY_COUNT     " + 
		"FROM KT020        " +
		"WHERE NRTOKUSIIRE = '" + _NRTOKUSIIRE + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}





//-------------------------------------------
//［処理］支払関連
//-------------------------------------------
//支払依頼[DT110]
function selectDT110(_NRSIHARAI) {
	var sql = 
		"SELECT " +
		"  NRSIHARAI        " + 
		" ,IDSIIRESAKI      " + 
		" ,DTSIHARAI        " + 
		" ,DTSYONIN         " + 
		" ,KBSIHARAI        " + 
		" ,TXSEIKYU         " + 
		" ,TXTEKIYO         " + 
		" ,NRSOURCE         " + 
		" ,AMSIHARAI        " + 
		" ,STSIHARAI        " + 
		" ,CREATED_DATE     " + 
		" ,CREATED_BY       " + 
		" ,CREATED_PRG_NM   " + 
		" ,UPDATED_DATE     " + 
		" ,UPDATED_BY       " + 
		" ,UPDATED_PRG_NM   " + 
		" ,MODIFY_COUNT     " + 
		"FROM DT110        " +
		"WHERE NRSIHARAI = '" + _NRSIHARAI + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}



//-------------------------------------------
//［処理］支払承認
//-------------------------------------------
//　1 : 仕入先ID
//　2 : 支払承認日
//　3 : 支払依頼額
//　4 : 摘要
//　5 : ソース番号
//　6 : 参照番号
function exec_shiharaisyonin_ins(_TORIHIKISAKI, _TORIHIKIDATE, _AMSIHARAI, _TXTEKIYO , _NRSOURCE, _TXREFNO) {


	//買掛履歴作成
	//--------------------
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']   = _TORIHIKISAKI;
	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//取引区分 (90:支払)
	itemDataList['KBKAITORI']     = "90";
	//振替区分 (Null)
	itemDataList['KBKAIHURI']     = "";
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = "";
	//品目名／摘要
	itemDataList['TXHINMEI']     = _TXTEKIYO;
	//取引単価(税抜単価)
	itemDataList['PRTORIHIKI']    = _AMSIHARAI;
	//取引数
	itemDataList['QTTORIHIKI']    = 1;
	//税抜取引額(税抜金額)
	itemDataList['AMTORIHIKI']    = _AMSIHARAI;
	//消費税額
	itemDataList['AMTAX']         = 0;
	//支払依頼№
	itemDataList['NRSIHARAI']     = "";
	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減額(税込金額)
	itemDataList['AMZOUGEN']      = _AMSIHARAI;

	updateDT100(itemDataList);



	//仕入先情報更新
	//--------------------
	var itemDataList = new Array();

	//仕入先情報取得
	var itemSelectList = selectDT010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']    = lineDataMap['IDSIIRESAKI'];
	//支払方法区分
	itemDataList['KBSIHARAI']      = lineDataMap['KBSIHARAI'];
	//振込銀行口座
	itemDataList['TXHURIKOMI']     = lineDataMap['TXHURIKOMI'];
	//摘要
	itemDataList['TXTEKIYO']       = lineDataMap['TXTEKIYO'];
	//期首買掛残高
	itemDataList['AMKISYUKAIKAKE'] = lineDataMap['AMKISYUKAIKAKE'];
	//期間仕入額(税込金額)
	itemDataList['AMSIIRE']        = lineDataMap['AMSIIRE'];
	//期間支払額
	itemDataList['AMSIHARAI']      = lineDataMap['AMSIHARAI'] + _AMSIHARAI;
	//現買掛残高
	itemDataList['AMGENKAIKAKE']   = lineDataMap['AMGENKAIKAKE'];

	updateDT010(itemDataList);


}


//　1 : 仕入先ID
//　2 : 支払承認日
//　3 : 支払依頼額
//　4 : 摘要
//　5 : ソース番号
//　6 : 参照番号
//　* : 買掛取引№
function exec_shiharaisyonin_del(_TORIHIKISAKI, _TORIHIKIDATE, _AMSIHARAI, _TXTEKIYO , _NRSOURCE, _TXREFNO, _NRKAIKAKE) {

	//買掛履歴作成
	insertAkaDT100(_NRKAIKAKE);


	//買掛履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）

	TALON.update( " UPDATE DT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBKAITORI  = '" + "90" + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE  + "'"
				);



	//仕入先情報更新
	//--------------------

	//仕入先情報取得
	var itemSelectList = selectDT010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//仕入先ID
	itemDataList['IDSIIRESAKI']    = lineDataMap['IDSIIRESAKI']
	//支払方法区分
	itemDataList['KBSIHARAI']      = lineDataMap['KBSIHARAI']
	//振込銀行口座
	itemDataList['TXHURIKOMI']     = lineDataMap['TXHURIKOMI']
	//摘要
	itemDataList['TXTEKIYO']       = lineDataMap['TXTEKIYO']
	//期首買掛残高
	itemDataList['AMKISYUKAIKAKE'] = lineDataMap['AMKISYUKAIKAKE']
	//期間仕入額(税込金額)
	itemDataList['AMSIIRE']        = lineDataMap['AMSIIRE']
	//期間支払額
	itemDataList['AMSIHARAI']      = lineDataMap['AMSIHARAI'] - _AMSIHARAI
	//現買掛残高
	itemDataList['AMGENKAIKAKE']   = lineDataMap['AMGENKAIKAKE']

	updateDT010(itemDataList);

}

```

#### サーバJS ライブラリ: XDMF_JS003_0 ([共通]製造関連)

```javascript
//-------------------------------------------
//［処理］出庫処理
//-------------------------------------------
//出庫新規登録
//　1 : 品目コード
//　2 : 取引先コード
//　3 : 倉庫コード
//　4 : 取引日
//　5 : 数量
//　6 : 税抜単価
//　7 : 税抜金額
//　8 : ソース番号
//　9 : 参照番号
function exec_syuko_ins(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _SURYO, _TANKA, _KINGAKU, _NRSOURCE, _TXREFNO) {


	//在庫更新
	//--------------------
	var _QTZOUGEN = _SURYO * -1
	var _AMZOUGEN = _KINGAKU * -1


	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数
		itemDataList['QTNYUKO']        = 0;
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = _SURYO;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額
		itemDataList['AMNYUKO']        = 0;
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = _KINGAKU;

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数
		itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + _SURYO;
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額
		itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + _KINGAKU;

	}

	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------
	var itemDataList = new Array();

	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//受払区分 (160:材料出庫)
	itemDataList['KBUKEBARAI']    = "160";
	//振替区分 (Null)
	itemDataList['KBZAIHURI']     = "";
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//倉庫Ｃ
	itemDataList['CDSOUKO']       = _SOUKO;
	//相手先名
	itemDataList['TXAITESAKI']    = _TORIHIKISAKI;
	//取引単価(単価)
	itemDataList['PRTORIHIKI']    = _TANKA;
	//取引数(数量)
	itemDataList['QTTORIHIKI']    = _SURYO;
	//取引額(金額)
	itemDataList['AMTORIHIKI']    = _KINGAKU;
	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減数(数量)
	itemDataList['QTZOUGEN']      = _QTZOUGEN;
	//残高増減額(金額)
	itemDataList['AMZOUGEN']      = _AMZOUGEN;

	updateFT100(itemDataList);


}
//-------------------------------------------
//出庫取消削除
//　1 : 品目コード
//　2 : 取引先コード
//　3 : 倉庫コード
//　4 : 取引日
//　5 : 数量
//　6 : 税抜単価
//　7 : 税抜金額
//　8 : ソース番号
//　9 : 参照番号
//
//　* : 在庫取引№
function exec_syuko_del(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _SURYO, _TANKA, _KINGAKU, _NRSOURCE, _TXREFNO,
					    _NRZAITORI
					   ) {

	//数値準備(赤データで再セット)
	var itemSelectList = selectFT100(_NRZAITORI);
	var lineDataMapFT100 = itemSelectList[0];
	_SURYO			= lineDataMapFT100['QTTORIHIKI'];
	_KINGAKU		= lineDataMapFT100['AMTORIHIKI'];
	_TANKA			= lineDataMapFT100['PRTORIHIKI'];




	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数
		itemDataList['QTNYUKO']        = 0;
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = _SURYO * -1;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額
		itemDataList['AMNYUKO']        = 0;
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = _KINGAKU * -1;

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数
		itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + (_SURYO * -1);
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額
		itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + (_KINGAKU * -1);

	}

	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------

	insertAkaFT100(_NRZAITORI);



	//入出庫履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）

	TALON.update( " UPDATE FT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBUKEBARAI = '" + "160" + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE   + "'" + 
				  "   AND NRZAITORI  = '" + _NRZAITORI + "'"
				);


}

//-------------------------------------------
//［処理］完成・出荷(完成入庫)処理
//-------------------------------------------
//完成・出荷入庫新規登録
//　1 : 品目コード
//　2 : 取引先コード
//　3 : 倉庫コード
//　4 : 取引日
//　5 : 数量
//　6 : 税抜単価
//　7 : 税抜金額
//　8 : ソース番号
//　9 : 参照番号
function exec_kansei_nyuko_ins(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _SURYO, _TANKA, _KINGAKU, _NRSOURCE, _TXREFNO) {


	//計算
	//--------------------
	var _C_KINGAKU = _SURYO * _TANKA;


	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数(数量)
		itemDataList['QTNYUKO']        = _SURYO;
		//期間出庫数
		itemDataList['QTSYUKKO']       = 0;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額(金額)
		itemDataList['AMNYUKO']        = _C_KINGAKU;
		//期間出庫額
		itemDataList['AMSYUKKO']       = 0;

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数(数量)
		itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + _SURYO;
		//期間出庫数
		itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額(金額)
		itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + _C_KINGAKU;
		//期間出庫額
		itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];

	}

	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------
	var itemDataList = new Array();

	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//受払区分 (060 : 完成入庫)
	itemDataList['KBUKEBARAI']    = "060";
	//振替区分 (Null)
	itemDataList['KBZAIHURI']     = "";
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//倉庫Ｃ
	itemDataList['CDSOUKO']       = _SOUKO;
	//相手先名
	itemDataList['TXAITESAKI']    = _TORIHIKISAKI;
	//取引単価(単価)
	itemDataList['PRTORIHIKI']    = _TANKA;
	//取引数(数量)
	itemDataList['QTTORIHIKI']    = _SURYO;
	//取引額(金額)
	itemDataList['AMTORIHIKI']    = _C_KINGAKU;
	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減数(数量)
	itemDataList['QTZOUGEN']      = _SURYO;
	//残高増減額(金額)
	itemDataList['AMZOUGEN']      = _C_KINGAKU;

	updateFT100(itemDataList);


}
//-------------------------------------------
//完成出荷入庫取消削除
//　1 : 品目コード
//　2 : 取引先コード
//　3 : 倉庫コード
//　4 : 取引日
//　5 : 数量
//　6 : 税抜単価
//　7 : 税抜金額
//　8 : ソース番号
//　9 : 参照番号
//
//　* : 在庫取引№
function exec_kansei_nyuko_del(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _SURYO, _TANKA, _KINGAKU, _NRSOURCE, _TXREFNO,
							   _NRZAITORI) {

	//数値準備(赤データで再セット)
	var itemSelectList = selectFT100(_NRZAITORI);
	var lineDataMapFT100 = itemSelectList[0];
	_SURYO			= lineDataMapFT100['QTTORIHIKI'];
	_KINGAKU		= lineDataMapFT100['AMTORIHIKI'];
	_TANKA			= lineDataMapFT100['PRTORIHIKI'];




	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数(数量)
		itemDataList['QTNYUKO']        = _SURYO * -1;
		//期間出庫数
		itemDataList['QTSYUKKO']       = 0;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額(金額)
		itemDataList['AMNYUKO']        = _KINGAKU * -1;
		//期間出庫額
		itemDataList['AMSYUKKO']       = 0;

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数(数量)
		itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + (_SURYO * -1);
		//期間出庫数
		itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額(金額)
		itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + (_KINGAKU * -1);
		//期間出庫額
		itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];

	}


	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------

	insertAkaFT100(_NRZAITORI);



	//入出庫履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）

	TALON.update( " UPDATE FT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBUKEBARAI = '" + "060" + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE   + "'"
				);


}



//-------------------------------------------
//［処理］完成・出荷(廃棄)処理
//-------------------------------------------
//完成・出荷(廃棄)新規登録
//　1 : 品目コード
//　2 : 取引先コード
//　3 : 倉庫コード
//　4 : 取引日
//　5 : 数量
//　6 : 税抜単価
//　7 : 税抜金額
//　8 : ソース番号
//　9 : 参照番号
function exec_kansei_haiki_ins(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _SURYO, _TANKA, _KINGAKU, _NRSOURCE, _TXREFNO) {


	//計算
	//--------------------
	var _C_KINGAKU = _SURYO * _TANKA;


	//在庫更新
	//--------------------
	var _QTZOUGEN = _SURYO * -1
	var _AMZOUGEN = _C_KINGAKU * -1

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数
		itemDataList['QTNYUKO']        = 0;
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = _SURYO;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額
		itemDataList['AMNYUKO']        = 0;
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = _C_KINGAKU;

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数
		itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + _SURYO;
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額
		itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + _C_KINGAKU;

	}

	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------
	var itemDataList = new Array();

	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//受払区分 (120 : 振替出庫)
	itemDataList['KBUKEBARAI']    = "120";
	//振替区分 (11:雑損)
	itemDataList['KBZAIHURI']     = "11";
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//倉庫Ｃ
	itemDataList['CDSOUKO']       = _SOUKO;
	//相手先名
	itemDataList['TXAITESAKI']    = _TORIHIKISAKI;
	//取引単価(単価)
	itemDataList['PRTORIHIKI']    = _TANKA;
	//取引数(数量)
	itemDataList['QTTORIHIKI']    = _SURYO;
	//取引額(金額)
	itemDataList['AMTORIHIKI']    = _C_KINGAKU;
	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減数(数量)
	itemDataList['QTZOUGEN']      = _QTZOUGEN;
	//残高増減額(金額)
	itemDataList['AMZOUGEN']      = _AMZOUGEN;

	updateFT100(itemDataList);


}
//-------------------------------------------
//完成・出荷(廃棄)取消削除
//　1 : 品目コード
//　2 : 取引先コード
//　3 : 倉庫コード
//　4 : 取引日
//　5 : 数量
//　6 : 税抜単価
//　7 : 税抜金額
//　8 : ソース番号
//　9 : 参照番号
//
//　* : 在庫取引№
function exec_kansei_haiki_del(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _SURYO, _TANKA, _KINGAKU, _NRSOURCE, _TXREFNO,
							   _NRZAITORI) {


	//数値準備(赤データで再セット)
	var itemSelectList = selectFT100(_NRZAITORI);
	var lineDataMapFT100 = itemSelectList[0];
	_SURYO			= lineDataMapFT100['QTTORIHIKI'];
	_KINGAKU		= lineDataMapFT100['AMTORIHIKI'];
	_TANKA			= lineDataMapFT100['PRTORIHIKI'];




	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数
		itemDataList['QTNYUKO']        = 0;
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = _SURYO * -1;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額
		itemDataList['AMNYUKO']        = 0;
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = _KINGAKU * -1;

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数
		itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + (_SURYO * -1);
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額
		itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + (_KINGAKU * -1);

	}


	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------

	insertAkaFT100(_NRZAITORI);



	//入出庫履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）

	TALON.update( " UPDATE FT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBUKEBARAI = '" + "120" + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE   + "'"
				);


}



//-------------------------------------------
//［処理］完成・出荷(販売出荷)処理
//-------------------------------------------
//完成・出荷(販売出荷)新規登録
//　 1 : 品目コード
//　 2 : 取引先コード
//　 3 : 倉庫コード
//　 4 : 取引日
//　 5 : 数量(出荷数)
//　 6 : 単価(実勢原価)
//　 7 : 単価(受注単価)
//　 8 : 実勢原価額
//　 9 : ソース番号
//　10 : 参照番号
function exec_kansei_hanbai_ins(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE,
							    _SYUKA_SURYO, _JISEI_GENKA, _JUCHU_TANKA, _JISEI_KINGAKU, 
							    _NRSOURCE, _TXREFNO) {

	//計算
	//取引額＝実勢原価額
	//出荷額
	var _C_SYUKA_KINGAKU	  = _SYUKA_SURYO * _JISEI_GENKA;
	var _C_JISEI_KINGAKU	  = _C_SYUKA_KINGAKU;

	//受注金額/消費税額
	var _C_JUCHU_KINGAKU_NUKI = _SYUKA_SURYO * _JUCHU_TANKA;
	var _C_JUCHU_ZEIGAKU	  = _C_JUCHU_KINGAKU_NUKI * getTAX_RATE(_TORIHIKIDATE);
	var _C_JUCHU_KINGAKU_KOMI = _C_JUCHU_KINGAKU_NUKI + _C_JUCHU_ZEIGAKU;


	//在庫更新
	//--------------------
	var _QTZOUGEN = _SYUKA_SURYO * -1
	var _AMZOUGEN = _C_SYUKA_KINGAKU * -1

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数
		itemDataList['QTNYUKO']        = 0;
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = _SYUKA_SURYO;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額
		itemDataList['AMNYUKO']        = 0;
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = _C_SYUKA_KINGAKU;

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数
		itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + _SYUKA_SURYO;
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額
		itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + _C_SYUKA_KINGAKU;

	}

	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------
	var itemDataList = new Array();

	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//受払区分 (130 : 売上出庫)
	itemDataList['KBUKEBARAI']    = "130";
	//振替区分 (Null)
	itemDataList['KBZAIHURI']     = "";
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//倉庫Ｃ
	itemDataList['CDSOUKO']       = _SOUKO;
	//相手先名
	itemDataList['TXAITESAKI']    = _TORIHIKISAKI;
	//取引単価(単価)
	itemDataList['PRTORIHIKI']    = _JISEI_GENKA;
	//取引数(数量)
	itemDataList['QTTORIHIKI']    = _SYUKA_SURYO;
	//取引額(金額)
	itemDataList['AMTORIHIKI']    = _C_SYUKA_KINGAKU;

	//取引差額 ['（【製造指示】出荷数 *【製造指示】受注単価）－【製造指示】実勢原価額]
	itemDataList['AMSAGAKU']    = (_SYUKA_SURYO * _JUCHU_TANKA) - _C_JISEI_KINGAKU;

	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減数(数量)
	itemDataList['QTZOUGEN']      = _QTZOUGEN;
	//残高増減額(金額)
	itemDataList['AMZOUGEN']      = _AMZOUGEN;

	updateFT100(itemDataList);



	//売掛履歴作成
	//--------------------
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']  = _TORIHIKISAKI;
	//取引日
	itemDataList['DTTORIHIKI']   = _TORIHIKIDATE;
	//取引区分(00 : 出荷売上)
	itemDataList['KBURITORI']    = "00";
	//振替区分(Null)
	itemDataList['KBURIHURI']    = "";
	//赤黒(1:黒伝)
	itemDataList['KBAKADEN']     = "1";
	//効区(T:有効)
	itemDataList['FGVALID']      = "T";
	//品目ID
	itemDataList['IDHINMOKU']    = _HINMOKU;
	//取引単価(受注単価)
	itemDataList['PRTORIHIKI']   = _JUCHU_TANKA;
	//取引数(出荷数)
	itemDataList['QTTORIHIKI']   = _SYUKA_SURYO;
	//消費税額(受注金額消費税額)
	itemDataList['AMTAX']        = _C_JUCHU_ZEIGAKU;
	//販売原価
	itemDataList['AMGENKA']      = _C_JISEI_KINGAKU;
	//取引ソース№
	itemDataList['NRSOURCE']     = _NRSOURCE;
	//請求№(Null)
	itemDataList['NRSEIKYU']     = "";
	//登録日時
	itemDataList['DTCREATE']     = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']      = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']       = '';
	//月序(Null)
	itemDataList['DTMSEQ']       = '';
	//粗利額
	itemDataList['AMARARI']      = _C_JUCHU_KINGAKU_NUKI - _C_JISEI_KINGAKU;
	//残高増減額
	itemDataList['AMZOUGEN']     = _C_JUCHU_KINGAKU_KOMI;
	//税抜取引額
	itemDataList['AMTORIHIKI']   = _C_JUCHU_KINGAKU_NUKI;


	updateET100(itemDataList);



	//得意先情報更新
	//--------------------
	var itemDataList = new Array();

	//得意先情報取得
	var itemSelectList = selectET010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']       = lineDataMap['IDTOKUISAKI'];
	//客先担当部署
	itemDataList['TXTANTOUBUSYO']     = lineDataMap['TXTANTOUBUSYO'];
	//客先担当名
	itemDataList['TXTANTOUSYA']       = lineDataMap['TXTANTOUSYA'];
	//客先担当職位
	itemDataList['TXTANTOUSYASYOKUI'] = lineDataMap['TXTANTOUSYASYOKUI'];
	//客先担当メアド
	itemDataList['TXTANTOUSYAEMAIL']  = lineDataMap['TXTANTOUSYAEMAIL'];
	//客先担当TEL
	itemDataList['TXTANTOUSYADENWA']  = lineDataMap['TXTANTOUSYADENWA'];
	//請求方式区分
	itemDataList['KBSEIKYUHOUSHIKI']  = lineDataMap['KBSEIKYUHOUSHIKI'];
	//締め日
	itemDataList['TXSIMEBI']          = lineDataMap['TXSIMEBI'];
	//標準入金方法区分
	itemDataList['KBNYUKINHOUHOU']    = lineDataMap['KBNYUKINHOUHOU'];
	//売上入金サイト
	itemDataList['VLNYUKINSAITO']     = lineDataMap['VLNYUKINSAITO'];
	//与信限度額
	itemDataList['AMYOSHIN']          = lineDataMap['AMYOSHIN'];
	//担当営業№
	itemDataList['NRTANTOUJYUGYOIN']  = lineDataMap['NRTANTOUJYUGYOIN'];
	//摘要
	itemDataList['TXTEKIYO']          = lineDataMap['TXTEKIYO'];
	//期首売掛残高
	itemDataList['AMKISYUURIKAKE']    = lineDataMap['AMKISYUURIKAKE'];
	//期間売上額(税込金額)
	itemDataList['AMURIAGE']          = lineDataMap['AMURIAGE'] + _C_JUCHU_KINGAKU_KOMI;
	//期間受領額
	itemDataList['AMJYURYO']          = lineDataMap['AMJYURYO'];
	//現売掛残高
	itemDataList['AMGENURIKAKE']      = lineDataMap['AMGENURIKAKE'];

	updateET010(itemDataList);

}


//-------------------------------------------
//完成・出荷(販売出荷)取消削除
//　 1 : 品目コード
//　 2 : 取引先コード
//　 3 : 倉庫コード
//　 4 : 取引日
//　 5 : 数量(出荷数)
//　 6 : 数量(受注数)
//　 7 : 単価(実勢原価)
//　 8 : 単価(受注単価)
//　 9 : 実勢原価額
//　10 : ソース番号
//　11 : 参照番号
//
//　* : 在庫取引№
//　* : 売掛取引№
function exec_kansei_hanbai_del(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE,
							    _SYUKA_SURYO, _JISEI_GENKA, _JUCHU_TANKA, _JISEI_KINGAKU, 
							    _NRSOURCE,  _TXREFNO,
							    _NRZAITORI, _NRURIKAKE) {

	//数値準備
	// * //出荷額
	// * var _C_SYUKA_KINGAKU	  = _SYUKA_SURYO * _JISEI_GENKA;
	// * //受注金額/消費税額
	// * var _C_JUCHU_KINGAKU_NUKI = _SYUKA_SURYO * _JUCHU_TANKA;
	// * var _C_JUCHU_ZEIGAKU	  = _C_JUCHU_KINGAKU_NUKI * getTAX_RATE(_TORIHIKIDATE);
	// * var _C_JUCHU_KINGAKU_KOMI = _C_JUCHU_KINGAKU_NUKI + _C_JUCHU_ZEIGAKU;

	//数値準備(赤データで再セット)
	var itemSelectList = selectFT100(_NRZAITORI);
	var lineDataMapFT100 = itemSelectList[0];
	var itemSelectList = selectET100(_NRURIKAKE);
	var lineDataMapET100 = itemSelectList[0];

	_SYUKA_SURYO			= lineDataMapFT100['QTTORIHIKI'];
	_JISEI_GENKA			= lineDataMapFT100['PRTORIHIKI'];
	var _C_SYUKA_KINGAKU	= lineDataMapFT100['AMTORIHIKI'];
	var _C_JUCHU_KINGAKU_NUKI = lineDataMapET100['AMTORIHIKI'];
	var _C_JUCHU_ZEIGAKU	  = lineDataMapET100['AMTAX'];
	var _C_JUCHU_KINGAKU_KOMI = _C_JUCHU_KINGAKU_NUKI + _C_JUCHU_ZEIGAKU;




	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数
		itemDataList['QTNYUKO']        = 0;
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = _SYUKA_SURYO * -1;
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額
		itemDataList['AMNYUKO']        = 0;
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = _C_SYUKA_KINGAKU * -1;

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数
		itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
		//期間出庫数(数量)
		itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + (_SYUKA_SURYO * -1);
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額
		itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
		//期間出庫額(金額)
		itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + (_C_SYUKA_KINGAKU * -1);

	}


	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------

	insertAkaFT100(_NRZAITORI);



	//入出庫履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）

	TALON.update( " UPDATE FT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBUKEBARAI = '" + "130" + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE   + "'"
				);



	//売掛履歴作成
	//--------------------

	insertAkaET100(_NRURIKAKE);



	//売掛履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）

	TALON.update( " UPDATE ET100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBURITORI  = '" + "00" + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE  + "'"
				);



	//得意先情報更新
	//--------------------
	var itemDataList = new Array();

	//得意先情報取得
	var itemSelectList = selectET010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']       = lineDataMap['IDTOKUISAKI'];
	//客先担当部署
	itemDataList['TXTANTOUBUSYO']     = lineDataMap['TXTANTOUBUSYO'];
	//客先担当名
	itemDataList['TXTANTOUSYA']       = lineDataMap['TXTANTOUSYA'];
	//客先担当職位
	itemDataList['TXTANTOUSYASYOKUI'] = lineDataMap['TXTANTOUSYASYOKUI'];
	//客先担当メアド
	itemDataList['TXTANTOUSYAEMAIL']  = lineDataMap['TXTANTOUSYAEMAIL'];
	//客先担当TEL
	itemDataList['TXTANTOUSYADENWA']  = lineDataMap['TXTANTOUSYADENWA'];
	//請求方式区分
	itemDataList['KBSEIKYUHOUSHIKI']  = lineDataMap['KBSEIKYUHOUSHIKI'];
	//締め日
	itemDataList['TXSIMEBI']          = lineDataMap['TXSIMEBI'];
	//標準入金方法区分
	itemDataList['KBNYUKINHOUHOU']    = lineDataMap['KBNYUKINHOUHOU'];
	//売上入金サイト
	itemDataList['VLNYUKINSAITO']     = lineDataMap['VLNYUKINSAITO'];
	//与信限度額
	itemDataList['AMYOSHIN']          = lineDataMap['AMYOSHIN'];
	//担当営業№
	itemDataList['NRTANTOUJYUGYOIN']  = lineDataMap['NRTANTOUJYUGYOIN'];
	//摘要
	itemDataList['TXTEKIYO']          = lineDataMap['TXTEKIYO'];
	//期首売掛残高
	itemDataList['AMKISYUURIKAKE']    = lineDataMap['AMKISYUURIKAKE'];
	//期間売上額(税込金額)
	itemDataList['AMURIAGE']          = lineDataMap['AMURIAGE'] + (_C_JUCHU_KINGAKU_KOMI * -1);
	//期間受領額
	itemDataList['AMJYURYO']          = lineDataMap['AMJYURYO'];
	//現売掛残高
	itemDataList['AMGENURIKAKE']      = lineDataMap['AMGENURIKAKE'];

	updateET010(itemDataList);

}

//-------------------------------------------
//［処理］売掛振替登録処理
//-------------------------------------------
//売掛振替登録処理
//　 1 : 取引先コード
//　 2 : 取引日
//　 3 : 増減区分
//　 4 : 振替区分
//   5 : 適用
//   6 : 振替額
//　 7 : ソース番号
//　 8 : 参照番号(売掛振替№)
function exec_urikake_ins(_TORIHIKISAKI, _TORIHIKIDATE, _ZOGENKBN, _HURIKAEKBN, _TEKIYO, _HURIKAEGAKU,
						  _NRSOURCE, _TXREFNO) {

	//売掛履歴作成
	//--------------------
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']  = _TORIHIKISAKI;
	//取引日
	itemDataList['DTTORIHIKI']   = _TORIHIKIDATE;
	//取引区分(00 : 出荷売上)
	if (_ZOGENKBN == '0') {
		//10:振替控除
		itemDataList['KBURITORI']    = "10";
	} else {
		//11:振替計上
		itemDataList['KBURITORI']    = "11";
	}
	//振替区分(Null)
	itemDataList['KBURIHURI']    = _HURIKAEKBN;
	//赤黒(1:黒伝)
	itemDataList['KBAKADEN']     = "1";
	//効区(T:有効)
	itemDataList['FGVALID']      = "T";
	//品目ID
	itemDataList['IDHINMOKU']    = '';
	//品名／摘要 
	itemDataList['TXHINMEI']     = _TEKIYO;
	//単位区分
	itemDataList['KBUNIT']        = 'CNT';
	//取引単価
	itemDataList['PRTORIHIKI']   = _HURIKAEGAKU;
	//取引数
	itemDataList['QTTORIHIKI']   = 1;
	//消費税額
	itemDataList['AMTAX']        = 0;
	//販売原価
	itemDataList['AMGENKA']      = 0;
	//取引ソース№
	itemDataList['NRSOURCE']     = _NRSOURCE;
	//請求№(Null)
	itemDataList['NRSEIKYU']     = "";
	//登録日時
	itemDataList['DTCREATE']     = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']      = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']       = '';
	//月序(Null)
	itemDataList['DTMSEQ']       = '';
	//粗利額
	itemDataList['AMARARI']      = 0;
	//残高増減額
	//取引区分(00 : 出荷売上)
	if (_ZOGENKBN == '0') {
		//10:振替控除
		itemDataList['AMZOUGEN']     = _HURIKAEGAKU * -1;
	} else {
		//11:振替計上
		itemDataList['AMZOUGEN']     = _HURIKAEGAKU;
	}
	//税抜取引額
	itemDataList['AMTORIHIKI']   = _HURIKAEGAKU;


	updateET100(itemDataList);



	//得意先情報更新
	//--------------------
	var itemDataList = new Array();

	//得意先情報取得
	var itemSelectList = selectET010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']       = lineDataMap['IDTOKUISAKI'];
	//客先担当部署
	itemDataList['TXTANTOUBUSYO']     = lineDataMap['TXTANTOUBUSYO'];
	//客先担当名
	itemDataList['TXTANTOUSYA']       = lineDataMap['TXTANTOUSYA'];
	//客先担当職位
	itemDataList['TXTANTOUSYASYOKUI'] = lineDataMap['TXTANTOUSYASYOKUI'];
	//客先担当メアド
	itemDataList['TXTANTOUSYAEMAIL']  = lineDataMap['TXTANTOUSYAEMAIL'];
	//客先担当TEL
	itemDataList['TXTANTOUSYADENWA']  = lineDataMap['TXTANTOUSYADENWA'];
	//請求方式区分
	itemDataList['KBSEIKYUHOUSHIKI']  = lineDataMap['KBSEIKYUHOUSHIKI'];
	//締め日
	itemDataList['TXSIMEBI']          = lineDataMap['TXSIMEBI'];
	//標準入金方法区分
	itemDataList['KBNYUKINHOUHOU']    = lineDataMap['KBNYUKINHOUHOU'];
	//売上入金サイト
	itemDataList['VLNYUKINSAITO']     = lineDataMap['VLNYUKINSAITO'];
	//与信限度額
	itemDataList['AMYOSHIN']          = lineDataMap['AMYOSHIN'];
	//担当営業№
	itemDataList['NRTANTOUJYUGYOIN']  = lineDataMap['NRTANTOUJYUGYOIN'];
	//摘要
	itemDataList['TXTEKIYO']          = lineDataMap['TXTEKIYO'];
	//期首売掛残高
	itemDataList['AMKISYUURIKAKE']    = lineDataMap['AMKISYUURIKAKE'];
	//期間売上額(税込金額)
	if (_ZOGENKBN == '0') {
		//10:振替控除
		itemDataList['AMURIAGE']          = lineDataMap['AMURIAGE'] + (_HURIKAEGAKU * -1);
	} else {
		//11:振替計上
		itemDataList['AMURIAGE']          = lineDataMap['AMURIAGE'] + _HURIKAEGAKU;
	}
	//期間受領額
	itemDataList['AMJYURYO']          = lineDataMap['AMJYURYO'];
	//現売掛残高
	itemDataList['AMGENURIKAKE']      = lineDataMap['AMGENURIKAKE'];

	updateET010(itemDataList);

}


//-------------------------------------------
//売掛振替削除処理
//　 1 : 取引先コード
//　 2 : 取引日
//　 3 : 増減区分
//　 4 : 振替区分
//   5 : 適用
//   6 : 振替額
//　 7 : ソース番号
//　 8 : 参照番号(売掛振替№)
//　*  : 売掛取引№
//　*  : 取引区分
function exec_urikake_del(_TORIHIKISAKI, _TORIHIKIDATE, _ZOGENKBN, _HURIKAEKBN, _TEKIYO, _HURIKAEGAKU,
						  _NRSOURCE, _TXREFNO, _NRURIKAKE,_KBURITORI) {

	//売掛履歴作成
	//--------------------
	insertAkaET100(_NRURIKAKE);


	//売掛履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）
	TALON.update( " UPDATE ET100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBURITORI  = '" + _KBURITORI + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE  + "'"
				);


	//得意先情報更新
	//--------------------
	var itemDataList = new Array();

	//得意先情報取得
	var itemSelectList = selectET010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']       = lineDataMap['IDTOKUISAKI'];
	//客先担当部署
	itemDataList['TXTANTOUBUSYO']     = lineDataMap['TXTANTOUBUSYO'];
	//客先担当名
	itemDataList['TXTANTOUSYA']       = lineDataMap['TXTANTOUSYA'];
	//客先担当職位
	itemDataList['TXTANTOUSYASYOKUI'] = lineDataMap['TXTANTOUSYASYOKUI'];
	//客先担当メアド
	itemDataList['TXTANTOUSYAEMAIL']  = lineDataMap['TXTANTOUSYAEMAIL'];
	//客先担当TEL
	itemDataList['TXTANTOUSYADENWA']  = lineDataMap['TXTANTOUSYADENWA'];
	//請求方式区分
	itemDataList['KBSEIKYUHOUSHIKI']  = lineDataMap['KBSEIKYUHOUSHIKI'];
	//締め日
	itemDataList['TXSIMEBI']          = lineDataMap['TXSIMEBI'];
	//標準入金方法区分
	itemDataList['KBNYUKINHOUHOU']    = lineDataMap['KBNYUKINHOUHOU'];
	//売上入金サイト
	itemDataList['VLNYUKINSAITO']     = lineDataMap['VLNYUKINSAITO'];
	//与信限度額
	itemDataList['AMYOSHIN']          = lineDataMap['AMYOSHIN'];
	//担当営業№
	itemDataList['NRTANTOUJYUGYOIN']  = lineDataMap['NRTANTOUJYUGYOIN'];
	//摘要
	itemDataList['TXTEKIYO']          = lineDataMap['TXTEKIYO'];
	//期首売掛残高
	itemDataList['AMKISYUURIKAKE']    = lineDataMap['AMKISYUURIKAKE'];
	//期間売上額(税込金額)
	//if (_ZOGENKBN == '0') {
	if (_KBURITORI == '10') {
		//増減区分=0:残高減 → 取引区分=10:振替控除
		//10:振替控除
		itemDataList['AMURIAGE']          = lineDataMap['AMURIAGE'] + ((_HURIKAEGAKU * -1) * -1);
	} else {
		//11:振替計上
		itemDataList['AMURIAGE']          = lineDataMap['AMURIAGE'] + (_HURIKAEGAKU * -1);
	}
	//期間受領額
	itemDataList['AMJYURYO']          = lineDataMap['AMJYURYO'];
	//現売掛残高
	itemDataList['AMGENURIKAKE']      = lineDataMap['AMGENURIKAKE'];

	updateET010(itemDataList);

}



//-------------------------------------------
//［処理］特殊売上登録処理
//-------------------------------------------
//特殊売上登録処理
//　 1 : 品目コード
//　 2 : 取引先コード
//　 3 : 倉庫コード
//　 4 : 取引日
//   5 : 取引区分
//　 6 : 数量
//　 7 : 単価
//　 8 : 消費税
//　 9   税抜取引額
//　10 : 在庫単価
//　11 : 在庫取引数
//　12 : ソース番号
//　13 : 参照番号
function exec_tokuuri_ins(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _TORIHIKIKBN,
						  _SURYO, _TANKA, _SYOHIZEI, _NUKIGAKU, _ZAIKOTANKA, _ZAIKOTORIHIKISU, 
						  _NRSOURCE, _TXREFNO) {

	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数／期間出庫数(数量)
		if (_TORIHIKIKBN == '10') {
			itemDataList['QTNYUKO']        = _ZAIKOTORIHIKISU;
			itemDataList['QTSYUKKO']       = 0;
		} else {
			itemDataList['QTNYUKO']        = 0;
			itemDataList['QTSYUKKO']       = _ZAIKOTORIHIKISU;
		}
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額／期間出庫額(金額)
		if (_TORIHIKIKBN == '10') {
			itemDataList['AMNYUKO']        = (_ZAIKOTORIHIKISU * _ZAIKOTANKA);
			itemDataList['AMSYUKKO']       = 0;
		} else {
			itemDataList['AMNYUKO']        = 0;
			itemDataList['AMSYUKKO']       = (_ZAIKOTORIHIKISU * _ZAIKOTANKA) ;
		}

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数／期間出庫数(数量)
		if (_TORIHIKIKBN == '10') {
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + _ZAIKOTORIHIKISU;
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
		} else {
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + _ZAIKOTORIHIKISU;
		}
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額／期間出庫額(金額)
		if (_TORIHIKIKBN == '10') {
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + (_ZAIKOTORIHIKISU * _ZAIKOTANKA) ;
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];
		} else {
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + (_ZAIKOTORIHIKISU * _ZAIKOTANKA) ;
		}
	}

	updateFT010(itemDataList);




	//入出庫履歴作成
	//--------------------
	var itemDataList = new Array();

	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//受払区分
	if (_TORIHIKIKBN == '10') {
		itemDataList['KBUKEBARAI']    = "050";
	} else {
		itemDataList['KBUKEBARAI']    = "150";
	}
	//振替区分 (Null)
	itemDataList['KBZAIHURI']     = "";
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//倉庫Ｃ
	itemDataList['CDSOUKO']       = _SOUKO;
	//相手先名
	itemDataList['TXAITESAKI']    = _TORIHIKISAKI;
	//取引単価(単価)
	itemDataList['PRTORIHIKI']    = _ZAIKOTANKA;
	//取引数(数量)
	itemDataList['QTTORIHIKI']    = _ZAIKOTORIHIKISU;
	//取引額(金額)
	itemDataList['AMTORIHIKI']    = (_ZAIKOTANKA * _ZAIKOTORIHIKISU);

	//取引差額
	itemDataList['AMSAGAKU']    = _NUKIGAKU - (_ZAIKOTANKA * _ZAIKOTORIHIKISU);

	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減数(数量)／残高増減額(金額)
	if (_TORIHIKIKBN == '10') {
		itemDataList['QTZOUGEN']      = _ZAIKOTORIHIKISU;
		itemDataList['AMZOUGEN']      = (_ZAIKOTANKA * _ZAIKOTORIHIKISU);
	} else {
		itemDataList['QTZOUGEN']      = _ZAIKOTORIHIKISU * -1;
		itemDataList['AMZOUGEN']      = (_ZAIKOTANKA * _ZAIKOTORIHIKISU) * -1;
	}

	updateFT100(itemDataList);




	//売掛履歴作成
	//--------------------
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']  = _TORIHIKISAKI;
	//取引日
	itemDataList['DTTORIHIKI']   = _TORIHIKIDATE;
	//取引区分
	if (_TORIHIKIKBN == '10') {
		itemDataList['KBURITORI']    = "02";
	} else {
		itemDataList['KBURITORI']    = "01";
	}
	//振替区分(Null)
	itemDataList['KBURIHURI']    = "";
	//赤黒(1:黒伝)
	itemDataList['KBAKADEN']     = "1";
	//効区(T:有効)
	itemDataList['FGVALID']      = "T";
	//品目ID
	itemDataList['IDHINMOKU']    = _HINMOKU;
	//取引単価
	itemDataList['PRTORIHIKI']   = _TANKA;
	//取引数(出荷数)
	itemDataList['QTTORIHIKI']   = _SURYO;
	//消費税額
	itemDataList['AMTAX']        = _SYOHIZEI;
	//販売原価
	itemDataList['AMGENKA']      = (_ZAIKOTANKA * _ZAIKOTORIHIKISU);
	//取引ソース№
	itemDataList['NRSOURCE']     = _NRSOURCE;
	//請求№(Null)
	itemDataList['NRSEIKYU']     = "";
	//登録日時
	itemDataList['DTCREATE']     = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']      = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']       = '';
	//月序(Null)
	itemDataList['DTMSEQ']       = '';
	//粗利額
	itemDataList['AMARARI']      = _NUKIGAKU - (_ZAIKOTANKA * _ZAIKOTORIHIKISU);
	//残高増減額
	if (_TORIHIKIKBN == '10') {
		itemDataList['AMZOUGEN']     = (_NUKIGAKU + _SYOHIZEI) * -1;
	} else {
		itemDataList['AMZOUGEN']     = _NUKIGAKU + _SYOHIZEI;
	}
	//税抜取引額
	itemDataList['AMTORIHIKI']   = _NUKIGAKU;

	updateET100(itemDataList);




	//得意先情報更新
	//--------------------
	var itemDataList = new Array();

	//得意先情報取得
	var itemSelectList = selectET010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']       = lineDataMap['IDTOKUISAKI'];
	//客先担当部署
	itemDataList['TXTANTOUBUSYO']     = lineDataMap['TXTANTOUBUSYO'];
	//客先担当名
	itemDataList['TXTANTOUSYA']       = lineDataMap['TXTANTOUSYA'];
	//客先担当職位
	itemDataList['TXTANTOUSYASYOKUI'] = lineDataMap['TXTANTOUSYASYOKUI'];
	//客先担当メアド
	itemDataList['TXTANTOUSYAEMAIL']  = lineDataMap['TXTANTOUSYAEMAIL'];
	//客先担当TEL
	itemDataList['TXTANTOUSYADENWA']  = lineDataMap['TXTANTOUSYADENWA'];
	//請求方式区分
	itemDataList['KBSEIKYUHOUSHIKI']  = lineDataMap['KBSEIKYUHOUSHIKI'];
	//締め日
	itemDataList['TXSIMEBI']          = lineDataMap['TXSIMEBI'];
	//標準入金方法区分
	itemDataList['KBNYUKINHOUHOU']    = lineDataMap['KBNYUKINHOUHOU'];
	//売上入金サイト
	itemDataList['VLNYUKINSAITO']     = lineDataMap['VLNYUKINSAITO'];
	//与信限度額
	itemDataList['AMYOSHIN']          = lineDataMap['AMYOSHIN'];
	//担当営業№
	itemDataList['NRTANTOUJYUGYOIN']  = lineDataMap['NRTANTOUJYUGYOIN'];
	//摘要
	itemDataList['TXTEKIYO']          = lineDataMap['TXTEKIYO'];
	//期首売掛残高
	itemDataList['AMKISYUURIKAKE']    = lineDataMap['AMKISYUURIKAKE'];
	//期間売上額(税込金額)
	if (_TORIHIKIKBN == '10') {
		itemDataList['AMURIAGE']     = lineDataMap['AMURIAGE'] + ( (_NUKIGAKU + _SYOHIZEI) * -1 );
	} else {
		itemDataList['AMURIAGE']     = lineDataMap['AMURIAGE'] + (_NUKIGAKU + _SYOHIZEI);
	}
	//期間受領額
	itemDataList['AMJYURYO']          = lineDataMap['AMJYURYO'];
	//現売掛残高
	itemDataList['AMGENURIKAKE']      = lineDataMap['AMGENURIKAKE'];

	updateET010(itemDataList);

}




//-------------------------------------------
//特殊売上削除処理
//　 1 : 品目コード
//　 2 : 取引先コード
//　 3 : 倉庫コード
//　 4 : 取引日
//   5 : 取引区分
//　 6 : 数量
//　 7 : 単価
//　 8 : 消費税
//　 9   税抜取引額
//　10 : 在庫単価
//　11 : 在庫取引数
//　12 : ソース番号
//　13 : 参照番号
//
//　* : 在庫取引№
//　* : 売掛取引№
function exec_tokuuri_del(_HINMOKU, _TORIHIKISAKI, _SOUKO, _TORIHIKIDATE, _TORIHIKIKBN,
						  _SURYO, _TANKA, _SYOHIZEI, _NUKIGAKU, _ZAIKOTANKA, _ZAIKOTORIHIKISU, 
						  _NRSOURCE, _TXREFNO, 
						  _NRZAITORI, _NRURIKAKE) {


	//数値準備(赤データで再セット)
	// * var itemSelectList = selectFT100(_NRZAITORI);
	// * var lineDataMapFT100 = itemSelectList[0];
	// * _SYUKA_SURYO			= lineDataMapFT100['QTTORIHIKI'];
	// * _JISEI_GENKA			= lineDataMapFT100['PRTORIHIKI'];
	// * var _C_SYUKA_KINGAKU	= lineDataMapFT100['AMTORIHIKI'];

	var itemSelectList = selectET100(_NRURIKAKE);
	var lineDataMapET100 = itemSelectList[0];
	// * var _C_JUCHU_KINGAKU_NUKI = lineDataMapET100['AMTORIHIKI'];
	// * var _C_JUCHU_ZEIGAKU	  = lineDataMapET100['AMTAX'];
	// * var _C_JUCHU_KINGAKU_KOMI = _C_JUCHU_KINGAKU_NUKI + _C_JUCHU_ZEIGAKU;
	var _AMZOUGEN = lineDataMapET100['AMZOUGEN'];



	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数／期間出庫数(数量)
		if (_TORIHIKIKBN == '02') {
			itemDataList['QTNYUKO']        = _ZAIKOTORIHIKISU * -1;
			itemDataList['QTSYUKKO']       = 0;
		} else {
			itemDataList['QTNYUKO']        = 0;
			itemDataList['QTSYUKKO']       = _ZAIKOTORIHIKISU * -1;
		}
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額／期間出庫額(金額)
		if (_TORIHIKIKBN == '02') {
			itemDataList['AMNYUKO']        = (_ZAIKOTORIHIKISU * _ZAIKOTANKA) * -1;
			itemDataList['AMSYUKKO']       = 0;
		} else {
			itemDataList['AMNYUKO']        = 0;
			itemDataList['AMSYUKKO']       = (_ZAIKOTORIHIKISU * _ZAIKOTANKA) * -1 ;
		}
	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数／期間出庫数(数量)
		if (_TORIHIKIKBN == '02') {
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + (_ZAIKOTORIHIKISU * -1);
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
		} else {
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + (_ZAIKOTORIHIKISU * -1);
		}
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額／期間出庫額(金額)
		if (_TORIHIKIKBN == '02') {
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + ( (_ZAIKOTORIHIKISU * _ZAIKOTANKA) * -1);
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];
		} else {
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + ( (_ZAIKOTORIHIKISU * _ZAIKOTANKA) * -1) ;
		}
	}
	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------
	insertAkaFT100(_NRZAITORI);



	//入出庫履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）
	//受払区分
	if (_TORIHIKIKBN == '02') {
		var _KBUKEBARAI    = "050";
	} else {
		var _KBUKEBARAI    = "150";
	}
	TALON.update( " UPDATE FT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBUKEBARAI = '" + _KBUKEBARAI + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE   + "'"
				);



	//売掛履歴作成
	//--------------------
	insertAkaET100(_NRURIKAKE);



	//売掛履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）
	TALON.update( " UPDATE ET100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBURITORI  = '" + _TORIHIKIKBN + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE    + "'"
				);



	//得意先情報更新
	//--------------------
	var itemDataList = new Array();

	//得意先情報取得
	var itemSelectList = selectET010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']       = lineDataMap['IDTOKUISAKI'];
	//客先担当部署
	itemDataList['TXTANTOUBUSYO']     = lineDataMap['TXTANTOUBUSYO'];
	//客先担当名
	itemDataList['TXTANTOUSYA']       = lineDataMap['TXTANTOUSYA'];
	//客先担当職位
	itemDataList['TXTANTOUSYASYOKUI'] = lineDataMap['TXTANTOUSYASYOKUI'];
	//客先担当メアド
	itemDataList['TXTANTOUSYAEMAIL']  = lineDataMap['TXTANTOUSYAEMAIL'];
	//客先担当TEL
	itemDataList['TXTANTOUSYADENWA']  = lineDataMap['TXTANTOUSYADENWA'];
	//請求方式区分
	itemDataList['KBSEIKYUHOUSHIKI']  = lineDataMap['KBSEIKYUHOUSHIKI'];
	//締め日
	itemDataList['TXSIMEBI']          = lineDataMap['TXSIMEBI'];
	//標準入金方法区分
	itemDataList['KBNYUKINHOUHOU']    = lineDataMap['KBNYUKINHOUHOU'];
	//売上入金サイト
	itemDataList['VLNYUKINSAITO']     = lineDataMap['VLNYUKINSAITO'];
	//与信限度額
	itemDataList['AMYOSHIN']          = lineDataMap['AMYOSHIN'];
	//担当営業№
	itemDataList['NRTANTOUJYUGYOIN']  = lineDataMap['NRTANTOUJYUGYOIN'];
	//摘要
	itemDataList['TXTEKIYO']          = lineDataMap['TXTEKIYO'];
	//期首売掛残高
	itemDataList['AMKISYUURIKAKE']    = lineDataMap['AMKISYUURIKAKE'];
	//期間売上額(税込金額)
	//itemDataList['AMURIAGE']        = lineDataMap['AMURIAGE'] + (_C_JUCHU_KINGAKU_KOMI * -1);
	itemDataList['AMURIAGE']          = lineDataMap['AMURIAGE'] + (_AMZOUGEN * -1);
	//期間受領額
	itemDataList['AMJYURYO']          = lineDataMap['AMJYURYO'];
	//現売掛残高
	itemDataList['AMGENURIKAKE']      = lineDataMap['AMGENURIKAKE'];

	updateET010(itemDataList);

}




//-------------------------------------------
//［処理］在庫振替の保守
//-------------------------------------------
//在庫振替登録処理
//　 1 : 品目コード
//　 2 : 倉庫コード
//　 3 : 振替日（取引日）
//   4 : 増減区分
//   4 : 振替区分
//　 5 : 取引数量
//　 6 : 取引単価
//　 7 : ソース番号
//　 8 : 参照番号
function exec_zaihuri_ins(_HINMOKU, _SOUKO, _TORIHIKIDATE, _ZOGENKBN, _HURIKAEKBN,
						  _ZAIKOTORIHIKISU, _ZAIKOTANKA, _NRSOURCE, _TXREFNO) {

	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数／期間出庫数(数量)
		if (_ZOGENKBN == '1') {
			itemDataList['QTNYUKO']        = _ZAIKOTORIHIKISU;
			itemDataList['QTSYUKKO']       = 0;
		} else {
			itemDataList['QTNYUKO']        = 0;
			itemDataList['QTSYUKKO']       = _ZAIKOTORIHIKISU;
		}
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額／期間出庫額(金額)
		if (_ZOGENKBN == '1') {
			itemDataList['AMNYUKO']        = (_ZAIKOTORIHIKISU * _ZAIKOTANKA);
			itemDataList['AMSYUKKO']       = 0;
		} else {
			itemDataList['AMNYUKO']        = 0;
			itemDataList['AMSYUKKO']       = (_ZAIKOTORIHIKISU * _ZAIKOTANKA) ;
		}

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数／期間出庫数(数量)
		if (_ZOGENKBN == '1') {
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + _ZAIKOTORIHIKISU;
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
		} else {
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + _ZAIKOTORIHIKISU;
		}
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額／期間出庫額(金額)
		if (_ZOGENKBN == '1') {
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + (_ZAIKOTORIHIKISU * _ZAIKOTANKA) ;
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];
		} else {
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + (_ZAIKOTORIHIKISU * _ZAIKOTANKA) ;
		}
	}

	updateFT010(itemDataList);




	//入出庫履歴作成
	//--------------------
	var itemDataList = new Array();

	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//受払区分
	if (_ZOGENKBN == '1') {
		itemDataList['KBUKEBARAI']    = "020";
	} else {
		itemDataList['KBUKEBARAI']    = "120";
	}
	//振替区分 (Null)
	itemDataList['KBZAIHURI']     = _HURIKAEKBN;
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//倉庫Ｃ
	itemDataList['CDSOUKO']       = _SOUKO;
	//相手先名
	itemDataList['TXAITESAKI']    = "";
	//取引単価(単価)
	itemDataList['PRTORIHIKI']    = _ZAIKOTANKA;
	//取引数(数量)
	itemDataList['QTTORIHIKI']    = _ZAIKOTORIHIKISU;
	//取引額(金額)
	itemDataList['AMTORIHIKI']    = (_ZAIKOTANKA * _ZAIKOTORIHIKISU);
	//取引差額
	itemDataList['AMSAGAKU']    = 0;

	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減数(数量)／残高増減額(金額)
	if (_ZOGENKBN == '1') {
		itemDataList['QTZOUGEN']      = _ZAIKOTORIHIKISU;
		itemDataList['AMZOUGEN']      = (_ZAIKOTANKA * _ZAIKOTORIHIKISU);
	} else {
		itemDataList['QTZOUGEN']      = _ZAIKOTORIHIKISU * -1;
		itemDataList['AMZOUGEN']      = (_ZAIKOTANKA * _ZAIKOTORIHIKISU) * -1;
	}

	updateFT100(itemDataList);


}






//-------------------------------------------
//［処理］在庫振替削除
//-------------------------------------------
//在庫振替削除処理
//　 1 : 品目コード
//　 2 : 倉庫コード
//　 3 : 振替日（取引日）
//　 5 : 取引数量
//　 6 : 取引単価
//　 7 : 受払区分
//　 7 : ソース番号
//　 8 : 参照番号
//　* : 在庫取引№
function exec_zaihuri_del(_HINMOKU, _SOUKO, _TORIHIKIDATE, _ZAIKOTORIHIKISU, _ZAIKOTANKA, _KBUKEBARAI,
						 _NRSOURCE, _TXREFNO, _NRZAITORI) {

	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数／期間出庫数(数量)
		if (_KBUKEBARAI == '020') {
			itemDataList['QTNYUKO']        = _ZAIKOTORIHIKISU * -1;
			itemDataList['QTSYUKKO']       = 0;
		} else {
			itemDataList['QTNYUKO']        = 0;
			itemDataList['QTSYUKKO']       = _ZAIKOTORIHIKISU * -1;
		}
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額／期間出庫額(金額)
		if (_KBUKEBARAI == '020') {
			itemDataList['AMNYUKO']        = (_ZAIKOTORIHIKISU * _ZAIKOTANKA) * -1;
			itemDataList['AMSYUKKO']       = 0;
		} else {
			itemDataList['AMNYUKO']        = 0;
			itemDataList['AMSYUKKO']       = (_ZAIKOTORIHIKISU * _ZAIKOTANKA) * -1 ;
		}
	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数／期間出庫数(数量)
		if (_KBUKEBARAI == '020') {
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + (_ZAIKOTORIHIKISU * -1);
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
		} else {
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + (_ZAIKOTORIHIKISU * -1);
		}
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額／期間出庫額(金額)
		if (_KBUKEBARAI == '020') {
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + ( (_ZAIKOTORIHIKISU * _ZAIKOTANKA) * -1);
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];
		} else {
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + ( (_ZAIKOTORIHIKISU * _ZAIKOTANKA) * -1) ;
		}
	}
	updateFT010(itemDataList);



	//入出庫履歴作成
	//--------------------
	insertAkaFT100(_NRZAITORI);



	//入出庫履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）
	TALON.update( " UPDATE FT100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBUKEBARAI = '" + _KBUKEBARAI + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE   + "'"
				);

}

//-------------------------------------------
//［処理］在庫振替の保守
//-------------------------------------------
//在庫振替登録処理
//　 1 : 品目コード
//　 2 : 倉庫コード
//　 2 : 相手倉庫コード
//　 3 : 振替日（取引日）
//   4 : 受払区分
//　 5 : 取引数量
//　 6 : 取引単価
//　 7 : ソース番号
//　 8 : 参照番号
function exec_zaiidou_ins(_HINMOKU, _SOUKO, _AITE_SOUKO, _TORIHIKIDATE, _KBUKEBARAI, 
						  _ZAIKOTORIHIKISU, _ZAIKOTANKA, _NRSOURCE, _TXREFNO) {

	//在庫更新
	//--------------------

	//現在在庫情報取得
	var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

	//
	var itemDataList = new Array();
	if (itemSelectList.length == 0) {
		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = 0;
		//期間入庫数／期間出庫数(数量)
		if (_KBUKEBARAI == '010') {
			itemDataList['QTNYUKO']        = _ZAIKOTORIHIKISU;
			itemDataList['QTSYUKKO']       = 0;
		} else {
			itemDataList['QTNYUKO']        = 0;
			itemDataList['QTSYUKKO']       = _ZAIKOTORIHIKISU;
		}
		//期首在庫額
		itemDataList['AMKISYU']        = 0;
		//期間入庫額／期間出庫額(金額)
		if (_KBUKEBARAI == '010') {
			itemDataList['AMNYUKO']        = (_ZAIKOTORIHIKISU * _ZAIKOTANKA);
			itemDataList['AMSYUKKO']       = 0;
		} else {
			itemDataList['AMNYUKO']        = 0;
			itemDataList['AMSYUKKO']       = (_ZAIKOTORIHIKISU * _ZAIKOTANKA) ;
		}

	} else {
		var lineDataMap = itemSelectList[0];

		//品目ID
		itemDataList['IDHINMOKU']      = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']        = _SOUKO;
		//期首在庫数
		itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
		//期間入庫数／期間出庫数(数量)
		if (_KBUKEBARAI == '010') {
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + _ZAIKOTORIHIKISU;
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
		} else {
			itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
			itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + _ZAIKOTORIHIKISU;
		}
		//期首在庫額
		itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
		//期間入庫額／期間出庫額(金額)
		if (_KBUKEBARAI == '010') {
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + (_ZAIKOTORIHIKISU * _ZAIKOTANKA) ;
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];
		} else {
			itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
			itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + (_ZAIKOTORIHIKISU * _ZAIKOTANKA) ;
		}
	}

	updateFT010(itemDataList);




	//入出庫履歴作成
	//--------------------
	var itemDataList = new Array();

	//取引日
	itemDataList['DTTORIHIKI']    = _TORIHIKIDATE;
	//受払区分
	itemDataList['KBUKEBARAI']    = _KBUKEBARAI;
	//振替区分 (Null)
	itemDataList['KBZAIHURI']     = null;
	//赤黒     (1:黒伝)
	itemDataList['KBAKADEN']      = "1";
	//効区     (T:有効)
	itemDataList['FGVALID']       = "T";
	//品目ID
	itemDataList['IDHINMOKU']     = _HINMOKU;
	//倉庫Ｃ
	itemDataList['CDSOUKO']       = _SOUKO;
	//相手先名
	itemDataList['TXAITESAKI']    = _AITE_SOUKO;
	//取引単価(単価)
	itemDataList['PRTORIHIKI']    = _ZAIKOTANKA;
	//取引数(数量)
	itemDataList['QTTORIHIKI']    = _ZAIKOTORIHIKISU;
	//取引額(金額)
	itemDataList['AMTORIHIKI']    = (_ZAIKOTANKA * _ZAIKOTORIHIKISU);
	//取引差額
	itemDataList['AMSAGAKU']    = 0;
	//取引ソース№
	itemDataList['NRSOURCE']      = _NRSOURCE;
	//登録日時
	itemDataList['DTCREATE']      = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']       = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']        = '';
	//月序(Null)
	itemDataList['DTMSEQ']        = '';
	//残高増減数(数量)／残高増減額(金額)
		if (_KBUKEBARAI == '010') {
		itemDataList['QTZOUGEN']      = _ZAIKOTORIHIKISU;
		itemDataList['AMZOUGEN']      = (_ZAIKOTANKA * _ZAIKOTORIHIKISU);
	} else {
		itemDataList['QTZOUGEN']      = _ZAIKOTORIHIKISU * -1;
		itemDataList['AMZOUGEN']      = (_ZAIKOTANKA * _ZAIKOTORIHIKISU) * -1;
	}

	updateFT100(itemDataList);


}













//-------------------------------------------
//［処理］棚卸確定更新
//-------------------------------------------
//棚卸確定更新処理
//　 1 : 品目コード
//　 2 : 倉庫コード
//　 4 : 確定日時
//   5 : 実棚数量
//　 6 : 基準数量
//　 7 : 実棚単価
//　 8 : ソース番号
//　 9 : 参照番号(棚卸№)
function exec_tanakakutei_ins(_HINMOKU, _SOUKO, _KAKUTEIDATE, _JITSUSU, _KIJUNSU, 
						      _TANKA,   _NRSOURCE, _TXREFNO) {

	if (_JITSUSU - _KIJUNSU != 0 ) {

		if (_JITSUSU == '') { _JITSUSU = 0; }
		if (_KIJUNSU == '') { _KIJUNSU = 0; }
		if (_TANKA   == '') { _TANKA   = 0; }
		var _KBUKEBARAI = '';
		var _QTTORIHIKI = 0;
		var _AMTORIHIKI = 0;
		var _QTZOUGEN   = 0;
		var _AMZOUGEN   = 0;
		if (_JITSUSU - _KIJUNSU > 0 ) {
			_KBUKEBARAI = '070';
			_QTTORIHIKI =  _JITSUSU - _KIJUNSU;
			_AMTORIHIKI = (_JITSUSU - _KIJUNSU) * _TANKA;
			_QTZOUGEN   = _QTTORIHIKI;
			_AMZOUGEN   = _AMTORIHIKI;
		} else {
			_KBUKEBARAI = '170';
			_QTTORIHIKI = (_JITSUSU - _KIJUNSU) * -1;
			_AMTORIHIKI = ((_JITSUSU - _KIJUNSU) * _TANKA) * -1;
			_QTZOUGEN   = _QTTORIHIKI * -1;
			_AMZOUGEN   = _AMTORIHIKI * -1;
		}


		//在庫更新
		//--------------------

		//現在在庫情報取得
		var itemSelectList = selectFT010(_HINMOKU, _SOUKO);

		//
		var itemDataList = new Array();
		if (itemSelectList.length == 0) {
			//品目ID
			itemDataList['IDHINMOKU']      = _HINMOKU;
			//倉庫Ｃ
			itemDataList['CDSOUKO']        = _SOUKO;
			//期首在庫数
			itemDataList['QTKISYU']        = 0;
			//期間入庫数／期間出庫数(数量)
			if (_KBUKEBARAI == '070') {
				itemDataList['QTNYUKO']        = _QTTORIHIKI;
				itemDataList['QTSYUKKO']       = 0;
			} else {
				itemDataList['QTNYUKO']        = 0;
				itemDataList['QTSYUKKO']       = _QTTORIHIKI;
			}
			//期首在庫額
			itemDataList['AMKISYU']        = 0;
			//期間入庫額／期間出庫額(金額)
			if (_KBUKEBARAI == '070') {
				itemDataList['AMNYUKO']        = _AMTORIHIKI;
				itemDataList['AMSYUKKO']       = 0;
			} else {
				itemDataList['AMNYUKO']        = 0;
				itemDataList['AMSYUKKO']       = _AMTORIHIKI;
			}

		} else {
			var lineDataMap = itemSelectList[0];

			//品目ID
			itemDataList['IDHINMOKU']      = _HINMOKU;
			//倉庫Ｃ
			itemDataList['CDSOUKO']        = _SOUKO;
			//期首在庫数
			itemDataList['QTKISYU']        = lineDataMap['QTKISYU'];
			//期間入庫数／期間出庫数(数量)
			if (_KBUKEBARAI == '070') {
				itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'] + _QTTORIHIKI;
				itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'];
			} else {
				itemDataList['QTNYUKO']        = lineDataMap['QTNYUKO'];
				itemDataList['QTSYUKKO']       = lineDataMap['QTSYUKKO'] + _QTTORIHIKI;
			}
			//期首在庫額
			itemDataList['AMKISYU']        = lineDataMap['AMKISYU'];
			//期間入庫額／期間出庫額(金額)
			if (_KBUKEBARAI == '070') {
				itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'] + _AMTORIHIKI ;
				itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'];
			} else {
				itemDataList['AMNYUKO']        = lineDataMap['AMNYUKO'];
				itemDataList['AMSYUKKO']       = lineDataMap['AMSYUKKO'] + _AMTORIHIKI ;
			}
		}

		updateFT010(itemDataList);



		//入出庫履歴作成
		//--------------------
		var itemDataList = new Array();

		//取引日
		itemDataList['DTTORIHIKI']    = _KAKUTEIDATE;
		//受払区分
		itemDataList['KBUKEBARAI']    = _KBUKEBARAI;
		//振替区分 (Null)
		itemDataList['KBZAIHURI']     = null;
		//赤黒     (1:黒伝)
		itemDataList['KBAKADEN']      = "1";
		//効区     (T:有効)
		itemDataList['FGVALID']       = "T";
		//品目ID
		itemDataList['IDHINMOKU']     = _HINMOKU;
		//倉庫Ｃ
		itemDataList['CDSOUKO']       = _SOUKO;
		//相手先名
		itemDataList['TXAITESAKI']    = null;
		//取引単価(単価)
		itemDataList['PRTORIHIKI']    = _TANKA;
		//取引数(数量)
		itemDataList['QTTORIHIKI']    = _QTTORIHIKI;
		//取引額(金額)
		itemDataList['AMTORIHIKI']    = _AMTORIHIKI;
		//取引差額
		itemDataList['AMSAGAKU']      = 0;
		//取引ソース№
		itemDataList['NRSOURCE']      = _NRSOURCE;
		//登録日時
		itemDataList['DTCREATE']      = tln_com_nowdate();
		//参照番号
		itemDataList['TXREFNO']       = _TXREFNO;
		//年度(Null)
		itemDataList['DTNEND']        = '';
		//月序(Null)
		itemDataList['DTMSEQ']        = '';
		//残高増減数(数量)／残高増減額(金額)
		itemDataList['QTZOUGEN']      = _QTZOUGEN;
		itemDataList['AMZOUGEN']      = _AMZOUGEN;

		updateFT100(itemDataList);

	}
}







//-------------------------------------------
//［処理］製造関連処理
//-------------------------------------------

//-------------------------------------------
//製造指示[JT010]
function selectJT010(_NRSEIZO) {
	var sql = 
		"SELECT " +
		" NRSEIZO             " + 
		",IDTOKUISAKI         " + 
		",SQSYUKKASAKI        " + 
		",TXTYUMONBANGO       " + 
		",IDHINMOKU           " + 
		",DTNOUKI             " + 
		",QTJYUTYU            " + 
		",QTSYUKKA            " + 
		",QTSEIZO             " + 
		",QTKANSEI            " + 
		",QTHURYO             " + 
		",QTHAIKI             " + 
		",AMGENKA             " + 
		",PRMITSUMORI         " + 
		",PRJYUTYU            " + 
		",TXTEKIYO            " + 
		",CDSOUKOKAN          " + 
		",CDSOUKOZAI          " + 
		",DTCREATE            " + 
		",DTHAKKO             " + 
		",DTSYUKKO            " + 
		",DTKANSEI            " + 
		",DTSYUKKA            " + 
		",DTCANCEL            " + 
		",NRSOURCE            " + 
		",STSEIZO             " + 
		",PRYOTEIGEN          " + 
		",AMHANBAI            " + 
		",AMARARI             " + 
		",PRGENKA             " + 
		",TXSEIZOYOTEI        " + 
		",CREATED_DATE        " + 
		",CREATED_BY          " + 
		",CREATED_PRG_NM      " + 
		",UPDATED_DATE        " + 
		",UPDATED_BY          " + 
		",UPDATED_PRG_NM      " + 
		",MODIFY_COUNT        " + 
		"FROM JT010        " +
		"WHERE NRSEIZO = '" + _NRSEIZO + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}

//製造指示材料明細(製造指示番号)[JT040]
function selectJT040_NRSEIZO(_NRSEIZO) {
	var sql = 
		"SELECT " +
		" NRSEIZO             " + 
		",SQZAIRYO            " + 
		",IDHINMOKU           " + 
		",QTTOUNYU            " + 
		",SQKOUTEI            " + 
		",PRYOTEI             " + 
		",PRSYUKKO            " + 
		",SQLIST              " + 
		",CDSOUKO             " + 
		",CREATED_DATE        " + 
		",CREATED_BY          " + 
		",CREATED_PRG_NM      " + 
		",UPDATED_DATE        " + 
		",UPDATED_BY          " + 
		",UPDATED_PRG_NM      " + 
		",MODIFY_COUNT        " + 
		"FROM JT040        " +
		"WHERE NRSEIZO = '" + _NRSEIZO + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}

//在庫増減履歴
function selectFT100(_NRZAITORI) {
	var sql = 
		"SELECT " +
		" NRZAITORI      " + 
		",DTTORIHIKI     " + 
		",KBUKEBARAI     " + 
		",KBZAIHURI      " + 
		",KBAKADEN       " + 
		",FGVALID        " + 
		",IDHINMOKU      " + 
		",TXHINBAN       " + 
		",TXHINMEI       " + 
		",KBUNIT         " + 
		",CDSOUKO        " + 
		",TXAITESAKI     " + 
		",PRTORIHIKI     " + 
		",QTTORIHIKI     " + 
		",AMTORIHIKI     " + 
		",AMSAGAKU       " + 
		",NRSOURCE       " + 
		",DTCREATE       " + 
		",TXREFNO        " + 
		",DTNEND         " + 
		",DTMSEQ         " + 
		",QTZOUGEN       " + 
		",AMZOUGEN       " + 
		",CREATED_DATE   " + 
		",CREATED_BY     " + 
		",CREATED_PRG_NM " + 
		",UPDATED_DATE   " + 
		",UPDATED_BY     " + 
		",UPDATED_PRG_NM " + 
		",MODIFY_COUNT   " + 
		"FROM FT100      " +
		"WHERE NRZAITORI = '" + _NRZAITORI + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}

//在庫増減履歴(受払区分＋取引ソース番号）
function selectFT100_NRSOURCE(_KBUKEBARAI,_NRSOURCE) {
	var sql = 
		"SELECT " +
		" NRZAITORI      " + 
		",DTTORIHIKI     " + 
		",KBUKEBARAI     " + 
		",KBZAIHURI      " + 
		",KBAKADEN       " + 
		",FGVALID        " + 
		",IDHINMOKU      " + 
		",TXHINBAN       " + 
		",TXHINMEI       " + 
		",KBUNIT         " + 
		",CDSOUKO        " + 
		",TXAITESAKI     " + 
		",PRTORIHIKI     " + 
		",QTTORIHIKI     " + 
		",AMTORIHIKI     " + 
		",AMSAGAKU       " + 
		",NRSOURCE       " + 
		",DTCREATE       " + 
		",TXREFNO        " + 
		",DTNEND         " + 
		",DTMSEQ         " + 
		",QTZOUGEN       " + 
		",AMZOUGEN       " + 
		",CREATED_DATE   " + 
		",CREATED_BY     " + 
		",CREATED_PRG_NM " + 
		",UPDATED_DATE   " + 
		",UPDATED_BY     " + 
		",UPDATED_PRG_NM " + 
		",MODIFY_COUNT   " + 
		"FROM FT100      " +
		"WHERE KBUKEBARAI = '" + _KBUKEBARAI + "'" + 
		"  AND FGVALID  = 'T'" + 
		"  AND NRSOURCE = '" + _NRSOURCE + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}

//売掛増減履歴(受払区分、効区(T)、取引ソース番号）
function selectET100_NRSOURCE(_KBURITORI, _NRSOURCE) {
	var sql = 
		"SELECT " +
		" NRURIKAKE           " + 
		",IDTOKUISAKI         " + 
		",DTTORIHIKI          " + 
		",KBURITORI           " + 
		",KBURIHURI           " + 
		",KBAKADEN            " + 
		",FGVALID             " + 
		",IDHINMOKU           " + 
		",TXHINBAN            " + 
		",TXHINMEI            " + 
		",KBUNIT              " + 
		",PRTORIHIKI          " + 
		",QTTORIHIKI          " + 
		",AMTAX               " + 
		",AMGENKA             " + 
		",NRSOURCE            " + 
		",NRSEIKYU            " + 
		",DTCREATE            " + 
		",TXREFNO             " + 
		",DTNEND              " + 
		",DTMSEQ              " + 
		",AMARARI             " + 
		",AMZOUGEN            " + 
		",CREATED_DATE        " + 
		",CREATED_BY          " + 
		",CREATED_PRG_NM      " + 
		",UPDATED_DATE        " + 
		",UPDATED_BY          " + 
		",UPDATED_PRG_NM      " + 
		",MODIFY_COUNT        " + 
		",AMTORIHIKI          " + 
		"FROM ET100      " +
		"WHERE KBURITORI = '" + _KBURITORI + "'" + 
		"  AND FGVALID   = 'T'" + 
		"  AND NRSOURCE  = '" + _NRSOURCE + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}


//請求見出し[ET110]
function insertET110(itemDataList) {
	//項目
	var itemColNameTbl = [
		 'NRSEIKYU'
		,'IDTOKUISAKI'
		,'DTSEIKYU'
		,'TXTEKIYO'
		,'AMSEIKYU'
		,'AMNYUKIN'
		,'CREATED_DATE'
		,'CREATED_BY'
		,'CREATED_PRG_NM'
		,'UPDATED_DATE'
		,'UPDATED_BY'
		,'UPDATED_PRG_NM'
		,'MODIFY_COUNT'
	];

	//var numList = TALON.getNumberingData('XDMF_EF_SEIKYU', 1)
	//itemDataList['NRSEIKYU']     = numList[0];

	//共通
	itemDataList['CREATED_DATE']   = tln_com_nowdate();
	itemDataList['CREATED_BY']     = tln_com_user_id();
	itemDataList['CREATED_PRG_NM'] = tln_com_func_id();
	itemDataList['UPDATED_DATE']   = tln_com_nowdate();
	itemDataList['UPDATED_BY']     = tln_com_user_id();
	itemDataList['UPDATED_PRG_NM'] = tln_com_func_id();
	itemDataList['MODIFY_COUNT']   = 1;

	TALON.insertByMap( 'ET110', itemDataList , itemColNameTbl );

}





//-------------------------------------------
//［処理］受領関連
//-------------------------------------------
//受領明細[ET120]
function selectET120(_NRJYURYOU) {
	var sql = 
		"SELECT " +
		"  NRJYURYOU         " + 
		" ,IDTOKUISAKI       " + 
		" ,DTJYURYOU         " + 
		" ,KBKINSYU          " + 
		" ,AMJYURYOU         " + 
		" ,AMTESURYOU        " + 
		" ,NRSOURCE          " + 
		" ,CREATED_DATE      " + 
		" ,CREATED_BY        " + 
		" ,CREATED_PRG_NM    " + 
		" ,UPDATED_DATE      " + 
		" ,UPDATED_BY        " + 
		" ,UPDATED_PRG_NM    " + 
		" ,MODIFY_COUNT      " + 
		"FROM ET120        " +
		"WHERE NRJYURYOU = '" + _NRJYURYOU + "'"
	;
	var itemSelectList = TALON.select(sql);

	return itemSelectList;
}



//-------------------------------------------
//［処理］受領処理
//-------------------------------------------
//　1 : 得意先ID
//　2 : 受領日
//　3 : 金種区分
//　4 : 金額（受領金額／残高控除分手数料）
//　5 : 処理区分（1:金額処理／2:手数料処理）
//　5 : 取引ソース№
//　6 : 受領№
function exec_juryo_ins(_TORIHIKISAKI, _TORIHIKIDATE, _KBKINSYU, _KINGAKU, _SYORIKBN, 
					    _NRSOURCE, _TXREFNO) {

	//売掛履歴作成
	//--------------------
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']  = _TORIHIKISAKI;
	//取引日
	itemDataList['DTTORIHIKI']   = _TORIHIKIDATE;
	//取引区分
	if (_SYORIKBN == '1') {
		if (_KBKINSYU == '1') {
			itemDataList['KBURITORI']    = "90";
		} else if (_KBKINSYU == '2') {
			itemDataList['KBURITORI']    = "91";
		} else {
			itemDataList['KBURITORI']    = "XX";
		}
	} else {
		itemDataList['KBURITORI']    = "92";
	}
	//振替区分(Null)
	itemDataList['KBURIHURI']    = "";
	//赤黒(1:黒伝)
	itemDataList['KBAKADEN']     = "1";
	//効区(T:有効)
	itemDataList['FGVALID']      = "T";
	//品目ID
	itemDataList['IDHINMOKU']    = "";
	//単位区分
	itemDataList['KBUNIT']       = "CNT";
	//取引単価
	itemDataList['PRTORIHIKI']   = _KINGAKU;
	//取引数
	itemDataList['QTTORIHIKI']   = 1;
	//消費税額
	itemDataList['AMTAX']        = 0;
	//販売原価
	itemDataList['AMGENKA']      = 0;
	//取引ソース№
	itemDataList['NRSOURCE']     = _NRSOURCE;
	//請求№(Null)
	itemDataList['NRSEIKYU']     = "";
	//登録日時
	itemDataList['DTCREATE']     = tln_com_nowdate();
	//参照番号
	itemDataList['TXREFNO']      = _TXREFNO;
	//年度(Null)
	itemDataList['DTNEND']       = '';
	//月序(Null)
	itemDataList['DTMSEQ']       = '';
	//粗利額
	itemDataList['AMARARI']      = 0;
	//残高増減額
	itemDataList['AMZOUGEN']     = _KINGAKU;
	//税抜取引額
	itemDataList['AMTORIHIKI']   = _KINGAKU;


	updateET100(itemDataList);



	//得意先情報更新
	//--------------------
	var itemDataList = new Array();

	//得意先情報取得
	var itemSelectList = selectET010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']       = lineDataMap['IDTOKUISAKI'];
	//客先担当部署
	itemDataList['TXTANTOUBUSYO']     = lineDataMap['TXTANTOUBUSYO'];
	//客先担当名
	itemDataList['TXTANTOUSYA']       = lineDataMap['TXTANTOUSYA'];
	//客先担当職位
	itemDataList['TXTANTOUSYASYOKUI'] = lineDataMap['TXTANTOUSYASYOKUI'];
	//客先担当メアド
	itemDataList['TXTANTOUSYAEMAIL']  = lineDataMap['TXTANTOUSYAEMAIL'];
	//客先担当TEL
	itemDataList['TXTANTOUSYADENWA']  = lineDataMap['TXTANTOUSYADENWA'];
	//請求方式区分
	itemDataList['KBSEIKYUHOUSHIKI']  = lineDataMap['KBSEIKYUHOUSHIKI'];
	//締め日
	itemDataList['TXSIMEBI']          = lineDataMap['TXSIMEBI'];
	//標準入金方法区分
	itemDataList['KBNYUKINHOUHOU']    = lineDataMap['KBNYUKINHOUHOU'];
	//売上入金サイト
	itemDataList['VLNYUKINSAITO']     = lineDataMap['VLNYUKINSAITO'];
	//与信限度額
	itemDataList['AMYOSHIN']          = lineDataMap['AMYOSHIN'];
	//担当営業№
	itemDataList['NRTANTOUJYUGYOIN']  = lineDataMap['NRTANTOUJYUGYOIN'];
	//摘要
	itemDataList['TXTEKIYO']          = lineDataMap['TXTEKIYO'];
	//期首売掛残高
	itemDataList['AMKISYUURIKAKE']    = lineDataMap['AMKISYUURIKAKE'];
	//期間売上額(税込金額)
	itemDataList['AMURIAGE']          = lineDataMap['AMURIAGE'];
	//期間受領額
	itemDataList['AMJYURYO']          = lineDataMap['AMJYURYO'] + _KINGAKU;
	//現売掛残高
	itemDataList['AMGENURIKAKE']      = lineDataMap['AMGENURIKAKE'];

	updateET010(itemDataList);

}


//-------------------------------------------
//　1 : 得意先ID
//　2 : 受領日
//　3 : 金種区分
//　4 : 金額（受領金額／残高控除分手数料）
//　5 : 処理区分（1:金額処理／2:手数料処理）
//　5 : 取引ソース№
//　6 : 受領№
//　* : 売掛取引№
//　* : 取引区分
function exec_juryo_del(_TORIHIKISAKI, _TORIHIKIDATE, _KBKINSYU, _KINGAKU, _SYORIKBN, 
					    _NRSOURCE, _TXREFNO, _NRURIKAKE, _KBURITORI) {


	//売掛履歴作成
	//--------------------
	insertAkaET100(_NRURIKAKE);


	//売掛履歴更新
	//--------------------
	//赤伝発行と共に元黒の効区をF:無効に更新（対象受払区分＋取引ソース内で効区は全てFに）

	TALON.update( " UPDATE ET100 SET " +
				  " FGVALID = 'F' " +
				  " WHERE KBURITORI  = '" + _KBURITORI + "'" +
				  "   AND NRSOURCE   = '" + _NRSOURCE  + "'"
				);


	//得意先情報更新
	//--------------------
	var itemDataList = new Array();

	//得意先情報取得
	var itemSelectList = selectET010(_TORIHIKISAKI);

	var lineDataMap  = itemSelectList[0];
	var itemDataList = new Array();

	//得意先ID
	itemDataList['IDTOKUISAKI']       = lineDataMap['IDTOKUISAKI'];
	//客先担当部署
	itemDataList['TXTANTOUBUSYO']     = lineDataMap['TXTANTOUBUSYO'];
	//客先担当名
	itemDataList['TXTANTOUSYA']       = lineDataMap['TXTANTOUSYA'];
	//客先担当職位
	itemDataList['TXTANTOUSYASYOKUI'] = lineDataMap['TXTANTOUSYASYOKUI'];
	//客先担当メアド
	itemDataList['TXTANTOUSYAEMAIL']  = lineDataMap['TXTANTOUSYAEMAIL'];
	//客先担当TEL
	itemDataList['TXTANTOUSYADENWA']  = lineDataMap['TXTANTOUSYADENWA'];
	//請求方式区分
	itemDataList['KBSEIKYUHOUSHIKI']  = lineDataMap['KBSEIKYUHOUSHIKI'];
	//締め日
	itemDataList['TXSIMEBI']          = lineDataMap['TXSIMEBI'];
	//標準入金方法区分
	itemDataList['KBNYUKINHOUHOU']    = lineDataMap['KBNYUKINHOUHOU'];
	//売上入金サイト
	itemDataList['VLNYUKINSAITO']     = lineDataMap['VLNYUKINSAITO'];
	//与信限度額
	itemDataList['AMYOSHIN']          = lineDataMap['AMYOSHIN'];
	//担当営業№
	itemDataList['NRTANTOUJYUGYOIN']  = lineDataMap['NRTANTOUJYUGYOIN'];
	//摘要
	itemDataList['TXTEKIYO']          = lineDataMap['TXTEKIYO'];
	//期首売掛残高
	itemDataList['AMKISYUURIKAKE']    = lineDataMap['AMKISYUURIKAKE'];
	//期間売上額(税込金額)
	itemDataList['AMURIAGE']          = lineDataMap['AMURIAGE'];
	//期間受領額
	itemDataList['AMJYURYO']          = lineDataMap['AMJYURYO'] + (_KINGAKU * -1);
	//現売掛残高
	itemDataList['AMGENURIKAKE']      = lineDataMap['AMGENURIKAKE'];

	updateET010(itemDataList);

}

```


