# プログラム仕様書　BK10030 回送到着入力　－　BK11700P（③ 確認・登録）

| 項目 | 内容 |
|---|---|
| 機能ID・機能名 | BK10030　回送到着入力（機能仕様書：[BK10030_回送到着入力_仕様書.md](BK10030_回送到着入力_仕様書.md)） |
| システムID | BK |
| サブシステムID | BK0070 |
| サブシステム名 | 回送・域内便到着入力 |
| 参考資料 | ・現行ソース BK11700P.pl1<br/>・画面設計書「BK0070_回送・域内便到着入力.xlsx」（Ver.1.2023.1016.3）：MPBK150 の項目名、レコードフォーマット |
| 関連仕様書 | [BK11600P_仕様書.md](BK11600P_仕様書.md)（前の処理：到着情報の入力・検証）、[BK11500P_仕様書.md](BK11500P_仕様書.md)（次の処理：回送入力票ＮＯの照会） |

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BK11700P（手続き名：BK11700） |
| プログラム名称 | 回送到着（確認） |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（CICS 疑似会話型） |
| 動作環境 | SV（DDP 側） |
| トランザクションID | BK17 |
| パターンID | PPOD426P（1987/05/01）、生成時パターン PPOD156P、業務 BXHEAD30 |
| 使用画面（マップ） | MPBK150（回送・域内便到着入力）、MPDM010（共通ヘッダ画面）、ELEPHAN（終了画面）、戻り先画面（PF3／PF4 時に動的に決定） |
| 前の処理 | トランザクション BK16（BK11600P：到着情報の入力・検証）。確認画面を表示して BK17 で待機している |
| 次の処理 | 実行キー：トランザクション BK15（BK11500P：次の回送入力票ＮＯの照会）／PF3・PF4：戻り先の画面 |
| 参照ファイル | VPTENMS（ＤＤＰ　店所マスター）、VPMORTR（ＤＤＰ　車両マスター） |
| 更新ファイル | VPKAISO（ＤＤＰ　回送マスター）：照会元がＤＤＰの場合のみ更新 |
| 出力 | TDキュー SYUS：発送鑑データ（SSS21、レコードＩＤ 230）、到着鑑データ（SSS13、レコードＩＤ 130）。各384バイト |
| 一時記憶 | TSキュー（キュー名・長さは BK11500P が通信領域に設定した値。端末ID＋'BK15'、280バイト） |

### 1.1 機能概要

回送到着入力の確認画面で、利用者がキーを押したときに動く。

1. 実行キー・PF3・PF4 の場合は、到着情報を登録する。
   - 照会元がＤＤＰ回送マスターなら、ＤＤＰ回送マスターに到着情報を書き込む。
   - 発送鑑データと到着鑑データを集信データ（TDキュー SYUS）に出力する。
2. 登録後、実行キーなら空の画面を表示して次の回送入力票ＮＯの照会（BK15）に戻る。PF3・PF4 なら戻り先の画面に移る。
3. PF2（取消）・CLEAR の場合は登録しない。

```mermaid
flowchart LR
    BK16[BK16<br/>BK11600P<br/>確認画面を表示] --> BK17[BK17<br/>本プログラム<br/>確認・登録]
    BK17 -- 実行（登録） --> BK15[BK15<br/>BK11500P<br/>次の回送入力票NO]
    BK17 -- PF3・PF4（登録） --> BACK[戻り先の画面]
    BK17 -- PF2（登録しない） --> BK15
    BK17 -. 更新 .-> KAI[(VPKAISO<br/>ＤＤＰ回送マスター)]
    BK17 -. 出力 .-> SYUS[(TDキュー SYUS<br/>発送鑑・到着鑑)]
```

---

## 2. 画面仕様（MPBK150）

### 2.1 画面

画面は BK11500P と同じ MPBK150（[BK11500P_仕様書.md](BK11500P_仕様書.md) の 2.1 参照）。前の処理（BK11600P）が表示した確認画面（全項目が入力不可）の状態で受け付ける。

本プログラムは画面から値を受け取らず、TSキューの値を使って登録する。画面に設定するのはシステム年月日・時分秒だけ（再表示時）。

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

