# プログラム仕様書　BU10900P（配車修正入力　確認）

| 項目 | 内容 |
|---|---|
| システムID | BU |
| 参考資料 | ・現行ソース BU10900P.pl1（センター側の動きは BU20900P.pl1 で確認）<br/>・画面イメージ MPBU070.jpg（配車修正入力）<br/>・現行の解析資料 BU0070_配車修正入力.xlsx（シート「資産一覧」「MPBU070」「レコードフォーマット」「SRC_BU10900P」）<br/>・前の画面の仕様書 [BU10800P_仕様書.md](BU10800P_仕様書.md)、[BV10800P_仕様書.md](BV10800P_仕様書.md) |
| 項目名の出典 | 画面項目は解析資料のシート「MPBU070」の日本語名、センターとの受渡し項目（CEDPBU07・CEDPBU09）はシート「レコードフォーマット」の日本語名称 |

---

## 1. 概要

| 項目 | 内容 |
|---|---|
| プログラムID | BU10900P（手続き名：BU10900） |
| プログラム名称 | 配車修正入力　確認 |
| 言語 | PL/I（CICS コマンドレベル） |
| 処理形態 | オンライン（CICS 疑似会話型） |
| 動作環境 | SV（DDP 側） |
| トランザクションID | BU09 |
| パターンID | PPOD255P（1987/05/01）、業務 BUSHRE30、部品 PBOD020P |
| 使用画面（マップ） | MPBU070（配車修正入力）、MPDM010（共通ヘッダ画面）、ELEPHAN（終了画面） |
| 前の処理 | BU08（BU10800P：自社便の検証）、BV08（BV10800P：傭車便の検証）のチェックOK 後 |
| 次の処理 | 実行キー：センターに更新を依頼して結果を表示（BU09 で待機）。PF5：BU08／BV08 に戻って修正 |
| センターへの更新依頼 | SYSID 'CIC1'、プロセス 'B09U'（BU20900P）と APPC 会話 |
| 参照ファイル | なし（DDP のマスターは読まない） |
| 起動するトランザクション | BV13（自社便の指令書印刷）、BV14（傭車便の指令書印刷） |
| 一時記憶 | TSキュー（通信領域のキュー名。BU10700P が書いた「端末ID＋'BU07'」、長さ 520）。印刷データの TSキュー（端末ID＋時刻） |

### 1.1 機能概要

検証済みの修正内容でセンターの運行指令マスターを更新する画面。BU10800P・BV10800P の「確認ＯＫなら実行キーを押して下さい。修正なら、ＰＦ５」の画面で待機する。

1. 実行キー：TSキューの検証後データをセンター（B09U：BU20900P）に送って更新を依頼し、結果のメッセージを表示する。印刷装置が使用可で更新が成功したら、指令書を印刷する。
2. PF5：入力可の項目を戻して BU08（自社便）／BV08（傭車便）に戻り、修正をやり直す。

```mermaid
flowchart LR
    BU08[BU08／BV08<br/>検証OK] --> BU09[BU09<br/>本プログラム<br/>MPBU070]
    BU09 <-- APPC B09U --> CIC1[(センター CIC1<br/>BU20900P<br/>VKUNKSH 更新)]
    BU09 -- 印刷 --> PRT[BV13／BV14<br/>指令書印刷]
    BU09 -- PF5 --> BU08
    BU09 -- 更新後の実行 --> BU07[BU07<br/>初期画面]
```

---

## 2. 画面仕様

画面レイアウト・項目は BU10700P と同じ（[BU10700P_仕様書.md](BU10700P_仕様書.md) の 2章）。本プログラムは画面の値をチェックせず、メッセージ・エラーコードと、PF5 のときの属性だけを変える。

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

| キー | 機能 | 処理概要 |
|---|---|---|
| 実行（Enter） | 更新 | センターに更新を依頼する（4.2） |
| PF2 | 取消 | TSキューを削除し、BU10700P の初期画面を表示して BU07 で待機する |
| PF3 | 終了 | 印刷終了の処理をして、一つ前の画面に戻る |
| PF4 | 戻り | 印刷終了の処理をして、メインメニューに戻る |
| PF5 | 修正 | 入力可の項目を戻して BU08／BV08 で待機する（4.3） |
| PF8・PF9 | テストプリント | 印刷装置が使用可の場合だけ、テスト印刷を起動する（BU10800P と同じ） |
| PF11 | 印刷装置の再接続 | 印刷装置を強制解放し、再び接続する |
| CLEAR | 強制終了 | 印刷終了の処理をして、終了画面（ELEPHAN）を表示して終了 |
| 上記以外 | 再表示 | 画面のデータ部分を再送信し、BU09 で待機 |

