# プログラム仕様書　BV18300P（他社直卸し中継渡し入力（委託票）　他社委託伝票入力の初期表示）

| 項目 | 内容 |
|---|---|
| システムID | BV |
| 参考資料 | ・現行ソース BV18300P.pl1<br/>・現行の解析資料 BV0190_到着入力（他社直卸中継渡し）.xlsx（シート「資産一覧」「Link XCTL 一覧」「MPBS330」「レコードフォーマット」「SRC_BV18300P」） |
| 項目名の出典 | 画面項目は解析資料のシート「MPBS330」の日本語名、マスター・TSキューの項目はシート「レコードフォーマット」の日本語名称とソースのコメント |

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BV18300P（手続き名：BV18300） |
| プログラム名称 | 他社直卸し中継渡し入力（委託票）他社委託伝票入力の初期表示（ソースの冒頭コメントは「他社委託伝票の入力画面を選択し、制御をそれぞれの入力画面プログラムに渡す。」） |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（CICS。BV18200P から XCTL で起動される） |
| 動作環境 | SV（DDP 側） |
| トランザクションID | BV82 のまま（XCTL のため、トランザクションは変わらない） |
| パターンID | PPOD450P、業務 BXOKRJ00 |
| 使用画面（マップ） | MPBS330（他社委託伝票入力）、MPDM010（共通ヘッダ画面）、ELEPHAN（終了画面） |
| 前の処理 | BV18200P（BV82）から XCTL |
| 次の処理 | 委託票ＮＯ が集配票マスターにある → MPBS330 を表示し BV84（BV18400P：他社委託伝票の入力）で待機。ない → 一つ前の画面 |
| センター照会 | SYSID 'CIC1'、プロセス 'B83V'（BV28300P：送付書の送り状ＮＯ の照会） |
| 参照ファイル | VPSHUHA（ＤＤＰ 集配票マスター）、VPTENMS（ＤＤＰ 店所マスター）、VPUNKEI（ＤＤＰ 運賃計算荷主マスター（１））。いずれも参照のみ |
| 一時記憶 | TSキュー「端末ID＋'BV83'」（送り状ＮＯ の一覧）を書く。委託票ＮＯ がない場合は「端末ID＋'PR02'」（他社委託明細印刷ログ TSBSPRLG）に印刷終了レコードを書く |

### 1.1 機能概要

委託票の登録（BV18100P）と委託明細の作成依頼（BV18200P）の後、他社委託伝票の入力画面（MPBS330）を表示する。

1. 委託票ＮＯ で集配票マスターを読み、委託年月日・委託会社などを取得する。
2. センター（B83V）に送付書ＮＯ を送り、送付書に含まれる送り状ＮＯ の一覧を受け取って TSキューに保存する。
3. MPBS330 に委託票の内容と、送り状ＮＯ（最初の40件）を表示し、BV84 で待機する。

```mermaid
flowchart LR
    BV82[BV18200P<br/>BV82] -- XCTL --> P[本プログラム]
    P --> SHU[(VPSHUHA<br/>集配票マスター)]
    P <-- APPC B83V --> C83[(センター<br/>BV28300P)]
    P --> TS[(TSキュー<br/>端末ID＋BV83)]
    P -- MPBS330 表示 --> BV84[BV84<br/>BV18400P 他社委託伝票入力]
```

---

## 2. 画面仕様（MPBS330：他社委託伝票入力）

画面レイアウトは BV18400P_仕様書.md の 2.0 を参照（画面イメージより）。

### 2.1 本プログラムでセットする項目

| 項目ID | 項目名 | 属性・桁 | セットする値 | 属性 |
|---|---|---|---|---|
| BS33011・BS33021 | システム日付・システム時刻 | 文字 8・8 | 共通ヘッダ画面の日時（4.4） | |
| BS33031 | 委託票ＮＯ | 8 | 委託票ＮＯ | 入力不可・変更フラグオン |
| BS33032～BS33034 | 委託年月日　年・月・日 | 2×3 | 集配票マスターの稼動年月日 | 同上 |
| BS33041 | 委託先コード | 7 | 集配票マスターの傭車会社コード（委託会社） | 同上 |
| BS33042 | 委託店所コード | 4 | 端末の店所コード | 同上 |
| BS33043 | 委託店所名 | 20 | 端末の店所コードの店所略名（漢字） | 同上 |
| BS33051 | 委託先名 | 20 | 運賃計算荷主マスター（１）の略名（KNTNRGNM） | 同上 |
| F007003～F014069 | 送り状№（頭５）・送り状№（後６）（８行×５列） | 数字 5・6 | TSキューの送り状ＮＯ（11桁）の頭5桁・後6桁。0 の欄は何もセットしない | 送り状ＮＯ がある欄は入力可（数字）・黄色 |

