構造化プログラミングの方法

9:Re:もう少しだけ直しました(その2)
EXCHANGE 08/22 13:50
☆ 「雛形」ではカーソルの位置の制御を、FOCUS-POSITIONで

  行っていますので、

  例えば項目Bの入力後、項目Bの再入力へLOOPさせたい場合は、 FOCUS-POSITIONを変更せずに進めるとうまくいくのでは

  ないかと思います。(間違ってたらごめんなさい)



  項目入力時に(HTAB)(BSKIP)以外のキーを押下した場合も(F9)をのぞいて同じ項目の再入力に戻ります。

 

☆ なおA−VXの場合、SKIPキーの扱いが問題かとも思います。

 経験された方はご存じと思うのですが、数字項目の表示位置が初期状態では「空白」(=文字)となるので「0」等を編集表示(例:ZZZZ−)しておかないと、いきなりSKIPを押下−−>「NON−NUMERIC」エラーになります。入力後、カンマ付編集をしている場合も(カンマが文字と見なされるので)要注意です。この辺をうまく織り込もうとすると「雛形」を使っても結構、面倒な気がします。





*
MOVE 1 TO FOCUS-POSITION.
MOVE 2 TO FOCUS-POSITION-MAX.
MOVE SPACE TO END-STATUS.
MOVE SPACE TO WINDOW-STATUS.
*
PERFORM UNTIL END-STATUS = "P9"
             OR WINDOW-STATUS = "EXIT"
*
  EVALUATE FOCUS-POSITION
    WHEN 1
          ACCEPT ACEP-A-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN "01"
                DISPLAY ACEP-A-DSP
                PERFORM ACEP-A-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-A
                  ELSE
                      ADD 1 TO FOCUS-POSITON
                END-IF
            WHEN OTHER
                CONTINUE
          END-EVALUATE
    WHEN 2
          ACCEPT ACEP-B-ACP
          EVALUATE END-STATUS
            WHEN "09"
                SUBTRACT 1 FROM FOCUS-POSITION
            WHEN "01"
                DISPLAY ACEP-B-DSP
                PERFORM ACEP-B-CHECK-SUB
                IF ERR-FLAG = 1
                  THEN
                      DISPLAY ERROR-MSG-B
                  ELSE
                      (処理結果表示)
                      (FOCUS-POSITONを1UPしない)
                END-IF
            WHEN OTHER
                CONTINUE
          END-EVALUATE
    WHEN OTHER
          CONTINUE
  END-EVALUATE
*
  IF FOCUS-POSITION = 0
    THEN MOVE 1 TO FOCUS-POSITION
  END-IF
*
  IF FOCUS-POSITION > FOCUS-POSITION-MAX
    THEN MOVE "EXIT" TO WINDOW-STATUS
  END-IF
*
END-PERFORM.



1-

BluesBB ©Sting_Band