# プログラム仕様書　BK10030 回送到着入力　－　BK11500P（① 回送入力票ＮＯの照会）

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

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BK11500P（手続き名：BK11500） |
| プログラム名称 | 回送到着入力（照会） |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（CICS 疑似会話型） |
| 動作環境 | SV（DDP 側） |
| トランザクションID | BK15 |
| パターンID | PPOD150P（1987/05/01）、業務 BXHEAD30 |
| 使用画面（マップ） | MPBK150（回送・域内便到着入力）、MPDM010（共通ヘッダ画面）、ELEPHAN（終了画面）、戻り先画面（PF3／PF4 時に動的に決定） |
| 次の処理 | トランザクション BK16（プログラム BK11600P：到着内容のチェック） |
| 参照ファイル | VPKAISO（ＤＤＰ　回送マスター）、VPTENMS（ＤＤＰ　店所マスター）、VPJYUGY（ＤＤＰ　従業員マスター） |
| センター照会 | システム CIC1 のトランザクション B15K（プログラム BK21500P）に APPC 会話で問い合わせ、センターの回送マスター（VKKAISO）を照会 |
| 使用モジュール | LSO0020（チェックディジット検証） |
| 一時記憶 | TSキュー（キュー名＝端末ID＋'BK15'、280バイト） |

### 1.1 機能概要

回送便の到着入力の1画面目。回送入力票ＮＯを入力すると、その回送便の発送時の内容を画面に表示し、到着情報（到着店・到着日時・指示粁）を入力できる状態にする。

1. 回送入力票ＮＯの形式とチェックディジットをチェックする。
2. ＤＤＰ（店所側）の回送マスターを読む。登録があれば、その内容を表示する。
3. ＤＤＰに登録がなければ、センターに照会し、センターの回送マスターの内容を表示する。
4. 回送票が取消済み、または入力区分が対象外（店所間回送・域内以外）の場合はエラーにする。
5. 正常なら、到着店・到着年月日時分・指示粁を入力可にして、次の処理（BK16）に進む。

```mermaid
flowchart LR
    MENU[メニュー] --> BK15[BK15<br/>本プログラム<br/>回送入力票NOの照会]
    BK15 -- 照会OK --> BK16[BK16<br/>BK11600P<br/>到着内容のチェック]
    BK16 --> BK17[BK17<br/>BK11700P<br/>回送マスター更新・集信]
    BK15 -. 読込 .-> DDP[(VPKAISO<br/>DDP回送マスター)]
    BK15 -. DDPになければ照会 .-> CEN[CIC1 B15K<br/>BK21500P]
    CEN -. 読込 .-> VK[(VKKAISO<br/>センター回送マスター)]
```

BK11600P は [BK11600P_仕様書.md](BK11600P_仕様書.md)、BK11700P は [BK11700P_仕様書.md](BK11700P_仕様書.md) を参照。

---

## 2. 画面仕様（MPBK150）

### 2.1 画面レイアウト

```
行
01  MPBK150        ┃ 回 送 ・ 域 内 便 到 着 入 力 ┃                  [システム年月日]
02                                                                   [システム時分秒]
03      回送入力票ＮＯ  ： [回送入力票NO]
04      発 店 コ ー ド  ： [発店][発店所名            ]
05      発 送 年月日    ： [年]年 [月]月 [日]日 [時]時 [分]分
06      入 力 区 分     ： [区]（１店所間回送　３域内）
07
08      到着店 コード   ： [到着店][到着店所名          ]
09      到 着 年月日    ： [年]年 [月]月 [日]日 [時]時 [分]分
10      社 番（自社）   ： [社番 ]
11      乗務員コード    ： [コード１][コード２]  [乗務員名１    ] [乗務員名２    ]
12
13      ＊＊ 指 示 粁 ＊＊＊
14      指示粁・出発時  ： [出発時 ]
15        〃 ・到着時   ： [到着時 ]         走行粁： [走行粁] km
   …
22  実行：継続　２：取消　３：終了　４：戻り
23  [エラーメッセージ（70桁）                                        ] [エラーコード]
```

