プロジェクト

全般

プロフィール

レビュー指摘 #12076 » BK11600P_仕様書.md

幸塚 和久, 2026-10-26 10:28 午前

 

プログラム仕様書 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 で照会した回送票に対して入力された到着情報をチェックし、確認画面を表示する。

  1. 到着店コード・到着年月日時分・指示粁(出発時・到着時)をチェックする。
  2. 発送日時と到着日時の前後関係、指示粁から求めた走行粁をチェックする。
  3. すべて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 開始時の処理

  1. 例外条件の分岐先を登録する(画面データなし・レコードなし・ファイルの終わり → いずれも終了処理)。
  2. 押下キーの分岐先を登録する(CLEAR → 終了処理、実行・CLEAR以外 → ファンクションキー処理)。
  3. 画面 MPBK150 を受信する。
  4. TSキュー(通信領域の TSQ_ID・TSQ_LENGTH)を読む。
    • 読めた場合:キューを削除する。
    • キューがない場合:次のように初期化する(通常は発生しない)。
項目 初期値
LOOP_FLG '1'
OKFLG '0'
FLG(1~30) すべて '1'
FLGX(1~30) すべて '0'
画面項目の値 空

4.3 項目チェック(CHECK_SUB_RTN_LVL1)

各項目共通の処理:

  1. すでにOK(FLG='2')の項目はチェックしない。
  2. 未入力(入力長=0)の場合:FLGX が '1' なら FLG・FLGX を '1'(エラー)、それ以外は '0'(未入力)にする。
  3. 入力ありの場合:入力値を作業域に移し、訂正区分(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時の処理

  1. TSキューに保存する(次の処理 BK17 への受渡し)。
  2. システム日付・時刻を設定する。
  3. 画面のデータ部分を送信し(アラームを鳴らす)、トランザクション 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. 補足・留意事項

  1. 表示済みの値はチェックされない:BK11500P が表示した到着店・到着日時・指示粁は、利用者が書き換えなければ送信されず「未入力」扱いになる。この場合、店所マスターの存在チェックなどの項目チェックは行われず、TSキューの値がそのまま使われる(項目間チェックは行われる)。
  2. 指示粁は実質的に必須:指示粁の必須フラグが立っていなくても、出発時・到着時がどちらも 0 の場合は項目間チェックでエラーになる。
  3. 到着店の店所区分:到着店は店所区分 '1'・'4' だけを受け付ける。発送側の BK10300P のような個別の店所コード(0581 など)の例外はない。
  4. 通日による日数比較:発送日+5日の判定は、年内の通日(1~366)で比べている。年をまたぐ場合(12月末の発送で1月初めの到着など)は正しく判定できない。また、通日への変換エラー(存在しない日付)を判定していない。
  5. 最初のエラー判定は FLG(2) を見ていない:項目間チェックに進む前の判定は FLG(3) から始まり、到着店コード(FLG(2))のエラーを見ていない。到着店だけがエラーの場合も項目間チェックが動くが、最後の判定でエラーになるため結果は変わらない。
  6. 走行粁の表示:走行粁は回送粁程(5桁)に保存し、画面には下3桁だけを表示する。走行粁は 600 未満しか通らないため、表示上の問題はない。
  7. TSキューが読めないとき:全項目が任意・値が空で初期化されるため、発送日などが空のまま項目間チェックが動き、エラーになる(通常の操作では発生しない)。
  8. 使っていない領域:HELP画面コントロールエリア、LSO0020、DDPJYUGY・DDPMORTR、センター セッション用の領域(SEND_DATA・REVE_DATA・SYSID など)、WK_YMD3・WK_YMD33、END_MSG、CNT_MAX、MAX・XCNT、TSQ_LENGTH_W 等は使っていない。
(4-4/5)