レビュー指摘 #12454 » BV28100P_仕様書.md
プログラム仕様書 BV28100P(他社直卸し中継渡し入力(委託票) センター登録)
| 項目 | 内容 |
|---|---|
| システムID | BV |
| 参考資料 | ・現行ソース BV28100P.pl1 ・現行の解析資料 BV0190_到着入力(他社直卸中継渡し).xlsx(シート「資産一覧」「Link XCTL 一覧」「レコードフォーマット」「SRC_BV28100P」) |
| 項目名の出典 | 送受信データ・マスターの項目は解析資料のシート「レコードフォーマット」の日本語名称 |
1. 概要
| 項目 | 内容 |
|---|---|
| プログラムID | BV28100P(手続き名:BV28100) |
| プログラム名称 | 他社直卸し中継渡し入力(委託票)センター登録(ソースの冒頭コメントは「KSDS・UPDATE センター CICS」。処理内容から命名) |
| 言語 | PL/I(CICS コマンドレベル) |
| 処理形態 | オンライン(APPC 会話の相手側。画面なし) |
| 動作環境 | CIC1(センター側) |
| トランザクションID | B81V(DDP の BV18100P から CONNECT PROCESS で起動される) |
| パターンID | PPOC050P(1987/05/06)、業務 BXHEAD30 |
| 呼出し元 | BV18100P(BV81) |
| 更新ファイル | VKUNKSH(運行指令マスター)更新 |
| 呼出しモジュール | SC20100P(日付取得、LINK)。LSS0030A は定義だけで使っていない |
1.1 機能概要
DDP で入力した中継渡しの到着を、センターの運行指令マスターに登録する。
- 入力年月日(処理日付)をセットする。
- 到着店所が最終卸店なら、実績年月日時分に到着日時をセットする。
- 到着店所が卸店(最大3店)として登録されていなければ、卸店に追加する。
- 送付書NO の発到区分を「発送のみ」から「発送・到着」にする(一覧になければ「到着のみ」で追加する)。
- 運行指令マスターを書き換え、結果を DDP に返す。
回送区分によって、更新する指令書が変わる(1:受信した指令書NO、2:行き分・回送帰り分の指令書(最大4件))。BV18100P は常に回送区分 1 で呼ぶ。
flowchart LR
DDP[DDP BV18100P<br/>BV81] -- 到着データ 57バイト --> B81V[B81V<br/>本プログラム]
B81V -- 結果 24バイト --> DDP
B81V <--> UNK[(VKUNKSH<br/>運行指令マスター)]
B81V -- LINK --> SC[SC20100P<br/>日付取得]
2. インターフェース
2.1 受信データ(57バイト)
トランザクションID(4)+ DPCEB81V(他社直卸し中継渡し入力(委)[DC])。
| 項目ID | 項目名 | 用途 |
|---|---|---|
| B81VSRNO | 指令書NO | 回送区分 1 のとき、運行指令マスターのキー |
| B81VSOFN | 送付書NO | 送付書の一覧の更新 |
| B81VKSKB | 回送区分 | 1:受信した指令書を更新、2:行き分・回送帰り分の指令書を更新、それ以外:何もしない |
| B81VTTCD | 店所コード | 到着店所(卸店・最終卸店の判定) |
| B81VTYMD・B81VTHHM | 年月日・時分 | 到着年月日時分 |
| B81VORKB | 卸し区分 | 使用しない |
| B81VKONO(1)・(2) | 行き分 | 回送区分 2 のとき更新する指令書NO(0 なら処理しない) |
| B81VKFNO(1)・(2) | 回送帰り分 | 同上 |
2.2 送信データ(24バイト)
エラーフラグ(1)+エラーコード(4)+ CEDPBV81(指令書NO BV81SRNO・送付書NO BV81SOFN・回送区分 BV81KSKB に受信した値をセット)。送信前に全体を空にし、エラーフラグを '0' にする。
| エラーフラグ | 意味 | エラーコード |
|---|---|---|
| '0' | 正常 | 空白 |
| '1' | 運行指令マスターが読めない、または書換えエラー | 空白 |
| '2' | CICS のエラー | 'BU02' |
2.3 運行指令マスター(VKUNKSH)の更新項目
| 項目 | 内容 |
|---|---|
| 入力年月日(処理日付)(VBKINYMD) | SC20100P で取得した日付 |
| 実績年月日時分(VBKGXTIM) | 着店コード(最終卸店)(VBKGJCCD)が到着店所と同じなら「年月日×10000+時分」 |
| 卸店所数(VBKGORTS) | 到着店所が登録済みの卸店のどれでもなく、卸店所数が 3 未満なら 1 増やす |
| 第1~第3卸店の店所コード(VBKGHTEN・VBKGITEN・VBKGJTEN) | 増やした卸店所数の位置に到着店所をセット |
| 第1~第3卸店の到着年月日時分(VBKGHTIM・VBKGITIM・VBKGJTIM) | 同じ位置に「年月日×10000+時分」をセット |
| 発到区分(VBKBHTKB) | 一覧に同じ送付書NO があり発到区分が '1'(発送)なら '3' に変える。一覧になければ追加して '2' にする |
| 送付書枚数・送付書NO・取消区分(VBKBSOFM・VBKBSENO・VBKBTKID) | 一覧になければ、送付書枚数を 1 増やし、その位置に送付書NO・取消区分空白をセット |
3. 処理仕様
3.1 処理の流れ
flowchart TD
S([開始]) --> RCV[到着データを受信<br/>SC20100P で日付取得]
RCV --> K{回送区分}
K -- 1 --> ONE[受信した指令書NOで<br/>3.2 の更新]
K -- 2 --> LOOP[行き分・回送帰り分の<br/>指令書NOごとに 3.2 の更新]
K -- それ以外 --> SND
ONE --> SND
LOOP --> SND[結果を送信<br/>終了データを受信して終了]
3.2 運行指令マスターの更新
- 指令書NO で運行指令マスターを更新モードで読む。読めなければエラーフラグ '1' にして送信する。
- 入力年月日に処理日付をセットする。
- 着店コード(最終卸店)が到着店所と同じなら、実績年月日時分に到着日時をセットする。
- 卸店の追加:卸店所数で分ける。
| 卸店所数 | 処理 |
|---|---|
| 0 | 卸店所数を 1 にし、第1卸店に到着店所・到着日時をセット |
| 1 | 第1卸店が到着店所でなければ、卸店所数を 2 にし、第2卸店に到着店所・到着日時をセット |
| 2 | 第1・第2卸店のどちらも到着店所でなければ、卸店所数を 3 にし、第3卸店に到着店所・到着日時をセット |
| 3 以上 | 何もしない |
- 送付書の一覧(送付書枚数分)から送付書NO を探す。
- あれば、発到区分が '1' なら '3' にする('1' 以外はそのまま)。
- なければ、送付書枚数を 1 増やし、送付書NO・取消区分空白・発到区分 '2' を追加する。
- レコード長を「650+7×送付書枚数」にして書き換える。書換えエラーはエラーフラグ '1'。
回送区分 2 の場合は、行き分(2件)・回送帰り分(2件)の指令書NO を順に処理し、0 の指令書NO は飛ばす。途中で読込み・書換えエラーになったら、そこで送信する(それまでに更新した指令書はそのまま)。
3.3 送受信・エラー処理
- 結果(24バイト)を送信して応答を待ち(SEND INVITE WAIT)、DDP からの終了データを受信して終了する。
- CICS のエラー(HANDLE CONDITION ERROR)が発生した場合は、送信データを空にし、エラーフラグ '2'、エラーコード 'BU02' にして送信する。
4. 補足・留意事項
- 回送区分 1 の書換えエラー:回送区分 1 では書換えエラーでもエラーフラグ '1' にしてそのまま送信する。回送区分 2 では書換えエラーでその時点で送信する。
- 発到区分の意味:発到区分 '1' は発送、'2' は到着、'3' は発送・到着と読み取れる(自社便・傭車便の発送入力 BV23200P・BV23600P は新しい送付書を '1' で追加し、'2' のものを '3' にしている)。
- 卸店が4店以上:卸店所数が 3 の場合は、到着店所が卸店になくても追加しない(エラーにもしない)。
- 卸し区分を使わない:受信した卸し区分(BV18100P は 0 を送る)は使っていない。
- 同じ送付書NO が複数ある場合:一覧の最初に見つかった送付書NO だけを更新する。