# プログラム仕様書　BV18100P（他社直卸し中継渡し入力（委託票）　入力・登録）

| 項目 | 内容 |
|---|---|
| システムID | BV |
| 参考資料 | ・現行ソース BV18100P.pl1<br/>・画面イメージ MPBV800.jpg（他社直卸し中継渡し入力（委託票））<br/>・現行の解析資料 BV0190_到着入力（他社直卸中継渡し）.xlsx（シート「資産一覧」「MPBV800」「参考_BU27000P」「レコードフォーマット」「SRC_BV18100P」） |
| 項目名の出典 | 画面項目は解析資料のシート「MPBV800」の日本語名、送受信データ・マスター・集信ログの項目はシート「レコードフォーマット」「参考_BU27000P」の日本語名称 |

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BV18100P（手続き名：BV18100） |
| プログラム名称 | 他社直卸し中継渡し入力（委託票）入力・登録（ソースの冒頭コメントは「直卸し到着入力　検証　２０００年対応」） |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（CICS 疑似会話型） |
| 動作環境 | SV（DDP 側） |
| トランザクションID | BV81 |
| パターンID | PPOD152P（1987/05/01）、業務 BXOKRJ00 |
| 使用画面（マップ） | MPBV800（他社直卸し中継渡し入力（委託票））、MPDM010（共通ヘッダ画面）、ELEPHAN（終了画面） |
| 前の処理 | BV80（BV18000P）。照会OK で委託票ＮＯ などを入力可にし、BV81 で待機している |
| 次の処理 | 登録OK → BV82（BV18200P） |
| センターとの通信 | ① 委託会社のチェック：SYSID 'CIC1'、プロセス 'B70U'（BU27000P：顧客マスター照会）<br/>② 到着の登録：SYSID 'CIC1'、プロセス 'B81V'（BV28100P） |
| 参照・更新ファイル | VPSOHFU（ＤＤＰ 送付書マスター）参照・更新、VPSHUHA（ＤＤＰ 集配票マスター）参照・追加、VPTENMS（ＤＤＰ 店所マスター）参照 |
| 出力 | TD キュー 'SYUS'（集信Ｒ１・２ 到着鑑データ：SSS13） |
| 呼出しモジュール | LSO0020（チェックデジットのチェック）、LSO0040（日付の妥当性チェック）、LSP2000（年2桁の年月日を8桁に変換） |
| 一時記憶 | TSキュー（BV18000P と同じ「端末ID＋'BV80'」、長さ 300。通信領域の TSQ_ID・TSQ_LENGTH を使う） |

### 1.1 機能概要

照会した送付書について、中継渡しの委託票ＮＯ・委託会社・扱い店所・到着予定日時を入力し、到着として登録する。

1. 入力された項目をチェックし（項目チェック）、送付書マスター・センターの顧客マスター（委託会社）・発送日時との関連をチェックする。
2. OK なら、センターの運行指令マスターに到着を登録する（BV28100P）。
3. DDP の集配票マスターに委託票を追加し、送付書マスターに到着の情報を書き、集信ログ（到着鑑データ）を出力する。
4. 「登録ＯＫ、ＥＮＴＥＲを押せ。」を表示して BV82 で待機する。

```mermaid
flowchart LR
    BV80[BV80<br/>BV18000P 照会] -- 照会OK --> BV81[BV81<br/>本プログラム<br/>MPBV800]
    BV81 -- エラー --> BV81
    BV81 <-- APPC B70U<br/>委託会社チェック --> C70[(センター<br/>BU27000P)]
    BV81 <-- APPC B81V<br/>到着登録 --> C81[(センター<br/>BV28100P)]
    BV81 --> SHU[(VPSHUHA<br/>集配票マスター)]
    BV81 <--> SOH[(VPSOHFU<br/>送付書マスター)]
    BV81 --> SYUS[[TD SYUS<br/>集信ログ SSS13]]
    BV81 -- 登録OK --> BV82[BV82<br/>BV18200P]
```

---

## 2. 画面仕様（MPBV800）

画面レイアウト・項目は BV18000P_仕様書.md の 2.1・2.2 と同じ。

### 2.1 入力項目とチェック結果の番号

FLG は TSキューのチェック結果（'0'：未入力、'1'：エラー、'3'：関連エラー、'2'：OK）。どの項目が入力できるかは BV18000P で決まる（BV18000P_仕様書.md 4.5）。

