RPGによるコーディング | 会話型処理(2) |
RPGによるコーディング方法を取り上げます。随時増ページの予定です。
画面ファイルでサブファイルを使用した会話型処理
ここでは画面からの入力によって、受注ファイル(F520)を更新するケースを想定します。
レコードの追加、変更、削除の処理をまとめて更新ということにします。
シナリオ(ロジック)
会話型処理の方法はいろいろなやりかたがありますが、ここでは、第1画面、第2画面、・・・と
進行し、処理が正常に終了すれば、また第1画面に戻るというシナリオで話しをすすめます。
この方法だと、各画面の独立性が高く、処理も簡単で、デバッグをする場合などにおいて注意を配る
べき範囲を限定できるという利点があります。そのロジックは次のようになります。
終了キー(F3キー)が押されるまで以下の処理を繰り返します。
画面番号により以下の処理
1.第1画面のとき
マスターファイル更新のキー部分を取得のための画面を表示します。
第1画面から入力を取得します。
1.1 F3キーのとき、プログラム終了します。
1.2 F6キーのとき、処理モードを切替します。
1.3 実行キーのとき、入力チェックをします。
OKならサブファイルへデータをセットし、
第2画面への画面番号にします。
2.第2画面のとき
マスターのデータ部分取得のための画面を表示します。
第2画面から入力を取得します。
2.1 F12キーのとき、第1画面への番号にします。
2.2 実行キーのとき入力チェックをします。
結果OKなら第3画面への画面番号にします。
3.第3画面のとき
マスターのデータ部分取得のための画面を表示します。
第3画面から入力を取得します。
3.1 F12キーのとき、第1画面への番号にします。
3.2 実行キーのとき入力チェックをします。
結果OKなら更新確認状態にします。
結果OKですでに更新確認状態であれば、ファイルを更新します。
画面番号を1にします。
ここで説明するのは、第1・第2・第3の3枚の画面のケースです。
第1画面 受注番号を入力する画面です。
第2画面 受注共通データを入力する画面です。
第3画面 受注明細データを入力する画面です。
プログラム作成の前準備
RPGプログラムを作成するまえに、プログラムが使用するファイルを作成しておく必要があ
ります。ここでは、画面ファイル(RF520S)と、受注ファイル(F520)、得意先
マスターファイル(M420)です。
第1画面
RF520 編集 受 注 入 力 0/08/22 11:54:12 受注 000001 F3= 終了 F6= 処理選択
第2画面
RF520 編集 受 注 入 力 0/08/22 12:01:18 受注 000001 得意先 11111 受注日 0/08/22 F12= 取消
第3画面
RF520 編集 受 注 入 力 0/08/22 12:01:38 受注 000001 得意先 11111 受注日 0/08/22 NO 品目 受注数 受注単価 受注金額 01 111111 1 11.00 11 02 222222 2 22.00 44 03 333333 3 33.00 99 04 444444 4 44.00 176 05 555555 5 55.00 275 06 666666 6 66.00 396 07 777777 7 77.00 539 08 888888 8 88.00 704 09 999999 9 99.00 891 10 111111 10 110.00 1,100 F12= 取消
画面ファイルのDDSは次のとおりです。
A*----------------------------------------------------------- A* ID : RF520S A* NAME :受注入力画面 A*画面1= FMT99 + FMT01 A*画面2= FMT99 + FMT01 + FMT02 A*画面3= FMT99 + FMT02 + CTL01(SFL01) A*----------------------------------------------------------- A PRINT A INDARA A R FMT01 OVERLAY PROTECT A CF03 CF06 A* A S1PGID 10A O 1 2 TEXT('PGM-ID') A S1MOD 6O +1 TEXT('処理モード') A 1 31 ' 受 注 入 力 ' A DSPATR(RI) A 1 61 DATE EDTCDE(Y) A 1 71 TIME A* A 3 2 '受注Y' A S1JUNO 6Y 0B +1 TEXT('受注Y') A 31 DSPATR(PC RI) A*----------------------------------------------------------- A R FMT02 TEXT('第二画面') A OVERLAY PROTECT A CF03 CF12 A* A 4 2 '得意先' A S2TKNO 5A B +1TEXT('得意先Y') A 32 DSPATR(PC RI) A 28 DSPATR(PR) A S2NMKJ 42O O +1TEXT('得意先名') A 4 61 '受注日' A S2JUDT 6Y 0B +1TEXT('受注日') A EDTCDE(Y) A 33 DSPATR(PC RI) A 28 DSPATR(PR) A* A*----------------------------------------------------------- A R SFL01 A SFL A 27 SFLNXTCHG A* A S4GYNO 2Y 0O 7 2TEXT('行Y') A S4HNNO 6A B +2TEXT('品目Y') A 41 DSPATR(PC RI) A 28 DSPATR(PR) A S4JUSU 7Y 0B +2TEXT('受注数') A EDTCDE(K) A 42 DSPATR(PC RI) A 28 DSPATR(PR) A S4JUTK 9Y 2B +2TEXT('受注@') A EDTCDE(K) A 43 DSPATR(PC RI) A 28 DSPATR(PR) A S4JUGK 11Y 0O +2TEXT('受注額') A EDTCDE(K) A S4SEDT 8Y 0H TEXT('請求日') A*----------------------------------------------------------- A R CTL01 A OVERLAY PROTECT A CF12 A* ROLLUP(19) A* ROLLDOWN(20) A SFLCTL(SFL01) A SFLSIZ(100) SFLPAG(10) A 24 SFLDSPCTL A 23 SFLDSP A 22 SFLCLR A 21 SFLINZ A CSRLOC(S1LIN S1COL) A S1LIN 3S 0H TEXT('カーソル制御(行') A S1COL 3S 0H TEXT('カーソル制御(桁') A RCDNBR 4S 0H SFLRCDNBR A 6 02'NO' A 6 05'品目Y' A 6 15'受注数' A 6 28'受注単価' A 6 43'受注金額' A*----------------------------------------------------------- A R FMT99 A 01 23 2 'F3=終了 F6=処理選択' A 02 23 2 'F12=取消' A 03 23 2 'F12=取消' A S9MSG 78A O 24 1TEXT('MSG ')
第1画面
第1画面はFMT01とFMT99の2つの様式から構成されます。
FMT01はキーデータ(受注番号)入力のための様式、FMT99はキーガイド、メッセージ
表示のための様式です。
第2画面
第2画面はFMT01,FMT02,FMT99の3つの様式から構成されます。
FMT01、FMT99は上記に同じ。FMT02は受注見出データ(得意先、受注日)入力の
ための様式です。
第3画面
第3画面はFMT01,FMT02,FMT99,CTL01(SFL01を含む)の5個の
様式から構成されます。この部分は受注明細データ入力のための様式です。
更新対象ファイル
更新対象となるファイルは次のように定義されているものとします。
A*-------------------------------------------------------------- A* ID : F520 A* NAME : 受注明細ファイル A* KEY : 受注 , 明細 A*-------------------------------------------------------------- A UNIQUE A R F520R TEXT(' 受注明細ファイル ') A* A JDJUNO 6S 0 COLHDG(' 受注 ') A JDMENO 2S 0 COLHDG(' 明細 ') A JDTKNO 5A COLHDG(' 得意先 ') A JDHNNO 6A COLHDG(' 品目 ') A JDJUSU 7S 0 COLHDG(' 受注数 ') A JDJUTK 9S 2 COLHDG(' 受注@ ') A JDJUDT 8S 0 COLHDG(' 受注日 ') A JDSEDT 8S 0 COLHDG(' 請求日 ') A* A K JDJUNO A K JDMENO
受注データの入力に際しては、得意先マスター(M420)を参照してチェックするものとし、
そのDDSは次のとおりとします。
A*--------------------------------------------------------------- A* ID : M420 A* NAME : 得意先マスター A*--------------------------------------------------------------- A UNIQUE A R M420R A* データ A TKSTS 1 COLHDG(' 状態 ') A TKTKNO 5A COLHDG(' 得意先 ') A TKNMKJ 42O COLHDG(' 得意先名 ') A TKNMKN 20A COLHDG(' 得意先カナ名 ') A TKTEL 12A COLHDG(' TEL ') A TKSLNO 4A COLHDG(' 担当営業 ') A TKFLAG 1A COLHDG(' フラグ ') A TKURJS 11S 0 COLHDG(' 売上実績 ') A* キー A K TKTKNO
制御仕様書(H仕様書)
通常のコーディングです。
...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 H Y-
ファイル仕様書
画面ファイルでは会話型の記述に加えて、サブファイルを使用するために継続の記述行に以下の
追加の記述をします。継続の行は53カラムにKを記入して示します。
1.サブファイルをハンドリングする相対レコード番号のための変数を47〜52カラムに記述
します。
2.サブファイルを使用のために、54〜59カラムにSFILEを記述します。
3.サブファイルのレコード様式名を60〜67カラムに記述します。
...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 F* 画面ファイル FRF520S CF E WORKSTN F RRN KSFILE SFL01 F* 受注ファイル FF520 UF E K DISK A F* 得意先マスター FM420 IF E K DISK
更新対象ファイル(受注ファイル)、参照用ファイル(得意先マスター)についての説明は省略
します。
処理モード
処理モードはここでは、受注番号+行番号(明細番号)でファイルをみて、あれば変更、なければ追加とし、
削除は、同一受注番号を一括削除で行うものとしています。
明細行単位での削除はしない約束とします。
エラーメッセージ
エラーメッセージはコンパイル時配列で定義しています。
変更フラグ
1回に受注入力できる明細件数は99件までとし、プログラムのテクニック上から99件の変更
フラグの配列を用意しています。これを使用して変更時に、訂正のあった明細のみファイルに
更新をかけます。
...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 E MOD 4 6 処理モード名 E MSG 1 5 50 ERR MSG E CHG 99 1 SFL 変更 FLG
カーソル制御の準備
後で述べるように、カーソルのあったフィールド位置を取得するために、ワークステーション情報を
取得するためのデータ構造を記述しておきます。また、カーソル位置情報は行、カラム、各1バイト
なので、これを2バイトの2進数にするためのデータ構造も準備します。
注:43カラム目の’B’はデータタイプが2進数であることを示します。
...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 IWSINF DS I 370 370 WSLIN I 371 371 WSCOL I B 378 3790WSNO I* ライン・カラム情報 I DS I I 0 B 1 20WSLINB I 2 2 WSLINC I I 0 B 3 40WSCOLB I 4 4 WSCOLC
キーリスト
更新対象のファイルをアクセスするためのキーリストを準備します。
メインの処理の流れ
メインの処理の流れは、サブファイルを使用しない場合とまったく同じ考えです。
この要領で画面の枚数が増えたとしても、単純にプログラムを拡張できます。
...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 C KEY99 KLIST C KFLD JDJUNO 受注 C* C KEY99A KLIST C KFLD JDJUNO 受注 C KFLD JDMENO 明細 C* 初期処理 C EXSR SBINZ C* 主処理 C EXSR SBMAIN C* 終了処理 C EXSR SBEND C* C*--------------------------------------------------------------- C* SBMAIN 主処理 C*--------------------------------------------------------------- C SBMAIN BEGSR C* +----C *INKC DOWEQ*OFF |+---C W@FMT CASEQ01 SB1000 第一画面 |+---C W@FMT CASEQ02 SB2000 第二画面 |+---C W@FMT CASEQ03 SB3000 第三画面 |+---C ENDCS | C* +----C ENDDO
第1画面の処理
第1画面は受注番号の入力が目的です。
前準備
標識の01,02,03番を1,0,0とセットします。これは画面ファイルで記述した第1第2
第3画面のキーガイドを標識によって、表示/非表示操作をするためです。
命令がMOVEAであることに注意してください。
C* 第1画面のためのセット C MOVEA'100' *IN,01
第一画面の表示
得意先マスターメンテナンスのプログラムの場合と同様です。説明を略します。
データ入力後の処理
得意先マスターメンテナンスのプログラムの場合と同様です。説明を略します。
第一画面処理のコーディングは次のようになります。
C* SB1000 第一画面処理 C*--------------------------------------------------------------- C SB1000 BEGSR C* C* 第一画面へセット C MOVEA'100' *IN,01 C* +----C W@FMT DOWEQ01 | C* 第一画面表示 | C WRITEFMT99 | C EXFMTFMT01 | C MOVE *BLANK S9MSG | C* | C SELEC | C* F3 | C *INKC WHEQ *ON | C Z-ADD00 W@FMT 終了要求 | C* F6 | C *INKF WHEQ *ON | C EXSR SB1220 処理変更 | C* ENTER | C OTHER | C EXSR SB1230 実行キー | C* NO-ERROR なら第二画面へセット |+---C *IN30 IFEQ *OFF || C EXSR SB1250 画面へ セット |+---C ENDIF | C* | C ENDSL +----C ENDDO C* C ENDSR
受注ナンバーのチェックと明細の準備
第1画面で受注ナンバーの存在チェックをしなければなりません。
従ってこのタイミングを利用して、削除まはた変更の場合に、明細に表示するサブファイルを
準備します。すなわち、受注レコードがあったときは、同一受注ナンバーについて、レコードを
全件読取りし、それをサブファイルに出力します。その手順は次のとおりです。
1.サブファイルの「初期化」
2.サブファイルへのレコード出力
この方法以外に、サブファイルの「クリア」とWRITE命令を組み合せる方法もあります。
初期化(SFLINZ)とクリア(SFLCLR)の違いは,初期化が全レコードをブランクまたは0の
レコードで埋めるのに対し、クリアはレコードを0件にします。
サブファイルの初期化
サブファイルの初期化は画面ファイルに定義したSFLINZパラメータを標識でアクティブに
しておいて、それを含むレコード様式(CTL01)をWRITEする方式で行います。
画面ファイル A R CTL01 A ・・・ A 21 SFLINZ
C* サブファイルを初期化 C SETON 21 SFLINZ C WRITECTL01 C SETOF 21
サブファイルへの出力
「初期化」したのでサブファイルへの出力は、読取りと書戻しで行ないます。
同一受注bノついての読取りを行うので、SETLLとREADEを使用します。
サブファイルのレコードの読取りは相対レコードbナCHAINで行います。
C KEY99 SETLLF520R C KEY99 READEF520R 99 +----C *IN99 DOWEQ*OFF | C ADD 001 RRN | C Z-ADDRRN W@KEN 件数 | C RRN CHAINSFL01 09 | C* (ファイル( --> (サブファイル( | C Z-ADDRRN S4GYNO 行 | C MOVELJDHNNO S4HNNO 品目 | C Z-ADDJDJUSU S4JUSU 受注数 | C Z-ADDJDJUTK S4JUTK 受注@ | C JDJUSU MULT JDJUTK S4JUGK 受注額 | C Z-ADDJDSEDT S4SEDT 請求日 | C* | C UPDATSFL01 | C KEY99 READEF520R 99 +----C ENDDO
1ページ目の表示
特定の画面ページを表示するためにはSFLRCDNBRパラメータで記述したフィールドにその
相対レコードナンバーをセットします。これは後で、明細が複数ページあったとき、エラーのあった
ページを表示させるために使います。最初は1ページ目が表示されればいいので、1番のレコード
bセットします。
画面ファイル A RCDNBR 4S 0H SFLRCDNBR
RPGC Z-ADD001 RCDNBR SFLRCDNBR
注:サブファイルにデータをセットしたのみでは画面に表示されません。サブファイル制御様式を使って
画面に送り出しが必要です。
第2画面
第2画面では受注の見出し項目として、得意先コードと受注日を入力します。
前準備
標識の01,02,03番を0,1,0とセットします。第2画面のキーガイドを標識によって、
表示するためです。
また、削除モードのときは、各フィールドをプロテクト状態にするため標識をオンにします。
第2画面の表示
FMT01,FMT99をWRITEしFMT02でEXFMT命令を実行します。
入力後の処理
省略します。
コーディングは次のようになります。
C* SB2000 第2画面処理 C*--------------------------------------------------------------- C SB2000 BEGSR C* C* 第二画面準備 C MOVEA'010' *IN,01 Fキー用 +----C W@MOD IFEQ 04 削除 MODE | C SETON 28 プロテクト +----C ELSE | C SETOF 28 NON プロテクト +----C ENDIF C* 第二画面繰返し +----C W@FMT DOWEQ02 第二画面 | C* 画面表示 | C WRITEFMT99 | C WRITEFMT01 | C EXFMTFMT02 | C MOVE *BLANK S9MSG | C* | C SELEC | C *INKL WHEQ *ON 取消キー | C Z-ADD01 W@FMT | C OTHER | C EXSR SB2230 入力 チェック | C ENDSL +----C ENDDO C* C ENDSR
第3画面の処理
第3画面の処理の役目は、正しい(エラーのない)明細データを入手することです。
画面のリクエスト番号が3である間、繰り返し処理をします。
前準備
標識の01、02、03番を0,0,1とセットします。これは画面ファイルで記述した第3画
面のキーガイドを標識で、表示するためです。
また、削除の場合はダブルアクションでなく、ただちに削除確認のメッセージを表示する必要があるので
メッセージをセットします。
C* 第2画面へセット C MOVEA'01' *IN,01 +----C W@MOD IFEQ 04 削除 | C MOVELMSG,5 S9MSG 更新確認 +----C ENDIF
第3画面の表示
第3画面はFMT99とFMT01,FMT02,CTL01,SFL01なので、FMT99,
FMT01,FMT02をWRITE,CTL01はEXFMTで入出力します。
SFL01はCTL01によって間接的に出力されます。
このとき、SFLDSPとSFLCTLDSPを有効とするため、標識23,24をオンにします。
画面からの入力による処理
第3画面からの入力による処理は、F12の前画面に戻るか、データのチェックを行いエラーが
なければファイル更新をするのどちらかです。
コーディングは次のようになります。
C* SB3000 第3画面処理 C*--------------------------------------------------------------- C SB3000 BEGSR C* C* 第二画面準備 C MOVEA'001' *IN,01 Fキー用 C MOVE *BLANK S9MSG ERR-MSG C MOVE *ZERO CHG CHANGE-FLAG +----C W@MOD IFEQ 04 削除 | C MOVELMSG,5 S9MSG 更新確認 +----C ENDIF C* 第二画面繰返し +----C W@FMT DOWEQ03 第二画面 | C* 画面表示 | C WRITEFMT99 | C WRITEFMT01 | C WRITEFMT02 | C SETON 2324 | C EXFMTCTL01 | C SETOF 2324 | C MOVE *BLANK S9MSG | C* | C SELEC | C *INKL WHEQ *ON 取消キー | C Z-ADD02 W@FMT | C OTHER | C* 入力チェックと更新 | C EXSR SB3260 入力 チェック | C ENDSL +----C ENDDO C* C ENDSR
サブファイルの読取り
サブファイルは入力のあったもののみ読み取りします。このためにはREADC命令を使用します。
入力があるということは、フィールドが何らかの変更がなされたという意味で、正式にはモディ
ファイされたということです。ブランクを入力しても、123から123に変更しても、モディ
ファイされたことになります。
READC命令で読み取りされたときは、相対レコードb燗ッ時に取得されています。
これによって、あとでファイル更新のときのために、該当レコードbフ変更フラグをONにして
おきます。
| C Z-ADDRRN N 行 | C MOVE '1' CHG,N 変更フラグ
またチェックの結果はサブファイルに書き戻ししておきます。
| C EXSR SB3CHK CHECK-ERR | C UPDATSFL01
入力チェック
入力された明細レコード1件1件についてチェックを行います。
ここではフィールドに入力がなかったとき、エラーとしています。
エラーのときのカーソルの位置づけ
サブファイルの場合、表示属性(DSPATR)のPC(Put Cursor)はうまく働きません。
サブファイルのエラーがあったフィールドにカーソルを位置付けするには、自前でカーソル
位置を求め、そこにCSRLOCパラメータを利用して位置付けします。
画面ファイルのS1LIN,S1COLはカーソル位置付けだけが目的で、画面に表示はしない
ので、非表示の’H’を指定します。
A CSRLOC(S1LIN S1COL) A S1LIN 3S 0H TEXT(' カーソル制御(行 ') A S1COL 3S 0H TEXT(' カーソル制御(桁 ')
カーソルの行番号は、明細の始まる行と相対レコード番号から計算で求めます。
C* カーソルのある行位置取得 C Z-ADDRRN S4GYNO 行 C RRN DIV WSPAG W@WRK 70 C MVR WSLINE 70 C ADD 006 WSLINE 行位置
カラム位置は、各フィールドの開始位置たとえば(品目コードなら6カラム)を与えます。
C* 品目 C S4HNNO IFEQ *BLANK C SETON 3041 C MOVELMSG,3 S9MSG C Z-ADD006 S1COL COL 位置 C SETON 27 SFLNXTCHG C ENDIF
エラーページの表示
明細が多いとき、エラーのあるページを表示させるにはSFLRCDNBRパラメータで指定した
フィールドにエラーのあったレコードの番号(RRN)をセットします。
たとえば明細が80件(画面8ページ分)入力されたとして、明細番号(レコード番号)53にエラーがあったと
すると、この53をSFLRCDNBRで指定したフィールドにセットしておくと、画面5ページ目が表示されます。
C* エラーへ位置づけ C *IN30 IFEQ *ON C Z-ADDWSLINE S1LIN 行位置 C Z-ADDRRN RCDNBR C ENDIF
注:サンプルのソースでは最後にセットされたレコードのある画面が表示されることになります。
最初にエラーのあるレコードの画面を表示するには、どうすればよいか考えてみてください。
サブファイルネクストチェンジ
仮にあるフィールドにエラーがあったとしても、画面で訂正をしないで次回読取りをすると、
READC命令で読み取りされません。これを防ぐためには、画面ファイルでSFLNXTCHGパラメータを
記述し、エラーがあったレコードについては、SFLNXTCHGに関連づけた標識を*ONにしサブファイルに
出力します。
こうすると、画面でフィールドを変更しないでも、変更されたと同じ扱いになり、READCで読取りされます。
エラーデータが無視されてしまうようなことが防げます。
SFLNXTCHGパラメータはレコードレベルのパラメータでサブファイルの様式の中に記述します。
A R SFL01 A SFL A 27 SFLNXTCHG
ファイル更新
ファイル更新は、エラーなし状態となって、さらに変更なし(ということはエラーもなし)の
ときに行います。結果的には、確認→更新の2段アクションになります。
エラーなしは*IN30=*OFF、変更なしは*IN29=*OFFです。
C* ファイル更新 +----C *IN30 IFEQ *OFF NO-ERROR |+---C *IN29 IFEQ *OFF NO-CHANGE || C EXSR SBUPD ファイル 更新 || C Z-ADD01 W@FMT |+---C ELSE CHANGED || C MOVELMSG,5 S9MSG 更新確認 |+---C ENDIF +----C ENDIF
ファイル更新は受注aE行bナすべてのサブファイルを読み(CHAIN),変更のあった相対
レコードbフ明細のみ更新します。
このとき、明細レコードがファイルにあれば、変更、なければ追加とします。
削除モードのときは、該当受注bフ明細をすべて削除します。
明細を個別に削除するような仕様にするためには、さらにそのためのロジックの追加が必要です。
RPGの全ソースリストは次のとおりです。
**--------------------------------------------------------------- ** ID : RF520 ** NAME : 受注入力 ** ** NOTE : ** 行だけの削除はできない。 ** *IN28 削除時プロテクト *ON: PROTECT ** *IN29 モディファイフラグ *ON: MODIFIED ** *IN30 エラーフラグ *ON: ERROR *OFF:OK **--------------------------------------------------------------- H Y- F*--------------------------------------------------------------- FRF520S CF E WORKSTN F KINFDS WSINF F RRN KSFILE SFL01 F*受注ファイル FF520 UF E K DISK A F*得意先マスター FM420 IF E K DISK E*--------------------------------------------------------------- E MOD 4 6 処理モード名 E MSG 1 5 50 ERR MSG E CHG 99 1 SFL変更FLG I*--------------------------------------------------------------- I* IWSINF DS I 370 370 WSLIN I 371 371 WSCOL I B 378 3790WSNO I* I DS I I 0 B 1 20WSLINB I 2 2 WSLINC I I 0 B 3 40WSCOLB I 4 4 WSCOLC I*ページサイズ I DS I I 10 1 50WSPAG I*画面番号 I DS I I 01 1 20W@FMT I*処理モード I DS I 1 24 MOD I I ' ' 1 6 W@ADD I I '編集' 7 12 W@EDT I I ' ' 13 18 W@DUM I I '削除' 19 24 W@DEL C*--------------------------------------------------------------- C*キーリスト C KEY99 KLIST C KFLD JDJUNO 受注Y C* C KEY99A KLIST C KFLD JDJUNO 受注Y C KFLD JDMENO 明細Y C*--------------------------------------------------------------- C*初期処理 C EXSR SBINZ C*主処理 C EXSR SBMAIN C*終了処理 C EXSR SBEND C* C*--------------------------------------------------------------- C* SBMAIN 主処理 C*--------------------------------------------------------------- C SBMAIN BEGSR C* +----C *INKC DOWEQ*OFF |+---C W@FMT CASEQ01 SB1000 第一画面 |+---C W@FMT CASEQ02 SB2000 第二画面 |+---C W@FMT CASEQ03 SB3000 第三画面 |+---C ENDCS | C* +----C ENDDO C* C ENDSR .SBMAIN C*--------------------------------------------------------------- C* SBINZ 初期処理 C*--------------------------------------------------------------- C SBINZ BEGSR .INZ C* C Z-ADD00 N 70 INDEX C Z-ADD00 X 70 INDEX C Z-ADD04 W@MOD 70 処理モード C Z-ADD000 W@KEN 70 SFL件数 C SETOF 30 SET NO-ERR C* C MOVEL'RF520' S1PGID PGM-ID C*最初の処理モード決定 C EXSR SB1220 処理選択 C* C ENDSR .SBINZ C*--------------------------------------------------------------- C* SB1000 第一画面処理 C*--------------------------------------------------------------- C SB1000 BEGSR C* C*第一画面へセット C MOVEA'100' *IN,01 C* +----C W@FMT DOWEQ01 | C*第一画面表示 | C WRITEFMT99 | C EXFMTFMT01 | C MOVE *BLANK S9MSG | C* | C SELEC | C* F3 | C *INKC WHEQ *ON | C Z-ADD00 W@FMT 終了要求 | C* F6 | C *INKF WHEQ *ON | C EXSR SB1220 処理変更 | C* ENTER | C OTHER | C EXSR SB1230 実行キー | C* NO-ERRORなら第二画面へセット |+---C *IN30 IFEQ *OFF || C EXSR SB1250 画面へセット |+---C ENDIF | C* | C ENDSL +----C ENDDO C* C ENDSR .SB1000 C*--------------------------------------------------------------- C* SB1220 処理モード決定 ADD ->CHG ->DEL C*--------------------------------------------------------------- C SB1220 BEGSR C* C SELEC C W@MOD WHEQ 04 C Z-ADD02 W@MOD 編集 C W@MOD WHEQ 02 C Z-ADD04 W@MOD 削除 C ENDSL C* +----C W@MOD IFEQ 04 | C SETON 28 +----C ELSE | C SETOF 28 +----C ENDIF C MOVELMOD,W@MOD S1MOD モード名 C* C ENDSR .SB1220 C*--------------------------------------------------------------- C* SB1230 実行キーが押されたときの処理 C*--------------------------------------------------------------- C SB1230 BEGSR C* C SETOF 3031 ERR-OFF C*該当受注チェック C CLEARF520R C Z-ADDS1JUNO JDJUNO 受注Y C KEY99 SETLLF520R C KEY99 READEF520R 99 +----C *IN99 IFEQ *OFF | C MOVELJDTKNO S2TKNO 得意先Y | C Z-ADDJDJUDT S2JUDT 受注日 +----C ELSE |+---C W@MOD IFEQ 04 DEL || C MOVELMSG,1 S9MSG 該当なし || C SETON 3031 |+---C ENDIF +----C ENDIF C*OKなら第二画面へ +----C *IN30 IFEQ *OFF | C Z-ADD02 W@FMT +----C ENDIF C* C ENDSR .SB1230 C*--------------------------------------------------------------- C* SB1250 ファイルから第2第3画面へセット C*--------------------------------------------------------------- C SB1250 BEGSR C* C*サブファイルを初期化 C SETON 21 INZSFL C WRITECTL01 C SETOF 21 C* C Z-ADD0000 RRN 40 C Z-ADD001 RCDNBR SFLRCDNBR C Z-ADD0000 S4GYNO C* C KEY99 SETLLF520R C KEY99 READEF520R 99 +----C *IN99 DOWEQ*OFF | C ADD 001 RRN | C Z-ADDRRN W@KEN 件数 | C RRN CHAINSFL01 09 | C* (ファイル( --> (サブファイル( | C Z-ADDRRN S4GYNO 行Y | C MOVELJDHNNO S4HNNO 品目Y | C Z-ADDJDJUSU S4JUSU 受注数 | C Z-ADDJDJUTK S4JUTK 受注@ | C JDJUSU MULT JDJUTK S4JUGK 受注額 | C Z-ADDJDSEDT S4SEDT 請求日 | C* | C UPDATSFL01 | C KEY99 READEF520R 99 +----C ENDDO C* C ENDSR C*--------------------------------------------------------------- C* SB2000 第2画面処理 C*--------------------------------------------------------------- C SB2000 BEGSR C* C*第二画面準備 C MOVEA'010' *IN,01 Fキー用 +----C W@MOD IFEQ 04 削除 | C SETON 28 プロテクト +----C ELSE | C SETOF 28 NONプロテクト +----C ENDIF C*第二画面繰返し +----C W@FMT DOWEQ02 第二画面 | C*画面表示 | C WRITEFMT99 | C WRITEFMT01 | C EXFMTFMT02 | C MOVE *BLANK S9MSG | C* | C SELEC | C *INKL WHEQ *ON 取消キー | C Z-ADD01 W@FMT | C OTHER | C EXSR SB2230 入力oォg | C ENDSL +----C ENDDO C* C ENDSR C*--------------------------------------------------------------- C* SB2230 実行キーが押されたときの処理 C*--------------------------------------------------------------- C SB2230 BEGSR C* C SETOF 303233 ERR-OFF C*日付チェック C* C*得意先チェック C S2TKNO CHAINM420R 98 +----C *IN98 IFEQ *ON | C MOVELMSG,2 S9MSG 該当なし | C SETON 3032 +----C ENDIF C*OKなら第3画面へ +----C *IN30 IFEQ *OFF | C Z-ADD03 W@FMT +----C ENDIF C* C ENDSR C*--------------------------------------------------------------- C* SB3000 第3画面処理 C*--------------------------------------------------------------- C SB3000 BEGSR C* C*第二画面準備 C MOVEA'001' *IN,01 Fキー用 C MOVE *BLANK S9MSG ERR-MSG C MOVE *ZERO CHG CHANGE-FLAG +----C W@MOD IFEQ 04 削除 | C MOVELMSG,5 S9MSG 更新確認 +----C ENDIF C*第二画面繰返し +----C W@FMT DOWEQ03 第二画面 | C*画面表示 | C WRITEFMT99 | C WRITEFMT01 | C WRITEFMT02 | C SETON 2324 | C EXFMTCTL01 | C SETOF 2324 | C MOVE *BLANK S9MSG | C* | C SELEC | C *INKL WHEQ *ON 取消キー | C Z-ADD02 W@FMT | C OTHER | C EXSR SB3260 実行キー | C ENDSL +----C ENDDO C* C ENDSR C*--------------------------------------------------------------- C* SB3260 第3画面のチェック C*--------------------------------------------------------------- C SB3260 BEGSR C* C*カーソル位置の獲得 C MOVELWSLIN WSLINC 行 C MOVELWSCOL WSCOLC 桁 C*属性の取得(名前などの取得) C* (必要あれば) C*エラーチェック C SETOF 2930 C SETOF 414243 C*入力あったサブファイルについて C READCSFL01 09 +----C *IN09 DOWEQ*OFF | C Z-ADDRRN N 行Y | C MOVE '1' CHG,N 変更フラグ | C SETON 29 | C EXSR SB3CHK CHECK-ERR | C UPDATSFL01 | C READCSFL01 09 +----C ENDDO C* +----C *IN30 IFEQ *OFF NO-ERROR |+---C *IN29 IFEQ *OFF NO-CHANGE || C EXSR SBUPD ハィay更新 || C Z-ADD01 W@FMT |+---C ELSE CHANGED || C MOVELMSG,5 S9MSG 更新確認 |+---C ENDIF +----C ENDIF C* C ENDSR C*--------------------------------------------------------------- C* SB3CHK 入力チェック(第3画面) C*--------------------------------------------------------------- C SB3CHK BEGSR C* C*カーソルのある行位置取得 C Z-ADDRRN S4GYNO 行Y C RRN DIV WSPAG W@WRK 70 C MVR WSLINE 70 C ADD 006 WSLINE 行位置 C* C*属性の取得(必要あれば名前などの取得) C S4JUSU MULT S4JUTK S4JUGK 受注額 C*チェック C SETOF 414243 C SETOF 27 SFLNXTCHG C*品目Y C S4HNNO IFEQ *BLANK C SETON 3041 C MOVELMSG,3 S9MSG C Z-ADD006 S1COL ewヨ位置 C SETON 27 SFLNXTCHG C ENDIF C*受注数 C S4JUSU IFEQ *ZERO C SETON 3042 C MOVELMSG,3 S9MSG C Z-ADD014 S1COL ewヨ位置 C SETON 27 SFLNXTCHG C ENDIF C*受注@ C S4JUTK IFEQ *ZERO C SETON 3043 C MOVELMSG,3 S9MSG C Z-ADD026 S1COL ewヨ位置 C SETON 27 SFLNXTCHG C ENDIF C*エラーへ位置づけ C *IN30 IFEQ *ON C Z-ADDWSLINE S1LIN 行位置 C Z-ADDRRN RCDNBR C ENDIF C* C ENDSR C*--------------------------------------------------------------- C* SBUPD ファイル更新 C*--------------------------------------------------------------- C SBUPD BEGSR C* +----C SELEC +----C W@MOD WHEQ 02 | C* ファイルへ編集 |+---C 01 DO 99 RRN ||+--C CHG,RRN IFEQ '1' CHG ||| C RRN CHAINSFL01 30 ||| C Z-ADDS1JUNO JDJUNO 受注Y ||| C Z-ADDS4GYNO JDMENO 行Y ||| C KEY99A CHAINF520R 99 ||| C EXSR SB0100 編集処理 |||+-C *IN99 IFEQ *OFF |||| C UPDATF520R |||+-C ELSE |||| C WRITEF520R |||+-C ENDIF ||+--C ENDIF |+---C ENDDO +----C W@MOD WHEQ 04 | C*削除モードのとき明細削除 | C Z-ADDS1JUNO JDJUNO 受注Y | C KEY99 SETLLF520R | C KEY99 READEF520R 99 |+---C *IN99 DOWEQ*OFF || C DELETF520R || C KEY99 READEF520R 99 |+---C ENDDO | C* +----C ENDSL C* C CLEARS2TKNO C MOVE *ZERO CHG C Z-ADD01 W@FMT 第一画面へ C* C ENDSR C*--------------------------------------------------------------- C* SB0100 編集処理 C*--------------------------------------------------------------- C SB0100 BEGSR C* C MOVELS2TKNO JDTKNO 得意先Y C MOVELS4HNNO JDHNNO 品目Y C Z-ADDS4JUSU JDJUSU 受注数 C Z-ADDS4JUTK JDJUTK 受注@ C Z-ADDS2JUDT JDJUDT 受注日 C Z-ADDS4SEDT JDSEDT 請求日 C* C ENDSR C*--------------------------------------------------------------- C* SBEND 終了処理 C*--------------------------------------------------------------- C SBEND BEGSR C* C SETON LR C RETRN C* C ENDSR ** MSG ** 該当受注Yありません。 該当得意先Yありません。 入力が必要です。 日付が正しくありません。 更新確認してください。
◆1〜5カラムにあるネスト表示は自作のネスト構造解析プログラムでソースに付加したものです。◆
前ページ 次ページ 目 次
(C)COPYRIGHT ISHIOKA KATSUHIDE 2000−2003