カーソルは送り状№（頭５）１－１ に置く。

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

本プログラムは XCTL で起動され、画面を受信しない。キーの処理は次の BV18400P が行う。

---

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

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

ユーザー受渡しエリアを次のように定義している（BV18200P がセットした値）。

| 項目ID | 型 | 内容（BV18200P での名前） | 本プログラムでの用途 |
|---|---|---|---|
| CMUSER_SYUNO1 | 数字(8) | 送付書ＮＯ（COMM_ITEM_S1） | センター照会のキー |
| CMUSER_SYUNO2 | 数字(8) | 送付書ＮＯ（COMM_ITEM_S2） | 印刷終了レコードの集配票ＮＯ |
| CMUSER_DATAID | 数字(2) | データＩＤ 80・90（COMM_ITEM_S3） | 使用しない |
| CMUSER_PRNTKB・CMUSER_PRUNIT | 数字(1)・文字(4) | 0・空白（COMM_ITEM_S4・S5） | 使用しない |
| CMUSER_SHUNO1 | 数字(8) | 委託票ＮＯ（COMM_ITEM_I1） | 集配票マスターのキー |
| CMUSER_SHUNO2 | 数字(8) | 送付書ＮＯ（COMM_ITEM_I2） | 使用しない |
| CMUSER_PRINKB | 数字(1) | 印刷区分 1（COMM_ITEM_I3） | 1 なら委託票ＮＯ がないときに印刷終了レコードを書く |
| CMUSER_PPUNIT | 文字(4) | 印刷装置（COMM_ITEM_I4） | 使用しない |
| CMUSER_KDDATE | 数字(6) | 稼働年月日（COMM_ITEM_I5） | 集配票マスターの稼動年月日で上書き |
| CMUSER_KDTENC | 数字(4) | 端末の店所コード（COMM_ITEM_I6） | 集配票マスターの稼働店所コードで上書き |
| COMM_TEN_CODE | 数字(4) | 端末の店所コード | 委託店所コード、印刷終了レコードの店所コード |
| COMM_ITEM_NO | 2進(15) | | 1 をセット |
| CRT_BACK_KOSU／CRT_BACK_DATA(5) | | 戻り先画面のスタック | 委託票ＮＯ がない場合の戻り先 |

### 3.2 センター照会（B83V：BV28300P）

| 項目 | 内容 |
|---|---|
| 送信（12バイト） | トランザクションID 'B83V'（4）＋ 送付書ＮＯ（B83VSFNO、8） |
| 受信（7068バイト） | エラーフラグ（1）＋エラーコード（4）＋ 送付書送り状ＮＯマスター（SOHFUSNO）のレコード |
| 使う項目 | 送り状ＮＯ（VSHSOKNO(n)）、送り状件数（VSHSOKCN） |

### 3.3 TSキュー「端末ID＋'BV83'」

送り状ＮＯ（11桁）を8行×5列＝40件ずつ1アイテムにして書く（TS_KEY_AREA）。送り状件数が40件を超える場合は複数アイテムになる。BV18400P が画面の改ページなどに使う。

### 3.4 印刷終了レコード（TSキュー「端末ID＋'PR02'」：他社委託明細印刷ログ TSBSPRLG）

委託票ＮＯ が集配票マスターにない場合で、印刷区分が 1 のときに書く。

| 項目ID | 内容（ソースのコメント） | セットする値 |
|---|---|---|
| TSBSITNO | 委託票ＮＯ | 委託票ＮＯ |
| TSBSSFNO | 集配票ＮＯ | 送付書ＮＯ（CMUSER_SYUNO2） |
| TSBSTNCD | 店所コード | 端末の店所コード |
| TSBSKYMD | 年月日 | 集配票マスターの稼動年月日（7章 3） |
| TSBSPRKB | 明細区分 | 2（委託） |
| TSBSSYGO | 車号 | 集配票マスターの社番・車号の下4桁（7章 3） |
| TSSBOKKN | 送り状件数 | 1 |
| TSBSOKNO(1) | 送り状ＮＯ | 99999999999 |

---

## 4. 処理仕様

### 4.1 処理の流れ

