# バッチ設計書（プログラム仕様書）【ND53500P】エコデリバー用顧客アップロードデータ作成

| 項目 | 内容 |
|---|---|
| プログラムID | ND53500P（PL/I プロシージャ名：ND53500） |
| プログラム名 | エコデリバー用顧客アップロードデータ作成 |
| 業務ID | JRCSV00P |
| パターンID | PPB0010P（ファイルのＩＯ（ＳＩＮＧＬＥ））／パターン履歴 04/12/10 |
| 言語・形態 | PL/I バッチ（OPTIONS(MAIN)） |
| 実行JOB | DAIMNT3J（ステップ ND53500P） |
| 作成元 | ソース `ND53500P.pl1`、参考資料 `ND53500P.xlsx`（現行解析資料） |
| 作成日 | 2026/10/26 |

---

## 1. 改訂履歴

| 改定日 | 改定者 | 改定箇所 | 改定内容 |
|---|---|---|---|
| 2026/10/26 |  | 全体 | PL/Iソースより新規作成 |

---

## 2. プログラム概要

### 2.1 機能概要

顧客名前マスター更新データを読み、特定事業所分のエコデリバー用顧客アップロードデータＤＢを出力する。

### 2.2 処理概要

1. パラメータ（INCARD）から対象の店所コードを読み込み、対象店所テーブル（最大200件）を作成する。
2. 顧客名前マスター更新データ（INFILE）を先頭から1件ずつ順次読み込む。
3. セグメント名（ISEG）が `'VKCUSTM'`（顧客マスター（基本情報））のレコードだけを処理対象とする。
4. 顧客扱店所コード（DNADATCD(1)）が対象店所テーブルにある場合、管理台帳（VKKANBS）をキー読込する。
5. 管理台帳があり、請求・精算区分（KAADSQKB）＝1（請求）かつ登録顧客コード（KACUSTCD）＜8800000 の顧客について、顧客名・郵便番号・住所などをエコデリバーアップロードＤＢ（RDECDL）のレイアウトに編集し、1件出力する。
6. 出力ファイルは、後続の DB2 LOAD ステップで DB2 表へロードされる（JOB DAIMNT3J）。

### 2.3 入出力概要図

```mermaid
flowchart LR
    CARD[("INCARD<br/>対象店所パラメータ<br/>ADG.ALTLIB(SEQTRYTN)")]
    INF[("INFILE<br/>顧客名前マスター更新データ<br/>BACK.MASTMENT.DCUSTOM")]
    KAN[("VKKANBS<br/>管理台帳<br/>VSAM KSDS")]
    PGM["ND53500P<br/>エコデリバー用顧客<br/>アップロードデータ作成"]
    OUT[("OUTFILE<br/>エコデリバーアップロードＤＢ<br/>FB 236")]
    LOAD["後続ステップ LOAD<br/>DB2 LOAD（RDECDLLD）"]

    CARD -- "順次読込（店所コード）" --> PGM
    INF -- "順次読込" --> PGM
    KAN -- "キー読込（INC）" --> PGM
    PGM -- "順次出力" --> OUT
    OUT -.-> LOAD
```

---

## 3. 入出力ファイル一覧

| No | DD名 | ファイル名称 | 入出力 | 編成 | アクセス | レコード長 | エリア | レイアウト（INCLUDE） | キー | 定義行 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | INCARD | （名称なし）※1 | 入力 | 順次 | 順次読込 | 80（読込エリア長） | SYSAREA | なし（SYSTNCD 4桁＋SYSSPAC 76） | － | 19 |
| 2 | INFILE | 顧客名前マスター更新データ ※2 | 入力 | 順次 | 順次読込 | 可変長（読込エリア最大4096）。'VKCUSTM' レコードは 943 を想定 | INAREA ／ INAREA1 | ヘッダ部（43バイト）＋ VCUBASED（顧客マスター（基本情報）） | － | 18 |
| 3 | VKKANBS | 管理台帳 | 入力 | VSAM | キー指定ランダム（KEYED DIRECT） | 1500（読込エリア長） | MSAREA | KANBASED | INC（7桁） | 20 |
| 4 | OUTFILE | エコデリバーアップロードＤＢ | 出力 | 順次 | 順次書出 | 236（固定長） | OUTAREA | RDECDL | － | 21 |

※1 参考資料の入出力ファイル一覧に名称の記載なし。ソース上は対象店所コードのパラメータとして使用している。
※2 参考資料の入出力ファイル一覧に名称の記載なし。プログラム概要（およびソース冒頭コメント 8行目）の「顧客名前マスター更新データ」を記載した。

### 3.1 JCL 上のデータセット（参考：JOB DAIMNT3J）

| DD名 | データセット名 | DISP | 備考 |
|---|---|---|---|
| OUTFILE | SEAD.ND53500J.WORK0010 | (NEW,KEEP,DELETE) | DCB=(RECFM=FB,LRECL=236,BLKSIZE=2360) |
| INFILE | BACK.MASTMENT.DCUSTOM | SHR | |
| VKKANBS | VK47.KANBASED.DTMASTER | SHR | 同JOBの前ステップで再作成される管理台帳 |
| INCARD | ADG.ALTLIB(SEQTRYTN) | SHR | 区分データセットのメンバ |
| SYSIN | （インストリーム、データなし） | － | 本プログラムでは使用しない |