### 2.2 画面項目一覧

「BK15」の列は本プログラムでの入出力（I：入力、O：出力、―：扱わない）。

| No | 項目ID | 項目名 | 型・桁 | BK15 | 照会OK後の状態 |
|---|---|---|---|---|---|
| 1 | BK15011（IMD） | システム年月日 | 文字 8 | O | `YY/MM/DD` |
| 2 | BK15021（IMT） | システム時分秒 | 文字 8 | O | `HH:MM:SS` |
| 3 | BK15031 | 回送入力票ＮＯ | 数字 8 | **I**（必須） | 入力不可 |
| 4 | BK15041 | 発店コード | 数字 4 | O | 表示 |
| 5 | BK15042 | 発店所名 | 文字 20 | O | 表示 |
| 6～10 | BK15051～BK15055 | 発送　年・月・日・時・分 | 数字 2×5 | O | 表示 |
| 11 | BK15061 | 入力区分 | 数字 1 | O | 表示 |
| 12 | BK15081 | 到着店コード | 数字 4 | O | **入力可**（カーソル位置） |
| 13 | BK15082 | 到着店所名 | 文字 20 | O | 表示 |
| 14～18 | BK15091～BK15095 | 到着　年・月・日・時・分 | 数字 2×5 | O | **入力可** |
| 19 | BK15121 | 社番（自社） | 数字 5 | O | 表示 |
| 20・21 | BK15131・BK15132 | 乗務員コード１・２ | 数字 6 | O | 表示 |
| 22・23 | BK15133・BK15134 | 乗務員名１・２ | 文字 14 | O | 表示 |
| 24 | BK15141 | 指示粁・出発時 | 数字 7 | O | **入力可** |
| 25 | BK15151 | 指示粁・到着時 | 数字 7 | O | **入力可** |
| 26 | BK15152 | 走行粁 | 数字 3 | O | 表示 |
| 27 | BK15231 | ＰＦキー説明 | 文字 | ― | 画面定義の固定表示 |
| 28 | BK15241 | エラーメッセージ | 文字 70 | O | |
| 29 | BK15242 | エラーコード | 文字 5 | O | |

項目名は画面設計書（MPBK150 シート）の名称。

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

| キー | 機能 | 処理概要 |
|---|---|---|
| 実行（Enter） | 継続 | 回送入力票ＮＯをチェックし、回送マスターを照会する |
| PF2 | 取消 | TSキューを削除し、空の MPBK150 を表示して BK15 で待機（入力のやり直し） |
| PF3 | 終了 | 一つ前の画面（サブメニュー）に戻る |
| PF4 | 戻り | メインメニューに戻る |
| CLEAR | 強制終了 | 終了画面（ELEPHAN）を表示して終了 |
| 上記以外 | 再表示 | 画面をそのまま再表示し、BK15 で待機 |

### 2.4 表示属性

| 状態 | 対象 | 属性 |
|---|---|---|
| 回送入力票ＮＯ　OK | BK15031 | 入力不可（DFHBMASK） |
| 回送入力票ＮＯ　エラー | BK15031 | 入力可・高輝度（DFHUNINT）、カーソル |
| 照会OK後 | 到着店コード、到着年月日時分、指示粁 出発時・到着時 | 入力可・数字のみ（DFHBMUNN）。カーソルは到着店コード |

色は設定しない（画面定義の初期値のまま）。

---

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

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

| 項目ID | 型 | 項目名・本プログラムでの用途 |
|---|---|---|
| CRT_BACK_KOSU／CRT_BACK_DATA(5) | | 戻り先画面のスタック。照会OK時に本画面（MPBK150／BK15）を積む |
| TSQ_LENGTH | 2進(15) | TSキューの長さ。280 をセット |
| TSQ_ID | 文字(8) | TSキュー名。端末ID＋'BK15' をセット（次の処理に引き継がれる） |
| XC_RTNCD | 2進(31) | 戻りコード（作業用） |
| COMM_RPOC_YMD | 数字(6) | 処理日（YYMMDD）。到着年月日の初期値に使う |
| COMM_ITEM_DDP | 文字(2) | 照会元。'1'：ＤＤＰの回送マスター、'2'：センター照会 |