PF2・PF3・PF4・PF8・PF9・PF11・CLEAR の処理は BU10800P と同じ（[BU10800P_仕様書.md](BU10800P_仕様書.md) の 4.7。待機するトランザクションは BU09）。

---

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

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

BU10800P と同じ項目を使う。COMM_PRI_FLG（印刷装置の状態）が '2' なら更新後に指令書を印刷し、COMM_YOS_FLG（'1'：自社）で自社用・傭車用の印刷を選ぶ。

### 3.2 TSキュー（520バイト）

BU10800P と同じ領域。本プログラムでは検証後データの部分を、センターへの送信データ（CEDPBU07 の配置。項目名は UNK で始まる）として使う。

### 3.3 センターへの更新依頼（B09U：BU20900P）

| 項目 | 内容 |
|---|---|
| 接続先 | SYSID 'CIC1'、プロセス名 'B09U' |
| 送信（250バイト） | TSキューの検証後データ（トランザクションID・エラーフラグ・エラーコード＋CEDPBU07 の 241バイト）。入力結果（UNKNYUK）に画面の入力区分（1・2・5・9・D・R など）をセットして送る |
| 受信（169バイト） | トランザクションID（4）＋エラーフラグ（1）＋エラーコード（4）＋配車修正入力更新後データ（CEDPBU09、下表） |

| 項目ID | 項目名 | 本プログラムでの用途 |
|---|---|---|
| DNKNYUK | 入力結果 | 更新の結果（4.2 の表） |
| DNKSHNO | 指令書ＮＯ | |
| UNQENTC | 最終到着店 | 自社便の印刷で、次運行発店が 0 のときに使う |
| UNQCARS・UNQCART | 積載社番（１）（２）・トレーラ頭等（１）（２） | 自社便の印刷 |
| UNQSZTC | 所属店 | 印刷 |
| UNQNTC1・UNQNTC2 | 乗継店１・２ | 自社便の印刷 |
| UNQDTIM・UNQDONO・UNQDIN1～3 | 道路情報（日時・道路Ｎｏ・コード） | 自社便の印刷 |
| UNQJIKB・UNQJITN・UNQITKB・UNQITTN | 空車区間（店所区分・店所コード・着地コード） | 自社便の印刷 |
| UNQSYUS・UNQTAIS | 出社時間・退社時間 | 自社便の印刷 |
| UNQARIV・UNQTIME | 休憩場所・休憩時間 | 自社便の印刷 |
| UNQHYOG・UNQDRTM・UNQYUYO | 標準拘束時間・運転時間・有余時間 | 自社便の印刷 |
| UNQTYAK | 到着時分 | 自社便の印刷（最終卸店と次運行発店が違う場合の到着時分） |

---

## 4. 処理仕様

### 4.1 処理の流れ

```mermaid
flowchart TD
    S([開始]) --> AID{押されたキー}
    AID -- CLEAR --> CLR[印刷終了の処理<br/>終了画面]
    AID -- PF5 --> PF5[修正に戻る 4.3]
    AID -- その他のPFキー --> PF[ファンクションキー処理]
    AID -- 実行 --> RCV[MPBU070 を受信<br/>TSキューを読む]
    RCV -- なし --> INI[初期画面<br/>エラーコード Q_ERR] --> W07([BU07 で待機])
    RCV -- あり --> DEL[TSキュー削除]
    DEL --> UPD[センターに更新依頼 4.2]
    UPD -- 通信エラー・更新エラー --> ERR[TSキュー保存<br/>エラー表示] --> W09([BU09 で待機])
    UPD -- 更新OK --> PRT{印刷装置 使用可<br/>入力結果 1・5}
    PRT -- はい --> P[指令書を印刷 4.4]
    PRT -- いいえ --> MSG
    P --> MSG[結果のメッセージ表示] --> W09B([BU09 で待機])
```

### 4.2 実行キー：センターへの更新依頼（INQUIRE_SUB_RTN）

1. 画面を受信し、TSキューを読む。
   - 読めなければ、画面をクリアして BU10700P と同じ初期画面（入力店所は入力不可、修正項目はすべて入力不可、メッセージ「指令書№を入力して実行キー」（反転）、エラーコード 'Q_ERR'、指令書NO にカーソル）を画面を消去して送信し、BU07 で待機する。
   - 読めたら削除する。