| FLG | 項目ID | 項目名 | 属性・桁 | 必須 | 本プログラムでのチェック |
|---|---|---|---|---|---|
| 3 | BV80041 | 委託票NO | 数字 8 | ○ | 4.2 |
| 4 | BV80051 | 委託会社コード | 数字 7 | ○ | 4.2・4.3 |
| 5 | BV80061 | 扱い店所コード | 数字 4 | ○ | 4.2・4.3 |
| 6～8 | BV80071～BV80073 | 到着予定年・月・日 | 数字 2×3 | | 4.2・4.3（BV18000P で送付書の到着予定年月日を表示済み） |
| 9・10 | BV80074・BV80075 | 到着予定時・分 | 数字 2×2 | ○ | 4.2・4.3 |
| 11 | BV80081 | 印刷区分 | 文字 1 | | 4.2 |
| 12 | BV80091 | 印刷装置 | 文字 4 | | 4.2（BV18000P で入力不可にしている） |

指令書NO・送付書NO・到着店所コード・到着店所名は、本プログラムでは常に表示だけ（入力不可）にする。

### 2.2 ファンクションキー

| キー | 機能 | 処理概要 |
|---|---|---|
| 実行（Enter） | 継続 | 入力内容をチェックし、登録する |
| PF2 | 取消 | 画面をクリアし、TSキューを削除して、空の MPBV800 を画面を消去して表示する。BV80（照会）で待機 |
| PF3 | 終了 | TSキューを削除し、戻り先画面のスタックから一つ前の画面に戻る（BV18000P と同じ） |
| PF4 | 戻り | TSキューを削除し、メインメニューに戻る（BV18000P と同じ） |
| CLEAR | 強制終了 | TSキューを削除し、終了画面（ELEPHAN）を表示して終了 |
| 上記以外 | 再表示 | 画面のデータ部分を再送信し、BV81 で待機 |

---

## 3. インターフェース

### 3.1 通信領域（COMMAREA：256バイト）

| 項目ID | 本プログラムでの用途 |
|---|---|
| CRT_BACK_KOSU／CRT_BACK_DATA(5) | 戻り先画面のスタック（PF3・PF4） |
| TSQ_ID・TSQ_LENGTH | TSキューの名前・長さ（BV18000P がセット） |
| COMM_TEN_CODE | 端末の店所コード（集信ログの入力店所） |
| COMM_RPOC_YMD | 処理日付（送付書マスターの入力年月日） |
| PRINTER_ID・RETURN_CD | 印刷装置の確認用（処理はコメントアウトされており使っていない。7章 4） |
| COMM_ITEM_NO2 | 運行車区分から決める区分（'90'：傭車（運行車区分 02）、'80'：それ以外）。後続に渡す |
| COMM_ITEM_SO・COMM_ITEM_SF | 指令書ＮＯ・送付書ＮＯ（BV18000P がセット）。集配票マスター・集信ログに使う |

### 3.2 委託会社のチェック（B70U：BU27000P）

センター側の処理は [BU27000P_仕様書.md](BU27000P_仕様書.md) を参照（顧客マスターのレコードをそのまま返す）。

| 項目 | 内容 |
|---|---|
| 送信（11バイト） | トランザクションID 'B70U'（4）＋ 荷主コード（WB70NICD、7）：委託会社コード |
| 受信（905バイト） | エラーフラグ（1）＋エラーコード（4）＋ 顧客マスターの内容 |

受信データのうち本プログラムで使う項目：

| 項目ID | 項目名（参考_BU27000P） | 用途 |
|---|---|---|
| UB7DELKB | 登録抹消区分（'0'：使用可、'9'：削除） | '0' であること |
| UB7DATCD(1)～(4) | 顧客扱店所コード（4件） | 扱い店所コードがこの中にあること |
| UB7NKUMK(1)～(10) | 契約有無区分（10件） | 6件目が 1 であること |
| UB7DSQKB | 請求・精算区分（1：請求、2：精算） | 2（精算）であること |
| UB7NRGNM | 顧客略名（漢字） | 委託会社名に表示 |

### 3.3 到着の登録（B81V：BV28100P）

