0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM Bobを使用した受注データプログラムと仕様書の作成(COBOL ILE + CL)※仕様書出力結果

0
Last updated at Posted at 2026-09-14

仕様書出力結果

こちらの記事は、メイン記事「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桁チェックのみ。
Made with IBM Bob

ChatGPTでの仕様書出力結果(ソース修正後)

修正後仕様書(ChatGPT)

======================================================================
受注データ入力プログラム 仕様書

  1. 基本情報

プログラム名 :ORDPGM
プログラムID :ORDPGM
画面ファイル :ORDDSP
機能名 :受注データ入力
作成日 :2026/09/02

概要:
受注ヘッダおよび受注明細について、新規登録、照会、更新、削除を
行うオンライン入力プログラム。

対象環境:
IBM AS/400 / IBM i
COBOL


  1. システム構成

【使用ファイル】

ORDDSP
種別 :ワークステーションファイル
用途 :受注入力・照会・更新・削除画面

ORDHDR
種別 :物理ファイル(PF)
用途 :受注ヘッダ情報管理
主キー:ORDNO

ORDDTL
種別 :物理ファイル(PF)
用途 :受注明細情報管理
主キー:ORDNO + DTLNO

CUSTMST
種別 :物理ファイル(PF)
ライブラリ:MASTERLIB
用途 :得意先マスタ参照
主キー:CUSCD

ITMMST
種別 :物理ファイル(PF)
ライブラリ:MASTERLIB
用途 :品目マスタ参照
主キー:ITMCD

EMPMST
本仕様では使用しない。
提示されたPF定義に担当者マスタが存在しないため、
担当者名は空白表示とする。


  1. 機能一覧

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. 削除完了メッセージを表示する。


  1. 画面仕様

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
  計算  :小計 + 消費税計

  1. ファイル仕様

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
  更新者

  1. データチェック仕様

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行まで入力できます。」


  1. 金額計算仕様

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 合計

合計 = 小計 + 消費税計


  1. 受注状態仕様

ORDSTS:

'0'
  状態名:入力中

'1'
  状態名:確認済

'2'
  状態名:受注済

'9'
  状態名:キャンセル

新規登録/更新完了時:
ORDSTS = '1'
ORDSTNM = '確認済'


  1. 操作モード

WS-OP-MODE:

'N'
  新規モード

'U'
  更新モード

'I'
  照会モード

新規:
F6によりWS-OP-MODE = 'N'

照会:
F5により受注を取得後、WS-OP-MODE = 'U'
として画面遷移する。

照会モード:
WS-OP-INQUIRYの場合、Enterによる登録・更新処理を
行わない。


  1. 画面モード

WS-SCREEN-MODE:

'H'
  ヘッダ画面

'D'
  明細画面

初期状態:
H

F6「新規」:
H → D

F5「照会」:
H → D

F10「削除」:
H → D → 削除確認 → H

F5「戻る」等:
D → H


  1. ファンクションキー処理

F3
処理:
プログラム終了

削除確認中:
  削除を実行せず終了する。

F5
HEADER:
受注照会

ORDDET:
  ヘッダ画面へ戻る処理として使用する。

F6
新規受注入力を開始する。

F8
明細追加。

最大5行のため、5行を超える場合は
「明細は5行まで入力できます。」
を表示する。

F10
受注削除。

削除確認後、Enterで削除を実行する。

F12
取消。

入力を取り消す、または画面を初期状態へ戻す。

Enter
明細入力画面:
入力チェック後、新規登録または更新を実行する。

削除確認:
  削除を実行する。

  1. 新規登録処理詳細

① F6押下

② 画面初期化

  WS-SCREENをINITIALIZE

③ システム日付取得

  FUNCTION CURRENT-DATE(1:8)

④ 受注日設定

  WS-TODAY → WS-ORDDAT

⑤ 入力受付

  受注番号
  受注日
  得意先コード
  担当者コード
  納品先
  納期
  備考
  明細1~5

⑥ 入力チェック

⑦ ORDHDR存在確認

⑧ 既存データなしの場合、ORDHDR WRITE

⑨ ORDDTLへ明細WRITE

⑩ 正常終了

  「受注データを登録しました。」

  1. 更新処理詳細

① 既存受注を照会

② ORDHDRを読み込む

③ ORDDTLを読み込む

④ 画面へ展開

⑤ ユーザーが内容を変更

⑥ 入力チェック

⑦ ORDHDRをREWRITE

⑧ 既存ORDDTLを削除

⑨ 新しい明細をORDDTLへWRITE

⑩ 正常終了

  「受注データを更新しました。」

  1. 削除処理詳細

① F10押下

② 受注番号確認

③ ORDHDR検索

④ 対象データ表示

⑤ 削除確認

  「削除してよいですか? Enter=確定  F12=取消」

⑥ Enterの場合

  ORDHDR DELETE

  ORDDTLを該当受注番号単位でDELETE

⑦ 正常終了

  「受注データを削除しました。」

