# プログラム仕様書　BV18200P（他社直卸し中継渡し入力（委託票）　委託明細の作成依頼）

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

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BV18200P（手続き名：BV18200） |
| プログラム名称 | 他社直卸し中継渡し入力（委託票）委託明細の作成依頼（ソースの冒頭コメントは空欄。処理内容から命名） |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（CICS 疑似会話型） |
| 動作環境 | SV（DDP 側） |
| トランザクションID | BV82 |
| パターンID | PPOD426P（1987/05/01。コメントでは PPOD156P）、業務 BXOKRJ00 |
| 使用画面（マップ） | MPBV800（他社直卸し中継渡し入力（委託票））、MPDM010（共通ヘッダ画面）、ELEPHAN（終了画面） |
| 前の処理 | BV81（BV18100P）。登録OK で「登録ＯＫ、ＥＮＴＥＲを押せ。」を表示し、BV82 で待機している |
| 次の処理 | 実行キー → BV18300P に XCTL（制御を渡す）。あわせてトランザクション BS27 を START（委託明細の作成。解析資料の Link XCTL 一覧では BS12700P） |
| 参照ファイル | VPSOHFU（ＤＤＰ 送付書マスター）参照のみ |
| 一時記憶 | TSキュー：本機能のキュー（「端末ID＋'BV80'」）を読んで削除。「端末ID＋'CHKP'」「端末ID＋'PR02'」を確認（PR02 は削除） |

### 1.1 機能概要

BV18100P で委託票を登録した後の実行キーを受け、委託明細の作成（印刷情報）を別トランザクション（BS27）に依頼してから、次のプログラム BV18300P に制御を渡す。

1. TSキューを読み、送付書マスターを読む。
2. 通信領域に送付書ＮＯ・委託票ＮＯ・印刷装置などの受渡し項目と、委託明細票の印刷情報をセットする。
3. 前回の明細作成が終わっているかを確認し、終わっていればトランザクション BS27 を START する。
4. BV18300P に XCTL する。

```mermaid
flowchart LR
    BV81[BV81<br/>BV18100P 登録] -- 登録OK --> BV82[BV82<br/>本プログラム]
    BV82 -- START --> BS27[[BS27<br/>委託明細の作成]]
    BV82 -- XCTL --> BV18300P[BV18300P]
    BV82 -- PF3 --> BV80[BV80 初期画面]
```

---

## 2. 画面仕様

### 2.1 受信する画面（MPBV800）

画面レイアウト・項目は BV18000P_仕様書.md の 2.1・2.2 と同じ。本プログラムでは画面の入力値は使わない（TSキューに保存した値を使う）。前回の明細作成が未完了の場合だけ、エラーメッセージ欄にメッセージを表示する（4.3）。

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

| キー | 機能 | 処理概要 |
|---|---|---|
| 実行（Enter） | 継続 | 委託明細の作成を依頼し、BV18300P に制御を渡す（4.2） |
| PF3 | 取消（初期画面） | TSキューを削除し、共通ヘッダ画面（MPDM010）に日時をセットして送信し、空の MPBV800 を表示する。BV80（照会）で待機 |
| PF4 | 戻り | TSキューを削除し、スタックの1件目が MPBV800 以外ならその画面（スタックを全件消去）、それ以外（スタックが空を含む）は終了画面 |
| CLEAR | 強制終了 | TSキューを削除し、終了画面（ELEPHAN）を表示して終了 |
| 上記以外（PF2 を含む） | 再表示 | 画面のデータ部分を再送信し、BV82 で待機 |

---

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

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

本プログラムでは、通信領域を次のように定義している（BV18000P・BV18100P とはユーザー受渡しエリアの定義が違う）。

| 項目ID | 型 | 本プログラムでの用途 |
|---|---|---|
| TSQ_ID・TSQ_LENGTH | | 本機能の TSキューの名前・長さ |
| COMM_TEN_CODE | 数字(4) | 端末の店所コード |
| COMM_PRTON_TERFID | 文字(4) | 委託明細票の印刷情報：端末ＩＤ（EIBTRMID） |
| COMM_PRTON_TERTID | 文字(4) | 同：印刷先の端末ＩＤ（印刷装置） |
| COMM_PRTON_OKFLG | 文字(1) | 同：OK フラグ。常に '0'（2014/07/14 変更） |
| COMM_PRTON_DATE | 文字(6) | 同：年月日。送付書マスターの到着年月日（KSHSTYMD） |
| COMM_PRTON_IDENT | 文字(20) | 同：識別。扱い店所コード＋委託票ＮＯ＋'ITAKU001' |
| COMM_PRTON_NUMB | 文字(6) | 同：番号。'000000' |
| PRINTER_ID | 文字(4) | 印刷装置 |
| COMM_ITEM_S1・COMM_ITEM_S2 | 数字(8) | 送付書ＮＯ |
| COMM_ITEM_S3 | 数字(2) | 画面区分（BV80GKBN）が '14' なら 80、それ以外は 90 |
| COMM_ITEM_S4・COMM_ITEM_S5 | 数字(1)・文字(4) | 0・空白 |
| COMM_ITEM_I1 | 数字(8) | 委託票ＮＯ |
| COMM_ITEM_I2 | 数字(8) | 送付書ＮＯ |
| COMM_ITEM_I3 | 数字(1) | 印刷区分：1 |
| COMM_ITEM_I4 | 文字(4) | 印刷装置 |
| COMM_ITEM_I5 | 数字(6) | 稼働年月日：到着予定年・月・日 |
| COMM_ITEM_I6 | 数字(4) | 端末の店所コード（ソースのコメントは「扱い店所」） |
| CRT_BACK_KOSU／CRT_BACK_DATA(5) | | 戻り先画面のスタック（PF4） |

