Declaratives

본 장에서는 Report Writer에서 사용되는 Declaratives에 대해서 설명한다.

1. USE BEFORE REPORTING

USE BEFORE REPORTING은 지정된 report 그룹이 생성되기 바로 전에 Procedure Division의 Declaratives에 있는 section이 자동으로 수행되도록 한다.

USE BEFORE REPORTING section에는 report writer에서 사용되는 INITIATE, GENERATE, TERMINATE statement이 포함되어서는 안된다.

  • declarative-section format

    figure rw usebefore
    declarative-section

USE BEFORE REPORTING section을 코드화하기 위해서, 해당 그룹에 01 레벨 데이터 이름이 있는지 확인해야 report-group-name으로 참조할 수 있다.

USE BEFORE REPORTING section은 다른 section을 PERFORM 할 수 있다 일반적으로 DECLARATIVES 부분에 있는 추가적으로 다른 section을 수행할 수 있다. 이러한 목적으로 USE statement가 없는 DECLARATIVES 내에 추가적인 section을 코드화할 수 있다. 또한, PROCEDURE DIVISION의 mainline에 있는 section에 대해 PERFORM을 할 수 있다.

다음 예에서는 두 개의 report 그룹 중 하나를 생성하려고 할 때 수행할 하나의 section을 코드화하는 방법을 보여준다.

       ...
       01 A-REPORT TYPE CH FOR A-CODE.
       ...
       01 B-REPORT TYPE CH FOR B-CODE.
       ...
       PROCEDURE DIVISION.
       DECLARATIVES.
       CHANGE-A SECTION.
           USE BEFORE REPORTING A-REPORT.
       CHA-000.
           PERFORM CHANGE-A-B.
       CHANGE-B SECTION.
           USE BEFORE REPORTING B-REPORT.
       CHB-000.
           PERFORM CHANGE-A-B.
       CHANGE-A-B SECTION.
       CAB-000.
           ...
       END DECLARATIVES.
Operation

report 그룹 중 하나에 USE BEFORE REPORTING section이 있는 경우 report writer는 그룹을 처리하는 동안 해당 section을 암시적으로 수행한다.

보고서에 가능한 모든 기능이 있다고 가정하면 section이 다음과 같을 경우 암시적으로 수행된다.

  • 해당 그룹이 DETAIL이라면 control break 확인 및 CONTROL FOOTING 과 CONTROL HEADING 그룹을 생성한 후 수행

  • 그룹의 총 합계를 계산한 후 수행(따라서 USE BEFORE REPORTING section에서 그것을 참조할 수 있음)

  • 해당 그룹이 body 그룹이면 페이지 영역 확인 및 PAGE FOOTING과 PAGE HEADING 그룹을 생성하기 전에 수행

  • 그룹의 라인에 SOURCE, SUM 필드를 설정하기 전에 수행(따라서 그룹에 표시되는 원래 필드를 바꿀 수 있음)

해당 순간의 그룹에 대한 출력을 방지하기 위해 USE BEFORE REPORTING에 SUPPRESS PRINTING statement나 MOVE 1 TO PRINT-SWITCH를 포함할 수 있다.

USE BEFORE REPORTING section은 ANS-68과 ANS-74 COBOL report writer에서 많이 사용되었다. report writer와 함께 해당 기능 중 많은 부분이 현재 PRESENT WHEN과 PRESENT AFTER 절에 의해 수행된다. 하지만 여전히 사용될 수 있는 기능들이 다음과 같이 있다.

  • 다른 파일에 대한 추가적인 레코드를 WRITE하기 위해 Declarative section을 사용할 수 있다.

  • 각 새로은 CONTROL 값이 시작될 때마다 추가적인 레코드를 READ하기 위해서 CONTROL HEADING 그룹에 대한 USE BEFORE REPORTING section을 사용할 수 있다.

  • 특정 복잡한 상황에서 새로운 페이지에서 CONTROL HEADING 그룹을 강제로 시작할 수 있다.

2. DEBUGGING

Debugging section은 nested program에서 사용되는 procedure에서는 동작하지 않으며 Outer-program의 procedure에서만 동작한다.

Debugging section을 활성화 하기 위해서는 Environment Division / Configuration section / SOURCE-COMPUTER에 WITH DEBUGGING MODE를 명시해야 한다.

  • declarative-section format

    figure declaratives debugging
    debugging declarative

모든 Debugging Statement는 DECLARATIVES 헤더 바로 뒤에 작성되어야 한다.

다음은 각 DEBUGGING declarative 설정 항목에 대한 설명이다.

  • procedure-name-1

    • procedure-name-1은 Debugging Section에 선언되어 있어서는 안된다.

    • 주어진 procedure-name은 하나의 USE FOR DEBUGGING sentence에서만 지정할 수 있으며, 해당 sentence에서는 한 번만 지정할 수 있다.

    • Outer-program의 procedure에 대해서만 모든 procedure-name을 지정할 수 있다.

  • ALL PROCEDURES

    • ALL PROCEDURES phrase는 program에서 한 번만 지정할 수 있다.

    • ALL PROCEDURES 지정하는 경우 Outer-program의 전체 procedure에 대해서만 Debugging 동작을 수행한다.

Dubugging Declarative 선언 시 DEBUG-ITEM special register가 생성된다.

01 DEBUG-ITEM.
   02 DEBUG-LINE PICTURE IS X(6).
   02 FILLER PICTURE IS X VALUE SPACE.
   02 DEBUG-NAME PICTURE IS X(30).
   02 FILLER PICTURE IS X VALUE SPACE.
   02 DEBUG-SUB-1 PICTURE IS S9999 SIGN IS LEADING SEPARATE CHARACTER.
   02 FILLER PICTURE IS X VALUE SPACE.
   02 DEBUG-SUB-2 PICTURE IS S9999 SIGN IS LEADING SEPARATE CHARACTER.
   02 FILLER PICTURE IS X VALUE SPACE.
   02 DEBUG-SUB-3 PICTURE IS S9999 SIGN IS LEADING SEPARATE CHARACTER.
   02 FILLER PICTURE IS X VALUE SPACE.
   02 DEBUG-CONTENTS PICTURE IS X(n).