# プログラム仕様書　BV18000P（他社直卸し中継渡し入力（委託票）　照会）

| 項目 | 内容 |
|---|---|
| システムID | BV |
| 参考資料 | ・現行ソース BV18000P.pl1（センター側の動きは BV28000P.pl1 で確認）<br/>・画面イメージ MPBV800.jpg（他社直卸し中継渡し入力（委託票））<br/>・現行の解析資料 BV0190_到着入力（他社直卸中継渡し）.xlsx（シート「資産一覧」「MPBV800」「レコードフォーマット」「SRC_BV18000P」） |
| 項目名の出典 | 画面項目は解析資料のシート「MPBV800」の日本語名、マスターの項目はシート「レコードフォーマット」の日本語名称 |

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BV18000P（手続き名：BV18000） |
| プログラム名称 | 他社直卸し中継渡し入力（委託票）照会（ソースの冒頭コメントは「他社直卸到着（中継渡し）　照会」） |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（CICS 疑似会話型） |
| 動作環境 | SV（DDP 側） |
| トランザクションID | BV80 |
| パターンID | PPOD155P（1987/05/01）、業務 BXOKRJ00 |
| 使用画面（マップ） | MPBV800（他社直卸し中継渡し入力（委託票））、MPDM010（共通ヘッダ画面）、ELEPHAN（終了画面） |
| 次の処理 | 照会OK → BV81（BV18100P：委託票の入力・登録） |
| センター照会 | SYSID 'CIC1'、プロセス 'B80V'（BV28000P）と APPC 会話。DDP の送付書マスターにない場合だけ |
| 参照・更新ファイル | VPSOHFU（ＤＤＰ 送付書マスター）参照・追加、VPTENMS（ＤＤＰ 店所マスター）参照 |
| 呼出しモジュール | LSO0020（チェックデジットのチェック） |
| 一時記憶 | TSキュー（キュー名「端末ID＋トランザクションID（BV80）」、長さ 300） |

### 1.1 機能概要

他社に直接卸す貨物を中継で渡すときの委託票を入力する機能の最初の画面。指令書ＮＯ・送付書ＮＯ を入力して実行キーを押すと、送付書が発送済みかを確認して到着店所と到着予定年月日を表示し、委託票の入力（BV81）に進む。

1. 指令書ＮＯ・送付書ＮＯ をチェックする。
2. DDP の送付書マスターを送付書ＮＯ で読む。ない場合はセンターに照会し、センターの送付書の情報で DDP の送付書マスターにレコードを追加する。
3. 送付書のデータ区分が 1（発送あり）なら、到着店所・到着予定年月日を表示し、委託票ＮＯ などを入力できるようにして BV81 で待機する。0 ならエラーにする。

```mermaid
flowchart LR
    MENU[メニュー] --> BV80[BV80<br/>本プログラム<br/>MPBV800]
    BV80 -- エラー --> BV80
    BV80 <-- APPC B80V<br/>DDP にない場合 --> CIC1[(センター CIC1<br/>BV28000P)]
    BV80 <--> SOHFU[(VPSOHFU<br/>送付書マスター)]
    BV80 -- 照会OK --> BV81[BV81<br/>BV18100P 委託票入力]
```

---

## 2. 画面仕様（MPBV800：他社直卸し中継渡し入力（委託票））

### 2.1 画面レイアウト

```
MPBV800        他社直卸し中継渡し入力（委託票）                 YY/MM/DD
                                                                HH:MM:SS
     指令書ＮＯ．     _________       送付書ＮＯ．    ________
     委託票ＮＯ．     ________
     委託会社コード   _______         委託会社名（14）
     扱い店所         ____            扱い店所名（14）
     到着店所                         到着店所名（14）
     到着予定年月日   __年 __月 __日 __時 __分
                      _（印刷区分）
     印刷装置         ____

 実行：継続　２：取消　３：終了　４：戻り
 エラーメッセージ（70）                                       エラーコード（5）
```

到着店所コード（BV80101）は画面イメージには表示されていない（到着店所名だけが見える）。