| キー | 機能 | 処理概要 |
|---|---|---|
| 実行（Enter） | 継続 | 登録し、空の MPBK150 を表示して BK15 で待機 |
| PF2 | 取消 | 登録せず、TSキューを削除して空の MPBK150 を表示し、BK15 で待機 |
| PF3 | 終了 | **登録してから**、一つ前の画面（サブメニュー）に戻る |
| PF4 | 戻り | **登録してから**、メインメニューに戻る |
| CLEAR | 強制終了 | 登録せず、TSキューを削除して終了画面（ELEPHAN）を表示して終了 |
| 上記以外 | 再表示 | 画面のデータ部分を再表示し、BK17 で待機 |

PF3・PF4 は、ソースのコメントにも「ＰＦ３、ＰＦ４のとき回送マスター更新及び集信ログに書き」とあり、登録してから戻る仕様になっている。

---

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

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

| 項目ID | 型 | 本プログラムでの用途 |
|---|---|---|
| CRT_BACK_KOSU／CRT_BACK_DATA(5) | | 戻り先画面のスタック（PF3・PF4） |
| TSQ_LENGTH | 2進(15) | TSキューの長さ（BK11500P が 280 を設定） |
| TSQ_ID | 文字(8) | TSキュー名（BK11500P が端末ID＋'BK15' を設定） |
| XC_RTNCD | 2進(31) | 戻りコード（作業用） |
| COMM_TEN_CODE | 数字(4) | 事業所コード（店所コード）。集信データの入力店所コード |
| COMM_TEN_ADRCD | 数字(11) | 事業所の所在地コード。発送鑑データの着地コード |
| COMM_ITEM_DDP | 文字(2) | 照会元（'1'：ＤＤＰ回送マスター、'2'：センター）。'1' の場合だけＤＤＰ回送マスターを更新 |

### 3.2 TSキュー（CHK_DSP_WORK：280バイト）

レイアウトは BK11500P と同じ（[BK11500P_仕様書.md](BK11500P_仕様書.md) の 3.2 参照）。本プログラムは読み込んで削除するだけで、書き戻さない。登録に使う項目：

| 項目ID | 項目名 |
|---|---|
| BK15031B | 回送入力票ＮＯ |
| BK15041B | 発店コード |
| BK15051B～BK15055B | 発送年・発送月・発送日・発送時・発送分 |
| BK15061B | 入力区分 |
| BK15081B | 到着店コード |
| BK15091B～BK15095B | 到着年・到着月・到着日・到着時・到着分 |
| BK15121B | 社番 |
| BK15131B・BK15132B | 乗務員コード１・２ |
| BK15141B・BK15151B | 指示キロメートル・出発時・到着時 |
| BK15KIKM | 回送粁程（BK11600P が計算した走行キロメートル） |

### 3.3 参照ファイル

共通の読込みルーチン（DPVSSRH）で読む。戻り値 'O'：正常、'N'：該当なし、'E'：その他エラー。

| 識別 | データセット | 名称 | キー | 取得する項目 |
|---|---|---|---|---|
| TE | VPTENMS | ＤＤＰ　店所マスター（DDPTENMS） | 発店コード | VETNADCD（店所所在地コード） |
| MO | VPMORTR | ＤＤＰ　車両マスター（DDPMORTR） | 社番 | VESYHYTN（最大積載量） |

### 3.4 更新ファイル：VPKAISO（ＤＤＰ　回送マスター、DDPKAISO）

照会元がＤＤＰ（COMM_ITEM_DDP ＝ '1'）の場合だけ、回送入力票ＮＯをキーに更新用に読み、次の項目を書き換える。

| 項目ID | 項目名 | 設定値 |
|---|---|---|
| KSKJKINO | 回送入力票ＮＯ | 回送入力票ＮＯ |
| KSKJDTKB | データ区分（1：出発、2：到着のみ、3：両方） | 2 ならそのまま。それ以外は 3 |
| KSKJCTCD | 回送着店所コード | 到着店コード |
| KSKJTCDT | 回送到着（年月日時分） | 到着年・月・日・時・分（YYMMDDHHMM） |
| KSKJKIKM | 回送粁程 | 回送粁程（BK15KIKM） |
| KSKJSJKD | 指示粁　出発時 | 指示キロメートル・出発時 |
| KSKJSJKT | 指示粁　帰着時 | 指示キロメートル・到着時 |

その他の項目は変更しない。

### 3.5 出力：集信データ（TDキュー SYUS）