### 3.2 DB2表

本プログラムは DB2 にアクセスしない。出力ファイル（SEAD.ND53500J.WORK0010）は後続ステップ LOAD（DSNUPROC、制御文 ADG.DB2TBL.SRC(RDECDLLD)）で DB2（データベース RECDLDB／表スペース RECDLTS）へロードされる。ロード先の表名は制御文の内容によるため本書では未確認。

---

## 4. 処理詳細

### 4.1 初期処理

| 項番 | 処理内容 | 条件・補足 | 行番号 |
|---|---|---|---|
| 1.1 | 顧客名前マスター更新データ（INFILE）のファイル終了時、終了スイッチ（EOF_SW）を `'0'B`（終了）にする。 | ENDFILE条件 | 110 |
| 1.2 | パラメータ（INCARD）のファイル終了時、終了スイッチ（CAD_SW）を `'0'B`（終了）にする。 | ENDFILE条件 | 111 |
| 1.3 | 管理台帳（VKKANBS）のキーエラー時、管理台帳存在スイッチ（MS_SW）を `'N'`（該当なし）にする。 | KEY条件。ONCODE による要因判定はなく、処理は続行する | 112–115 |
| 1.4 | 顧客名前マスター更新データ（INFILE）を入力で、エコデリバーアップロードＤＢ（OUTFILE）を出力でオープンする。 | INCARD・VKKANBS は明示的なOPENなし（初回READ時に暗黙オープン） | 119–120 |
| 1.5 | パラメータ（INCARD）を1件読み込む。 | | 124 |
| 1.6 | テーブル件数（TBCNT）を0、対象店所テーブル（TBTNCD）をクリアする。 | | 125–126 |
| 1.7 | パラメータが終了するまで（CAD_SW＝`'1'B` の間）、テーブル件数に1を加え、パラメータの店所コード（SYSTNCD）を対象店所テーブル（TBTNCD(TBCNT)）に格納し、次のパラメータを読み込む。 | テーブルは200件分。上限チェックなし（8章 No.3） | 127–131 |

### 4.2 主処理（顧客名前マスター更新データが終了するまで繰返し：EOF_SW＝`'1'B` の間）

| 項番 | 処理名 | 処理内容 | 条件・補足 | 行番号 |
|---|---|---|---|---|
| 2.1 | 先頭レコード読込 | 顧客名前マスター更新データ（INFILE）を1件読み込む。 | ループ開始前に1回 | 135 |
| 2.2 | 件数カウント | 入力件数（ICNT）に1を加える。 | 件数は表示しない（8章 No.9） | 137 |
| 2.3 | 対象レコード判定 | セグメント名（ISEG）が `'VKCUSTM'` の場合のみ 2.4〜2.6 を行う。それ以外は 2.7 へ進む。 | | 138 |
| 2.4 | 対象店所判定 | 出力対象スイッチ（OUT_SW）を `'N'` にし、対象店所テーブルを先頭から検索する。顧客扱店所コード（DNADATCD(1)：入力側の1番目）と一致する店所コードがあれば OUT_SW を `'Y'` にして検索を終了する。 | 検索範囲は 1〜テーブル件数（TBCNT） | 141–151 |
| 2.5 | 管理台帳 読込 | OUT_SW＝`'Y'` の場合、管理台帳存在スイッチ（MS_SW）を `'Y'` にし、管理台帳（VKCUSTM のヘッダ部の INC をキー）をキー読込する。 | 該当なし等で KEY条件が発生すると MS_SW＝`'N'` | 152–156 |
| 2.6 | 出力判定 | MS_SW＝`'Y'`（管理台帳あり）かつ 請求・精算区分（KAADSQKB）＝1（請求）かつ 登録顧客コード（KACUSTCD）＜8800000 の場合、データ出力処理（DATA_OUT_RTN）を呼び出す。 | 条件を満たさない場合は出力しない | 157–161 |
| 2.7 | 次レコード読込 | 次の顧客名前マスター更新データを読み込む。 | ファイル終了でループ終了 | 166 |

#### 4.2.1 データ出力処理（DATA_OUT_RTN）