### 2.2 画面項目

I：入力、O：出力。「BV80」「BV81」は、その段階で入力するか（I）表示だけか（O）を示す（解析資料のシート「MPBV800」より）。FLG は TSキューのチェック結果の番号。

| No | 項目ID | 項目名 | 属性・桁 | BV80 | BV81 | FLG（BV80／BV81） | 本プログラムで表示する内容 |
|---|---|---|---|---|---|---|---|
| 1 | BV80011 | システム年月日 | 文字 8 | O | O | | `YY/MM/DD` |
| 2 | BV80021 | システム時分秒 | 文字 8 | O | O | | `HH:MM:SS` |
| 3 | BV80031 | 指令書NO | 数字 9 | I | O | 1（必須） | 入力値 |
| 4 | BV80032 | 送付書NO | 数字 8 | I | O | 2（必須） | 入力値 |
| 5 | BV80041 | 委託票NO | 数字 8 | O | I | ／3（必須） | 照会OK 後に入力可（カーソル） |
| 6 | BV80051 | 委託会社コード | 数字 7 | O | I | ／4（必須） | 照会OK 後に入力可 |
| 7 | BV80052 | 委託会社名 | 文字 14 | O | O | | （本プログラムではセットしない） |
| 8 | BV80061 | 扱い店所コード | 数字 4 | O | I | ／5（必須） | 照会OK 後に入力可 |
| 9 | BV80062 | 扱い店所名 | 文字 14 | O | O | | （本プログラムではセットしない） |
| 10 | BV80101 | 到着店所コード | 数字 4 | O | O | | 送付書の卸店コード、または端末の店所コード（4.4） |
| 11 | BV80102 | 到着店所名 | 文字 14 | O | O | | 到着店所コードの店所略名（漢字） |
| 12～14 | BV80071～BV80073 | 到着予定年・到着予定月・到着予定日 | 数字 2×3 | O | I | ／6～8（必須） | 送付書の到着予定年月日 |
| 15・16 | BV80074・BV80075 | 到着予定時・到着予定分 | 数字 2×2 | O | I | ／9・10（必須） | 照会OK 後に入力可 |
| 17 | BV80081 | 印刷区分 | 文字 1 | O | O | ／11 | '1' |
| 18 | BV80091 | 印刷装置 | 文字 4 | O | I | ／12 | 入力不可（2014/07/14 変更。4.5） |
| 19 | BV80231 | ＰＦキー説明 | 文字 76 | O | O | | 固定表示 |
| 20 | BV80241 | エラーメッセージ | 文字 70 | O | O | | 5章のメッセージ |
| 21 | BV80242 | エラーコード | 文字 5 | O | O | | 5章のエラーコード |

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

| キー | 機能 | 処理概要 |
|---|---|---|
| 実行（Enter） | 継続 | 指令書ＮＯ・送付書ＮＯ をチェックし、照会する |
| PF2 | 取消 | 画面をクリアし、TSキューを削除して、空の MPBV800 を表示する（画面を消去、共通ヘッダ画面は送らない）。BV80 で待機 |
| PF3 | 終了 | TSキューを削除し、戻り先画面のスタックから一つ前の画面に戻る（4.6） |
| PF4 | 戻り | TSキューを削除し、メインメニューに戻る（4.6） |
| CLEAR | 強制終了 | TSキューを削除し、終了画面（ELEPHAN）を表示して終了 |
| 上記以外 | 再表示 | 画面のデータ部分を再送信し、BV81 で待機（7章 6） |

---

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

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

| 項目ID | 本プログラムでの用途 |
|---|---|
| CRT_BACK_KOSU／CRT_BACK_DATA(5) | 戻り先画面のスタック（トランザクションID・マップID、最大5件） |
| TSQ_ID・TSQ_LENGTH | TSキューの名前・長さ |
| COMM_TEN_CODE | 端末の店所コード（到着店所の既定値） |
| COMM_ITEM_SO | 照会OK 時に指令書ＮＯ をセット（後続に渡す） |
| COMM_ITEM_SF | 照会OK 時に送付書ＮＯ をセット（後続に渡す） |