2. 入力結果（UNKNYUK）に画面の入力区分（TSキューの BU07053B）をセットし、センター（CIC1 の B09U）に接続して検証後データ（250バイト）を送信し、結果（169バイト）を受信する。終了データを送って会話を終える。
3. 通信エラーは BU10700P と同じ（回線混雑 ASYSB は画面を受信してやり直し、それ以外はエラーフラグ '7'・'8'・'9'）。メッセージは後半48桁に次をセットする。

| エラーフラグ | メッセージ（後半） |
|---|---|
| 7 | 　回線不通の可能性あり　センターに連絡　！！ |
| 8 | 　サポート外ＥＲＲＯＲ　センターに連絡　！！ |
| 9 | 　　ＬＥＮＧＥＲＲ |

4. 正常に受信したら、入力結果（DNKNYUK）でメッセージの前半22桁をセットする（後半は空白）。

| 入力結果 | メッセージ | 判定 |
|---|---|---|
| 1 | 修正ＯＫ！！ | OK |
| 2 | 復活しました。 | OK |
| 3 | 削除しました。 | OK |
| 9 | 減便になりました。 | OK |
| 0 | 配車未入力です。！！ | OK（エラー扱いにしない） |
| 4 | 枝番前後の指令書無し | エラー |
| 5 | 修正済、次の枝番無し | エラー |
| 6 | 指令書マスターに無し | エラー |
| 7 | 入力済で修正不可能！ | エラー |
| 8 | マスターＩ／Ｏエラー | エラー |
| A | 携帯№無し　Ｆ５修正 | エラー |
| それ以外 | 　　？？？？？？ | OK（エラー扱いにしない） |

5. 印刷装置の状態が '2'（使用可）で、入力結果が 1 か 5 なら、指令書を印刷する（4.4）。
6. エラー（通信エラー、入力結果 4～8・A）なら、メッセージとエラーコード（通信エラーのコード）をセットし、TSキューを書き戻して（書き込めなければ CLEAR と同じ処理）画面のデータ部分を送信し、BU09 で待機する。PF5 で修正に戻れる。
7. OK なら、メッセージをセットして画面のデータ部分を送信し（カーソル指定）、BU09 で待機する。TSキューは書き戻さない。

### 4.3 PF5：修正に戻る

1. TSキューを読む。なければエラーコード 'Q ERR' をセットして 4 へ。あれば削除する。
2. 入力区分（画面の値）が 'R'（復活）なら、メッセージ「復活するなら実行キー　復活しないならＰＦ２で取消」（反転）を表示し、TSキューを書き戻して BU09 で待機する（修正には戻らない）。
3. それ以外は、照会時の入力区分（UNKINKB）によって入力可の項目を決める。

| 照会時の入力区分 | 入力可にする項目 |
|---|---|
| 1・2 | BU10700P の 4.5 とほぼ同じ（運行車区分・増便／定便・送付書枚数による。違いは 7章 3） |
| 9 | 入力区分だけ（カーソル） |
| それ以外（5 を含む） | 属性を変えない |

4. メッセージ「修正する項目を、入力してください。」（反転）を表示し、OKFLG を '2'（次の検証で全項目をチェックし直す）、入力年月日を処理日付にして TSキューに書く（書き込めなければ CLEAR と同じ処理）。画面のデータ部分を送信し（カーソル指定）、運行車区分が 02 なら BV08、それ以外は BU08 で待機する。

### 4.4 指令書の印刷

印刷情報（店所・端末ID・印刷装置・処理日付、キュー名「端末ID＋現在の分秒」）を作り、印刷データを TSキューに書いて、自社便は BV13、傭車便は BV14 を印刷装置で START する（TSキューの書込みエラーなら START しない）。