| 項番 | 処理名 | 処理内容 | 条件・補足 | 行番号 |
|---|---|---|---|---|
| 3.1 | 出力エリア初期化 | 出力エリア（OUTAREA）をスペースでクリアする。 | | 176 |
| 3.2 | 顧客コード | 顧客コード（ECDLCODE）に登録顧客コード（KACUSTCD：管理台帳）を設定する。 | | 177 |
| 3.3 | 更新区分 | 入力の IKB2 が `'0'`（新規）なら 更新区分（ECDLUPKB）＝`'0'`、それ以外は `'1'`（更新）を設定する。 | | 178–180 |
| 3.4 | 正式名称の連結 | 名称ワーク（KONM）をクリアし、顧客正式名（漢字）（KATNSGNM：20文字分）、続いて顧客正式名（漢字）（KATNSGN2：10文字分）を全角1文字（2バイト）ずつ調べ、空白以外の文字だけを名称ワークへ詰めて格納する。 | 空白は途中のものも除去する | 181–202 |
| 3.5 | 顧客名 | 正式名称区分（KAKONMKB）＞0 の場合、顧客名（ECDLNAME）に「SO＋法人格名称（KBNM_DT(KAKONMKB)）＋名称ワーク＋SI」を設定する。0 の場合は「SO＋名称ワーク＋SI」を設定する。 | 法人格名称は5.3参照 | 203–205 |
| 3.6 | 固定値 | スペース（ECDLUNIT）に全角空白4文字（SO・SI付き）、ご担当者様（ECDLCHAR）に「ご担当者」（SO・SI付き）を設定する。 | | 207–208 |
| 3.7 | 住所（都道府県〜大字） | 都道府県＿漢字（VNADVTN1）、市区群町村＿漢字（VNADVTN2）、大字．通称＿漢字　＋　字．丁目＿漢字（VNADVTN3）を各ワークに移送し、住所ワーク（WKAREA）をクリアする。都道府県は先頭から最初の空白まで、市区群町村・大字等は空白以外の文字を、住所ワークへ全角1文字ずつ詰めて格納する。 | 都道府県のみ最初の空白で打ち切る（8章 No.6） | 209–243 |
| 3.8 | 住所区分の判定・郵便番号 | 所在地、請求先住所区分（KAKOADKB）＝0 の場合は 顧客所在地（番地等）漢字（KAKOSYOG）を番地ワークへ移送し、郵便番号（ECDLPOST）に 所在地郵便番号（KATNPSNN）を「上3桁＋'-'＋下4桁」で設定する。0 以外の場合は 顧客請求先（番地等）漢字（KAKOSEQG）と 請求先郵便番号（KASQPSNN）で同様に設定する。 | | 244–254 |
| 3.9 | 住所（番地等） | 番地ワークの空白以外の文字を住所ワークへ続けて詰める。 | | 255–264 |
| 3.10 | 請求先住所 | 請求先住所（ECDLADRS）に「SO＋住所ワークの1〜120バイト目＋SI」を設定する。 | | 265 |
| 3.11 | マスターメンテ日 | マスターメンテ日（ECDLIRRP）に 契約更新年月日（DKHKYMNT：入力側）の6バイトを設定する。 | 管理台帳ではなく入力データの値 | 266 |
| 3.12 | 出力 | エコデリバーアップロードＤＢ（OUTFILE）を1件出力する。 | 出力件数のカウントなし | 267 |

### 4.3 終了処理

| 項番 | 処理内容 | 条件・補足 | 行番号 |
|---|---|---|---|
| 4.1 | 顧客名前マスター更新データ（INFILE）とエコデリバーアップロードＤＢ（OUTFILE）をクローズし、プログラムを終了する。 | INCARD・VKKANBS は明示的なCLOSEなし（終了時に暗黙クローズ）。件数表示なし | 172–173, 270 |

### 4.4 処理フロー

```mermaid
flowchart TD
    START(["開始"]) --> ON["ON条件を設定<br/>INFILE・INCARD 終了／VKKANBS キーエラー"]
    ON --> OPEN["INFILE・OUTFILE をオープン"]
    OPEN --> RC1["パラメータ（INCARD）を読込"]
    RC1 --> CEOF{"パラメータ<br/>終了？"}
    CEOF -- "No" --> TBL["テーブル件数 ＋1<br/>対象店所テーブル ← 店所コード"]
    TBL --> RC2["次のパラメータを読込"]
    RC2 --> CEOF
    CEOF -- "Yes" --> READ1["顧客名前マスター更新データ（INFILE）を読込"]
    READ1 --> EOF{"更新データ<br/>終了？"}
    EOF -- "No" --> CNT["入力件数 ＋1"]
    CNT --> SEG{"セグメント名<br/>＝ 'VKCUSTM'？"}
    SEG -- "No" --> READ2
    SEG -- "Yes" --> SRCH["対象店所テーブルを検索<br/>顧客扱店所コード（DNADATCD(1)）"]
    SRCH --> HIT{"対象店所？"}
    HIT -- "No" --> READ2
    HIT -- "Yes" --> RKAN["管理台帳存在スイッチ ← 'Y'<br/>管理台帳（VKKANBS）をキー読込（INC）"]
    RKAN --> CHK{"管理台帳あり<br/>かつ 請求・精算区分 ＝ 1<br/>かつ 登録顧客コード ＜ 8800000？"}
    CHK -- "No" --> READ2
    CHK -- "Yes" --> RTN[["データ出力処理<br/>（DATA_OUT_RTN）"]]
    RTN --> READ2["次の更新データを読込"]
    READ2 --> EOF
    EOF -- "Yes" --> CLOSE["INFILE・OUTFILE をクローズ"]
    CLOSE --> FIN(["終了"])
```

#### データ出力処理（DATA_OUT_RTN）