#### 発送鑑データ（集信Ｒ２　発送鑑データ、SSS21、384バイト）

| 項目ID | 項目名 | 設定値 |
|---|---|---|
| SS21TNCD | 入力店所コード | 事業所コード（COMM_TEN_CODE） |
| SS21KEKB | 継続区分 | 0 |
| SS21REID | レコードＩＤ | 230 |
| SS21LENG | レコード長 | 384 |
| SS21ENYY～SS21ENDD | 入力　年・月・日 | 出力時点のシステム日付 |
| SS21ENHH～SS21ENSS | 入力　時・分・秒 | 出力時点のシステム時刻 |
| SS21SINO | 指令書ＮＯ | 0 |
| SS21SONO | 送付書ＮＯ | 回送入力票ＮＯ |
| SS21TRIK | 取消区分（ソースのコメントでは「訂正区分」） | 1 |
| SS21HATN | 出発　店所コード | 発店コード |
| SS21STYY～SS21STMI | 出発　年・月・日・時・分 | 発送年・月・日・時・分 |
| SS21TYYY～SS21TYDD | 出発　到着予定年月日 | 0 |
| SS21HACH | 発地コード | 発店の店所所在地コードの先頭5桁。店所マスターになければ 0 |
| SS21ORTN | 卸店コード | 到着店コード |
| SS21CCHI | 着地コード | 事業所の所在地コード（COMM_TEN_ADRCD）の先頭5桁 |
| SS21ATTN | 扱い店所コード | 到着店コード |
| SS21USKM | 輸送粁程 | 回送粁程（BK15KIKM） |
| SS21SHKB | 運行車区分 | 13 |
| SS21SBAN | 積載社番（車号） | 社番 |
| SS21HTON | 標屯 | 車両マスターの最大積載量 ÷ 1000。車両マスターになければ空 |
| SS21OWKB | ｏｗ区分 | 乗務員コード２ ＝ 0 なら 1（ワンマン）、それ以外は 2（ダブル） |
| SS21YOCD | 傭車会社コード | 0 |
| SS21KEIT | 形態 | 0 |
| SS21YORY | 定額傭車料 | 0 |
| SS21GIKN | 直集軒数 | 0 |
| SS21TUOR | 積区分 | 0 |
| SS21HOKN | 一車保険料 | 0 |
| SS21FUGO | 符合 | '0' |
| SS21ROGA | 増減重量 | 0 |
| SS21KNKB | 入力区分 | 入力区分 |
| SS21KOKU | 航空会社区分 | 0 |
| SS21KORO | 航空航路区分 | 0 |
| SS21STAT | 指示粁　出発時 | 指示キロメートル・出発時 |
| SS21KCHA | 指示粁　帰着時 | 指示キロメートル・到着時 |
| SS21CODA・SS21CODB | 従業員コードＡ・Ｂ | 乗務員コード１・２ |
| SS21TCDT | 到着年月日時分 | 0 |
| SS21ORNO(1)・(2) | 行き分指令書ＮＯ１・２ | 0 |
| SS21FKNO(1)・(2) | 帰り分指令書ＮＯ１・２ | 0 |
| SS21SPAC | スペース | 空白 |

作成前に、レコード全体をクリアしている。

#### 到着鑑データ（集信Ｒ１・２　到着鑑データ、SSS13、384バイト）

| 項目ID | 項目名 | 設定値 |
|---|---|---|
| SSS3TNCD | 入力店所コード | 事業所コード（COMM_TEN_CODE） |
| SSS3KEKB | 継続区分 | 0 |
| SSS3REID | レコードＩＤ | 130 |
| SSS3LENG | レコード長 | 384 |
| SSS3ENYY～SSS3ENDD | 入力　年・月・日 | 発送鑑データと同じシステム日付 |
| SSS3ENHH～SSS3ENSS | 入力　時・分・秒 | 発送鑑データと同じシステム時刻 |
| SSS3CHTN | 到着店所コード | 到着店コード |
| SSS3KNSU | データ件数 | 1 |
| SSS3SINO | 指令書ＮＯ | 0 |
| SSS3SONO | 送付書ＮＯ（回送ＮＯ） | 回送入力票ＮＯ |
| SSS3CHYY～SSS3CHMI | 到着　年・月・日・時・分 | 到着年・月・日・時・分 |
| SSS3ORKB | 卸区分 | 0 |
| SSS3GHKN | 直配件数 | 0 |