その他（端末コード、店所コードなど）は使用しない。

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

キュー名は「端末ID＋'BK15'」。

| 項目ID | 型 | 内容 |
|---|---|---|
| LOOP_FLG | 文字(1) | ループフラグ |
| OKFLG | 文字(1) | 全体チェック結果（下表） |
| FLG(30)・FLGX(30) | 文字(1) | 項目ごとのチェック結果・入力状態。本プログラムでチェックするのは FLG(1)（回送入力票ＮＯ）だけ |
| BK15031B～BK15152B | | 画面項目の値（2.2 の各項目） |
| BK20DUMB | 文字(60) | 予備 |
| BK15UNKB | 数字(2) | 運行車区分（13） |
| BK15KIKM | 数字(5) | 回送粁程 |
| BK21DUMB | 文字(9) | 予備 |
| WK_TEIKBN | 文字(1) | 訂正区分（初期化時 '0'） |

OKFLG の値：

| 値 | 意味 |
|---|---|
| '0' | 初期状態 |
| '1' | 回送入力票ＮＯのエラー |
| '2' | 正常 |
| '3' | センターに登録なし、またはセンターの回送マスターの I/O エラー |
| '4' | センターとの通信エラー |
| '5' | 入力区分エラー |
| '8' | センターからの想定外の戻りコード |
| '9' | 取消済み |

### 3.3 参照ファイル

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

| 識別 | データセット | 名称 | キー | 取得する項目 |
|---|---|---|---|---|
| KA | VPKAISO | ＤＤＰ　回送マスター（DDPKAISO） | 回送入力票ＮＯ | 下表 |
| TE | VPTENMS | ＤＤＰ　店所マスター（DDPTENMS） | 店所コード | VETNSRNM（店所略名（漢字）） |
| JN | VPJYUGY | ＤＤＰ　従業員マスター（DDPJYUGY） | 従業員コード | VEJYJNM1（従業員氏名（漢字）） |

ＤＤＰ回送マスターから画面への設定：

| 画面項目 | 回送マスターの項目 |
|---|---|
| 発店コード | KSKJHTCD（回送発送店所コード） |
| 発送　年・月・日 | KSKJYMDH（回送発送年月日） |
| 発送　時・分 | KSKJHTTM（回送発時分） |
| 入力区分 | KSKJINKB（回送入力区分） |
| 到着店コード | KSKJCTCD（回送着店所コード） |
| 到着　年・月・日・時・分 | KSKJTCYM（回送着年月日）・KSKJTCTM（回送着時分）。着年月日が 0 なら処理日 |
| 社番 | KSKJSYNO（回送社番） |
| 乗務員コード１・２ | KSKJJYCA・KSKJJYCB（回送従業員コード（Ａ）・（Ｂ）） |
| 指示粁・出発時・到着時 | KSKJSJKD・KSKJSJKT（指示粁　出発時・帰着時） |
| 走行粁 | KSKJKIKM（回送粁程）の下3桁 |

判定に使う項目：KSKJDLKB（取消区分：0 通常、9 削除）、KSKJINKB（入力区分）。

### 3.4 センター照会（APPC 会話）

| 項目 | 内容 |
|---|---|
| 相手システム | CIC1 |
| 相手トランザクション | B15K（センター側プログラム BK21500P） |
| 送信データ（49バイト） | トランザクションID 'B15K' ＋ DPCEB02K（回送・航空・域内入力（ＤＤＰ～センター））。回送入力票ＮＯ（WBK2KSNO）をセットし、入力区分・指令書ＮＯ（行き・帰り）は 0 |
| 受信データ（89バイト） | エラーフラグ（1桁）＋エラーコード（4桁）＋ CEDPB15K（回送・航空・域内照会到着（ＤＤ～セン）） |

センターから返るエラーコード（BK21500P の処理。詳細は [BK21500P_仕様書.md](BK21500P_仕様書.md)）：