```mermaid
flowchart TD
    S(["DATA_OUT_RTN 開始"]) --> CLR["出力エリア ← スペース<br/>顧客コード ← 登録顧客コード"]
    CLR --> KB2{"IKB2 ＝ '0'？"}
    KB2 -- "Yes" --> UP0["更新区分 ← '0'（新規）"]
    KB2 -- "No" --> UP1["更新区分 ← '1'（更新）"]
    UP0 --> NM
    UP1 --> NM["顧客正式名（漢字）20文字＋10文字から<br/>空白以外の文字を名称ワークへ詰める"]
    NM --> KONM{"正式名称区分 ＞ 0？"}
    KONM -- "Yes" --> NM1["顧客名 ← SO＋法人格名称＋名称ワーク＋SI"]
    KONM -- "No" --> NM2["顧客名 ← SO＋名称ワーク＋SI"]
    NM1 --> FIX
    NM2 --> FIX["スペース ← 全角空白4文字<br/>ご担当者様 ← 'ご担当者'"]
    FIX --> AD1["都道府県（最初の空白まで）<br/>市区群町村・大字等（空白除去）を<br/>住所ワークへ詰める"]
    AD1 --> ADKB{"所在地、請求先住所区分<br/>＝ 0？"}
    ADKB -- "Yes" --> SYO["番地ワーク ← 顧客所在地（番地等）漢字<br/>郵便番号 ← 所在地郵便番号 3桁-4桁"]
    ADKB -- "No" --> SEQ["番地ワーク ← 顧客請求先（番地等）漢字<br/>郵便番号 ← 請求先郵便番号 3桁-4桁"]
    SYO --> AD2
    SEQ --> AD2["番地ワークの空白以外の文字を<br/>住所ワークへ続けて詰める"]
    AD2 --> ADRS["請求先住所 ← SO＋住所ワーク1〜120＋SI<br/>マスターメンテ日 ← 契約更新年月日（入力）"]
    ADRS --> WRT["エコデリバーアップロードＤＢを出力"]
    WRT --> R(["呼出し元へ戻る"])
```

#### キーエラー時の処理（ON KEY 条件）

```mermaid
flowchart TD
    K(["KEY条件発生<br/>VKKANBS"]) --> SW["管理台帳存在スイッチ ← 'N'"]
    SW --> CONT(["処理続行<br/>（ONCODE による判定なし）"])
```

---

## 5. 出力編集仕様（エコデリバーアップロードＤＢ OUTFILE ／ RDECDL）

### 5.1 項目単位の編集

| 出力位置 | 長さ | 出力項目（RDECDL） | 編集内容 | 編集元 | 行番号 |
|---|---|---|---|---|---|
| 1〜7 | 7 | 顧客コード（ECDLCODE） | 転記 | 管理台帳．登録顧客コード（KACUSTCD） | 177 |
| 8 | 1 | 更新区分（ECDLUPKB） | IKB2＝'0' → '0'（新規）、それ以外 → '1'（更新） | 入力ヘッダ部．IKB2（（名称なし）） | 178–180 |
| 9〜80 | 72 | 顧客名（ECDLNAME） | SO＋〔法人格名称〕＋空白を除いた正式名称＋SI。残りはスペース | 管理台帳．正式名称区分（KAKONMKB）、顧客正式名（漢字）（KATNSGNM・KATNSGN2） | 181–205 |
| 81〜90 | 10 | スペース（ECDLUNIT） | 固定値：SO＋全角空白4文字＋SI | － | 207 |
| 91〜100 | 10 | ご担当者様（ECDLCHAR） | 固定値：SO＋「ご担当者」＋SI | － | 208 |
| 101〜108 | 8 | 郵便番号（ECDLPOST） | 7桁の郵便番号を「上3桁＋'-'＋下4桁」に編集 | 住所区分＝0：所在地郵便番号（KATNPSNN）／0以外：請求先郵便番号（KASQPSNN） | 244–254 |
| 109〜230 | 122 | 請求先住所（ECDLADRS） | SO＋住所ワーク（都道府県＋市区群町村＋大字等＋番地等、空白除去）1〜120バイト目＋SI | 管理台帳．VNADVTN1・VNADVTN2・VNADVTN3、KAKOSYOG または KAKOSEQG | 209–265 |
| 231〜236 | 6 | マスターメンテ日（ECDLIRRP） | 転記（年2桁・月2桁・日2桁） | 入力．契約更新年月日（DKHKYMNT） | 266 |

### 5.2 名称・住所の編集方法

| 編集 | 対象項目 | 分解方法 | 格納先 | 空白の扱い | 行番号 |
|---|---|---|---|---|---|
| 正式名称１ | 顧客正式名（漢字）（KATNSGNM：42バイト） | SO（1）＋全角20文字（SGNM_DT(1〜20)）＋SI（1）に分解 | 名称ワーク（KONM_TB） | 空白の文字は飛ばして詰める | 184–192 |
| 正式名称２ | 顧客正式名（漢字）（KATNSGN2：22バイト） | SO（1）＋全角10文字（SGN2_DT(1〜10)）＋SI（1） | 名称ワーク（続き） | 同上 | 194–202 |
| 都道府県 | 都道府県＿漢字（VNADVTN1：10バイト） | SO＋全角4文字（VT1DT(1〜4)）＋SI | 住所ワーク（WKKNDT） | 最初の空白で打ち切る | 215–223 |
| 市区群町村 | 市区群町村＿漢字（VNADVTN2：26バイト） | SO＋全角12文字（VT2DT(1〜12)）＋SI | 住所ワーク（続き） | 空白の文字は飛ばして詰める | 225–233 |
| 大字・丁目等 | 大字．通称＿漢字　＋　字．丁目＿漢字（VNADVTN3：38バイト） | SO＋全角18文字（VT3DT(1〜18)）＋SI | 住所ワーク（続き） | 同上 | 235–243 |
| 番地等 | 顧客所在地（番地、号数、但し書き等）漢字（KAKOSYOG）または 顧客請求先（番地、号数、但し書き等）漢字（KAKOSEQG）：52バイト | SO＋全角25文字（VT4DT(1〜25)）＋SI | 住所ワーク（続き） | 同上 | 256–264 |