作成前に、レコード全体をクリアしている（2件目以降の明細や委託会社コードは空）。

---

## 4. 処理仕様

### 4.1 処理の流れ

```mermaid
flowchart TD
    S([開始]) --> AID{押されたキー}
    AID -- CLEAR --> CLR[TSキュー削除<br/>終了画面で終了]
    AID -- PF2 --> P2[TSキュー削除<br/>空の画面]
    P2 --> R15a([BK15 で待機])
    AID -- その他のキー --> RD[画面のデータ部分を再表示]
    RD --> R17([BK17 で待機])
    AID -- 実行 --> RCV[MPBK150 を受信]
    AID -- PF3・PF4 --> TSQ
    RCV --> TSQ{TSキューを<br/>読めたか}
    TSQ -- キューなし --> CLR
    TSQ -- 読めた --> DEL[TSキューを削除]
    DEL --> DDP{照会元 = 'ＤＤＰ'}
    DDP -- はい --> UPD[ＤＤＰ回送マスターを更新 4.3]
    DDP -- いいえ --> OUT
    UPD --> OUT[発送鑑データ・到着鑑データを出力 4.4]
    OUT --> KEY{押されたキー}
    KEY -- 実行 --> NEW[空の画面]
    NEW --> R15b([BK15 で待機])
    KEY -- PF3 --> PREV[一つ前の画面 4.5]
    KEY -- PF4 --> MAIN[メインメニュー 4.5]
```

### 4.2 開始時の処理

1. 例外条件の分岐先を登録する（画面データなし・レコードなし・ファイルの終わり → いずれも終了処理）。
2. 押下キーの分岐先を登録する。

| キー | 分岐先 |
|---|---|
| PF3・PF4 | 画面を受信せずに、TSキューの読込み（登録処理）へ |
| CLEAR | 終了処理（4.7） |
| 実行・PF3・PF4・CLEAR 以外 | ファンクションキー処理（4.6） |
| 実行 | 画面 MPBK150 を受信して、TSキューの読込み（登録処理）へ |

3. TSキュー（通信領域の TSQ_ID・TSQ_LENGTH）を読む。
   - キューがない場合：登録せずに終了処理（4.7）を行う。
   - 読めた場合：キューを削除する。

### 4.3 ＤＤＰ回送マスターの更新

照会元（COMM_ITEM_DDP）が '1'（ＤＤＰ回送マスターから照会）の場合だけ行う。

1. 回送入力票ＮＯをキーに、ＤＤＰ回送マスター（VPKAISO）を更新用に読む。
2. 読めた場合、3.4 の項目を設定して書き換える。
3. 読めなかった場合・書換えエラーの場合は、何もせずに次の処理に進む。

照会元が '2'（センターから照会）の場合は、ＤＤＰ回送マスターの更新も新規登録も行わない。

### 4.4 集信データの出力（OK_DATA_RTN）

1. 発送鑑データをクリアし、3.5 のとおり編集する。
   - システム日付・時刻を取得し、入力年月日時分秒に設定する。
   - 発地コード：発店コードで店所マスターを読み、店所所在地コードの先頭5桁（なければ 0）。
   - 標屯：社番で車両マスターを読み、最大積載量 ÷ 1000（なければ空）。
2. TDキュー SYUS に発送鑑データ（384バイト）を出力する。
3. 到着鑑データをクリアし、3.5 のとおり編集する。
4. TDキュー SYUS に到着鑑データ（384バイト）を出力する。

### 4.5 登録後の画面

| キー | 処理 |
|---|---|
| 実行 | 画面をクリアし、システム年月日・時分秒を設定して、空の MPBK150 を画面を消去して送信する。トランザクション BK15 で待機（次の回送入力票ＮＯの照会） |
| PF3 | 戻り先画面のスタックから一つ前の画面を決め（下表）、共通ヘッダ画面（MPDM010）に日時を設定して送信し、戻り先の画面をデータなしで送信して、そのトランザクションで待機 |
| PF4 | スタックの1件目（メインメニュー）に戻る。表示方法は PF3 と同じ |