### 3.2 センター照会（B80V：BV28000P）

| 項目 | 内容 |
|---|---|
| 接続先 | SYSID 'CIC1'、プロセス名 'B80V' |
| 送信（21バイト） | トランザクションID 'B80V'（4）＋ 送付書ＮＯ（B80VSFNO、8）＋ 指令書ＮＯ（B80VSRNO、9） |
| 受信（50バイト） | エラーフラグ（1）＋エラーコード（4）＋ 下表の項目 |

| 項目ID | 内容（センターの編集元。BV28000P） |
|---|---|
| BV80YYMD | 到着予定年月日。送付書送り状ＮＯマスター（VKSFSNO）の年月日（VSHSTYMD）が 0 でなければその値、0 なら運行指令マスター（VKUNKSH）の予定年月日時分（VBKYBTIM）の年月日 |
| BV80DKB1 | データ区分。常に 1 |
| BV80ORTN | 卸店コード。到着店所コート゛（VSHSTTCD） |
| BV80SHKB | 運行車区分（VSHSHUNK） |
| BV80HYMD・BV80HTIM | 発送年月日（VSHSHYMD）・発送時分（VSHSHTIM） |
| BV80TUTN | 積店コード。店所コート゛（VSHSTNCD） |
| BV80YSCD | 傭車会社コード（VSHSYOSY） |
| BV80SHBN | 車番。社番（VSHSSYBN） |

センターのエラーフラグは、'0'：正常、'1'：運行指令マスターに指令書がない・指令書の送付書の一覧に送付書ＮＯ がない・送付書送り状ＮＯマスターにない、'2'：CICS のエラー（エラーコード 'ZZZZ'）。

### 3.3 送付書マスター（VPSOHFU：ＤＤＰ 送付書マスター）

キーは発送伝票送付書ＮＯ（KSHSSFNO）。

| 項目ID | 項目名 | 本プログラムでの用途 |
|---|---|---|
| KSHSDKB1 | テ゛ータ区分 | 1（発送あり）なら照会OK、それ以外はエラー |
| KSHSORTN | 卸店コート゛ | 到着店所の判定（4.4） |
| KSHSYYMD | 到着予定年月日 | 到着予定年・月・日に表示 |

センター照会の結果で追加するレコードの項目は次のとおり（ほかの項目は空白・0）。

| 項目ID | 項目名 | セットする値 |
|---|---|---|
| KSHSSFNO | 発送伝票送付書ＮＯ | 送付書ＮＯ |
| KSHSSRNO | 指令書ＮＯ | 指令書ＮＯ |
| KSHSYYMD | 到着予定年月日 | BV80YYMD |
| KSHSDKB1 | テ゛ータ区分 | BV80DKB1（1） |
| KSHSORTN | 卸店コート゛ | BV80ORTN |
| KSHSSHKB | 運行車区分 | BV80SHKB |
| KSHSHYMD・KSHSHTIM | 発送年月日・出発時分 | BV80HYMD・BV80HTIM |
| KSHSTUTN | 積店コート゛ | BV80TUTN |
| KSHSYSCD | 傭車会社コート゛ | BV80YSCD |
| KSHSSHBN | 車番 | BV80SHBN |

### 3.4 TSキュー（CHK_DSP_WORK：300バイト）

| 項目ID | 内容 |
|---|---|
| LOOP_FLG・OKFLG | 初期化済み（'1'）・チェック結果（'2'：OK、それ以外：エラー） |
| FLG(30)・FLGX(30) | チェック結果（'0'：未入力、'1'：エラー、'2'：OK、'3'：関連エラー）・必須の区分 |
| BV80031B・BV80032B | 指令書ＮＯ・送付書ＮＯ |
| BV80041B・BV80051B・BV80052B・BV80061B・BV80062B | 委託票ＮＯ・委託会社コード・委託会社名・扱い店所コード・扱い店所名（BV81 で使う） |
| BV80101B・BV80102B | 到着店所コード・到着店所名 |
| BV80071B～BV80075B | 到着予定年・月・日・時・分 |
| BV80081B・BV80091B | 印刷区分・印刷装置 |
| BV80GKBN | （本プログラムでは使わない） |