全角1文字＝2バイト単位で「空白（''）でない」かを判定する。名称ワークは最大30文字（60バイト）、住所ワークは最大71文字（142バイト）で、編集元の文字数合計（名称30文字、住所59文字）を超えない。

### 5.3 法人格名称テーブル（KBNM_TB）

| 正式名称区分（KAKONMKB） | 付加する名称（KBNM_DT） |
|---|---|
| 0 | 付加しない |
| 1 | 株式会社 |
| 2 | 有限会社 |
| 3 | 合名会社 |
| 4 | 合資会社 |
| 5 | 財団法人 |
| 6 | 社団法人 |
| 7 | 学校法人 |

テーブルの各要素は SO（1）＋全角4文字（8）＋SI（1）の10バイトで、名称の先頭に全角4文字部分（KBNM_DT）だけを付加する（77–87行）。

### 5.4 項目単位の対応表

付録A を参照。

---

## 6. メッセージ一覧（DISPLAY）

該当なし（本プログラムは DISPLAY 文を持たず、件数・エラーのメッセージを出力しない）。

---

## 7. 変数一覧

参考資料に日本語名称の記載がない変数は「（名称なし）」とし、用途欄にソース上の使われ方を記載した。

| No | 変数名 | 日本語名称 | 属性 | 初期値 | 用途 | 定義行 |
|---|---|---|---|---|---|---|
| 1 | INFILE | 顧客名前マスター更新データファイル | FILE RECORD INPUT | | 更新データの順次読込 | 18 |
| 2 | INCARD | （名称なし） | FILE RECORD INPUT | | 対象店所パラメータの順次読込 | 19 |
| 3 | VKKANBS | 管理台帳ファイル | FILE RECORD KEYED DIRECT INPUT ENV(VSAM) | | INC によるキー読込 | 20 |
| 4 | OUTFILE | エコデリバーアップロードＤＢファイル | FILE RECORD OUTPUT | | アップロードデータの出力 | 21 |
| 5 | INAREA | （名称なし） | CHAR(4098) VAR | | INFILE の読込エリア | 25 |
| 6 | INAREA1 | （名称なし） | DEFINED INAREA（構造体） | | 読込エリアのヘッダ部＋VCUBASED（下表参照） | 26–33 |
| 7 | MSAREA | 管理台帳 | 構造体（KANBASED） | | 管理台帳の読込エリア | 34–35 |
| 8 | SGNM_DF | （名称なし） | DEFINED KATNSGNM | | 顧客正式名（漢字）の分解：SGNM_SO（1）、SGNM_DT(20)（各2）、SGNM_SI（1） | 36–39 |
| 9 | SGN2_DF | （名称なし） | DEFINED KATNSGN2 | | 顧客正式名（漢字）２の分解：SGN2_SO、SGN2_DT(10)、SGN2_SI | 40–43 |
| 10 | VTN1AR | （名称なし） | CHAR(10) | ' ' | 都道府県＿漢字のワーク。VTN1AR_DF（VT1SO、VT1DT(4)、VT1SI）で分解 | 44–48 |
| 11 | VTN2AR | （名称なし） | CHAR(26) | ' ' | 市区群町村＿漢字のワーク。VTN2AR_DF（VT2SO、VT2DT(12)、VT2SI）で分解 | 49–53 |
| 12 | VTN3AR | （名称なし） | CHAR(38) | ' ' | 大字・丁目等のワーク。VTN3AR_DF（VT3SO、VT3DT(18)、VT3SI）で分解 | 54–58 |
| 13 | VTN4AR | （名称なし） | CHAR(52) | ' ' | 番地等のワーク。VTN4AR_DF（VT4SO、VT4DT(25)、VT4SI）で分解 | 59–63 |
| 14 | SYSAREA | （名称なし） | 構造体（80バイト） | | INCARD の読込エリア | 64 |
| 15 | SYSTNCD | （名称なし） | PIC'(4)9' | | パラメータの店所コード（1〜4バイト目） | 65 |
| 16 | SYSSPAC | （名称なし） | CHAR(76) | | パラメータの5〜80バイト目（未使用） | 66 |
| 17 | TBCNT | （名称なし） | FIXED DEC(3) | 0 | 対象店所テーブルの件数 | 67 |
| 18 | TBTNCD(200) | （名称なし） | PIC'(4)9' | | 対象店所テーブル（店所コード） | 68 |
| 19 | OUTAREA | エコデリバーアップロードＤＢ | 構造体（RDECDL） | | 出力エリア（236バイト） | 72–73 |
| 20 | NMCNT | （名称なし） | FIXED DEC(3) | 0 | 名称ワークの格納文字数 | 74 |
| 21 | KONM | （名称なし） | CHAR(60) | ' ' | 名称ワーク（空白を除いた正式名称） | 75 |
| 22 | KONM_TB(30) | （名称なし） | CHAR(2) DEFINED KONM | | 名称ワークの全角1文字単位の再定義 | 76 |
| 23 | KBNM_TB(7) | （名称なし） | CHAR(10) | 株式会社〜学校法人（5.3参照） | 法人格名称テーブル | 77–83 |
| 24 | KBNM_TBL_DF(7) | （名称なし） | DEFINED KBNM_TB | | KBNM_SO（1）、KBNM_DT（8）、KBNM_SI（1） | 84–87 |
| 25 | CONT | （名称なし） | FIXED DEC(3) | 0 | 住所ワークの格納文字数 | 88 |
| 26 | CONTL | （名称なし） | FIXED DEC(3) | 0 | 未使用 | 89 |
| 27 | WKAREA | （名称なし） | CHAR(142) | ' ' | 住所ワーク | 90 |
| 28 | WKKNDT(71) | （名称なし） | CHAR(2) DEFINED WKAREA | | 住所ワークの全角1文字単位の再定義 | 91 |
| 29 | CAD_SW | （名称なし） | BIT(1) STATIC | '1'B | INCARD 終了スイッチ（'1'B：継続、'0'B：終了） | 95 |
| 30 | EOF_SW | （名称なし） | BIT(1) STATIC | '1'B | INFILE 終了スイッチ（'1'B：継続、'0'B：終了） | 96 |
| 31 | ADDR, SUBSTR, HIGH, LOW, LENGTH, STRING, VERIFY, DATE | （名称なし） | BUILTIN | | 組込み関数。使用は SUBSTR・STRING のみ | 97 |
| 32 | MS_SW | （名称なし） | CHAR(1) | ' ' | 管理台帳存在スイッチ（'Y'：あり、'N'：なし） | 98 |
| 33 | OUT_SW | （名称なし） | CHAR(1) | ' ' | 対象店所スイッチ（'Y'：対象、'N'：対象外） | 99 |
| 34 | ICNT | （名称なし） | FIXED DEC(9) | 0 | 入力件数（加算のみ） | 100 |
| 35 | OCNT | （名称なし） | FIXED DEC(9) | 0 | 未使用 | 101 |
| 36 | II | （名称なし） | FIXED DEC(3) | 0 | ループ添字 | 102 |
| 37 | SOSI | （名称なし） | CHAR(2) | SO・SI の2文字 | シフトコード。SOSI_DF で WKSO（SO）・WKSI（SI）に分解 | 103–106 |