| PF3 の条件 | 戻り先 |
|---|---|
| スタックが空 | なし（終了画面を表示して終了） |
| 最上位が MPBK150 以外 | 最上位の画面（1件取り除く） |
| 最上位が MPBK150 で、その下がない | なし（終了画面を表示して終了） |
| 最上位が MPBK150 で、その下がある | その下の画面（2件取り除く） |

| PF4 の条件 | 戻り先 |
|---|---|
| スタックが空、または1件目が MPBK150 | なし（終了画面を表示して終了） |
| 1件目が MPBK150 以外 | 1件目の画面（スタックを全件消去） |

TSキューは登録処理の最初に削除済みのため、ここでは削除しない。

### 4.6 ファンクションキーの処理（PF2・その他）

| キー | 処理 |
|---|---|
| PF2：取消 | 画面をクリアし、TSキューを削除して、システム年月日・時分秒を設定した空の MPBK150 を画面を消去して送信する。BK15 で待機。登録は行わない |
| その他 | システム年月日・時分秒を設定し、画面のデータ部分を再送信して、BK17 で待機 |

### 4.7 終了処理・例外処理

| 発生条件 | 処理 |
|---|---|
| CLEAR キー | TSキューを削除し、終了画面（ELEPHAN）を表示して終了。登録は行わない |
| 画面データなし（MAPFAIL）・レコードなし（NOTFND）・ファイルの終わり（ENDFILE） | CLEAR キーと同じ |
| TSキューがない | CLEAR キーと同じ |

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

現在の日時を `YY/MM/DD`・`HH:MM:SS` に編集し、画面のシステム年月日（BK15011）・システム時分秒（BK15021）に設定する（入力不可・変更フラグオン）。集信データの入力年月日時分秒には、このとき取得した日時を年・月・日、時・分・秒に分けて使う。

---

## 5. メッセージ一覧

本プログラムはメッセージを設定しない。実行キーで登録した後は空の画面になり、メッセージ欄も空になる。

---

## 6. 画面遷移

```mermaid
flowchart LR
    BK16[BK16<br/>確認画面] --> BK17[BK17<br/>本プログラム]
    BK17 -- 実行（登録） --> BK15[BK15<br/>空の画面]
    BK17 -- PF2（登録しない） --> BK15
    BK17 -- PF3（登録） --> PREV[一つ前の画面]
    BK17 -- PF4（登録） --> MAIN[メインメニュー]
    BK17 -- その他 --> BK17
    BK17 -- CLEAR・例外（登録しない） --> END[ELEPHAN 終了]
```

---

## 7. 補足・留意事項

1. **PF3・PF4 でも登録される**：確認画面で PF3（終了）・PF4（戻り）を押すと、実行キーと同じく登録してから戻る。登録せずに抜けるには PF2（取消）か CLEAR を使う。
2. **センター照会の回送票はＤＤＰ回送マスターに登録されない**：照会元がセンター（'2'）の場合、ＤＤＰ回送マスターの更新も新規登録もせず、集信データだけを出力する。
3. **回送マスターの更新エラーを無視する**：ＤＤＰ回送マスターの読込み・書換えがエラーになっても、メッセージを出さずに集信データを出力する。マスターと集信データが食い違うおそれがある。
4. **集信データの出力エラーを想定していない**：TDキューへの書込みに戻りコードの判定がなく、エラー時は CICS の異常終了になる。発送鑑データだけが出力され、到着鑑データが出力されない状態も起こりうる。
5. **登録完了のメッセージがない**：実行キーで登録した後は空の画面になるだけで、登録したことを示すメッセージは表示しない。
6. **同じ回送票の再登録を防いでいない**：到着済みの回送票でも、BK15 で照会して再度登録すると、回送マスターを上書きし、集信データを再出力する。
7. **発送鑑データの着地コード**：着地コードは到着店ではなく、入力した端末の事業所の所在地コードから作る。到着店と入力店が異なる場合は、到着店の所在地と一致しない。
8. **データ区分の更新**：回送マスターのデータ区分が 1（出発）なら 3（両方）に変える。2（到着のみ）・3 はそのまま。
9. **使っていない領域**：HELP画面コントロールエリア、日付計算用の作業域（YMD・JYMD・WK_YMD1～3・WK_JDATEA/B・WK_KM など）、PF5_SW、END_MSG、CNT_MAX、TSQ_LENGTH_W 等は使っていない。