### 3.2 TSキュー

| キュー名 | 用途 |
|---|---|
| 端末ID＋'BV80'（TSQ_ID） | 本機能の TSキュー（BV18000P と同じ形式）。読んで削除する。書き戻さない |
| 端末ID＋'CHKP' | 前回の明細作成の処理中を示すキュー。1件目が読めたら未完了とする |
| 端末ID＋'PR02' | 同上。読めなければ削除してから、REQID として BS27 を START する |

---

## 4. 処理仕様

### 4.1 処理の流れ

```mermaid
flowchart TD
    S([開始]) --> AID{押されたキー}
    AID -- CLEAR --> CLR[TSキュー削除<br/>終了画面]
    AID -- PFキー --> PF[ファンクションキー処理 2.2]
    AID -- 実行 --> RCV[MPBV800 を受信<br/>TSキューを読んで削除]
    RCV -- TSキューなし・画面データなし --> CLR
    RCV --> SO[送付書マスターを読む<br/>通信領域を編集]
    SO -- 読めない --> X
    SO -- 読めた --> PR[印刷情報をセット]
    PR --> CK{CHKP・PR02<br/>キューがある}
    CK -- ある --> WAIT[前回明細作成処理未完了<br/>画面を受信して再確認] --> CK
    CK -- ない --> ST[BS27 を START]
    ST --> X[BV18300P に XCTL]
```

### 4.2 通信領域の編集と委託明細の作成依頼（OK_DATA_RTN）

1. 画面を受信し、TSキューを読む。キューがなければ終了処理（TSキュー削除・終了画面）へ。あれば削除する。
2. 送付書マスター（VPSOHFU）を送付書ＮＯ で読む。
3. 通信領域の受渡し項目（S1～S5・I1～I6）を 3.1 のとおりセットする（送付書マスターが読めなくてもセットする）。
4. 送付書マスターが読めなかった場合は、印刷情報のセットと BS27 の START をせずに 4.4 へ。
5. 読めた場合は、印刷装置（PRINTER_ID）と委託明細票の印刷情報（COMM_PRTON_～）をセットする。

### 4.3 前回の明細作成の確認

1. TSキュー「端末ID＋'CHKP'」の1件目を読む。読めたら、エラーメッセージ欄に「前回明細作成処理未完了！！　しばらくして実行キーを押して下さい」をセットして画面のデータ部分を送信し、画面を受信して（実行キーを待って）もう一度確認する。
2. TSキュー「端末ID＋'PR02'」の1件目を読む。読めたら 1 と同じく待って確認し直す。
3. どちらもなければ、「端末ID＋'PR02'」を削除し、トランザクション BS27 を START する（REQID は「端末ID＋'PR02'」、データは通信領域）。

### 4.4 次のプログラムへの切替え

BV18300P に XCTL する（通信領域を渡す）。

---

## 5. メッセージ一覧

| No | エラーコード | メッセージ | 表示するとき |
|---|---|---|---|
| 1 | ― | 前回明細作成処理未完了！！　しばらくして実行キーを押して下さい | 前回の明細作成のキュー（CHKP・PR02）が残っている |

---

## 6. 画面遷移

```mermaid
flowchart LR
    BV81[BV81 登録] --> BV82[BV82<br/>本プログラム]
    BV82 -- 実行 --> BV18300P[BV18300P<br/>XCTL]
    BV82 -- PF3 --> BV80[BV80 初期画面]
    BV82 -- PF4 --> MAIN[メインメニュー]
    BV82 -- その他 --> BV82
    BV82 -- CLEAR・TSキューなし --> END[ELEPHAN 終了]
```

---

## 7. 補足・留意事項

1. **前回処理の確認中は画面を待ち続ける**：CHKP・PR02 のキューが残っている間は、実行キーを押すたびに確認を繰り返す。このとき押したキーの種類は判定しない（RECEIVE MAP で受信するだけ）。
2. **印刷の実行処理は無効**：印刷装置の確認（SL11100P の LINK）と、その結果による OK フラグの設定はコメントアウトされており、OK フラグは常に '0'（2014/07/14 変更）。PF3・PF4 の SL11200P の LINK もコメントアウトされている。
3. **本機能の TSキューを書き戻さない**：TSキュー（端末ID＋'BV80'）は削除したまま BV18300P に制御を渡す。BV18300P は通信領域の受渡し項目を使う。
4. **送付書マスターが読めない場合**：通信領域の受渡し項目はセットするが、委託明細の作成（BS27）は依頼せずに BV18300P に進む。メッセージは出さない。
5. **PF キーの割当て**：PF3 は初期画面（BV80）に戻る「取消」の動き（ソースのコメントは「終了」）で、PF2 は処理がなく再表示になる。PF3 で一つ前の画面に戻る動きはない。
6. **COMM_ITEM_I6 の値**：コメントは「扱い店所」だが、セットするのは端末の店所コード。扱い店所コードは印刷情報の識別（COMM_PRTON_IDENT）の先頭に入る。