#### 入力読込エリア（INAREA1）のヘッダ部

位置は可変長レコードのデータ部の位置（長さ部 INRLH を除く）。

| 変数名 | 日本語名称 | 属性 | 位置 | 長さ | 用途 | 定義行 |
|---|---|---|---|---|---|---|
| INRLH | （名称なし） | FIXED BIN(15) | （長さ部） | 2 | 可変長文字列 INAREA の長さ部に重なる。未参照 | 27 |
| IFL10 | （名称なし） | CHAR(2) | 1 | 2 | 未参照 | 28 |
| INC | （名称なし） | PIC'(7)9' | 3 | 7 | 管理台帳の読込キー | 29 |
| IFL11 | （名称なし） | CHAR(26) | 10 | 26 | 未参照 | 30 |
| ISEG | （名称なし） | CHAR(7) | 36 | 7 | セグメント名（'VKCUSTM' を処理対象） | 31 |
| IKB2 | （名称なし） | CHAR(1) | 43 | 1 | 更新区分の判定（'0'：新規 ※ソースコメント） | 32 |
| （VCUBASED） | 顧客マスター（基本情報） | INCLUDE | 44 | 900 | 顧客マスター（基本情報）レイアウト | 33 |

### 7.1 本プログラムで参照するレイアウト項目