---

## 4. 処理仕様

### 4.1 処理の流れ

```mermaid
flowchart TD
    S([開始]) --> AID{押されたキー}
    AID -- CLEAR --> CLR[TSキュー削除<br/>終了画面]
    AID -- PFキー --> PF[ファンクションキー処理 4.6]
    AID -- 実行 --> RCV[MPBV800 を受信<br/>TSキューを読む]
    RCV -- なし --> INI[初期化]
    RCV -- あり --> DEL[TSキュー削除]
    INI --> CHK
    DEL --> CHK[指令書ＮＯ・送付書ＮＯ のチェック 4.2]
    CHK -- エラー --> ERR[TSキュー保存<br/>エラー表示] --> W80([BV80 で待機])
    CHK -- OK --> SO{送付書マスター}
    SO -- あり --> DK
    SO -- なし --> INQ[センター照会 4.3]
    INQ -- エラー --> ERR
    INQ -- OK --> ADD[送付書マスターに追加] --> DK{データ区分 ＝ 1}
    DK -- いいえ --> ERR
    DK -- はい --> TN[到着店所の表示 4.4]
    TN --> OK[照会OK の処理 4.5]
    OK --> W81([BV81 で待機])
```

### 4.2 初期化と入力チェック（CHECK_SUB_RTN_LVL1）

1. 画面を受信し、TSキュー（端末ID＋'BV80'）を読む。なければ初期化する（FLG はすべて '1'、FLGX(1)・FLGX(2) を '1'（必須）、画面項目の保存域を 0・空白）。あれば削除する。
2. 指令書ＮＯ・送付書ＮＯ をチェックする。チェック結果が '2'（OK済み）の項目はチェックしない。入力がなければ、必須なのでエラー（FLG '1'）。

| FLG | 項目 | チェック内容（満たさなければエラー） |
|---|---|---|
| 1 | 指令書NO | 数字で 0 でなく、9桁入力されている。チェックデジットが正しい（LSO0020、区分 '07'、タイプ 'C'） |
| 2 | 送付書NO | 数字で 0 でなく、8桁入力されている。チェックデジットが正しい（LSO0020、10000000 未満は区分 '10'、以上は区分 '07'、タイプ 'C'） |

3. どちらかがエラーなら全体エラー（OKFLG '1'）にして、4.3 以降は行わない。
4. OK なら、送付書マスター（VPSOHFU）を送付書ＮＯ で読む。あれば 4.4 へ。なければ（読込みエラーを含む）センターに照会する（4.3）。

### 4.3 センター照会（INQUIRE_SUB_RTN）

1. センター（CIC1 の B80V）に接続し、送付書ＮＯ・指令書ＮＯ を送信して、結果を受信する（3.2）。終了データを送って会話を終える。
2. 通信エラーは次のとおり（エラーフラグを '2' にする）。回線混雑（ASYSB）は、メッセージを赤で表示して画面を受信し、送信をやり直す。

| エラーコード | 発生箇所 | メッセージ（作業域にセット。7章 2） |
|---|---|---|
| ASYSB | 接続先の割当て（混雑） | 回線が混雑しています！！　実行キーをもう一度押して下さい |
| ASYSI・CTERM・STERM・RTERM | 割当て（SYSID エラー）・接続・送信・受信（回線切断） | 照会不可能！！回線不通の可能性あり　センターに連絡して下さい |
| A9999・C9999・S9999・R9999 | 割当て・接続・送信・受信（その他） | 照会不可能！！サポート外ＥＲＲＯＲ　センターに連絡して下さい |
| RLENG | 受信（長さエラー） | 照会不可能！！　ＬＥＮＧＥＲＲ |

