プロジェクト

全般

プロフィール

レビュー指摘 #12110 » ND53500P_仕様書.md

幸塚 和久, 2026-10-26 04:26 午後

 

バッチ設計書(プログラム仕様書)【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 処理概要

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