レビュー指摘 #12086 » BK11600P_仕様書.md
プログラム仕様書 BK10030 回送到着入力 - BK11600P(② 到着情報の入力・検証)
| 項目 | 内容 |
|---|---|
| 機能ID・機能名 | BK10030 回送到着入力(機能仕様書:BK10030_回送到着入力_仕様書.md。次の処理 ③ 確認・登録は BK11700P_仕様書.md) |
| システムID | BK |
| サブシステムID | BK0070 |
| サブシステム名 | 回送・域内便到着入力 |
| 参考資料 | ・現行ソース BK11600P.pl1 ・画面設計書「BK0070_回送・域内便到着入力.xlsx」(Ver.1.2023.1016.3):資産一覧、MPBK150 の項目名、レコードフォーマット |
| 関連仕様書 | BK11500P_仕様書.md(前の処理:回送入力票NOの照会)、BK21500P_仕様書.md(センター照会) |
1. 概要
| 項目 | 内容 |
|---|---|
| プログラムID | BK11600P(手続き名:BK11600) |
| プログラム名称 | 回送到着入力(検証) |
| 言語 | PL/I(CICS コマンドレベル) |
| 処理形態 | オンライン(CICS 疑似会話型) |
| 動作環境 | SV(DDP 側) |
| トランザクションID | BK16 |
| パターンID | PPOD152P(1987/05/01)、業務 BXHEAD30 |
| 使用画面(マップ) | MPBK150(回送・域内便到着入力)、MPDM010(共通ヘッダ画面)、ELEPHAN(終了画面)、戻り先画面(PF3/PF4 時に動的に決定) |
| 前の処理 | トランザクション BK15(BK11500P:回送入力票NOの照会) |
| 次の処理 | トランザクション BK17(BK11700P:③ 確認・登録。DDP回送マスターの更新と集信データ(発送鑑・到着鑑)の出力) |
| 参照ファイル | VPTENMS(DDP 店所マスター) |
| 更新ファイル | なし |
| 使用モジュール | LSO0040(年月日 → 通日(年内の通し日数)変換) |
| 一時記憶 | TSキュー(キュー名・長さは BK11500P が通信領域に設定した値。端末ID+'BK15'、280バイト) |
1.1 機能概要
回送便の到着入力の2画面目。BK11500P で照会した回送票に対して入力された到着情報をチェックし、確認画面を表示する。
- 到着店コード・到着年月日時分・指示粁(出発時・到着時)をチェックする。
- 発送日時と到着日時の前後関係、指示粁から求めた走行粁をチェックする。
- すべてOKなら、全項目を入力不可にして「確認OKなら実行キーを押して下さい」を表示し、次の処理(BK17)に進む。
本プログラムではファイルの更新は行わない。
flowchart LR
BK15[BK15<br/>BK11500P<br/>回送入力票NOの照会] -- 照会OK --> BK16[BK16<br/>本プログラム<br/>到着内容の検証]
BK16 -- エラー --> BK16
BK16 -- OK<br/>確認画面 --> BK17[BK17<br/>BK11700P<br/>更新・集信]
BK16 -- PF2 取消 --> BK15
2. 画面仕様(MPBK150)
2.1 画面レイアウト
画面は BK11500P と同じ MPBK150(BK11500P_仕様書.md の 2.1 参照)。本プログラムでは、到着店コード・到着年月日時分・指示粁が入力対象になる。
2.2 画面項目一覧
「FLG番号」は、チェック結果を持つフラグ配列(FLG・FLGX)の添字。「BK16」の列は本プログラムでの入出力。
| FLG番号 | 項目ID | 項目名 | 型・桁 | BK16 | 本プログラムでの扱い |
|---|---|---|---|---|---|
| ― | BK15011(IMD) | システム年月日 | 文字 8 | O | 送信時に設定 |
| ― | BK15021(IMT) | システム時分秒 | 文字 8 | O | 送信時に設定 |
| (1) | BK15031 | 回送入力票NO | 数字 8 | O | 表示のみ(BK15 で確定済み) |
| ― | BK15041・BK15042 | 発店コード・発店所名 | O | 表示のみ | |
| ― | BK15051~BK15055 | 発送 年・月・日・時・分 | 数字 2×5 | O | 表示のみ。項目間チェックに使う |
| ― | BK15061 | 入力区分 | 数字 1 | O | 表示のみ |
| 2 | BK15081 | 到着店コード | 数字 4 | I | チェック |
| ― | BK15082 | 到着店所名 | 文字 20 | O | 店所マスターから表示 |
| 3 | BK15091 | 到着年 | 数字 2 | I | チェック |
| 4 | BK15092 | 到着月 | 数字 2 | I | チェック |
| 5 | BK15093 | 到着日 | 数字 2 | I | チェック |
| 6 | BK15094 | 到着時 | 数字 2 | I | チェック |
| 7 | BK15095 | 到着分 | 数字 2 | I | チェック |
| ― | BK15121~BK15134 | 社番・乗務員コード1・2・乗務員名1・2 | O | 表示のみ | |
| 8 | BK15141 | 指示キロメートル・出発時 | 数字 7 | I | チェック |
| 9 | BK15151 | 指示キロメートル・到着時 | 数字 7 | I | チェック |
| ― | BK15152 | 走行キロメートル | 数字 3 | O | 計算結果を表示 |
| ― | BK15241 | エラーメッセージ | 文字 70 | O | |
| ― | BK15242 | エラーコード | 文字 5 | O |
項目名は画面設計書(MPBK150 シート)の名称。
必須かどうか
必須かどうかは、前の処理(BK11500P)がTSキューに保存した入力状態フラグ(FLGX)で決まる。
| ケース | 必須になる項目 |
|---|---|
| 回送マスターに到着年月日がない(BK11500P が到着年月日に処理日をセットした場合) | 到着時・到着分・指示粁 出発時・到着時(FLGX(6)~(9)='1') |
| 回送マスターに到着年月日がある | なし(未入力ならTSキューの値をそのまま使う) |
画面に表示済みの値は、利用者が書き換えない限り送信されない。この場合は「未入力」として扱われ、BK11500P がTSキューに保存した値がそのまま使われる(項目チェックは行われない)。
2.3 ファンクションキー
| キー | 機能 | 処理概要 |
|---|---|---|
| 実行(Enter) | 継続 | 到着内容をチェックし、OKなら確認画面を表示する |
| PF2 | 取消 | TSキューを削除し、空の MPBK150 を表示して BK15(回送入力票NOの入力)に戻る |
| PF3 | 終了 | 一つ前の画面(サブメニュー)に戻る |
| PF4 | 戻り | メインメニューに戻る |
| CLEAR | 強制終了 | 終了画面(ELEPHAN)を表示して終了 |
| 上記以外 | 再表示 | 画面をそのまま再表示し、BK16 で待機 |
2.4 表示属性
| 状態 | 入力可否 | カーソル |
|---|---|---|
| チェックOK('2')・未入力('0') | 入力不可(DFHBMASK) | ― |
| エラー('1')・関連エラー('3') | 入力可・高輝度(DFHUNINT) | 置く |
全項目OKの場合は、入力対象の項目がすべて入力不可になり、確認画面になる。色は設定しない。
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_ITEM_DDP など)は使用しない。COMM_ITEM_DDP(照会元)は変更せずに次の処理に渡す。
3.2 TSキュー(CHK_DSP_WORK:280バイト)
レイアウトは BK11500P と同じ(BK11500P_仕様書.md の 3.2 参照)。本プログラムで更新する項目:
| 項目ID | 内容 |
|---|---|
| FLG(2~9)・FLGX(2~9) | 到着店~指示粁のチェック結果・入力状態 |
| OKFLG | 全体チェック結果('1':エラー、'2':OK) |
| BK15081B~BK15095B、BK15141B、BK15151B | 入力された到着店・到着年月日時分・指示粁 |
| BK15082B | 到着店所名(店所略名(漢字)) |
| BK15KIKM | 走行粁(回送粁程、5桁) |
| BK15152B | 走行粁の下3桁(画面表示用) |
| WK_TEIKBN | 訂正区分。いずれかの項目が入力されたら '1' |
3.3 参照ファイル
| 識別 | データセット | 名称 | キー | 取得する項目 |
|---|---|---|---|---|
| TE | VPTENMS | DDP 店所マスター(DDPTENMS) | 到着店コード | VETNGETA(店所区分)、VETNSRNM(店所略名(漢字)) |
共通の読込みルーチン(DPVSSRH)で読む。DDPJYUGY(従業員マスター)・DDPMORTR(車両マスター)も宣言されているが使わない。
3.4 使用モジュール
| モジュール | 引数 | 用途 |
|---|---|---|
| LSO0040 | YMD(YYMMDD)、JYMD(結果。下3桁が年内の通日)、LS4RTN('0':正常) | 発送日・到着日を通日に変換し、日数の差を求める |
LSO0020(チェックディジット)も宣言されているが使わない。
4. 処理仕様
4.1 処理の流れ
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[項目チェック 4.3]
DEL --> CHK
CHK --> REL[項目間チェック 4.4]
REL --> DSP[表示の編集 4.5]
DSP --> OK{全項目OK}
OK -- いいえ --> ERR[TSキューに保存<br/>エラー表示]
ERR --> R1([BK16 で待機])
OK -- はい --> CNF[TSキューに保存<br/>確認画面を表示 4.6]
CNF --> R2([BK17 で待機])
4.2 開始時の処理
- 例外条件の分岐先を登録する(画面データなし・レコードなし・ファイルの終わり → いずれも終了処理)。
- 押下キーの分岐先を登録する(CLEAR → 終了処理、実行・CLEAR以外 → ファンクションキー処理)。
- 画面 MPBK150 を受信する。
- TSキュー(通信領域の TSQ_ID・TSQ_LENGTH)を読む。
- 読めた場合:キューを削除する。
- キューがない場合:次のように初期化する(通常は発生しない)。
| 項目 | 初期値 |
|---|---|
| LOOP_FLG | '1' |
| OKFLG | '0' |
| FLG(1~30) | すべて '1' |
| FLGX(1~30) | すべて '0' |
| 画面項目の値 | 空 |
4.3 項目チェック(CHECK_SUB_RTN_LVL1)
各項目共通の処理:
- すでにOK(FLG='2')の項目はチェックしない。
- 未入力(入力長=0)の場合:FLGX が '1' なら FLG・FLGX を '1'(エラー)、それ以外は '0'(未入力)にする。
- 入力ありの場合:入力値を作業域に移し、訂正区分(WK_TEIKBN)を '1' にして、次の表のチェックを行う。OKなら FLG・FLGX を '2'、エラーなら '1' にする。
| FLG番号 | 項目 | チェック内容 |
|---|---|---|
| 2 | 到着店コード | 数字で4桁入力。店所マスターに存在し、店所区分(VETNGETA)が '1' または '4'。店所マスターにあれば、エラーでも到着店所名に店所略名(漢字)をセット |
| 3 | 到着年 | 数字で、95~99 または 00~50 |
| 4 | 到着月 | 数字で、1~12 |
| 5 | 到着日 | 数字で、1~31 |
| 6 | 到着時 | 数字で、0~23 |
| 7 | 到着分 | 数字で、0~59 |
| 8 | 指示粁 出発時 | 数字であること |
| 9 | 指示粁 到着時 | 数字であること |
FLG(3~9) に '1' が1つもない場合だけ、項目間チェック(4.4)に進む。
4.4 項目間チェック
エラーの場合、対象の項目の FLG を '3'(関連エラー)にする。
(1) 到着日時
発送年月日・到着年月日を西暦8桁にして(年が 50 以下なら 2000年代、それ以外は 1900年代)比べる。
| No | チェック | エラー条件 | エラー項目 |
|---|---|---|---|
| 1 | 発送日より前 | 発送日 > 到着日 | 到着年月日時分(FLG 3~7) |
| 2 | 発送日+5日より後 | No.1 がOKの場合に、発送日の通日 + 5 < 到着日の通日 | 到着年月日時分(FLG 3~7) |
| 3 | 発送日時以前 | 発送年月日時分 ≧ 到着年月日時分(西暦4桁+月日時分で比較) | 到着年月日時分(FLG 3~7) |
通日は LSO0040 で求めるが、変換の戻り値(エラーかどうか)は判定に使っていない。
(2) 指示粁と走行粁
走行粁 = 指示粁 到着時 − 指示粁 出発時
| No | チェック | エラー条件 | エラー項目 |
|---|---|---|---|
| 1 | 走行粁の上限 | 走行粁 ≧ 600 | 指示粁 出発時・到着時(FLG 8・9) |
| 2 | 指示粁なし | 出発時・到着時がどちらも 0 | 指示粁 出発時・到着時 |
| 3 | メーター一巡 | No.2 に該当せず、走行粁 ≦ 0 の場合、(到着時 + 10,000,000) − 出発時 を走行粁とし、≧ 600 ならエラー | 指示粁 出発時・到着時 |
計算した走行粁は、TSキューの回送粁程(BK15KIKM、5桁)に保存し、その下3桁を画面の走行キロメートル(BK15152)に表示する。
(3) 全体の判定
FLG(1~9) に '1' または '3' があれば OKFLG = '1'(エラー)、なければ '2'(OK)。
4.5 表示の編集(DISPLAY_SUB_RTN_LVL1)
FLG番号 9 から 2 の順に、各項目の表示値と属性を設定する(2.4 参照)。あわせて、到着店所名と走行キロメートルを表示する。
| 結果 | エラーコード | メッセージ |
|---|---|---|
| エラーあり | ERR 1 | エラー項目あり,再入力して下さい |
| 全項目OK | OK 2 | 確認OKなら実行キーを押して下さい |
エラーがある場合:TSキューに保存し、システム日付・時刻を設定して、画面のデータ部分を送信し(カーソル位置を指定、アラームを鳴らす)、BK16 で待機する。
4.6 全項目OK時の処理
- TSキューに保存する(次の処理 BK17 への受渡し)。
- システム日付・時刻を設定する。
- 画面のデータ部分を送信し(アラームを鳴らす)、トランザクション BK17 で待機する。
全項目が入力不可の確認画面になり、利用者が実行キー(または PF3・PF4)を押すと、BK11700P がDDP回送マスターの更新と集信データの出力を行う(BK11700P_仕様書.md 参照)。
4.7 ファンクションキーの処理
| キー | 処理 |
|---|---|
| PF2:取消 | 画面をクリアし、TSキューを削除して、空の MPBK150 を画面を消去して送信する。BK15 で待機(回送入力票NOの入力からやり直し) |
| PF3:終了 | TSキューを削除し、戻り先画面のスタックから一つ前の画面を決める(下表)。共通ヘッダ画面(MPDM010)に日時を設定して送信し、戻り先の画面をデータなしで送信して、そのトランザクションで待機 |
| PF4:戻り | TSキューを削除し、スタックの1件目(メインメニュー)に戻る。表示方法は PF3 と同じ |
| その他 | 画面のデータ部分を再送信し、BK16 で待機 |
| PF3 の条件 | 戻り先 |
|---|---|
| スタックが空 | なし(終了画面を表示して終了) |
| 最上位が MPBK150 以外 | 最上位の画面(1件取り除く) |
| 最上位が MPBK150 で、その下がない | なし(終了画面を表示して終了) |
| 最上位が MPBK150 で、その下がある | その下の画面(2件取り除く) |
BK11500P が照会OK時にスタックへ MPBK150 を積んでいるため、通常は「最上位が MPBK150 で、その下がある」に当たり、その下の画面(サブメニュー)に戻る。
| PF4 の条件 | 戻り先 |
|---|---|
| スタックが空、または1件目が MPBK150 | なし(終了画面を表示して終了) |
| 1件目が MPBK150 以外 | 1件目の画面(スタックを全件消去) |
4.8 終了処理・例外処理
| 発生条件 | 処理 |
|---|---|
| CLEAR キー | TSキューを削除し、終了画面(ELEPHAN)を表示して終了 |
| 画面データなし(MAPFAIL)・レコードなし(NOTFND)・ファイルの終わり(ENDFILE) | CLEAR キーと同じ。BK11500P(処理を続ける)とは扱いが違う |
4.9 システム日付・時刻の設定(TIMESET_SUB_RTN)
現在の日時を YY/MM/DD・HH:MM:SS に編集して画面の日付・時刻欄に設定する(入力不可・変更フラグオン)。
5. メッセージ一覧
| No | コード | メッセージ | 表示するとき |
|---|---|---|---|
| 1 | ERR 1 | エラー項目あり,再入力して下さい | 項目チェック・項目間チェックでエラーがあったとき |
| 2 | OK 2 | 確認OKなら実行キーを押して下さい | 全項目OKのとき(確認画面) |
6. 画面遷移
flowchart LR
BK15[BK15<br/>BK11500P] -- 照会OK --> BK16[BK16<br/>本プログラム]
BK16 -- 実行(エラー) --> BK16
BK16 -- 実行(OK・確認画面) --> BK17[BK17<br/>BK11700P]
BK16 -- PF2 --> BK15
BK16 -- PF3 --> PREV[一つ前の画面]
BK16 -- PF4 --> MAIN[メインメニュー]
BK16 -- CLEAR・例外 --> END[ELEPHAN 終了]
7. 補足・留意事項
- 表示済みの値はチェックされない:BK11500P が表示した到着店・到着日時・指示粁は、利用者が書き換えなければ送信されず「未入力」扱いになる。この場合、店所マスターの存在チェックなどの項目チェックは行われず、TSキューの値がそのまま使われる(項目間チェックは行われる)。
- 指示粁は実質的に必須:指示粁の必須フラグが立っていなくても、出発時・到着時がどちらも 0 の場合は項目間チェックでエラーになる。
- 到着店の店所区分:到着店は店所区分 '1'・'4' だけを受け付ける。発送側の BK10300P のような個別の店所コード(0581 など)の例外はない。
- 通日による日数比較:発送日+5日の判定は、年内の通日(1~366)で比べている。年をまたぐ場合(12月末の発送で1月初めの到着など)は正しく判定できない。また、通日への変換エラー(存在しない日付)を判定していない。
- 最初のエラー判定は FLG(2) を見ていない:項目間チェックに進む前の判定は FLG(3) から始まり、到着店コード(FLG(2))のエラーを見ていない。到着店だけがエラーの場合も項目間チェックが動くが、最後の判定でエラーになるため結果は変わらない。
- 走行粁の表示:走行粁は回送粁程(5桁)に保存し、画面には下3桁だけを表示する。走行粁は 600 未満しか通らないため、表示上の問題はない。
- TSキューが読めないとき:全項目が任意・値が空で初期化されるため、発送日などが空のまま項目間チェックが動き、エラーになる(通常の操作では発生しない)。
- 使っていない領域:HELP画面コントロールエリア、LSO0020、DDPJYUGY・DDPMORTR、センター セッション用の領域(SEND_DATA・REVE_DATA・SYSID など)、WK_YMD3・WK_YMD33、END_MSG、CNT_MAX、MAX・XCNT、TSQ_LENGTH_W 等は使っていない。