| 変数名 | 日本語名称 | 所属レイアウト | 位置 | 属性・桁 | 用途 | 行番号 |
|---|---|---|---|---|---|---|
| DNADATCD(1) | 顧客扱店所コード | VCUBASED（顧客マスター（基本情報）・入力） | 43（レコード上 86） | 数字 4（扱店所情報 DNADATIF の1番目） | 対象店所の判定 | 144 |
| DKHKYMNT | 契約更新年月日 | VCUBASED（顧客マスター（基本情報）・入力） | 789（レコード上 832） | 年・月・日 各数字2（6バイト） | マスターメンテ日 | 266 |
| KACUSTCD | 登録顧客コード | KANBASED（管理台帳） | 1 | 数字 7 | 出力判定（＜8800000）、顧客コード | 159, 177 |
| KAADSQKB | 請求・精算区分 | KANBASED（管理台帳） | 243 | 数字 1（１：請求．２：精算） | 出力判定（＝1） | 158 |
| KATNPSNN | 所在地郵便番号 | KANBASED（管理台帳） | 424 | 文字 7 | 郵便番号（住所区分＝0） | 248 |
| KASQPSNN | 請求先郵便番号 | KANBASED（管理台帳） | 431 | 文字 7 | 郵便番号（住所区分≠0） | 253 |
| KAKONMKB | 正式名称区分 | KANBASED（管理台帳） | 442 | 数字 1（株式会社等の区分） | 法人格名称の選択 | 203–204 |
| KATNSGNM | 顧客正式名（漢字） | KANBASED（管理台帳） | 443 | 文字 42（ＳＯ＋漢字２０文字＋ＳＩ） | 顧客名 | 36, 185, 189 |
| KATNSGN2 | 顧客正式名（漢字） | KANBASED（管理台帳） | 485 | 文字 22（ＳＯ＋漢字１０文字＋ＳＩ） | 顧客名 | 40, 195, 199 |
| KAKOADKB | 所在地、請求先住所区分 | KANBASED（管理台帳） | 571 | 数字 1（０：所在＝請求、１：￢＝） | 住所・郵便番号の選択 | 244 |
| KAKOSYOG | 顧客所在地（番地、号数、但し書き等）漢字 | KANBASED（管理台帳） | 572 | 文字 52（ＳＯ＋漢字２５文字＋ＳＩ） | 住所（番地等） | 247 |
| KAKOSEQG | 顧客請求先（番地、号数、但し書き等）漢字 | KANBASED（管理台帳） | 624 | 文字 52（ＳＯ＋漢字２５文字＋ＳＩ） | 住所（番地等） | 252 |
| VNADVTN1 | 都道府県＿漢字 | KANBASED（管理台帳） | 1051 | 文字 10 | 住所（都道府県） | 209 |
| VNADVTN2 | 市区群町村＿漢字 | KANBASED（管理台帳） | 1061 | 文字 26 | 住所（市区群町村） | 210 |
| VNADVTN3 | 大字．通称＿漢字　＋　字．丁目＿漢字 | KANBASED（管理台帳） | 1134 | 文字 38 | 住所（大字・丁目等） | 211 |

---

## 8. 留意事項（ソース解析で判明した事項）

| No | 区分 | 内容 | 行番号 |
|---|---|---|---|
| 1 | 例外処理 | 管理台帳の KEY条件は、該当キーなし以外の要因（ONCODE）も区別せず MS_SW＝'N' として読み飛ばす。読込エラーでも異常終了せず、その顧客が出力されないだけとなる。KEY以外の入出力エラーの ON 単位はない。 | 112–115 |
| 2 | 条件判定 | 出力条件 `MS_SW = 'Y' & KAADSQKB = 1 & KACUSTCD < 8800000` は1つの式で判定しており、PL/I の & は短絡評価が保証されない。管理台帳が読めなかった場合も MSAREA（前回読込の内容、初回は未初期化）の数字項目を参照し得るため、初回に該当なしとなると CONVERSION 条件が発生する可能性がある。 | 157–159 |
| 3 | テーブル上限 | 対象店所テーブル（TBTNCD）は200件分だが、パラメータ件数の上限チェックがない。201件以上あるとテーブル外の領域を書き換える。 | 68, 127–131 |
| 4 | 値域チェック | 法人格名称テーブルは7件分だが、正式名称区分（KAKONMKB）が 8・9 の場合のチェックがなく、テーブル外の領域を顧客名の先頭に編集する。また法人格名称は常に名称の前に付加し、後ろに付く形式（○○株式会社）は区別しない。 | 77–87, 203–204 |
| 5 | データ出所 | 対象店所の判定（DNADATCD(1)）・更新区分（IKB2）・マスターメンテ日（DKHKYMNT）は入力の更新データから、出力条件と名称・住所・郵便番号は管理台帳から取得している。管理台帳の読込キーは VCUBASED の登録顧客コード（DDCUSTCD）ではなくヘッダ部の INC を使用している。INC が顧客コードと一致する前提であり、ソースからは確認できない。 | 29, 144, 156, 178, 266 |
| 6 | 編集方法 | 都道府県（LOOP1）だけは最初の空白で打ち切り、市区群町村・大字等・番地等・正式名称は途中の空白も除去して詰める。扱いが統一されていない。また名称の途中の空白（姓と名の間など）もなくなる。 | 184–202, 215–264 |
| 7 | 編集方法 | 名称・住所は「1バイト目 SO、以降2バイト単位の全角文字、最終バイト SI」の固定形式を前提に分解している。半角文字の混在やシフトコードの位置ずれがあると、不正な漢字コードを出力する。 | 36–63, 184–265 |
| 8 | 編集方法 | 郵便番号は無条件に「上3桁＋'-'＋下4桁」に編集するため、郵便番号が未設定（空白等）の場合も '-' が出力される。 | 248, 253 |
| 9 | 件数 | 入力件数（ICNT）は加算するだけで表示しない。出力件数（OCNT）は宣言のみで加算もしない。処理件数はプログラムから確認できない（後続 LOAD のメッセージで確認することになる）。 | 100–101, 137 |
| 10 | 重複 | 同一顧客の 'VKCUSTM' レコードが更新データに複数あれば、その件数分同じ顧客コードを出力する。重複排除は行っていない。後続 DB2 LOAD で一意索引がある場合は廃棄ファイル（TEMP.DB2ECDL.DISCARD）に出力される。 | 136–167 |
| 11 | ファイル | INCARD・VKKANBS は明示的な OPEN／CLOSE がなく、暗黙オープン・暗黙クローズに依存している。INCARD が空の場合は対象店所0件となり、出力0件で正常終了する。 | 119–120, 124, 172–173 |
| 12 | 読込エリア | INAREA（可変長）に構造体 INAREA1 を重ね、長さ部（INRLH）の後ろにレイアウトを対応させている。可変長文字列の内部形式に依存した記述である。また 'VKCUSTM' レコードが 943 バイト未満の場合、不足部分は前レコードの内容が残る。 | 25–33 |
| 13 | 読込エリア | 管理台帳は可変長（1200／1500）だが、読込エリア MSAREA は 1500 バイトの構造体である。参照項目は 1200 バイト目までのため結果に影響しないが、RECORD 条件の ON 単位はない。 | 34–35, 156 |
| 14 | 名称 | 参考資料では ECDLCHAR の名称は「ご担当者様」だが、ソースで設定する値は「ご担当者」（全角4文字）である。 | 208 |
| 15 | 名称 | ECDLADRS の名称は「請求先住所」だが、所在地、請求先住所区分＝0 の場合は顧客所在地（番地等）を編集する。都道府県〜大字（VNADVTN1〜3）は区分にかかわらず同じ項目を使用する。 | 209–211, 244–254 |
| 16 | 数字項目 | INC、SYSTNCD、DNADATCD、KAADSQKB、KACUSTCD、KAKONMKB、KAKOADKB は数字ピクチャ項目として比較・参照しており、空白など数字以外が入っていると CONVERSION 条件が発生し得る（ON 単位なし）。対象店所テーブルの初期化は数字ピクチャ項目への空文字代入である。 | 126, 144, 156–159, 203, 244 |
| 17 | 未使用定義 | CONTL、OCNT、SYSSPAC、IFL10、IFL11、INRLH と、組込み関数 ADDR／HIGH／LOW／LENGTH／VERIFY／DATE は宣言のみで使っていない。 | 27–30, 66, 89, 97, 101 |
| 18 | JCL | JCL の SYSIN DD（データなし）は本プログラムでは使用していない。 | － |