3. エラーフラグが '0' なら OK。送付書マスターに 3.3 の内容でレコードを追加する（追加の結果は判定しない）。
4. エラーフラグが '0' 以外（通信エラーを含む）なら、指令書NO・送付書NO をエラーにし、「送付書未登録、出発入力後実行して下さい。」のエラーにする。

### 4.4 データ区分の確認と到着店所の表示

1. 送付書マスターのデータ区分（KSHSDKB1）が 1（発送あり）でなければ、指令書NO・送付書NO を関連エラー（'3'）にし、「送付書到着入力済み？　委託入力をする場合は直配追加入力より。」のエラーにする。
2. データ区分が 1 なら、到着店所コードを次のように決めて表示する。

| 条件 | 到着店所コード |
|---|---|
| 卸店コード（KSHSORTN）の3桁目が '8' で、下表の到着スキャン用の店コードでない | 卸店コード |
| 卸店コードの3桁目が '8' で、下表の到着スキャン用の店コード | 端末の店所コード |
| 卸店コードの3桁目が '8' でない | 端末の店所コード |

到着スキャン用の店コード（到着予定店として表示しない）：1981、1982、1381、2981、1680、2780、1781、1880（2006/10/02 追加）、3380、2082、2083、2084、2085。

3. 到着店所コードで店所マスター（VPTENMS）を読み、到着店所名に店所略名（漢字）を表示する（なければ空白）。

### 4.5 表示の編集と照会OK時の処理

1. 表示の編集（DISPLAY_SUB_RTN_LVL1）
   - 指令書NO・送付書NO：OK・未入力なら入力不可、エラー（関連エラーを含む）なら入力可・赤でカーソルを置く。
   - エラーなら 5章のメッセージとエラーコード 'ERR 1' をセットし、TSキューを書いて、メッセージ・エラーコードを赤にして画面のデータ部分を送信し（カーソル指定）、BV80 で待機する。
   - OK なら、メッセージ・エラーコードを空白にする。
2. 照会OK時の処理（OK_DATA_PROCESS_SUB_RTN）

| 項目 | 設定 |
|---|---|
| 委託票NO・委託会社コード・扱い店所コード | 入力可・黄色。委託票NO にカーソル |
| 到着予定年・月・日 | 入力可（数字）。送付書マスターの到着予定年月日を表示 |
| 到着予定時・分 | 入力可・黄色 |
| 印刷区分 | 属性に文字 '_' をセット（7章 5）。値は '1' |
| 印刷装置 | 入力不可（2014/07/14 に入力可・黄色から変更） |
| 必須の区分 | FLGX(3)・FLGX(4)・FLGX(5)・FLGX(9)・FLGX(10) を '1'（BV81 の番号で委託票NO・委託会社コード・扱い店所コード・到着予定時・分） |
| 通信領域 | COMM_ITEM_SO に指令書ＮＯ、COMM_ITEM_SF に送付書ＮＯ をセット |

3. TSキューに書き、戻り先画面のスタックの最上位が「MPBV800／BV80」でなければ積み（最大5件）、メッセージ・エラーコードをターコイズにして画面を送信し（画面は消去しない、カーソル指定）、BV81 で待機する。

### 4.6 ファンクションキー・例外処理

| キー・条件 | 処理 |
|---|---|
| PF2 | 画面をクリアし、TSキューを削除して、システム日付・時刻をセットした空の MPBV800 を画面を消去して送信する。BV80 で待機 |
| PF3 | TSキューを削除し、戻り先画面のスタックから一つ前の画面を決める。スタックの最上位が MPBV800 以外ならその画面、MPBV800 ならその一つ下の画面（スタックが空、または下がなければ終了画面）。共通ヘッダ画面（MPDM010）に日時をセットして送信し、戻り先の画面をデータなしで送信して、そのトランザクションで待機 |
| PF4 | TSキューを削除し、スタックの1件目が MPBV800 以外ならその画面（スタックを全件消去）、それ以外（スタックが空を含む）は終了画面 |
| CLEAR | TSキューを削除し、終了画面（ELEPHAN）を表示して終了 |
| その他のキー | 画面のデータ部分を再送信し、BV81 で待機 |
| 画面データなし・レコードなし・ファイルの終わり | TSキューの読込みから処理を続ける（4.2） |