| 項目 | 内容 |
|---|---|
| 送信（57バイト） | トランザクションID 'B81V'（4）＋ DPCEB81V（他社直卸し中継渡し入力（委）［ＤＣ］）：指令書ＮＯ（B81VSRNO）、送付書ＮＯ（B81VSOFN）、回送区分（B81VKSKB：1）、店所コード（B81VTTCD：到着店所コード）、年月日（B81VTYMD：到着予定年月日）、時分（B81VTHHM：到着予定時分）、卸し区分（B81VORKB：0）、行き分（B81VKONO(2)：0）、回送帰り分（B81VKFNO(2)：0） |
| 受信（24バイト） | エラーフラグ（1）＋エラーコード（4）＋ CEDPBV81 |

### 3.4 集配票マスター（VPSHUHA）に追加する内容

キーは委託票ＮＯ。下表以外の項目は空白・0。

| 項目ID | 項目名 | セットする値 |
|---|---|---|
| VGJSSSHN | 専門集配票ＮＯ． | 委託票ＮＯ |
| VGJSDSHN | 代表集配票ＮＯ． | 送付書ＮＯ（COMM_ITEM_SF） |
| VGJSDTID | データＩＤ | 運行車区分が 02 なら 28、それ以外は 27 |
| VGJSKTCD | 稼働店所コード | 扱い店所コード |
| VGJSKYMD | 稼動年月日 | 到着予定年・月・日 |
| VGJSSGKB | 作業区分 | 6 |
| VGJSSHBN | 社番・車号 | 送付書マスターの車番 |
| VGJSNKEN | 集配軒数 | 1 |
| VGJSYOCD | 傭車会社コード | 委託会社コード |
| VGJSTEAT | 手当反映区分 | 1 |
| VGJSPRNT | 印刷区分 | 印刷区分（1） |

### 3.5 送付書マスター（VPSOHFU）の更新内容

| 項目ID | 項目名 | セットする値 |
|---|---|---|
| KSHSYYMD・KSHSTYMD | 到着予定年月日・到着年月日 | 到着予定年月日 |
| KSHSDKB2 | テ゛ータ区分（到着） | 1 |
| KSHSGKB2 | 画面区分（到着） | 運行車区分が 02 なら 15、それ以外は 14 |
| KSHSTOTN | 到着店コート゛ | 到着店所コード |
| KSHSTTIM | 到着時分 | 到着予定時分 |
| KSHSORKB | 卸区分 | 1 |
| KSHSTKKN | 直配軒数 | 1 |
| KSHSBYMD | 入力年月日（到着） | 処理日付 |

### 3.6 集信ログ（SSS13：集信Ｒ１・２ 到着鑑データ）

レコードＩＤ 130、長さ 384。下表以外の項目は空白・0。

| 項目 | 内容 |
|---|---|
| 入力店所（SSS3TNCD）・継続区分（SSS3KEKB） | 端末の店所コード・0 |
| 入力の年・月・日・時・分・秒 | 現在の日時 |
| 到着店所コート゛（SSS3CHTN） | 到着店所コード |
| テ゛ータ件数（SSS3KNSU） | 1 |
| 1件目の指令書ＮＯ・送付書ＮＯ | 指令書ＮＯ・送付書ＮＯ |
| 1件目の到着 年・月・日・時・分 | 到着予定年・月・日・時・分 |
| 1件目の卸区分（SSS3ORKB）・直配件数（SSS3GHKN） | 1・1 |
| 委託会社コード（SSS3JONC） | 委託会社コード |

---

## 4. 処理仕様

### 4.1 処理の流れ

```mermaid
flowchart TD
    S([開始]) --> AID{押されたキー}
    AID -- CLEAR --> CLR[TSキュー削除<br/>終了画面]
    AID -- PFキー --> PF[ファンクションキー処理 2.2]
    AID -- 実行 --> RCV[MPBV800 を受信<br/>TSキューを読んで削除]
    RCV -- 画面データなし --> CLR
    RCV --> CHK[項目チェック 4.2<br/>関連チェック 4.3]
    CHK -- エラー --> ERR[TSキュー保存<br/>エラー表示] --> W81([BV81 で待機])
    CHK -- OK --> CEN[センターに到着を登録 4.4]
    CEN -- エラー --> ERR
    CEN -- OK --> REG[集配票マスター追加<br/>送付書マスター更新<br/>集信ログ出力 4.5]
    REG --> W82([BV82 で待機])
```

### 4.2 項目チェック（CHECK_SUB_RTN_LVL1）