| コード | センター側の判定 | 本プログラムでの扱い |
|---|---|---|
| 0000 | 正常（入力区分が 1 または 3、取消されていない） | 正常 |
| 0001 | センターの回送マスターに該当なし | OKFLG '3'：回送未入力です |
| 0002 | センターの回送マスターの読込みエラー | OKFLG '3'：センターの回送マスターの I/O エラー |
| 0003 | 入力区分が 1（店所間回送）・3（域内）以外 | OKFLG '5'：入力区分エラー |
| 0009 | 取消済み（削除区分＝9） | OKFLG '9'：取消済み |
| BU02 | センター側の CICS エラー（エラーフラグ '2'） | OKFLG '8'：想定外 |
| その他 | ― | OKFLG '8'：想定外 |

センターからの受信データ（CEDPB15K）から画面への設定：

| 画面項目 | 受信データの項目 |
|---|---|
| 発店コード | UB02HTCD（発店） |
| 発送　年・月・日・時・分 | UB02SYMD（年月日）・UB02DHMM（時分） |
| 入力区分 | UB02INKB |
| 到着店コード | UB02TOCD（到着店） |
| 到着　年・月・日・時・分 | UB02CYMD（年月日）・UB02CHMM（時分）。年月日が 0 なら処理日 |
| 社番 | UB02SYAB |
| 乗務員コード１・２ | UB02JYCA・UB02JYCB |
| 指示粁・出発時・到着時 | UB02STKM・UB02TCKM |
| 走行粁 | UB02SKOM（センターで計算） |
| 運行車区分 | UB02UNKB |

### 3.5 使用モジュール

| モジュール | 引数 | 用途 |
|---|---|---|
| LSO0020 | FLD（番号）、MOD（'10'：モジュラス10、'07'：7DR）、TYPE（'C'：検証）、RESULT（'0'：正常） | 回送入力票ＮＯのチェックディジット検証 |

---

## 4. 処理仕様

### 4.1 処理の流れ

```mermaid
flowchart TD
    S([開始]) --> AID{押されたキー}
    AID -- CLEAR --> CLR[TSキュー削除<br/>終了画面]
    AID -- PF2/PF3/PF4/その他 --> PF[ファンクションキー処理<br/>4.7]
    AID -- 実行 --> RCV[MPBK150 を受信]
    RCV --> TSQ{TSキューを<br/>読めたか}
    TSQ -- キューなし --> INI[初期化 4.2]
    TSQ -- 読めた --> DEL[TSキューを削除]
    INI --> CHK[回送入力票NOのチェック 4.3]
    DEL --> CHK
    CHK --> DSP[表示の編集・メッセージ 4.6]
    DSP --> OK1{OK}
    OK1 -- いいえ --> ERR[TSキューに保存<br/>エラー表示]
    ERR --> R1([BK15 で待機])
    OK1 -- はい --> DDP{DDP回送マスターに<br/>あるか 4.4}
    DDP -- ある --> JUD{取消済み・<br/>入力区分の判定}
    DDP -- ない --> CEN[センター照会 4.5]
    CEN --> JUD2{照会結果}
    JUD -- エラー --> DSP
    JUD2 -- エラー --> DSP
    JUD -- OK --> NXT[到着項目を入力可にする<br/>TSキューに保存]
    JUD2 -- OK --> NXT
    NXT --> R2([BK16 で待機])
```

### 4.2 開始時の処理

1. 例外条件の分岐先を登録する（画面データなし・レコードなし・ファイルの終わり → いずれも TSキューの読込みから続行）。
2. 押下キーの分岐先を登録する（CLEAR → 終了処理、実行・CLEAR以外 → ファンクションキー処理）。
3. 画面 MPBK150 を受信する。
4. TSキュー名を「端末ID＋'BK15'」、長さを 280 にして読む。
   - 読めた場合：キューを削除する。
   - キューがない場合：次のように初期化する。

| 項目 | 初期値 |
|---|---|
| LOOP_FLG | '1' |
| OKFLG | '0' |
| FLG・FLGX | 1番目（回送入力票ＮＯ）だけ '1'（必須）、他は '0' |
| 画面項目の値 | 空 |
| WK_TEIKBN | '0' |