```mermaid
flowchart TD
    S([開始 XCTL]) --> R1[集配票マスターを<br/>委託票ＮＯで読む]
    R1 -- ない --> PRT{印刷区分 ＝ 1}
    PRT -- はい --> PL[印刷終了レコードを<br/>PR02 に書く]
    PRT -- いいえ --> BACK
    PL --> BACK[一つ前の画面を表示]
    R1 -- ある --> M[店所名・委託先名を取得]
    M --> INQ[センター照会 B83V 4.3]
    INQ --> DSP[MPBS330 を表示 4.4]
    DSP --> W84([BV84 で待機])
```

### 4.2 委託票の読込み（OK_DATA_PROCESS_SUB_RTN）

1. 集配票マスター（VPSHUHA）を委託票ＮＯ で読む。あれば次をセットする。
   - 稼動年月日（VGJSKYMD）、稼働店所コード（VGJSKTCD）、傭車会社コード（VGJSYOCD：委託会社）
   - 稼働店所コードの店所略名（漢字）、委託会社の運賃計算荷主マスター（１）の略名（キー：委託会社コード＋'00000001'）
2. ない場合は、印刷区分が 1 なら印刷終了レコードを書き（3.4）、戻り先画面のスタックから一つ前の画面を決めて（最上位が MPBV800 以外ならその画面、MPBV800 ならその一つ下。スタックが空、または下がなければ終了画面）、共通ヘッダ画面と戻り先の画面をデータなしで送信して、そのトランザクションで待機する。メッセージは出さない。
3. ある場合は、端末の店所コードで店所マスターを、委託会社コード＋'00000001' で運賃計算荷主マスター（１）を読み直す（委託店所名・委託先名に使う）。通信領域の稼働年月日・稼働店所に集配票マスターの値をセットする。

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

1. センター（CIC1 の B83V）に送付書ＮＯ を送り、送付書送り状ＮＯマスターのレコードを受け取る。
2. 通信エラー・センターのエラー（エラーフラグ '0' 以外）・CICS のエラーは、エラーフラグを '2' にして会話を解放する。エラーメッセージ・エラーコードは作業域にセットするが表示しない（7章 2）。回線混雑（SBUSY）もやり直さずにエラーとする。
3. TSキュー「端末ID＋'BV83'」を削除する。
4. 正常なら、送り状ＮＯ を1件目から送り状件数まで、40件（8行×5列）ずつ TSキューに書く。TSキューへの書込みエラーは ABEND（コード 'AAAA'）。

### 4.4 画面の表示

1. 共通ヘッダ画面（MPDM010）に日時をセットして、画面を消去して送信する。
2. MPBS330 に 2.1 の項目をセットする。TSキュー「端末ID＋'BV83'」の1件目（最初の40件）を読み、送り状ＮＯ が 0 でない欄に頭5桁・後6桁を表示して入力可（数字）・黄色にする。
3. MPBS330 を送信し（カーソル指定）、BV84 で待機する。

---

## 5. メッセージ一覧

本プログラムで表示するメッセージはない（センター照会の通信エラーのメッセージも表示されない）。

---

## 6. 画面遷移

```mermaid
flowchart LR
    BV82[BV18200P] -- XCTL --> P[本プログラム]
    P -- 委託票あり --> BV84[BV84<br/>MPBS330 他社委託伝票入力]
    P -- 委託票なし --> PREV[一つ前の画面]
    P -- 委託票なし・戻り先なし --> END[ELEPHAN 終了]
```

---

## 7. 補足・留意事項

1. **委託票がない場合**：BV18100P で集配票マスターへの追加に失敗した場合などは、メッセージを出さずに一つ前の画面に戻る。
2. **センター照会のエラーを表示しない**：通信エラー・センターのエラーでも画面には何も表示されず、送り状ＮＯ が空の MPBS330 が表示される（TSキュー「端末ID＋'BV83'」は削除されたまま）。回線混雑でもやり直さない。
3. **印刷終了レコードの値**：印刷終了レコードは集配票マスターが読めなかった場合に書くが、年月日・車号は集配票マスターの作業域から取るため、前の値（または空）が入る。
4. **送り状ＮＯ が0件の場合**：送り状件数が 0 でも、1件目（0）を含む1アイテムを TSキューに書く。表示では 0 の欄は表示しない。
5. **ABEND**：TSキューへの書込みエラーでは ABEND（コード 'AAAA'）する。
6. **委託店所の表示**：委託店所コード・委託店所名には、集配票マスターの稼働店所（扱い店所）ではなく、端末の店所を表示する。