| 区分 | 印刷データ（1件） |
|---|---|
| 自社便（COMM_YOS_FLG '1'。長さ 375＋14） | 指令書ＮＯ・発行枚数・便コード・便名・運行車区分・形態・入力区分・発店・出発年月日時分・最終卸店・次運行発店（0 なら最終到着店）・到着年月日時分（最終卸店と次運行発店が同じなら最終卸店の到着時分、違えば受信した到着時分）・積載社番（１）（２）・トレーラ頭等（１）（２）・乗務員Ａ・Ｂ・直配区分・着地・連絡事項・特定便・鮮魚保険料・所属店・車種（T：1、S：2、G：3、4：4、それ以外 0）・道路情報・乗継店１・２・空車区間・出社・退社時間・休憩場所・時間・拘束時間・運転時間・有余時間 |
| 傭車便（長さ 130＋14） | 指令書ＮＯ・発行枚数・便コード・便名・運行車区分・形態・入力区分・発店・出発年月日時分・最終卸店・到着年月日時分・次運行発店（＝最終卸店）・積載社番・トレーラー・乗務員Ａ・Ｂ・直配区分・着地・連絡事項・傭車会社・傭車形態・傭車標屯（×10）・定額傭車料・一車保険料・所属店・特定便・車種 |

---

## 5. メッセージ一覧

| No | エラーコード | メッセージ | 表示するとき |
|---|---|---|---|
| 1 | （空白） | 修正ＯＫ！！ ほか 4.2 の表 | 更新の結果 |
| 2 | ASYSB | 回線が混雑しています！！　実行キーをもう一度押して下さい | センター接続の回線混雑 |
| 3 | ASYSI・CTERM・STERM・RTERM | 回線不通の可能性あり　センターに連絡　！！ | 通信エラー（回線切断） |
| 4 | A9999・C9999・S9999・R9999 | サポート外ＥＲＲＯＲ　センターに連絡　！！ | 通信エラー（その他） |
| 5 | RLENG | ＬＥＮＧＥＲＲ | 受信の長さエラー |
| 6 | Q_ERR | 指令書№を入力して実行キー | 実行キーで TSキューがない（更新後にもう一度実行キーを押したときなど） |
| 7 | Q ERR | （変えない） | PF5 で TSキューがない |
| 8 | （変えない） | 復活するなら実行キー　復活しないならＰＦ２で取消 | 入力区分 R で PF5 |
| 9 | （変えない） | 修正する項目を、入力してください。 | PF5 で修正に戻る |

---

## 6. 画面遷移

```mermaid
flowchart LR
    BU08[BU08／BV08] -- チェックOK --> BU09[BU09<br/>本プログラム]
    BU09 -- 実行（結果表示） --> BU09
    BU09 -- 実行（TSキューなし） --> BU07[BU07<br/>初期画面]
    BU09 -- PF5 自社便 --> BU08B[BU08]
    BU09 -- PF5 傭車便 --> BV08[BV08]
    BU09 -- PF2 --> BU07
    BU09 -- PF3 --> PREV[一つ前の画面]
    BU09 -- PF4 --> MAIN[メインメニュー]
    BU09 -- CLEAR --> END[ELEPHAN 終了]
```

---

## 7. 補足・留意事項

1. **更新後の実行キー**：更新が OK だと TSキューを書き戻さないため、続けて実行キーを押すと TSキューがなく、初期画面にエラーコード 'Q_ERR' が表示される（エラーではなく次の指令書の入力待ち）。
2. **入力結果に入力区分を入れて送る**：BU10800P・BV10800P は入力区分を変えた場合に入力結果を '9' にしているが、本プログラムは送信前に入力結果を画面の入力区分（'1'・'2'・'5'・'9'・'D'・'R' など）で上書きする。センター（BU20900P）はこの値で処理を分ける。
3. **PF5 の入力可の項目の違い**（BU10700P の照会OK 時との違い）
   - 照会時の入力区分が 5（到着入力済）の場合は属性を変えない（BU10700P は 1・2・5 で入力可にする）。
   - 自社便のフェリー会社は常に入力可（BU10700P は入力年月日 ＝ 処理日付のときだけ）。
   - 増便で運行車区分を入力可にする条件が「指令書ＮＯ の8桁目が 1」（BU10700P も同じ）。
4. **入力結果 0 と不明な値**：入力結果 0（配車未入力です。）や表にない値はエラー扱いにしないため、TSキューを書き戻さない。PF5 で修正に戻れない。
5. **印刷の条件**：指令書を印刷するのは入力結果が 1（修正ＯＫ）か 5（修正済、次の枝番無し）のときだけ。5 はメッセージ上はエラー扱い（TSキューを書き戻す）だが印刷は行う。
6. **通信エラーのメッセージ**：通信エラーではメッセージの後半48桁だけをセットし、前半22桁は空白のまま。
7. **'R' は修正に戻れない**：入力区分 R（減便からの復活）で確認画面に来た場合、PF5 では修正に戻れず、実行（復活）か PF2（取消）を選ぶ。