### 4.3 回送入力票ＮＯのチェック（CHECK_SUB_RTN_LVL1）

すでにOK（FLG(1)＝'2'）なら再チェックしない。未入力なら必須エラー。入力ありの場合：

| No | チェック | エラー条件 |
|---|---|---|
| 1 | 形式 | 数字以外を含む |
| 2 | 桁数 | 8桁で入力されていない |
| 3 | 値 | 0 |
| 4 | 番号の範囲 | 10000000～89999999（先頭が 1～8） |
| 5 | チェックディジット | 10000000 未満（先頭 0）はモジュラス10、90000000 以上（先頭 9）は 7DR で検証してエラー |

エラーがあれば OKFLG ＝ '1'。

### 4.4 ＤＤＰ回送マスターの照会（OK_DATA_PROCESS_SUB_RTN）

回送入力票ＮＯをキーに、ＤＤＰ回送マスター（VPKAISO）を読む。読めなかった場合（該当なし・エラーとも）は、センター照会（4.5）に進む。

読めた場合：

1. COMM_ITEM_DDP ＝ '1'、運行車区分 ＝ 13 にする。
2. 回送マスターの内容を画面とTSキューにセットする（3.3 の表）。
   - 発店所名・到着店所名：店所マスターの店所略名（漢字）。店所マスターになければ空白。
   - 到着年月日：回送着年月日が 0 の場合は処理日（COMM_RPOC_YMD）をセットし、FLGX(6)～(9) を '1' にする。次の処理 BK11600P では、この番号が到着時・到着分・指示粁 出発時・到着時に当たり、これらが必須になる。到着時分は設定しない。
   - 乗務員名１・２：従業員マスターの従業員氏名（漢字）。従業員マスターになければ、コードが 0 なら空白、111111 なら「ライナー傭車」、999999 なら「ダミーコード」、それ以外は「？？？？」。
   - 指示粁：出発時・帰着時がどちらも 0 なら設定しない。それ以外は出発時・到着時と、走行粁（回送粁程の下3桁）をセットする。
3. 回送票の状態を判定する。

| 条件 | 結果 |
|---|---|
| 取消区分 ＝ 9 | OKFLG ＝ '9'（取消済み）。回送入力票ＮＯをエラー表示 |
| 入力区分が 1（店所間回送）または 3（域内） | 正常 → 4.6 の正常時処理へ |
| 入力区分が上記以外 | OKFLG ＝ '5'（入力区分エラー）。回送入力票ＮＯをエラー表示 |

エラーの場合は表示の編集（4.6）からやり直し、エラー時の画面送信を行う。

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

1. COMM_ITEM_DDP ＝ '2' にする。
2. センター（CIC1）と APPC 会話を行う。

| 手順 | CICS コマンド | エラー時 |
|---|---|---|
| 1 | ALLOCATE SYSID('CIC1') NOQUEUE | 4.5.1 |
| 2 | CONNECT PROCESS（相手 'B15K'、SYNCLEVEL 1） | 4.5.1 |
| 3 | SEND（49バイト）INVITE WAIT | 4.5.1 |
| 4 | RECEIVE（89バイト） | 正常・EOC 以外は 4.5.1 |
| 5 | SEND（1バイト）LAST WAIT | 正常・EOC 以外は 4.5.1 |
| 6 | FREE | ― |

3. 受信したエラーコードで OKFLG を決める（3.4 の表）。
4. 正常（OKFLG ＝ '2'）なら、受信データを画面とTSキューにセットする（3.4 の表）。発店所名・到着店所名・乗務員名の取り方は 4.4 と同じ。
5. エラーなら、回送入力票ＮＯをエラー（FLG(1)＝'3'）にして、表示の編集（4.6）からやり直す。

#### 4.5.1 通信エラー時