### 4.7 システム日付・時刻の設定（TIMESET_SUB_RTN）

現在の日時を `YY/MM/DD`・`HH:MM:SS` に編集して日付・時刻欄にセットする（入力不可・変更フラグオン）。

---

## 5. メッセージ一覧

| No | エラーコード | メッセージ | 表示するとき |
|---|---|---|---|
| 1 | ERR 1 | エラー項目あり，再入力して下さい | 指令書ＮＯ・送付書ＮＯ のエラー |
| 2 | ERR 1 | 送付書未登録、出発入力後実行して下さい。 | DDP の送付書マスターになく、センター照会でエラー（通信エラーを含む） |
| 3 | ERR 1 | 送付書到着入力済み？　委託入力をする場合は直配追加入力より。 | 送付書のデータ区分が 1 でない |
| 4 | ERR 1 | 送付書の運行車区分が不一致です。 | （現在は表示されない。7章 3） |
| 5 | ASYSB | 回線が混雑しています！！　実行キーをもう一度押して下さい | センター接続の回線混雑 |
| 6 | （空白） | （空白） | 照会OK |

---

## 6. 画面遷移

```mermaid
flowchart LR
    MENU[メニュー] --> BV80[BV80<br/>本プログラム]
    BV80 -- 実行（エラー） --> BV80
    BV80 -- 実行（照会OK） --> BV81[BV81<br/>BV18100P]
    BV80 -- PF2 --> BV80
    BV80 -- PF3 --> PREV[一つ前の画面]
    BV80 -- PF4 --> MAIN[メインメニュー]
    BV80 -- CLEAR --> END[ELEPHAN 終了]
    BV80 -- その他のキー --> BV81
```

---

## 7. 補足・留意事項

1. **センターから取った送付書を DDP に登録する**：DDP の送付書マスターにない送付書は、センターの送付書送り状ＮＯマスターの情報で DDP の送付書マスターにレコードを追加する（照会だけの画面だが、送付書マスターに書き込む）。追加の結果は判定しない。
2. **通信エラーのメッセージが表示されない**：センター照会の通信エラー（回線混雑を除く）では、作業域に通信エラーのメッセージ・エラーコードをセットするが、表示の編集で「送付書未登録、出発入力後実行して下さい。」「ERR 1」に置き換わるため、通信エラーの内容は表示されない。
3. **運行車区分のチェックを外している**：運行車区分（01・02 のみ OK）のチェックは 1996/01/06 に削除されている（ソースにコメントで残っている）。そのため「送付書の運行車区分が不一致です。」は表示されない。
4. **データ区分 0 の扱い**：データ区分が 0 の場合は、ソースのコメントでは「通常到着入力済み？」として扱い、委託入力は直配追加入力から行うようメッセージを出す。センターから取った送付書はデータ区分が常に 1 のため、このエラーになるのは DDP の送付書マスターにあった送付書だけ。
5. **印刷区分の属性**：照会OK 時に、印刷区分の属性に文字 '_'（アンダースコア）をセットしている。標準の属性値ではない。
6. **その他のキーの待機先**：実行・PF2・PF3・PF4・CLEAR 以外のキーでは、照会前でも BV81 で待機する。照会前にこれらのキーを押すと、次の実行キーは BV18100P が処理することになる。
7. **送付書ＮＯ のＮＯ帯チェックなし**：送付書ＮＯ はチェックデジットだけを確認し、ＮＯ帯（番号の範囲）は確認しない。
8. **PF2 の表示**：PF2 では共通ヘッダ画面（MPDM010）を送らず、MPBV800 だけを画面を消去して送信する。
9. **センターの照会条件**（BV28000P）：センターは、運行指令マスターの送付書の一覧に送付書ＮＯ があり、送付書送り状ＮＯマスターにも送付書がある場合だけ正常を返す。