⑧ F12の場合

  削除せず取消

  1. 明細読込仕様

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を画面に表示する。


  1. 明細削除仕様

対象受注番号をDT-ORDNOへ設定。

DTLNO = 1からSTARTする。

READ NEXT RECORDを繰り返し、
ORDNOが一致する明細をDELETEする。

対象受注番号が変わった時点で処理終了。


  1. ファイルアクセス仕様

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


  1. ファイルステータス

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
    明細終了

  1. エラーメッセージ一覧

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
ファイルオープンエラーが発生しました。


  1. 項目対応表

【画面 → プログラム → 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)

  1. プログラム段落構成

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


  1. 処理フロー

【プログラム起動】
↓
ファイルOPEN
↓
画面初期化
↓
HEADER画面
↓
┌─────┼──────┬──────┬──────┐
↓ ↓ ↓ ↓ ↓
F3 F5 F6 F10 その他
↓ ↓ ↓ ↓
終了 照会 新規 削除
↓ ↓ ↓
└──→ ORDDET ←─┘
↓
入力/照会
↓
入力チェック
↓
┌─────┴─────┐
↓ ↓
新規 更新
↓ ↓
WRITE REWRITE
↓ ↓
└─────┬─────┘
↓
明細登録
↓
完了
↓
HEADER


  1. 初期化仕様

WS-SCREENをINITIALIZEする。

初期値:

WS-OP-MODE    = 'N'
WS-ORDSTS     = '0'
WS-ORDSTNM    = '入力中'

明細:
1~5行を空白/ゼロに初期化する。

消費税率:
10%


  1. ユーザー情報・登録更新情報

プログラム起動時にLINKAGE SECTIONの
LK-USERIDをWS-SYSUSERへ設定する。

新規登録時:

REGDAT = システム日付
REGUSR = 実行ユーザID

UPDDAT = システム日付
UPDUSR = 実行ユーザID

更新時:

UPDDAT = システム日付
UPDUSR = 実行ユーザID

  1. 日付仕様

システム日付取得:

FUNCTION CURRENT-DATE(1:8)

格納形式:

YYYYMMDD

対象項目:

ORDDAT
DUEDAT
REGDAT
UPDDAT

  1. 非機能・エラー処理

ファイルOPENエラー発生時:

1. MSG-OPEN-ERRORを設定
2. RETURN-CODE = 2
3. 終了フラグを設定
4. 処理終了

ファイルI/Oエラー発生時:

MSG-IO-ERRORを画面へ設定する。

  1. 注意事項・制約事項

  1. 明細入力可能件数は5件まで。

  2. 消費税率はプログラム内で10%固定としている。

  3. 担当者マスタEMPMSTは今回のPF定義に存在しないため、
    担当者名EMPNMは空白とする。

  4. 受注日について、現行プログラムではNUMERICチェックを
    行っているが、年月日としての妥当性チェック
    (例:20261399など)は別途実装が必要。

  5. 納期DUEDATについても、現行プログラムでは
    明示的な日付妥当性チェックを行っていない。

  6. 更新処理では、既存明細を一旦削除した後、
    入力された明細を再登録する方式を採用する。

  7. ORDHDR削除後にORDHDR削除後にORDDTLを削除するため、
    トランザクション制御を利用しない場合、
    明細削除失敗時にヘッダのみ削除された状態になる
    可能性がある。

  8. ORDDTLのキーはORDNO + DTLNOの複合キー。

  9. 明細番号は画面上の1~5行をそのままDTLNOとして使用する。

  10. 品目コードが未入力の明細行は未使用行として扱う。


  1. 画面定義とプログラム間の前提

ORDDSPには以下のレコード形式が存在する。

HEADER
ORDDET
CONFIRM

現行プログラムでは主に以下を使用する。

HEADER
  WRITE
  READ

ORDDET
  WRITE
  READ

CONFIRMについては画面DDS上に定義されているが、
現行プログラムでは明示的なWRITE/READ処理に使用していない。


  1. 主要メッセージ遷移

新規登録成功:
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


  1. まとめ

ORDPGMは、IBM AS/400 / IBM i環境における受注データ入力を
担当するオンラインCOBOLプログラムである。

ORDHDRを受注ヘッダ、ORDDTLを受注明細として管理し、
CUSTMSTおよびITMMSTを参照して入力内容を検証する。

主な機能は以下のとおり。

・受注新規登録
・受注照会
・受注更新
・受注削除
・得意先チェック
・品目チェック
・標準単価自動設定
・明細金額計算
・消費税計算
・小計/消費税計/合計計算
・登録/更新情報管理
・ファイルI/Oエラー処理

受注明細は最大5行まで入力可能で、
明細金額は「数量×単価」、
消費税は「金額×10%」で算出する。

担当者マスタEMPMSTは定義されていないため、
担当者名は本仕様では空白扱いとする。

======================================================================
仕様書 END


当記事の著作権はIBMに帰属します。詳細はこちらを参照ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?