| 発生箇所 | 条件 | エラーコード | メッセージ |
|---|---|---|---|
| ALLOCATE | SYSBUSY（回線混雑） | ASYSB | 回線が混雑しています！！　実行キーをもう一度押して下さい（※） |
| ALLOCATE | SYSIDERR | ASYSI | 照会不可能！！回線不通の可能性あり　センターに連絡して下さい |
| ALLOCATE | その他 | A9999 | 照会不可能！！サポート外ＥＲＲＯＲ　センターに連絡して下さい |
| CONNECT | TERMERR | CTERM | 照会不可能！！回線不通の可能性あり　センターに連絡して下さい |
| CONNECT | その他 | C9999 | 照会不可能！！サポート外ＥＲＲＯＲ　センターに連絡して下さい |
| SEND | TERMERR | STERM | 照会不可能！！回線不通の可能性あり　センターに連絡して下さい |
| SEND | その他 | S9999 | 照会不可能！！サポート外ＥＲＲＯＲ　センターに連絡して下さい |
| RECEIVE・最後の SEND | TERMERR | RTERM | 照会不可能！！回線不通の可能性あり　センターに連絡して下さい |
| RECEIVE・最後の SEND | LENGERR | RLENG | 照会不可能！！　ＬＥＮＧＥＲＲ |
| RECEIVE・最後の SEND | その他 | R9999 | 照会不可能！！サポート外ＥＲＲＯＲ　センターに連絡して下さい |

（※）SYSBUSY の場合だけは、メッセージを表示して**同じタスクのまま**画面の入力を待ち、入力があったら ALLOCATE からやり直す。
それ以外は OKFLG ＝ '4' にして、上表のメッセージとエラーコードを表示する。

### 4.6 表示の編集とメッセージ（DISPLAY_SUB_RTN_LVL1）

回送入力票ＮＯの表示属性を設定し（2.4）、OKFLG に応じてメッセージを設定する。

| OKFLG | エラーコード | メッセージ |
|---|---|---|
| '2' | OK DD | 到着店，到着日時，指示粁を入力してください。 |
| '1' | ERR 1 | エラー項目あり，再入力して下さい |
| '5' | ERR 5 | この回送票の入力区分がエラーです。再入力して下さい |
| '3'（センターのコード 0001） | ERR 3 | 回送未入力です。 |
| '3'（センターのコード 0002） | ERR 3 | センターの回送マスターの　Ｉ／Ｏエラー |
| '9' | ERR 9 | この回送票は取消済みです。　　再入力して下さい |
| '4' | 4.5.1 のコード | 4.5.1 のメッセージ |
| その他（'8' など） | ERR ? | ？？？？？？？？？？？？ |

#### エラー時の画面送信

1. TSキュー（端末ID＋'BK15'、280バイト）に保存する。
2. システム日付・時刻を設定する。
3. 画面のデータ部分を送信し（カーソル位置を指定、アラームを鳴らす）、BK15 で待機する。

ＤＤＰ回送マスターやセンターから取得した内容は、エラーのときも画面に表示される。

### 4.7 正常時の処理（OK_DATA_RTN 以降）

1. 到着店コードにカーソルを置き、到着店コード・到着　年・月・日・時・分・指示粁　出発時・到着時を入力可（数字のみ）にする。
2. TSキュー（端末ID＋'BK15'、280バイト）に保存する。
3. 戻り先画面のスタックの最上位が「MPBK150／BK15」でなければ、件数を1増やして積む（最大5件。5件を超える場合は5件目を上書き）。
4. システム日付・時刻を設定する。
5. 画面を消去して MPBK150 を送信し（カーソル位置を指定、アラームを鳴らす）、トランザクション **BK16** で待機する。

### 4.8 ファンクションキーの処理

| キー | 処理 |
|---|---|
| PF2：取消 | 画面をクリアし、TSキューを削除して、空の MPBK150 を画面を消去して送信する。BK15 で待機 |
| PF3：終了 | TSキューを削除し、戻り先画面のスタックから一つ前の画面を決める（下表）。共通ヘッダ画面（MPDM010）に日時を設定して送信し、戻り先の画面をデータなしで送信して、そのトランザクションで待機 |
| PF4：戻り | TSキューを削除し、スタックの1件目（メインメニュー）に戻る。表示方法は PF3 と同じ |
| その他 | 画面のデータ部分を再送信し、BK15 で待機 |

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

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