1. 画面を受信し、TSキューを読む。なければ初期化する（FLG はすべて '1'（印刷装置は '2'）、必須は委託票NO～到着予定分）。読めたら削除する。
2. チェック結果が '2' の項目はチェックしない。未入力は必須（FLGX ＝ '1'）ならエラー、そうでなければ未入力（'0'）。

| FLG | 項目 | チェック内容（満たさなければエラー） |
|---|---|---|
| 3 | 委託票NO | 数字で 80000000 以上。チェックデジットが正しい（LSO0020、区分 '07'、タイプ 'C'）。集配票マスター（VPSHUHA）にまだない |
| 4 | 委託会社コード | 数字で 9950000 未満。1859026（東京支店扱い）・1859034（宇都宮直卸）・1926065（入力不可）でない |
| 5 | 扱い店所コード | 数字で、店所マスターにある。扱い店所名に店所略名（漢字）を表示する |
| 6 | 到着予定年 | 数字 |
| 7 | 到着予定月 | 数字で 12 以下 |
| 8 | 到着予定日 | 数字で 31 以下 |
| 9 | 到着予定時 | 数字で 23 以下 |
| 10 | 到着予定分 | 数字で 59 以下 |
| 11 | 印刷区分 | 入力された場合は 1 にする（チェックOK）。未入力で必須でなければOK |
| 12 | 印刷装置 | 入力された場合はそのままOK（チェックなし） |

3. FLG(3)～FLG(12) にエラー（'1'）があれば、関連チェックをせずに全体エラーにする。

### 4.3 関連チェック

項目エラーがなければ、次の順に行う。エラーは関連エラー（'3'）。

| 順 | チェック | エラーのとき |
|---|---|---|
| 1 | 送付書マスター（VPSOHFU）を送付書ＮＯ で読めること | 委託会社コード～到着予定分（FLG 4～10）をエラーにし、「ＤＤＰ送付書マスターが読めませんでした。」（ERR 9）。以降のチェックはしない |
| 2 | センター（B70U）で委託会社コードの顧客マスターを照会し、正常であること | 委託会社コード・扱い店所コードをエラー。以降のチェックはしない |
| 3 | 顧客扱店所コード（4件）のどれかが扱い店所コードと同じであること。見つかったら委託会社名に顧客略名（漢字）を表示する | 同上 |
| 4 | 扱い店所コードが 0102（函館扱い）でないこと | 同上 |
| 5 | 請求・精算区分が 2（精算）、契約有無区分の6件目が 1、登録抹消区分が '0' であること | 同上 |
| 6 | 到着予定年月日が日付として正しいこと（LSO0040） | 到着予定年～分（FLG 6～10）をエラー。以降のチェックはしない |
| 7 | 到着予定年月日が 0 でなく、送付書の発送年月日（KSHSHYMD）以降であること（年2桁を LSP2000 で8桁にして比較）。同じ日なら、到着予定時分が送付書の出発時分（KSHSHTIM）より後であること | 到着予定年～分（FLG 6～10）をエラー |

最後に FLG(3)～FLG(12) に '1' または '3' があれば全体エラーにする。

### 4.4 表示の編集とセンター登録

1. 各項目：OK・未入力は入力不可（自動スキップ）、エラー（関連エラーを含む）は入力可・赤でカーソルを置く（印刷装置はエラー時に入力可・変更フラグオン）。印刷区分はOK・未入力なら入力不可（数字）。指令書NO・送付書NO・到着店所コード・到着店所名は常に入力不可。
2. メッセージ：エラーなら 5章のエラー、OK なら「OK  2」「確認ＯＫなら実行キーを押して下さい」。
3. エラーの場合は TSキューを書き、メッセージ・エラーコードを赤にして画面のデータ部分を送信し（カーソル指定）、BV81 で待機する。
4. OK の場合は、そのままセンター（CIC1 の B81V）に到着の登録を依頼する（3.3）。
   - 通信エラーは BV18000P と同じエラーコード（ASYSB・ASYSI・A9999・CTERM・C9999・STERM・S9999・RTERM・RLENG・R9999）とメッセージを表示する。回線混雑（ASYSB）は画面を受信して送信をやり直す。
   - センターのエラーフラグが '0' 以外なら「センター登録エラー、ＰＦ３を押せ。」（ERR 2）を表示する。
   - いずれもエラーの場合は 3 と同じく BV81 で待機する。

