仕様書出力結果
こちらの記事は、メイン記事「IBM Bobを使用した受注データプログラムと仕様書の作成(COBOL ILE + CL)」の付属記事になります。
メイン記事はこちらを参照ください。
IBM Bobでの仕様書出力結果(ソース修正後)
修正後仕様書(IBM Bob)
受注データ入力システム プログラム仕様書
受注データ入力システム
プログラム仕様書
- システム名
- 受注データ入力システム
- プログラムID
- ORDPGM / ORDCTL
- 作成日
- 2025-01-01
- 最終更新
- 2025-01-01(レビュー修正版)
- 対象環境
- IBM i (AS/400) 5250端末 / エミュレータ(24行×80桁)
- 使用言語
- COBOL / CL / DDS
- ライブラリ
- ORDLIB(受注)/ MASTERLIB(マスタ)
1. システム概要
受注伝票(ヘッダ+明細最大5行)の新規登録・照会・更新・削除を行う5250画面プログラム。消費税率は10%固定。
構成ファイル一覧
| ファイル名 | 種別 | ライブラリ | 説明 |
|---|---|---|---|
ORDDSP |
DSPF | ORDLIB | 受注入力画面(3レコード形式) |
ORDPGM |
COBOL PGM | ORDLIB | 受注データ入力処理プログラム(739行) |
ORDCTL |
CL PGM | ORDLIB | 起動制御・環境設定・エラーハンドリング(176行) |
ORDHDR |
PF | ORDLIB | 受注ヘッダファイル(主キー:ORDNO) |
ORDDTL |
PF | ORDLIB | 受注明細ファイル(複合主キー:ORDNO+DTLNO) |
CUSTMST |
PF | MASTERLIB | 得意先マスタ(主キー:CUSCD) |
ITMMST |
PF | MASTERLIB | 品目マスタ(主キー:ITMCD) |
2. 画面構成(ORDDSP.DDS)
| レコード形式 | 画面ID | 説明 |
|---|---|---|
HEADER |
ORD001 | 受注番号入力画面(起動時初期画面) |
ORDDET |
ORD001 | 受注ヘッダ+明細入力画面(メイン入力画面) |
CONFIRM |
— | 削除確認オーバーレイ(F4確定 / F12取消) |
HEADER レコード — 入力項目
| フィールド | 型 | 桁 | 行列 | 説明 |
|---|---|---|---|---|
ORDNO |
A / B | 7 | 4,14 | 受注番号(例:ORD0001) |
MSGLIN |
A / O | 79 | 24,1 | メッセージ行(赤・点滅) |
ORDDET レコード — 入力項目
| 区分 | フィールド | 型 | 桁 | 説明 |
|---|---|---|---|---|
| ヘッダ部 | ORDNO |
A/B | 7 | 受注番号(HI強調) |
ORDDAT |
A/B | 8 | 受注日(YYYYMMDD) | |
CUSCD |
A/B | 6 | 得意先コード(HI強調) | |
CUSNM |
A/O | 20 | 得意先名(自動取得・黄色表示) | |
EMPCD |
A/B | 4 | 担当者コード | |
DLVADR |
A/B | 30 | 納品先住所 | |
DUEDAT |
A/B | 8 | 納期(YYYYMMDD) | |
RMRK |
A/B | 40 | 備考 | |
| 明細部 (×5行) |
ITMCDn |
A/B | 8 | 品目コード(n=1〜5) |
ITMNMn |
A/O | 20 | 品目名称(自動取得・黄色) | |
QTYn |
Y/B | 5,2 | 数量 | |
UPRn |
Y/B | 9,2 | 単価(0入力時はマスタ単価補完) | |
AMTn |
Y/O | 11,2 | 金額(自動計算・緑) | |
TAXn |
Y/O | 9,2 | 消費税(自動計算・緑) | |
| 合計部 | SUBTOT |
Y/O | 11,2 | 小計(HI強調) |
TAXTOT |
Y/O | 9,2 | 消費税計(HI強調) | |
GRANDTL |
Y/O | 12,2 | 合計(HI強調・緑) | |
ORDSTS / ORDSTNM |
A/O | 1 / 8 | 受注状態コード+名称(黄色) |
3. ファンクションキー定義
| キー | 画面 | 処理 |
|---|---|---|
F3 |
全画面共通 | プログラム終了(ファイルクローズ後 STOP RUN) |
F5 |
HEADER / ORDDET | 受注データ照会(受注番号を指定してDBから読込) |
F6 |
HEADER | 新規受注登録(画面初期化→本日日付セット→ORDDET遷移) |
F8 |
ORDDET | 明細追加(次頁拡張用・現在は予約) |
F10 |
ORDDET | 受注データ削除(CONFIRM画面でF4確定後に実行) |
F12 |
全画面共通 | 取消(HEADER画面へ戻り・画面初期化) |
F4 |
CONFIRM | 削除確定(削除確認画面のみ有効) |
Enter |
HEADER / ORDDET | 入力確定・登録/更新実行 |
4. プログラム構造(ORDPGM.CBL)
処理フロー(概要)
処理段落一覧
| 段落名 | 呼出元 | 概要 |
|---|---|---|
0000-MAIN |
— | メイン制御。ファイルOPEN→ループ→CLOSE |
1000-HEADER-PROCESS |
0000 | HEADER画面の表示・受信・キー振り分け |
1100-DISP-HEADER |
1000 | HEADERレコードへメッセージセット&WRITE |
1200-RECV-HEADER |
1000 | HEADERレコードのREAD&インジケータ取得 |
1300-INQUIRY |
1000 | 受注番号でORDHDRを検索→画面作業域ロード→ORDDET遷移 |
1400-NEW-ORDER |
1000 | 画面初期化・本日日付セット→ORDDET遷移 |
2000-DETAIL-PROCESS |
0000 | ORDDET画面の合計計算→表示→受信→キー振り分け |
2100-CALC-TOTALS |
2000 | 明細5行の金額・税額・小計・消費税計・合計を算出 |
2200-DISP-DETAIL |
2000 / 2600 | ORDDETレコードへ全フィールドセット&WRITE |
2300-RECV-DETAIL |
2000 | ORDDETレコードのREAD&インジケータ取得&入力値取込 |
2400-VALIDATE-INPUT |
2000 | 入力チェック(受注番号必須・受注日数字・得意先存在・品目存在・数量) |
2500-SAVE-ORDER |
2000 | ヘッダWRITE/REWRITE+明細削除→再登録 |
2600-DELETE-ORDER |
2000 | CONFIRM画面で確認→ヘッダ・明細DELETE |
8100-LOAD-SCREEN-FROM-HDR |
1300 | ORDHDRレコードを画面作業域にコピー+得意先名取得 |
8200-LOAD-DTL-FROM-FILE |
1300 | ORDDTL を START→READ NEXT で順読み+品目名取得 |
8300-GET-TODAY |
1400 / 2500 | FUNCTION CURRENT-DATE(1:8) で本日日付取得 |
8350-GET-SYSUSER |
(未呼出・暫定) | ジョブユーザID取得(将来 QUSRJOBI API へ変更予定) |
8400-DELETE-DTL |
2500 / 2600 | ORDDTL を START→READ NEXT→DELETE で受注番号一致行を全削除 |
9000-OPEN-FILES |
0000 | 全5ファイルOPEN+FILE STATUS チェック(失敗時 STOP RUN) |
9100-INIT-SCREEN |
複数 | WS-SCREEN / WS-MSGLIN を INITIALIZE / SPACES |
9900-CLOSE-FILES |
0000 | 全5ファイルCLOSE |
5. 入力チェック仕様(2400-VALIDATE-INPUT)
| # | 対象フィールド | チェック内容 | エラーメッセージ |
|---|---|---|---|
| 1 | 受注番号(ORDNO) | スペース不可(必須) | 受注番号を入力してください。 |
| 2 | 受注日(ORDDAT) | 各桁が '0'〜'9' の8桁数字(YYYYMMDD) | 受注日の形式が正しくありません。(YYYYMMDD) |
| 3 | 得意先CD(CUSCD) | スペース不可(必須) | 得意先コードを入力してください。 |
| 4 | 得意先CD(CUSCD) | CUSTMSTに存在すること | 得意先コードが存在しません。正しいコードを入力してください。 |
| 5 | 品目CD(ITMCDn) | 非スペース行はITMMSTに存在すること | 品目コードが存在しません。正しいコードを入力してください。 |
| 6 | 数量(QTYn) | 0 より大きいこと | 数量に0以下の値は設定できません。 |
注意 チェックは上記順序で最初のエラーを検出した時点で EXIT PARAGRAPH し、以降のチェックは行わない(先頭エラー表示方式)。
6. DBファイル仕様
ORDHDR — 受注ヘッダPF(ORDLIB)
| フィールド | 型 | 桁 | 説明 |
|---|---|---|---|
ORDNO 🔑 |
A | 7 | 受注番号(主キー・UNIQUE) |
ORDDAT |
A | 8 | 受注日(YYYYMMDD) |
CUSCD |
A | 6 | 得意先コード |
EMPCD |
A | 4 | 担当者コード |
DLVADR |
A | 30 | 納品先住所 |
DUEDAT |
A | 8 | 納期(YYYYMMDD) |
RMRK |
A | 40 | 備考 |
ORDSTS |
A | 1 | 受注状態(0=入力中 / 1=確認済 / 2=受注済 / 9=キャンセル)省略値=0 |
REGDAT / REGUSR |
A | 8 / 10 | 登録日・登録者ユーザID |
UPDDAT / UPDUSR |
A | 8 / 10 | 最終更新日・更新者ユーザID |
ORDDTL — 受注明細PF(ORDLIB)
| フィールド | 型 | 桁・小数 | 説明 |
|---|---|---|---|
ORDNO 🔑① |
A | 7 | 受注番号(複合主キー①) |
DTLNO 🔑② |
P | 2,0 | 明細行番号 1〜5(複合主キー②) |
ITMCD |
A | 8 | 品目コード |
QTY |
P | 7,2 | 数量(最大 99999.99) |
UPR |
P | 11,2 | 単価 |
AMT |
P | 13,2 | 金額(= QTY × UPR) |
TAX |
P | 11,2 | 消費税額(= AMT × 10%) |
CUSTMST — 得意先マスタPF(MASTERLIB)
| フィールド | 型 | 桁 | 説明 |
|---|---|---|---|
CUSCD 🔑 |
A | 6 | 得意先コード(主キー) |
CUSNM |
A | 20 | 得意先名称(画面に黄色表示) |
CUSNMK |
A | 20 | 得意先名称カナ |
ADDR1 / ADDR2 |
A | 30 | 住所1・住所2 |
ZIPCOD |
A | 7 | 郵便番号 |
TEL / FAX |
A | 13 | 電話番号 / FAX番号 |
PICEMPCD |
A | 4 | 担当者コード |
PAYTERM |
A | 2 | 支払条件コード |
CUSTSTS |
A | 1 | 状態(1=有効 / 9=無効)省略値=1 |
REGDAT / REGUSR / UPDDAT / UPDUSR |
A | 各8/10 | 登録・更新監査証跡 |
ITMMST — 品目マスタPF(MASTERLIB)
| フィールド | 型 | 桁・小数 | 説明 |
|---|---|---|---|
ITMCD 🔑 |
A | 8 | 品目コード(主キー) |
ITMNM |
A | 20 | 品目名称(画面に黄色表示) |
ITMNMK |
A | 20 | 品目名称カナ |
ITMGRP |
A | 4 | 品目グループコード |
UNIT |
A | 5 | 単位(個 / 箱 / kg 等) |
STDPRC |
P | 11,2 | 標準単価(単価0入力時に補完) |
BUYPRC |
P | 11,2 | 仕入単価 |
STQTY / SAFEQTY |
P | 9,2 | 在庫数量 / 安全在庫数量 |
ITMSTS |
A | 1 | 状態(1=有効 / 2=販売中止 / 9=廃止)省略値=1 |
REGDAT / REGUSR / UPDDAT / UPDUSR |
A | 各8/10 | 登録・更新監査証跡 |
7. CL制御プログラム仕様(ORDCTL.CLP)
パラメータ
| 変数 | 型 | 長さ | 説明 |
|---|---|---|---|
&USERID |
*CHAR | 10 | 実行ユーザID(ログ記録に使用) |
&LIBNAME |
*CHAR | 10 | 受注ライブラリ名(省略時:ORDLIB) |
処理フロー
| ステップ | 処理内容 |
|---|---|
| 前提 | グローバル MONMSG(CPF0000 MCH0000) → ERROR ラベルへ |
| 1 | &LIBNAME 省略時に 'ORDLIB' をデフォルト設定 |
| 2 | ADDLIBLE で ORDLIB / MASTERLIB をライブラリリストに追加(重複時は CPF2103 を無視) |
| 3 | CHGJOB DATFMT(*ISO) でジョブ日付フォーマット設定 |
| 4 | RTVSYSVAL(QDATE/QTIME) → 開始ログを SNDPGMMSG(*INFO) で送信 |
| 5 | CHKOBJ で ORDHDR / ORDDTL / CUSTMST / ITMMST / ORDDSP の存在確認(未存在時は FILEERR へ) |
| 6 | CALL ORDPGM(失敗時 → ERROR ラベルへ) |
| 7 | 正常終了ログ送信 → ENDPGM ラベルへ GOTO |
| FILEERR | CPF9898 エスケープメッセージ送信 → ENDPGM へ |
| ERROR | RCVMSG で例外メッセージ受信 → DIAG 送信 → CPF9898 送信 → ENDPGM へ |
| ENDPGM | RMVLIBLE で ORDLIB / MASTERLIB を除去 → ENDPGM |
8. コンパイル手順
/* 1. マスタファイル(MASTERLIB) */
CRTPF FILE(MASTERLIB/CUSTMST) SRCFILE(MASTERLIB/QDDSSRC) SRCMBR(CUSTMST)
CRTPF FILE(MASTERLIB/ITMMST) SRCFILE(MASTERLIB/QDDSSRC) SRCMBR(ITMMST)
/* 2. 受注ファイル(ORDLIB) */
CRTPF FILE(ORDLIB/ORDHDR) SRCFILE(ORDLIB/QDDSSRC) SRCMBR(ORDHDR)
CRTPF FILE(ORDLIB/ORDDTL) SRCFILE(ORDLIB/QDDSSRC) SRCMBR(ORDDTL)
/* 3. 画面ファイル(ORDLIB)← COBOLより先にコンパイル必須 */
CRTDSPF FILE(ORDLIB/ORDDSP) SRCFILE(ORDLIB/QDDSSRC) SRCMBR(ORDDSP)
/* 4. COBOLプログラム */
CRTCBLPGM PGM(ORDLIB/ORDPGM) SRCFILE(ORDLIB/QCBLLESRC) SRCMBR(ORDPGM)
/* 5. CL制御プログラム */
CRTCLPGM PGM(ORDLIB/ORDCTL) SRCFILE(ORDLIB/QCLLESRC) SRCMBR(ORDCTL)
/* 6. 起動 */
CALL PGM(ORDLIB/ORDCTL) PARM('USERID' 'ORDLIB')9. 既知の制約・今後の課題
| # | 区分 | 内容 |
|---|---|---|
| 1 | 暫定 |
WS-SYSUSER はSPACESのまま。実機では QUSRJOBI API 呼び出し、または ORDCTL から ORDPGM へパラメータ渡しに変更すること。 |
| 2 | 未実装 | EMPMST(社員マスタ)が未作成。担当者名(EMPNM)の自動取得処理も COBOL 側に実装されていない。 |
| 3 | 制約 | 明細は最大5行(1画面固定)。F8(明細追加)は予約のみで次頁表示機能は未実装。 |
| 4 | 考慮事項 | 照会モード(読み取り専用)と更新モードの画面保護制御(DSPATR(PR))は未実装。現状は照会時も入力フィールドが更新可能。 |
| 5 | 考慮事項 | 受注日の論理チェック(月・日の範囲)は未実装。YYYYMMDD の数字8桁チェックのみ。 |
ChatGPTでの仕様書出力結果(ソース修正後)
修正後仕様書(ChatGPT)
======================================================================
受注データ入力プログラム 仕様書
- 基本情報
プログラム名 :ORDPGM
プログラムID :ORDPGM
画面ファイル :ORDDSP
機能名 :受注データ入力
作成日 :2026/09/02
概要:
受注ヘッダおよび受注明細について、新規登録、照会、更新、削除を
行うオンライン入力プログラム。
対象環境:
IBM AS/400 / IBM i
COBOL
- システム構成
【使用ファイル】
ORDDSP
種別 :ワークステーションファイル
用途 :受注入力・照会・更新・削除画面
ORDHDR
種別 :物理ファイル(PF)
用途 :受注ヘッダ情報管理
主キー:ORDNO
ORDDTL
種別 :物理ファイル(PF)
用途 :受注明細情報管理
主キー:ORDNO + DTLNO
CUSTMST
種別 :物理ファイル(PF)
ライブラリ:MASTERLIB
用途 :得意先マスタ参照
主キー:CUSCD
ITMMST
種別 :物理ファイル(PF)
ライブラリ:MASTERLIB
用途 :品目マスタ参照
主キー:ITMCD
EMPMST
本仕様では使用しない。
提示されたPF定義に担当者マスタが存在しないため、
担当者名は空白表示とする。
- 機能一覧
3.1 新規登録
F6「新規登録」により新規受注入力を開始する。
処理内容:
1. 画面を初期化する。
2. システム日付を受注日に設定する。
3. 受注ヘッダ情報を入力する。
4. 得意先コードをチェックする。
5. 明細情報を最大5行まで入力する。
6. 品目コードを品目マスタでチェックする。
7. 単価未入力の場合は品目マスタの標準単価を使用する。
8. 金額を「数量 × 単価」で計算する。
9. 消費税を「金額 × 10%」で計算する。
10. 受注ヘッダを登録する。
11. 受注明細を登録する。
12. 登録完了メッセージを表示する。
既に同一受注番号が存在する場合:
「この受注番号はすでに登録されています。」
を表示し、登録しない。
3.2 照会
F5「照会」により受注番号を指定して照会する。
処理内容:
1. 受注番号を入力する。
2. ORDHDRから該当受注を検索する。
3. 該当受注が存在しない場合はエラー表示する。
4. 受注ヘッダを画面に展開する。
5. ORDDTLから該当受注の明細を取得する。
6. 品目マスタから品目名称を取得する。
7. 明細画面に表示する。
照会時の操作モード:
UPDATE相当の画面モードで明細を表示する。
3.3 更新
照会した受注データについて、ヘッダおよび明細を変更して
Enterで更新する。
処理内容:
1. 受注番号を指定する。
2. 既存受注を検索する。
3. ヘッダ情報を変更する。
4. 明細情報を変更する。
5. 得意先コードを再チェックする。
6. 品目コードを再チェックする。
7. 金額・消費税を再計算する。
8. ORDHDRをREWRITEする。
9. 既存の明細を削除する。
10. 入力された明細を再登録する。
11. 更新完了メッセージを表示する。
3.4 削除
F10「削除」により受注を削除する。
処理内容:
1. 受注番号を入力する。
2. ORDHDRから対象受注を検索する。
3. 対象データを画面に表示する。
4. 削除確認メッセージを表示する。
5. Enterで削除を実行する。
6. F12で削除を取消する。
7. F3の場合は終了し、削除しない。
8. ORDHDRを削除する。
9. ORDDTLの該当明細を削除する。
10. 削除完了メッセージを表示する。
- 画面仕様
4.1 画面ファイル
ファイル名:ORDDSP
画面名称 :受注データ入力画面
画面サイズ:24行 × 80桁
画面ID :ORD001
ファンクションキー:
F3 :終了
F5 :照会
F6 :新規登録
F8 :明細追加
F10 :削除
F12 :取消
Enter:
入力確定・登録/更新処理
4.2 HEADER形式
レコード形式:HEADER
用途:
受注番号を入力して、照会・新規・削除などの操作を開始する。
入力項目:
ORDNO
項目名:受注番号
属性 :7A
入力 :可
必須 :○
操作:
F3 :プログラム終了
F5 :受注照会
F6 :新規登録
F10 :受注削除
F12 :画面初期化
4.3 ORDDET形式
レコード形式:ORDDET
用途:
受注ヘッダおよび受注明細の入力・更新・照会を行う。
ヘッダ項目:
ORDNO
項目名:受注番号
桁数 :7A
入力 :可
必須 :○
ORDDAT
項目名:受注日
桁数 :8A
入力 :可
形式 :YYYYMMDD
CUSCD
項目名:得意先コード
桁数 :6A
入力 :可
必須 :○
CUSNM
項目名:得意先名
桁数 :20A
入力 :不可
取得元:CUSTMST
EMPCD
項目名:担当者コード
桁数 :4A
入力 :可
EMPNM
項目名:担当者名
桁数 :12A
入力 :不可
備考 :EMPMST未定義のため空白
DLVADR
項目名:納品先
桁数 :30A
入力 :可
DUEDAT
項目名:納期
桁数 :8A
入力 :可
形式 :YYYYMMDD
RMRK
項目名:備考
桁数 :40A
入力 :可
ORDSTS
項目名:受注状態コード
桁数 :1A
入力 :不可
明細項目:
ITMCD1~ITMCD5
項目名:品目コード
桁数 :8A
入力 :可
ITMNM1~ITMNM5
項目名:品目名称
桁数 :20A
入力 :不可
取得元:ITMMST
QTY1~QTY5
項目名:数量
桁数 :5Y 2B
COBOL対応:9(5)V99
入力 :可
必須 :品目コード入力時は○
0以下 :不可
UPR1~UPR5
項目名:単価
桁数 :9Y 2B
COBOL対応:9(9)V99
入力 :可
0の場合:ITMMST.STDPRCを使用
AMT1~AMT5
項目名:金額
桁数 :11Y 2O
COBOL対応:9(11)V99
入力 :不可
計算 :数量 × 単価
TAX1~TAX5
項目名:消費税
桁数 :9Y 2O
COBOL対応:9(9)V99
入力 :不可
計算 :金額 × 10%
合計項目:
SUBTOT
項目名:小計
COBOL対応:9(11)V99
計算 :明細金額合計
TAXTOT
項目名:消費税計
COBOL対応:9(9)V99
計算 :明細消費税合計
GRANDTL
項目名:合計
COBOL対応:9(12)V99
計算 :小計 + 消費税計
- ファイル仕様
5.1 ORDHDR(受注ヘッダ)
ファイル種別:PF
レコード形式:ORDHDRR
主キー :ORDNO
UNIQUE :あり
項目:
ORDNO
7A
受注番号
主キー
ORDDAT
8A
受注日 YYYYMMDD
CUSCD
6A
得意先コード
EMPCD
4A
担当者コード
DLVADR
30A
納品先住所
DUEDAT
8A
納期 YYYYMMDD
RMRK
40A
備考
ORDSTS
1A
受注状態
REGDAT
8A
登録日
REGUSR
10A
登録者ユーザID
UPDDAT
8A
最終更新日
UPDUSR
10A
最終更新者ユーザID
5.2 ORDDTL(受注明細)
ファイル種別:PF
レコード形式:ORDDTLR
主キー :ORDNO + DTLNO
UNIQUE :あり
項目:
ORDNO
7A
受注番号
主キー
DTLNO
2P 0
明細行番号
主キー
1~99
ITMCD
8A
品目コード
QTY
7P 2
数量
UPR
11P 2
単価
AMT
13P 2
金額
TAX
11P 2
消費税
5.3 CUSTMST(得意先マスタ)
ファイル種別:PF
ライブラリ:MASTERLIB
レコード形式:CUSTMSTR
主キー:CUSCD
主な項目:
CUSCD
6A
得意先コード
CUSNM
20A
得意先名称
CUSNMK
20A
得意先名称カナ
ADDR1
30A
住所1
ADDR2
30A
住所2
ZIPCOD
7A
郵便番号
TEL
13A
電話番号
FAX
13A
FAX番号
PICEMPCD
4A
担当者コード
PAYTERM
2A
支払条件コード
CUSTSTS
1A
得意先状態
1=有効
9=無効
REGDAT
8A
登録日
REGUSR
10A
登録者
UPDDAT
8A
更新日
UPDUSR
10A
更新者
5.4 ITMMST(品目マスタ)
ファイル種別:PF
ライブラリ:MASTERLIB
レコード形式:ITMMSTR
主キー:ITMCD
主な項目:
ITMCD
8A
品目コード
ITMNM
20A
品目名称
ITMNMK
20A
品目名称カナ
ITMGRP
4A
品目グループコード
UNIT
5A
単位
STDPRC
11P 2
標準単価
BUYPRC
11P 2
仕入単価
STQTY
9P 2
在庫数量
SAFEQTY
9P 2
安全在庫数量
ITMSTS
1A
品目状態
1=有効
2=販売中止
9=廃止
REGDAT
8A
登録日
REGUSR
10A
登録者
UPDDAT
8A
更新日
UPDUSR
10A
更新者
- データチェック仕様
6.1 受注番号チェック
対象:ORDNO
チェック内容:
・未入力不可
・新規登録時、既存データとの重複不可
・更新時、対象データが存在すること
・照会時、対象データが存在すること
・削除時、対象データが存在すること
エラーメッセージ:
「受注番号を入力してください。」
「この受注番号はすでに登録されています。」
「受注番号が見つかりません。」
6.2 受注日チェック
対象:ORDDAT
チェック内容:
・数値であること
・YYYYMMDD形式であること
エラーメッセージ:
「受注日の形式が正しくありません。(YYYYMMDD)」
6.3 得意先コードチェック
対象:CUSCD
チェック内容:
・未入力不可
・CUSTMSTに存在すること
・CUSTMST.CUSTSTS = '1' であること
正常時:
CUSTMST.CUSNMを画面のCUSNMへ設定する。
エラーメッセージ:
「得意先コードを入力してください。」
「得意先コードが存在しないか、無効です。」
6.4 品目コードチェック
対象:ITMCD
チェック内容:
・品目コードが入力されている明細のみチェック
・ITMMSTに存在すること
・ITMMST.ITMSTS = '1' であること
正常時:
ITMMST.ITMNMを画面のITMNMへ設定する。
エラーメッセージ:
「品目コードが存在しないか、販売停止です。」
6.5 数量チェック
対象:QTY1~QTY5
チェック内容:
・品目コード入力時は必須
・0以下は禁止
エラーメッセージ:
「数量に0以下の値は設定できません。」
6.6 明細件数チェック
最大明細行数:5行
最低明細件数:1件
0件の場合:
「明細を1件以上入力してください。」
6件以上の入力:
「明細は5行まで入力できます。」
- 金額計算仕様
7.1 明細金額
金額 = 数量 × 単価
COBOL:
COMPUTE WS-AMT(DL-IDX) =
WS-QTY(DL-IDX) * WS-UPR(DL-IDX)
7.2 消費税
消費税率:10%
消費税 = 金額 × 0.10
ROUNDED指定により丸める。
COBOL:
COMPUTE WS-TAX(DL-IDX) ROUNDED =
WS-AMT(DL-IDX) * WS-TAX-RATE
7.3 小計
小計 = 有効な明細の金額合計
7.4 消費税計
消費税計 = 有効な明細の消費税合計
7.5 合計
合計 = 小計 + 消費税計
- 受注状態仕様
ORDSTS:
'0'
状態名:入力中
'1'
状態名:確認済
'2'
状態名:受注済
'9'
状態名:キャンセル
新規登録/更新完了時:
ORDSTS = '1'
ORDSTNM = '確認済'
- 操作モード
WS-OP-MODE:
'N'
新規モード
'U'
更新モード
'I'
照会モード
新規:
F6によりWS-OP-MODE = 'N'
照会:
F5により受注を取得後、WS-OP-MODE = 'U'
として画面遷移する。
照会モード:
WS-OP-INQUIRYの場合、Enterによる登録・更新処理を
行わない。
- 画面モード
WS-SCREEN-MODE:
'H'
ヘッダ画面
'D'
明細画面
初期状態:
H
F6「新規」:
H → D
F5「照会」:
H → D
F10「削除」:
H → D → 削除確認 → H
F5「戻る」等:
D → H
- ファンクションキー処理
F3
処理:
プログラム終了
削除確認中:
削除を実行せず終了する。
F5
HEADER:
受注照会
ORDDET:
ヘッダ画面へ戻る処理として使用する。
F6
新規受注入力を開始する。
F8
明細追加。
最大5行のため、5行を超える場合は
「明細は5行まで入力できます。」
を表示する。
F10
受注削除。
削除確認後、Enterで削除を実行する。
F12
取消。
入力を取り消す、または画面を初期状態へ戻す。
Enter
明細入力画面:
入力チェック後、新規登録または更新を実行する。
削除確認:
削除を実行する。
- 新規登録処理詳細
① F6押下
② 画面初期化
WS-SCREENをINITIALIZE
③ システム日付取得
FUNCTION CURRENT-DATE(1:8)
④ 受注日設定
WS-TODAY → WS-ORDDAT
⑤ 入力受付
受注番号
受注日
得意先コード
担当者コード
納品先
納期
備考
明細1~5
⑥ 入力チェック
⑦ ORDHDR存在確認
⑧ 既存データなしの場合、ORDHDR WRITE
⑨ ORDDTLへ明細WRITE
⑩ 正常終了
「受注データを登録しました。」
- 更新処理詳細
① 既存受注を照会
② ORDHDRを読み込む
③ ORDDTLを読み込む
④ 画面へ展開
⑤ ユーザーが内容を変更
⑥ 入力チェック
⑦ ORDHDRをREWRITE
⑧ 既存ORDDTLを削除
⑨ 新しい明細をORDDTLへWRITE
⑩ 正常終了
「受注データを更新しました。」
- 削除処理詳細
① F10押下
② 受注番号確認
③ ORDHDR検索
④ 対象データ表示
⑤ 削除確認
「削除してよいですか? Enter=確定 F12=取消」
⑥ Enterの場合
ORDHDR DELETE
ORDDTLを該当受注番号単位でDELETE
⑦ 正常終了
「受注データを削除しました。」
⑧ F12の場合
削除せず取消
- 明細読込仕様
ORDDTLのキー:
ORDNO + DTLNO
対象受注番号をORDNOへ設定し、STARTを実行する。
START後、READ NEXT RECORDにより順次取得する。
以下の場合は読み込み終了:
・ファイル終端
・取得したORDNOが対象受注番号と異なる
・最大5行を超える
取得した明細:
DT-ITMCD → WS-ITMCD
DT-QTY → WS-QTY
DT-UPR → WS-UPR
DT-AMT → WS-AMT
DT-TAX → WS-TAX
品目コードをITMMSTから検索し、
ITMNMを画面に表示する。
- 明細削除仕様
対象受注番号をDT-ORDNOへ設定。
DTLNO = 1からSTARTする。
READ NEXT RECORDを繰り返し、
ORDNOが一致する明細をDELETEする。
対象受注番号が変わった時点で処理終了。
- ファイルアクセス仕様
ORDDSP
OPEN I-O
WRITE
READ
CLOSE
ORDHDR
OPEN I-O
READ RANDOM
WRITE
REWRITE
DELETE
CLOSE
ORDDTL
OPEN I-O
START
READ NEXT
WRITE
DELETE
CLOSE
CUSTMST
OPEN INPUT
READ RANDOM
CLOSE
ITMMST
OPEN INPUT
READ RANDOM
CLOSE
- ファイルステータス
WS-DSPSTS
ORDDSPのファイルステータス
WS-HDRSTS
ORDHDRのファイルステータス
WS-DTLSTS
ORDDTLのファイルステータス
WS-CUSSTS
CUSTMSTのファイルステータス
WS-ITMSTS
ITMMSTのファイルステータス
正常:
'00'
主な異常:
ORDHDR READ
INVALID KEY
対象受注なし
CUSTMST READ
INVALID KEY
対象得意先なし
ITMMST READ
INVALID KEY
対象品目なし
ORDDTL READ
AT END
明細終了
- エラーメッセージ一覧
MSG-NORMAL
正常に処理されました。
MSG-NOT-FOUND
受注番号が見つかりません。受注番号を確認してください。
MSG-ALREADY-EXISTS
この受注番号はすでに登録されています。
MSG-ORDNO-REQ
受注番号を入力してください。
MSG-CUSCD-REQ
得意先コードを入力してください。
MSG-CUSCD-ERR
得意先コードが存在しないか、無効です。
MSG-ORDDAT-ERR
受注日の形式が正しくありません。(YYYYMMDD)
MSG-ITMCD-ERR
品目コードが存在しないか、販売停止です。
MSG-QTY-ERR
数量に0以下の値は設定できません。
MSG-DETAIL-REQ
明細を1件以上入力してください。
MSG-DELETE-CONF
削除してよいですか? Enter=確定 F12=取消
MSG-DELETED
受注データを削除しました。
MSG-SAVED
受注データを登録しました。
MSG-UPDATED
受注データを更新しました。
MSG-DTL-MAX
明細は5行まで入力できます。
MSG-INQUIRY
照会モードです。
MSG-IO-ERROR
ファイル入出力エラーが発生しました。
MSG-OPEN-ERROR
ファイルオープンエラーが発生しました。
- 項目対応表
【画面 → プログラム → ORDHDR】
ORDNO → WS-ORDNO → HD-ORDNO
ORDDAT → WS-ORDDAT → HD-ORDDAT
CUSCD → WS-CUSCD → HD-CUSCD
EMPCD → WS-EMPCD → HD-EMPCD
DLVADR → WS-DLVADR → HD-DLVADR
DUEDAT → WS-DUEDAT → HD-DUEDAT
RMRK → WS-RMRK → HD-RMRK
ORDSTS → WS-ORDSTS → HD-ORDSTS
【画面 → プログラム → ORDDTL】
ITMCD1 → WS-ITMCD(1) → DT-ITMCD
QTY1 → WS-QTY(1) → DT-QTY
UPR1 → WS-UPR(1) → DT-UPR
AMT1 → WS-AMT(1) → DT-AMT
TAX1 → WS-TAX(1) → DT-TAX
ITMCD2 → WS-ITMCD(2)
QTY2 → WS-QTY(2)
UPR2 → WS-UPR(2)
AMT2 → WS-AMT(2)
TAX2 → WS-TAX(2)
ITMCD3 → WS-ITMCD(3)
QTY3 → WS-QTY(3)
UPR3 → WS-UPR(3)
AMT3 → WS-AMT(3)
TAX3 → WS-TAX(3)
ITMCD4 → WS-ITMCD(4)
QTY4 → WS-QTY(4)
UPR4 → WS-UPR(4)
AMT4 → WS-AMT(4)
TAX4 → WS-TAX(4)
ITMCD5 → WS-ITMCD(5)
QTY5 → WS-QTY(5)
UPR5 → WS-UPR(5)
AMT5 → WS-AMT(5)
TAX5 → WS-TAX(5)
- プログラム段落構成
0000-MAIN
メイン処理
1000-HEADER-PROCESS
ヘッダ画面処理
1100-DISP-HEADER
ヘッダ画面表示
1200-RECV-HEADER
ヘッダ画面入力
1300-INQUIRY
受注照会
1400-NEW-ORDER
新規受注
1500-DELETE-FROM-HEADER
ヘッダ画面からの削除
2000-DETAIL-PROCESS
明細画面処理
2100-CALC-TOTALS
合計計算
2200-DISP-DETAIL
明細画面表示
2300-RECV-DETAIL
明細画面入力
2400-VALIDATE-INPUT
入力チェック
2500-SAVE-ORDER
登録/更新
2600-DELETE-ORDER
削除
8100-LOAD-SCREEN-FROM-HDR
ORDHDR → 画面データ展開
8200-LOAD-DTL-FROM-FILE
ORDDTL → 画面データ展開
8300-GET-TODAY
システム日付取得
8400-DELETE-DTL
明細削除
9000-OPEN-FILES
ファイルOPEN
9100-INIT-SCREEN
画面初期化
9900-CLOSE-FILES
ファイルCLOSE
- 処理フロー
【プログラム起動】
↓
ファイルOPEN
↓
画面初期化
↓
HEADER画面
↓
┌─────┼──────┬──────┬──────┐
↓ ↓ ↓ ↓ ↓
F3 F5 F6 F10 その他
↓ ↓ ↓ ↓
終了 照会 新規 削除
↓ ↓ ↓
└──→ ORDDET ←─┘
↓
入力/照会
↓
入力チェック
↓
┌─────┴─────┐
↓ ↓
新規 更新
↓ ↓
WRITE REWRITE
↓ ↓
└─────┬─────┘
↓
明細登録
↓
完了
↓
HEADER
- 初期化仕様
WS-SCREENをINITIALIZEする。
初期値:
WS-OP-MODE = 'N'
WS-ORDSTS = '0'
WS-ORDSTNM = '入力中'
明細:
1~5行を空白/ゼロに初期化する。
消費税率:
10%
- ユーザー情報・登録更新情報
プログラム起動時にLINKAGE SECTIONの
LK-USERIDをWS-SYSUSERへ設定する。
新規登録時:
REGDAT = システム日付
REGUSR = 実行ユーザID
UPDDAT = システム日付
UPDUSR = 実行ユーザID
更新時:
UPDDAT = システム日付
UPDUSR = 実行ユーザID
- 日付仕様
システム日付取得:
FUNCTION CURRENT-DATE(1:8)
格納形式:
YYYYMMDD
対象項目:
ORDDAT
DUEDAT
REGDAT
UPDDAT
- 非機能・エラー処理
ファイルOPENエラー発生時:
1. MSG-OPEN-ERRORを設定
2. RETURN-CODE = 2
3. 終了フラグを設定
4. 処理終了
ファイルI/Oエラー発生時:
MSG-IO-ERRORを画面へ設定する。
- 注意事項・制約事項
-
明細入力可能件数は5件まで。
-
消費税率はプログラム内で10%固定としている。
-
担当者マスタEMPMSTは今回のPF定義に存在しないため、
担当者名EMPNMは空白とする。 -
受注日について、現行プログラムではNUMERICチェックを
行っているが、年月日としての妥当性チェック
(例:20261399など)は別途実装が必要。 -
納期DUEDATについても、現行プログラムでは
明示的な日付妥当性チェックを行っていない。 -
更新処理では、既存明細を一旦削除した後、
入力された明細を再登録する方式を採用する。 -
ORDHDR削除後にORDHDR削除後にORDDTLを削除するため、
トランザクション制御を利用しない場合、
明細削除失敗時にヘッダのみ削除された状態になる
可能性がある。 -
ORDDTLのキーはORDNO + DTLNOの複合キー。
-
明細番号は画面上の1~5行をそのままDTLNOとして使用する。
-
品目コードが未入力の明細行は未使用行として扱う。
- 画面定義とプログラム間の前提
ORDDSPには以下のレコード形式が存在する。
HEADER
ORDDET
CONFIRM
現行プログラムでは主に以下を使用する。
HEADER
WRITE
READ
ORDDET
WRITE
READ
CONFIRMについては画面DDS上に定義されているが、
現行プログラムでは明示的なWRITE/READ処理に使用していない。
- 主要メッセージ遷移
新規登録成功:
MSG-SAVED
更新成功:
MSG-UPDATED
削除成功:
MSG-DELETED
照会:
MSG-INQUIRY
対象なし:
MSG-NOT-FOUND
重複:
MSG-ALREADY-EXISTS
得意先エラー:
MSG-CUSCD-ERR
品目エラー:
MSG-ITMCD-ERR
数量エラー:
MSG-QTY-ERR
明細なし:
MSG-DETAIL-REQ
I/Oエラー:
MSG-IO-ERROR
OPENエラー:
MSG-OPEN-ERROR
- まとめ
ORDPGMは、IBM AS/400 / IBM i環境における受注データ入力を
担当するオンラインCOBOLプログラムである。
ORDHDRを受注ヘッダ、ORDDTLを受注明細として管理し、
CUSTMSTおよびITMMSTを参照して入力内容を検証する。
主な機能は以下のとおり。
・受注新規登録
・受注照会
・受注更新
・受注削除
・得意先チェック
・品目チェック
・標準単価自動設定
・明細金額計算
・消費税計算
・小計/消費税計/合計計算
・登録/更新情報管理
・ファイルI/Oエラー処理
受注明細は最大5行まで入力可能で、
明細金額は「数量×単価」、
消費税は「金額×10%」で算出する。
担当者マスタEMPMSTは定義されていないため、
担当者名は本仕様では空白扱いとする。
======================================================================
仕様書 END
当記事の著作権はIBMに帰属します。詳細はこちらを参照ください。