サンプル・プログラム


COBOLによる明細のある画面の処理プログラムの例

画面(F530S)のレイアウト   

以下のような画面レイアウトを想定しています。
 OOOOOOOOOO OOOOOO               受 注 入 力             DD/DD/DD  TT:TT:TT 
                     
  受注  999999                                                              
  得意先  BBBB OOOOOOOOOOOOOOOOOOOOOO                        受注日  99/99/99
 NO  品目     受注数    受注単価       受注金額                  
 66  BBBB    9,999,999-  9,999,999.99-  66,666,666,666-  
 66  BBBB    9,999,999-  9,999,999.99-  66,666,666,666-  
 66  BBBB    9,999,999-  9,999,999.99-  66,666,666,666-  
 66  BBBB    9,999,999-  9,999,999.99-  66,666,666,666-  
 66  BBBB    9,999,999-  9,999,999.99-  66,666,666,666-                       
 66  BBBB    9,999,999-  9,999,999.99-  66,666,666,666-  
 66  BBBB    9,999,999-  9,999,999.99-  66,666,666,666-  
 66  BBBB    9,999,999-  9,999,999.99-  66,666,666,666-  
 66  BBBB    9,999,999-  9,999,999.99-  66,666,666,666-  
 66  BBBB    9,999,999-  9,999,999.99-  66,666,666,666-  





  F3= 終了  F6= 処理選択  
 OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO


DDSは次のようになります。
     A*-----------------------------------------------------------
     A* ID    : RF530S
     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 '受注'
     A            S1JUNO         6Y 0B    +1 TEXT('受注')
     A  31                                   DSPATR(PC RI)
     A*-----------------------------------------------------------
     A          R FMT02                      TEXT('第二画面')
     A                                       OVERLAY  PROTECT
     A                                       CF03 CF12
     A*
     A                                  4  2 '得意先'
     A            S2TKNO         6A  B    +1TEXT('得意先')
     A  32                                   DSPATR(PC RI)
     A  28                                   DSPATR(PR)
     A            S2NMKJ        30O  O    +1TEXT('得意先名')
     A                                  5  2 '受注日'
     A            S2JUDT         6Y 0B    +1TEXT('受注日')
     A                                           EDTCDE(Y)
     A  33                                   DSPATR(PC RI)
     A  28                                   DSPATR(PR)
     A*隠しフィールド
     A            S2NODT         8Y 0H      TEXT('納品日')
     A            S2SEDT         8Y 0H      TEXT('請求日')
     A*
     A*-----------------------------------------------------------
     A          R SFL01
     A                                       SFL
     A  27                                   SFLNXTCHG
     A*
     A            S4GYNO         2Y 0O  8  2TEXT('行')
     A            S4HNNO         6A  B    +2TEXT('品目')
     A  41                                   DSPATR(PC RI)
     A  28                                   DSPATR(PR)
     A            S4SURY         6Y 0B    +2TEXT('受注数') 
     A                                       EDTCDE(K)
     A  42                                   DSPATR(PC RI)
     A  28                                   DSPATR(PR)
     A            S4TANK         8Y 2B    +2TEXT('受注@') 
     A                                      EDTCDE(K)
     A  43                                   DSPATR(PC RI)
     A  28                                   DSPATR(PR)
     A            S4JUGK         9Y 0O    +2TEXT('受注額')
     A                                      EDTCDE(K)
     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                                  7 02'NO'
     A                                  7 05'品目'
     A                                  7 14'受注数'
     A                                  7 25'受注単価'
     A                                  7 39'受注金額'
     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  ')
注:このDDSはCOBOL環境でコンパイルチェックをしていないので、正確でないかもしれません。


ファイル(F530)

以下のような様式を持ったファイルを想定しています。
        01  F530R.
           06  JDJUNO      PIC   S9(6)            受注
           06  JDMENO      PIC   S9(2)            明細
           06  JDTKNO      PIC   X(4)             得意先コード
           06  JDHNNO      PIC   X(4)             品目コード
           06  JDJUSU      PIC   S9(7)            受注数
           06  JDJUTK      PIC   S9(7).9(2)       受注単価
           06  JDJUDT      PIC   S9(8)            受注日
           06  JDSEDT      PIC   S9(8)            請求日