### 4.9 例外処理

| 発生条件 | 処理 |
|---|---|
| CLEAR キー | TSキューを削除し、終了画面（ELEPHAN）を表示して終了 |
| 画面データなし（MAPFAIL）・レコードなし（NOTFND）・ファイルの終わり（ENDFILE） | TSキューの読込みから処理を続ける（画面の受信は飛ばす） |

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

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

---

## 5. メッセージ一覧

| No | コード | メッセージ | 表示するとき |
|---|---|---|---|
| 1 | OK DD | 到着店，到着日時，指示粁を入力してください。 | 照会が正常に終わったとき |
| 2 | ERR 1 | エラー項目あり，再入力して下さい | 回送入力票ＮＯが不正なとき |
| 3 | ERR 3 | 回送未入力です。 | ＤＤＰにもセンターにも回送票がないとき |
| 4 | ERR 3 | センターの回送マスターの　Ｉ／Ｏエラー | センターの回送マスターの読込みエラー |
| 5 | ERR 5 | この回送票の入力区分がエラーです。再入力して下さい | 入力区分が対象外のとき |
| 6 | ERR 9 | この回送票は取消済みです。　　再入力して下さい | 回送票が取消済みのとき |
| 7 | ASYSB | 回線が混雑しています！！　実行キーをもう一度押して下さい | センター照会で回線混雑のとき |
| 8 | ASYSI・CTERM・STERM・RTERM | 照会不可能！！回線不通の可能性あり　センターに連絡して下さい | センターとの回線不通 |
| 9 | RLENG | 照会不可能！！　ＬＥＮＧＥＲＲ | センターからの受信データの長さ不正 |
| 10 | A9999・C9999・S9999・R9999 | 照会不可能！！サポート外ＥＲＲＯＲ　センターに連絡して下さい | その他の通信エラー |
| 11 | ERR ? | ？？？？？？？？？？？？ | センターから想定外のコード（センター側の CICS エラー BU02 を含む）が返ったとき |

---

## 6. 画面遷移

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

---

## 7. 補足・留意事項

1. **受け付ける入力区分**：ＤＤＰ回送マスター・センター照会とも、入力区分 1（店所間回送）と 3（域内）を受け付ける。なお、画面設計書（BK0070）に収録されている BK21500P のソースは入力区分 1 だけを受け付ける古い内容で、現行ソースとは異なる。
2. **センター照会の条件**：ＤＤＰ回送マスターの読込みが「該当なし」以外のエラー（I/O エラーなど）でも、センター照会に進む。
3. **同じタスクのまま入力を待つ**：センター照会で回線混雑（SYSBUSY）の場合、トランザクションを終わらせずに画面の入力を待つ（会話型）。待っている間もタスクが残る。
4. **通信エラー時の会話の解放**：CONNECT・SEND・RECEIVE でエラーになった場合、FREE を行わずに処理を終える。
5. **戻り先画面のスタック**：照会OK時に、スタックの最上位（CRT_BACK_KOSU 番目）を確認してから積む。件数が 0 の場合は 0 番目を参照することになり、配列の範囲外を読む。
6. **走行粁の表示**：ＤＤＰ回送マスターから表示する場合、回送粁程（5桁）の下3桁だけを表示する。1,000km 以上は正しく表示されない。
7. **照会元のメッセージコード**：センター照会が正常だった場合、ソース上は 'OK CE' を設定しているが、画面にはすでに 'OK DD' が設定済みのため表示されない。
8. **到着年月日の初期値**：回送マスターに到着年月日がない場合は処理日を表示し、次の処理 BK11600P で到着時・到着分・指示粁（出発時・到着時）を必須にする（[BK11600P_仕様書.md](BK11600P_仕様書.md) の 2.2 参照）。到着時分は空のまま。
9. **使っていない領域**：HELP画面コントロールエリア、TSQ_LENGTH_W 等、CNT_MAX、MAX・XCNT、END_MSG、VKEY2、BK15101B・BK15111B（航空会社区分・空港行帰区分。コメントのみで設定なし）は使っていない。