### 4.5 登録処理（OK_DATA_PROCESS_SUB_RTN）

1. 送付書マスターを送付書ＮＯ で読む（なければ空のレコードとして扱う）。運行車区分（KSHSSHKB）が 02 なら COMM_ITEM_NO2 を '90'、TSキューの BV80GKBN を '15' に、それ以外は '80'・'14' にする。
2. 集配票マスター（VPSHUHA）に 3.4 の内容で委託票を追加する（結果は判定しない）。
3. 送付書マスターを更新モードで読み、3.5 の内容で書き換える（読めなければ更新しない。結果は判定しない）。
4. 集信ログ（SSS13）を 3.6 の内容で TD キュー 'SYUS' に書く。
5. TSキューを書き、メッセージ「登録ＯＫ、ＥＮＴＥＲを押せ。」をターコイズで表示して、画面を送信し（画面は消去しない、カーソル指定）、BV82 で待機する。

---

## 5. メッセージ一覧

| No | エラーコード | メッセージ | 表示するとき |
|---|---|---|---|
| 1 | ERR 1 | エラー項目あり，再入力して下さい | 項目エラー・関連エラー |
| 2 | ERR 9 | ＤＤＰ送付書マスターが読めませんでした。 | 関連チェックで送付書マスターが読めない |
| 3 | ERR 2 | センター登録エラー、ＰＦ３を押せ。 | センター登録（B81V）のエラー |
| 4 | ERR 3 | 印刷装置でない端末コード!! ほか | （印刷装置の確認処理がコメントアウトされているため、表示されない。7章 4） |
| 5 | ASYSB ほか | BV18000P と同じ通信エラーのメッセージ | センター登録（B81V）の通信エラー |
| 6 | OK  2 | 確認ＯＫなら実行キーを押して下さい | チェックOK（登録後は No.7 に置き換わる） |
| 7 | OK  2 | 登録ＯＫ、ＥＮＴＥＲを押せ。 | 登録OK |

---

## 6. 画面遷移

```mermaid
flowchart LR
    BV80[BV80 照会] --> BV81[BV81<br/>本プログラム]
    BV81 -- 実行（エラー・センター登録エラー） --> BV81
    BV81 -- 実行（登録OK） --> BV82[BV82<br/>BV18200P]
    BV81 -- PF2 --> BV80
    BV81 -- PF3 --> PREV[一つ前の画面]
    BV81 -- PF4 --> MAIN[メインメニュー]
    BV81 -- CLEAR・画面データなし --> END[ELEPHAN 終了]
```

---

## 7. 補足・留意事項

1. **確認画面がない**：チェックOK でメッセージ「確認ＯＫなら実行キーを押して下さい」を編集するが、同じ実行キーでそのまま登録まで進み、確認のための画面は表示されない。
2. **委託会社チェックの通信エラー**：委託会社のチェック（B70U）で通信エラーになった場合も、委託会社コード・扱い店所コードの関連エラーとして「エラー項目あり，再入力して下さい」を表示する（通信エラーの内容は表示されない）。
3. **無効にされているチェック**：
   - 委託会社コードの荷主コードのチェックデジット（LSO0020、区分 'NI'）は呼んでいるが、結果を判定していない。
   - 扱い店所が送付書の積店・端末の店所と違う場合のエラーはコメントアウトされている。
   - 到着予定年の範囲（88～99）のチェックはコメントアウトされている。
4. **印刷処理なし**：印刷装置を入力した場合の印刷（SL11100P・SL11200P の LINK）と、印刷装置のエラー（ERR 3）はコメントアウトされている。印刷装置は BV18000P で入力不可にしている。
5. **登録結果を判定しない**：集配票マスターの追加・送付書マスターの書換えの結果を判定していないため、失敗しても「登録ＯＫ」になる。センターの登録結果だけは判定する。
6. **到着予定年月日の比較**：年2桁の年月日を LSP2000 で8桁にして比較している（２０００年対応）。到着予定年月日が 0 の場合はエラー。
7. **登録後のエラーコード欄**：登録OK 時はメッセージだけを置き換え、エラーコード欄は「OK  2」のまま表示される。
8. **委託票ＮＯ の重複チェック**：集配票マスターに同じ委託票ＮＯ があればエラーにする（読込みエラーの場合はエラーにしない）。