COBOLソースのサンプル

       PROCESS GRAPHIC CVTPICGGRAPHIC APOST                         
       IDENTIFICATION DIVISION.                                     
       PROGRAM-ID.  RF530.                                          
      * NAME     :  受注入力処理                                    
       AUTHOR.                     KAJIROU.                         
       ENVIRONMENT                 DIVISION.                        
       CONFIGURATION               SECTION.                         
         SOURCE-COMPUTER.          HAL-5000.                        
         OBJECT-COMPUTER.          HAL-5000.                        
       INPUT-OUTPUT                SECTION.                         
         FILE-CONTROL.                                              
      * 画面ファイル                          INDARA 使用の時↓     
           SELECT  FILE1  ASSIGN          WORKSTATION-RF530S-SI     
                          ORGANIZATION    TRANSACTION               
                          ACCESS  MODE    DYNAMIC                   
                          RELATIVE KEY    RRN                        
                          CONTROL-AREA    CTL-AREA.                  
      * 更新対象ファイル                                             
           SELECT  FILE2  ASSIGN          DATABASE-F530              
                          ACCESS  MODE    DYNAMIC                    
                          RECORD  KEY     EXTERNALLY-DESCRIBED-KEY   
                          ORGANIZATION    INDEXED.                   
      * 得意先マスターファイル                                       
           SELECT  FILE3  ASSIGN          DATABASE-M420              
                          ACCESS  MODE    RANDOM                     
                          RECORD  KEY     EXTERNALLY-DESCRIBED-KEY   
                          ORGANIZATION    INDEXED.                   
      *                                                              
       DATA                        DIVISION.                         
       FILE                        SECTION.                          
      * 画面ファイル                                                 
       FD  FILE1.                                                    
       01  FILE1R   PIC X(100).                                      
      * 更新対象ファイル                                             
       FD  FILE2.                                                    
       01  FILE2R.                                               
           COPY  DDS-ALL-FORMATS OF F530.                        
      * 得意先マスター                                           
       FD  FILE3.                                                
       01  FILE3R.                                               
           COPY  DDS-ALL-FORMATS OF M420.                        
      *                                                          
       WORKING-STORAGE  SECTION.                                 
      * 画面ファイルの様式ごとに入力、出力のエリアを定義します。 
       01  FMT01A.                                               
           COPY  DDS-FMT01-I     OF RF530S.                      
       01  FMT01B.                                               
           COPY  DDS-FMT01-O     OF RF530S.                      
       01  FMT02A.                                               
           COPY  DDS-FMT02-I     OF RF530S.                      
       01  FMT02B.                                               
           COPY  DDS-FMT02-O     OF RF530S.                      
       01  SFL01A.                                               
           COPY  DDS-SFL01-I     OF RF530S.                      
       01  SFL01B.                                               
           COPY  DDS-SFL01-O     OF RF530S.                     
       01  CTL01A.                                              
           COPY  DDS-CTL01-I     OF RF530S.                     
       01  CTL01B.                                              
           COPY  DDS-CTL01-O     OF RF530S.                     
       01  FMT99B.                                              
           COPY  DDS-FMT99-O     OF RF530S.                     
      * INDARA を定義したので、ワークに標識エリアを定義します。 
       01  FILE1-INDICS.                                        
           COPY  DDS-ALL-FORMATS-INDIC  OF RF530S.              
      * SELECT で指定したコントロールエリアを定義します。       
       01  CTL-AREA.                                            
           03  FKEY      PIC  X(2).                             
           03  DEV-NAME  PIC  X(10).                            
           03  REC-FMT   PIC  X(10).                            
       01  SFL-X.                                               
           03  RRN       PIC  9999.                             
      * 処理モード表示用の定義をします。                        
       01  MOD-X.                                               
           05  FILLER   PIC  X(6)    VALUE '    '.              
           05  FILLER   PIC  X(6)    VALUE ' 編集 '.            
           05  FILLER   PIC  X(6)    VALUE ' 編集 '.               
           05  FILLER   PIC  X(6)    VALUE '      '.               
           05  FILLER   PIC  X(6)    VALUE ' 削除 '.               
       01  MOD-R        REDEFINES    MOD-X.                        
           03  MOD      OCCURS       4    PIC  XXXXXX.             
      * エラーメッセージ定数の定義をします。                       
       01  MSG-X.                                                  
           03  FILLER   PIC  X(30)   VALUE  ' 該当得意先od複 '.  
           03  FILLER   PIC  X(30)   VALUE  ' 該当得意先bネし '.  
           03  FILLER   PIC  X(30)   VALUE  ' 入力が必要です。 '.  
           03  FILLER   PIC  X(30)   VALUE  ' 更新確認         '.  
           03  FILLER   PIC  X(30)   VALUE  SPACE.                 
       01  MSG-R        REDEFINES    MSG-X.                        
           03  MSG      OCCURS       5       PIC X(30).            
      * プログラム制御用のフィールド定義                           
       01  CTL.                                                    
           03  W-FMT          PIC  9(02)  VALUE   1.               
           03  W-MOD          PIC  9(02)  VALUE   4.               
           03  W-KEN          PIC  9(02)  VALUE   0.               
           03  W-UPD          PIC  X      VALUE   SPACE.           
      * 変更フラグ                                           
       01  CTL-A.                                            
           03  CHG   OCCURS   99  PIC  X.                    
      * プログラムで使用する標識(及び定数)を定義します。   
       01  CONST.                                            
           03  Z-ON           PIC  1   VALUE  B'1'.          
           03  Z-OFF          PIC  1   VALUE  B'0'.          
           03  IN29           PIC  1   VALUE  B'0'.          
           03  IN30           PIC  1   VALUE  B'0'.          
           03  IN98           PIC  1   VALUE  B'0'.          
           03  IN99           PIC  1   VALUE  B'0'.          
           03  F03            PIC  XX  VALUE  '03'.          
           03  F06            PIC  XX  VALUE  '06'.          
           03  F12            PIC  XX  VALUE  '12'.          
      *------------------------------------------------------
       PROCEDURE                   DIVISION.                 
       01.                                                   
      * 初期処理                                             
           PERFORM  SB-INZ.                                  
       02.                                           
      * 主処理(F3キーが押されるまで)             
           PERFORM  SB-MAIN   UNTIL  FKEY  =  F03.   
       03.                                           
      * 終了処理                                     
           PERFORM  SB-END.                          
           STOP  RUN.                                
      *----------------------------------------------
       SB-INZ.                                       
           OPEN I-O     FILE1.                       
           OPEN I-O     FILE2.                       
           OPEN INPUT   FILE3.                       
           MOVE  SPACE    TO  FKEY.                  
           MOVE  'RF530'  TO  S1PGID.                
           PERFORM  SB-1220.                         
      *----------------------------------------------
       SB-MAIN.                                      
           EVALUATE  W-FMT                           
               WHEN  01    PERFORM  SB-1000          
               WHEN  02    PERFORM  SB-2000          
               WHEN  03    PERFORM  SB-3000                
           END-EVALUATE.                                   
           IF    W-UPD  = 'U'                              
                 PERFORM  SB-0000                          
           END-IF.                                         
      *----------------------------------------------------
       SB-1000.                                            
            MOVE  Z-ON   TO  IN01.                         
            MOVE  Z-OFF  TO  IN02.                         
            MOVE  SPACE  TO  W-UPD.                        
            PERFORM  SB-1000A   UNTIL  W-FMT  NOT = 01.    
      *----------------------------------------------------
       SB-1000A.                                           
      * 第一画面表示                                       
           WRITE   FILE1R  FROM  FMT99-O  FORMAT  'FMT99'  
                           INDICATORS     FMT99-O-INDIC.   
           WRITE   FILE1R  FROM  FMT01-O  FORMAT  'FMT01'  
                           INDICATORS     FMT01-O-INDIC.   
           READ    FILE1   INTO  FMT01-I  FORMAT  'FMT01'. 
           MOVE    SPACE   TO      S9MSG.                  
           EVALUATE  FKEY                                  
           EVALUATE  FKEY                               
               WHEN  F03    MOVE  ZERO     TO  W-FMT    
               WHEN  F06    PERFORM  SB-1220            
               WHEN  OTHER  PERFORM  SB-1230            
                            IF  IN30  =  Z-OFF          
                                PERFORM  SB-1250        
                            END-IF                      
           END-EVALUATE.                                
      *-------------------------------------------------
       SB-1220.                                         
           EVALUATE  W-MOD                              
               WHEN  02  MOVE  04  TO  W-MOD            
               WHEN  04  MOVE  02  TO  W-MOD            
           END-EVALUATE.                                
      * 処理モードを設定                                
           MOVE    MOD(W-MOD)      TO      S1MOD.       
      *-------------------------------------------------
      * 実行キーがおされたときの処理                    
       SB-1230.                                         
           MOVE    CORR    FMT01-I  TO  FMT01-O.        
           MOVE    Z-OFF            TO  IN30  IN31.     
           MOVE    Z-OFF            TO  IN30  IN31.                   
           INITIALIZE          FILE2R.                                
      * レコード存在チェック                                          
           MOVE   S1JUNO  OF  FMT01-I  TO  JDJUNO.                    
           MOVE   00                   TO  JDMENO.                    
           MOVE   SPACE   TO  JDTKCD.                                 
           MOVE   ZERO    TO  JDJUDT.                                 
           MOVE   Z-OFF   TO  IN99.                                   
           START  FILE2  KEY  NOT LESS  THAN EXTERNALLY-DESCRIBED-KEY 
                                 INVALID  KEY  MOVE  Z-ON  TO  IN99.  
           PERFORM  SB-READ-EQ.                                       
           MOVE  JDTKCD   TO  S2TKCD  OF  FMT02-O.                    
           MOVE  JDJUDT   TO  S2JUDT  OF  FMT02-O.                    
      * 削除モードで該当レコードなしはエラー                          
           IF  W-MOD  =  04  AND  IN99  =  Z-ON                       
                   MOVE  MSG(2)  TO  S9MSG                            
                   MOVE  Z-ON    TO  IN30  IN31                       
           END-IF.                                                    
      * NO−ERRORなら第二画面へ                                
           IF  IN30  =  Z-OFF                                         
               MOVE  02  TO  W-FMT                                    
           END-IF.                                                    
      *---------------------------------------------------------------
      * サブファイルへ明細データをセット                              
       SB-1250.                                                       
      * サブファイルを初期化                                          
           PERFORM  SB-INZ-SFL.                                       
           IF  W-MOD  = 04                                            
               MOVE  Z-ON   TO  IN28   OF  SFL01-O-INDIC              
           ELSE                                                       
               MOVE  Z-OFF  TO  IN28   OF  SFL01-O-INDIC              
           END-IF.                                                    
           MOVE  0000   TO  RRN     W-KEN.                            
           MOVE  0001   TO  RCDNBR  OF  CTL01-O.                      
           MOVE  0000   TO  S4GYNO  OF  SFL01-O.                      
      *                                                               
           MOVE   Z-OFF  TO   IN99.                                   
           START  FILE2  KEY  NOT LESS  THAN EXTERNALLY-DESCRIBED-KEY 
                                 INVALID  KEY  MOVE  Z-ON  TO  IN99.  
           PERFORM  SB-READ-EQ.                                       
           PERFORM  UNTIL  IN99  =  Z-ON                               
               ADD   01       TO  RRN     W-KEN                        
               READ  SUBFILE  FILE1   FORMAT  'SFL01'                  
               MOVE  RRN      TO  S4GYNO  OF  SFL01-O                  
               MOVE  JDHNCD   TO  S4HNCD  OF  SFL01-O                  
               MOVE  JDJUSU   TO  S4JUSU  OF  SFL01-O                  
               MOVE  JDJUTK   TO  S4JUTK  OF  SFL01-O                  
               COMPUTE            S4JUGK  OF  SFL01-O                  
                                  =   JDJUSU  *  JDJUTK                
               MOVE  JDSEDT   TO  S4NODT  OF  SFL01-O                  
               REWRITE  SUBFILE  FILE1R  FROM  SFL01-O  FORMAT 'SFL01' 
                                 INDICATORS    SFL01-O-INDIC           
               PERFORM  SB-READ-EQ                                     
           END-PERFORM.                                                
      *--------------------------------------------------------------- 
       SB-2000.                                                        
           MOVE  Z-OFF  TO  IN01.                                      
           MOVE  Z-ON   TO  IN02.                                      
           MOVE  SPACE  TO  W-UPD.                                     
           IF  W-MOD  = 04                                             
               MOVE  Z-ON   TO  IN28   OF  FMT02-O-INDIC       
           ELSE                                                
               MOVE  Z-OFF  TO  IN28   OF  FMT02-O-INDIC       
           END-IF.                                             
      *                                                        
      * 第二画面繰返し                                         
           PERFORM  UNTIL   W-FMT  NOT =  02                   
               WRITE   FILE1R  FROM  FMT99-O  FORMAT  'FMT99'  
                               INDICATORS     FMT99-O-INDIC    
               WRITE   FILE1R  FROM  FMT01-O  FORMAT  'FMT01'  
                               INDICATORS     FMT01-O-INDIC    
               WRITE   FILE1R  FROM  FMT02-O  FORMAT  'FMT02'  
                               INDICATORS     FMT02-O-INDIC    
               READ    FILE1   INTO  FMT02-I  FORMAT  'FMT02'  
      *                        INDICATORS     FMT02-I-INDIC    
               MOVE    SPACE   TO      S9MSG                   
               EVALUATE  FKEY                                  
                   WHEN  F12       MOVE  01  TO  W-FMT         
                   WHEN  OTHER     PERFORM  SB-2230            
               END-EVALUATE                                    
           END-PERFORM.                                       
      *-------------------------------------------------------
      * 第二画面のチェック                                    
       SB-2230.                                               
           MOVE  CORR    FMT02-I  TO  FMT02-O.                
           MOVE  SPACE            TO  W-UPD.                  
      * 属性の取得                                            
      *     *--------------------*                            
      *     | (名前などの取得) |                            
      *     *--------------------*                            
      * エラーチェック                                        
           MOVE    Z-OFF  TO  IN30  IN32  IN33.               
      * 得意先チェック                                        
           MOVE    S2TKCD OF FMT02-I  TO  TKCDNO.             
           READ  FILE3  RECORD  INVALID  KEY                  
                                MOVE  Z-ON  TO  IN98.         
           IF  IN98  =  Z-ON                                  
               MOVE  MSG(2)  TO  S9MSG                        
               MOVE  Z-ON    TO  IN30  IN32                   
           END-IF.                                            
      * 日付チェック                                          
      * 日付チェック                                        
           IF  S2JUDT  OF  FMT02-I  =  0                    
               MOVE  MSG(3)  TO  S9MSG                      
               MOVE  Z-ON    TO  IN30  IN33                 
           END-IF.                                          
      * OKなら第3画面へ                                  
           IF   IN30  =  Z-OFF                              
                   MOVE  03      TO  W-FMT                  
           END-IF.                                          
      *-----------------------------------------------------
      * 第3画面処理                                        
       SB-3000.                                             
      * 第3画面準備                                        
           MOVE  Z-OFF   TO  IN01  IN02.                    
           MOVE  Z-ON    TO  IN03.                          
           MOVE  SPACE   TO  W-UPD.                         
           MOVE  SPACE   TO  S9MSG.                         
           MOVE  SPACE   TO  CTL-A.                         
           IF  W-MOD  =  04                                 
               MOVE  Z-ON    TO  IN28   OF  FMT02-O-INDIC   
                                 IN28   OF  SFL01-O-INDIC     
               MOVE  MSG(4)  TO  S9MSG                        
           ELSE                                               
               MOVE  Z-OFF   TO  IN28   OF  FMT02-O-INDIC     
                                 IN28   OF  SFL01-O-INDIC     
           END-IF.                                            
      * 第3画面繰返し                                        
           PERFORM  UNTIL  W-FMT  NOT =  03                   
               WRITE   FILE1R  FROM  FMT99-O  FORMAT  'FMT99' 
                               INDICATORS     FMT99-O-INDIC   
               WRITE   FILE1R  FROM  FMT01-O  FORMAT  'FMT01' 
                               INDICATORS     FMT01-O-INDIC   
               WRITE   FILE1R  FROM  FMT02-O  FORMAT  'FMT02' 
                               INDICATORS     FMT02-O-INDIC   
               MOVE  Z-ON   TO  IN23  IN24                    
               WRITE   FILE1R  FROM  CTL01-O  FORMAT  'CTL01' 
                               INDICATORS     CTL01-O-INDIC   
               MOVE  Z-OFF  TO  IN23  IN24                    
               READ    FILE1   INTO  CTL01-I  FORMAT  'CTL01' 
               MOVE    SPACE   TO    S9MSG                    
               EVALUATE  FKEY                                          
                   WHEN  F12                                           
                       MOVE  02    TO  W-FMT                           
                   WHEN  OTHER                                         
                       PERFORM  SB-3260                                
               END-EVALUATE                                            
           END-PERFORM.                                                
      *--------------------------------------------------------------- 
      * 第三画面実行キーが押されたときの処理                           
       SB-3260.                                                        
           MOVE  ' '   TO  W-UPD.                                      
      * エラーチェック                                                 
           MOVE  Z-OFF   TO  IN29  IN30.                               
      * 入力(変更)あったサブファイルについて                         
           PERFORM  SB-READ-CHG                                        
           PERFORM  UNTIL  IN27  =  Z-ON                               
               MOVE     '1'   TO  CHG (RRN)                            
               MOVE     Z-ON  TO  IN29                                 
               PERFORM  SB-CHECK-SCR3                                  
               REWRITE  SUBFILE  FILE1R  FROM  SFL01-O  FORMAT 'SFL01' 
                                 INDICATORS    SFL01-O-INDIC    
               PERFORM  SB-READ-CHG                             
           END-PERFORM.                                         
      *                                                         
           IF  IN30  =  Z-OFF                                   
               IF  IN29 = Z-OFF                                 
                   MOVE  'U'      TO  W-UPD                     
                   MOVE  01       TO  W-FMT                     
               ELSE                                             
                   MOVE  MSG(4)   TO  S9MSG                     
               END-IF                                           
           END-IF.                                              
      *---------------------------------------------------------
      * 第三画面の明細チェック                                  
       SB-CHECK-SCR3.                                           
      * 属性の取得(必要あれば名前などの取得)                  
           MOVE     RRN         TO  S4GYNO  OF  SFL01-O.        
           COMPUTE  S4JUGK  OF  SFL01-O  =                      
                    S4JUSU  OF  SFL01-I  *  S4JUTK OF  SFL01-I. 
      * チェック                                                
           MOVE  Z-OFF   TO  IN41  IN42  IN43.          
      * 品目                                          
           IF  S4HNCD  OF  SFL01-I  =  SPACE            
               MOVE    Z-ON    TO  IN30  IN41           
               MOVE    MSG(3)  TO  S9MSG                
           END-IF.                                      
      * 受注数                                          
           IF  S4JUSU  OF  SFL01-I  =  ZERO             
               MOVE    Z-ON    TO  IN30  IN42           
               MOVE    MSG(3)  TO  S9MSG                
           END-IF.                                      
      * 受注@                                          
           IF  S4JUTK  OF  SFL01-I  =  ZERO             
               MOVE    Z-ON    TO  IN30  IN43           
               MOVE    MSG(3)  TO  S9MSG                
           END-IF.                                      
      *-------------------------------------------------
       SB-0000.                                         
      *                                                 
           EVALUATE  W-MOD                  
           WHEN  02                                           
               PERFORM    VARYING  RRN  FROM 01               
                          BY  01  UNTIL  RRN >99              
                   IF    CHG (RRN)  = '1'                     
                       PERFORM  SB-CHAIN-SFL                  
                       MOVE  S1JUNO OF FMT01-I  TO  JDJUNO    
                       MOVE  RRN                TO  JDMENO    
                       MOVE  Z-OFF  TO  IN99                  
                       READ  FILE2  RECORD  INVALID  KEY      
                                    MOVE  Z-ON  TO  IN99      
                       END-READ                               
                       PERFORM  SB-EDIT                       
                       IF    IN99  =  Z-OFF                   
                           REWRITE  FILE2R                    
                       ELSE                                   
                           WRITE    FILE2R                    
                       END-IF                                 
                   END-IF                                     
               END-PERFORM                                    
           WHEN  04                                           
               MOVE   S1JUNO  OF  FMT01-I  TO  JDJUNO        
               MOVE   00                   TO  JDMENO        
               MOVE   Z-OFF   TO  IN99                       
               START  FILE2  KEY  NOT  LESS  THAN            
                                  EXTERNALLY-DESCRIBED-KEY   
               PERFORM  SB-READ-EQ                           
               PERFORM  UNTIL  IN99 NOT = Z-OFF              
                   DELETE   FILE2                            
                   PERFORM  SB-READ-EQ                       
               END-PERFORM                                   
           END-EVALUATE.                                     
      *                                                      
           MOVE  SPACE   TO  CTL-A.                          
           MOVE  000000  TO  S1JUNO  OF  FMT01-I             
           MOVE  01      TO  W-FMT.                          
      *------------------------------------------------------
       SB-EDIT.                                              
      * 編集処理                                             
           MOVE  S2TKCD  OF  FMT02-I  TO  JDTKCD.            
           MOVE  S4HNCD  OF  SFL01-I  TO  JDHNCD.            
           MOVE  S4JUSU  OF  SFL01-I  TO  JDJUSU.                     
           MOVE  S4JUTK  OF  SFL01-I  TO  JDJUTK.                     
           MOVE  S2JUDT  OF  FMT02-I  TO  JDJUDT.                     
           MOVE  S4NODT  OF  SFL01-I  TO  JDSEDT.                     
      *---------------------------------------------------------------
       SB-READ-CHG.                                                   
           MOVE  Z-OFF    TO     IN27.                                
           READ  SUBFILE  FILE1  NEXT  MODIFIED  RECORD  INTO SFL01-I 
                                 FORMAT  'SFL01'                      
                          AT     END     MOVE  Z-ON  TO  IN27.        
           IF  IN27   =  Z-OFF                                        
               MOVE  CORR   SFL01-I  TO  SFL01-O                      
           END-IF.                                                    
      *---------------------------------------------------------------
      * サブファイルを初期化                                          
       SB-INZ-SFL.                                                    
           MOVE  Z-ON   TO  IN21.                                     
           WRITE  FILE1R  FROM  CTL01-O  FORMAT  'CTL01'              
                                INDICATORS     CTL01-O-INDIC.         
           MOVE  Z-OFF  TO  IN21.                                     
      *-----------------------------------------------------------
      * サブファイルをRRNで読み取り                            
       SB-CHAIN-SFL.                                              
           MOVE  Z-OFF    TO     IN27.                            
           READ  SUBFILE  FILE1  RECORD  INTO SFL01-I             
                                 FORMAT  'SFL01'                  
                          INVALID  KEY   MOVE  Z-ON  TO  IN27.    
           IF  IN27   =  Z-OFF                                    
               MOVE  CORR   SFL01-I  TO  SFL01-O                  
           END-IF.                                                
      *-----------------------------------------------------------
       SB-READ-EQ.                                                
           IF    IN99 = Z-OFF                                     
               READ  FILE2  NEXT  RECORD                          
                            AT    END      MOVE  Z-ON  TO  IN99   
               END-READ                                           
               IF    JDJUNO  NOT =   S1JUNO OF FMT01-I            
                                           MOVE  Z-ON  TO  IN99   
               END-IF                                             
           END-IF.                                                
      *----------------------------------
       SB-END.                           
           CLOSE   FILE1  FILE2  FILE3.  
           STOP    RUN.                  




ブラウザの戻るボタンで戻って下さい。



(C)COPYRIGHT ISHIOKA KATSUHIDE 2008