---

## 付録A 出力項目対応表（エコデリバーアップロードＤＢ RDECDL ← 編集元）

LV＝レベル番号。属性・桁・Byte は参考資料（現行解析資料）の定義による。

| # | 位置 | 日本語名称 | LV | 変数名 | 属性 | 桁 | Byte | 編集元 | 編集元項目 | 編集元位置 | 編集内容・備考 | 行番号 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 顧客コード | 2 | ECDLCODE | 文字 | 7 | 7 | 管理台帳 | 登録顧客コード（KACUSTCD） | 1 | 転記 | 177 |
| 2 | 8 | 更新区分 | 2 | ECDLUPKB | 文字 | 1 | 1 | 更新データ（ヘッダ部） | （名称なし）（IKB2） | 43 | IKB2＝'0' → '0'、それ以外 → '1'／0:新規1:更新 | 178–180 |
| 3 | 9 | 顧客名 | 2 | ECDLNAME | 文字 | 72 | 72 | 管理台帳 | 正式名称区分（KAKONMKB）、顧客正式名（漢字）（KATNSGNM・KATNSGN2） | 442, 443, 485 | SO＋〔法人格名称（KBNM_DT）〕＋空白除去した名称（KONM）＋SI | 181–205 |
| 4 | 81 | スペース | 2 | ECDLUNIT | 文字 | 10 | 10 | 固定値 | － | － | SO＋全角空白4文字＋SI | 207 |
| 5 | 91 | ご担当者様 | 2 | ECDLCHAR | 文字 | 10 | 10 | 固定値 | － | － | SO＋「ご担当者」＋SI | 208 |
| 6 | 101 | 郵便番号 | 2 | ECDLPOST | 文字 | 8 | 8 | 管理台帳 | 所在地郵便番号（KATNPSNN）／請求先郵便番号（KASQPSNN） | 424／431 | 所在地、請求先住所区分（KAKOADKB）＝0：KATNPSNN、0以外：KASQPSNN。1〜3桁目＋'-'＋4〜7桁目 | 244–254 |
| 7 | 109 | 請求先住所 | 2 | ECDLADRS | 文字 | 122 | 122 | 管理台帳 | 都道府県＿漢字（VNADVTN1）、市区群町村＿漢字（VNADVTN2）、大字．通称＿漢字　＋　字．丁目＿漢字（VNADVTN3）、顧客所在地（番地、号数、但し書き等）漢字（KAKOSYOG）／顧客請求先（番地、号数、但し書き等）漢字（KAKOSEQG） | 1051, 1061, 1134, 572／624 | SO＋住所ワーク（WKAREA）1〜120バイト目＋SI。番地等は KAKOADKB＝0：KAKOSYOG、0以外：KAKOSEQG | 209–265 |
| 8 | 231 | マスターメンテ日 | 2 | ECDLIRRP | 文字 | 6 | 6 | 更新データ（VCUBASED） | 契約更新年月日（DKHKYMNT） | 789（レコード上 832） | 転記（STRING で年・月・日を連結） | 266 |
