バッチ設計書(プログラム仕様書)【ND53500P】エコデリバー用顧客アップロードデータ作成
| 項目 |
内容 |
| プログラムID |
ND53500P(PL/I プロシージャ名:ND53500) |
| プログラム名 |
エコデリバー用顧客アップロードデータ作成 |
| 業務ID |
JRCSV00P |
| パターンID |
PPB0010P(ファイルのIO(SINGLE))/パターン履歴 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 機能概要
顧客名前マスター更新データを読み、特定事業所分のエコデリバー用顧客アップロードデータDBを出力する。
2.2 処理概要
- パラメータ(INCARD)から対象の店所コードを読み込み、対象店所テーブル(最大200件)を作成する。
- 顧客名前マスター更新データ(INFILE)を先頭から1件ずつ順次読み込む。
- セグメント名(ISEG)が
'VKCUSTM'(顧客マスター(基本情報))のレコードだけを処理対象とする。
- 顧客扱店所コード(DNADATCD(1))が対象店所テーブルにある場合、管理台帳(VKKANBS)をキー読込する。
- 管理台帳があり、請求・精算区分(KAADSQKB)=1(請求)かつ登録顧客コード(KACUSTCD)<8800000 の顧客について、顧客名・郵便番号・住所などをエコデリバーアップロードDB(RDECDL)のレイアウトに編集し、1件出力する。
- 出力ファイルは、後続の DB2 LOAD ステップで DB2 表へロードされる(JOB DAIMNT3J)。
2.3 入出力概要図
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/>エコデリバーアップロードDB<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 |
エコデリバーアップロードDB |
出力 |
順次 |
順次書出 |
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)を入力で、エコデリバーアップロードDB(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 |
出力 |
エコデリバーアップロードDB(OUTFILE)を1件出力する。 |
出力件数のカウントなし |
267 |
4.3 終了処理
| 項番 |
処理内容 |
条件・補足 |
行番号 |
| 4.1 |
顧客名前マスター更新データ(INFILE)とエコデリバーアップロードDB(OUTFILE)をクローズし、プログラムを終了する。 |
INCARD・VKKANBS は明示的なCLOSEなし(終了時に暗黙クローズ)。件数表示なし |
172–173, 270 |
4.4 処理フロー
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)
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["エコデリバーアップロードDBを出力"]
WRT --> R(["呼出し元へ戻る"])
キーエラー時の処理(ON KEY 条件)
flowchart TD
K(["KEY条件発生<br/>VKKANBS"]) --> SW["管理台帳存在スイッチ ← 'N'"]
SW --> CONT(["処理続行<br/>(ONCODE による判定なし)"])
5. 出力編集仕様(エコデリバーアップロードDB 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 名称・住所の編集方法
| 編集 |
対象項目 |
分解方法 |
格納先 |
空白の扱い |
行番号 |
| 正式名称1 |
顧客正式名(漢字)(KATNSGNM:42バイト) |
SO(1)+全角20文字(SGNM_DT(1〜20))+SI(1)に分解 |
名称ワーク(KONM_TB) |
空白の文字は飛ばして詰める |
184–192 |
| 正式名称2 |
顧客正式名(漢字)(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 |
エコデリバーアップロードDBファイル |
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 |
|
顧客正式名(漢字)2の分解: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 |
エコデリバーアップロードDB |
構造体(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:請求.2:精算) |
出力判定(=1) |
158 |
| KATNPSNN |
所在地郵便番号 |
KANBASED(管理台帳) |
424 |
文字 7 |
郵便番号(住所区分=0) |
248 |
| KASQPSNN |
請求先郵便番号 |
KANBASED(管理台帳) |
431 |
文字 7 |
郵便番号(住所区分≠0) |
253 |
| KAKONMKB |
正式名称区分 |
KANBASED(管理台帳) |
442 |
数字 1(株式会社等の区分) |
法人格名称の選択 |
203–204 |
| KATNSGNM |
顧客正式名(漢字) |
KANBASED(管理台帳) |
443 |
文字 42(SO+漢字20文字+SI) |
顧客名 |
36, 185, 189 |
| KATNSGN2 |
顧客正式名(漢字) |
KANBASED(管理台帳) |
485 |
文字 22(SO+漢字10文字+SI) |
顧客名 |
40, 195, 199 |
| KAKOADKB |
所在地、請求先住所区分 |
KANBASED(管理台帳) |
571 |
数字 1(0:所在=請求、1:¬=) |
住所・郵便番号の選択 |
244 |
| KAKOSYOG |
顧客所在地(番地、号数、但し書き等)漢字 |
KANBASED(管理台帳) |
572 |
文字 52(SO+漢字25文字+SI) |
住所(番地等) |
247 |
| KAKOSEQG |
顧客請求先(番地、号数、但し書き等)漢字 |
KANBASED(管理台帳) |
624 |
文字 52(SO+漢字25文字+SI) |
住所(番地等) |
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 出力項目対応表(エコデリバーアップロードDB 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 |