У меня есть главный файл, для которого одна запись в главном файле будет иметь более одной записи в файле сведений.
Например: одна запись в главном файле может содержать 20 записей в файле сведений.,Я должен сопоставить количество записей от мастера против детализации в виде отчета.
Требование в более подробной форме:
На основе информации как в основном файле проверки, так и в соответствующем файле детали,напишите программу, которая предоставляет следующую информацию в базовом отчете:
Треб. 1: Для каждого отдельного кода банка на ведущем устройстве укажите каждый обнаруженный статус чека и количество проверок для этого статуса.Например, банковский код BC имеет 45 неоплаченных чеков.
Треб. 2: Для каждого статуса чека по коду банка (непогашенный, недействительный, оплаченный и т. Д.) Укажите количество основных записей подробностей, соответствующих этим статусам.Например, банк BC может иметь только 1 непогашенный чек, что соответствует 45 записям в файле сведений.
Вы можете выполнить вышеизложенное с 1 проходом к мастеру проверки.
Я написал программу для выполнения вышеизложенного, но моя программа находится в цикле и не существует конца файла основного файла, а также не совпадает число записей в файле сведений. Пожалуйста, помогите мне разрешить цикл, чтобы получить желаемый результати я не знаю, как кодировать требование 2.
FILE-CONTROL.
SELECT SIR-MASTER-FILE ASSIGN TO VXSIRCKF
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS SIRM-KEY
FILE STATUS IS SIRM-FILE-STATUS.
SELECT SIR-DETAIL-FILE ASSIGN TO VXSIRDEF
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS SIRD-KEY
FILE STATUS IS SIRD-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD SIR-MASTER-FILE.
01 SIR-MASTER-REC.
02 SIRM-KEY.
03 SIRM-CLIENT PIC X(02).
03 SIRM-PLAN PIC X(02).
03 SIRM-REGION PIC X(02).
03 SIRM-BANK-CODE PIC X(05).
03 SIRM-CK-ACH-NBR PIC 9(10).
03 SIRM-RECORD-NBR PIC 9(05).
03 SIRM-SEQUENCE-NBR PIC 9(02).
02 SIRM-KEY2 PIC X(41).
02 SIRM-KEY3-4.
03 SIRM-KEY3.
05 SIRM-RECIP-CLM PIC X(20).
05 SIRM-KEY4 PIC X(35).
02 SIRM-LRECL PIC 9(04).
02 SIRM-DATA.
03 FILLER PIC X(01)
OCCURS 374 TO 3722 DEPENDING ON SIRM-LRECL.
COPY VXSIRHDR.
FD SIR-DETAIL-FILE.
01 SIR-DETAIL-REC.
02 SIRD-KEY.
03 SIRD-BANK-CODE PIC X(05).
03 SIRD-CHECK-NBR PIC 9(10).
03 SIRD-CLAIM-NBR PIC X(25).
03 SIRD-SEQ-NBR PIC 9(07).
02 SIRD-DATE-MOVED PIC 9(08).
02 SIRD-LRECL PIC 9(04).
02 SIRD-DATA.
03 FILLER PIC X(01)
OCCURS 1 TO 2330 DEPENDING ON SIRD-LRECL.
WORKING-STORAGE SECTION.
01 WS-FILE-STATUS.
05 SIRM-FILE-STATUS PIC X(02).
05 SIRD-FILE-STATUS PIC X(02).
01 WS-WORK-AREA.
05 ABEND-RESULT PIC 9(01).
05 ZERO-VAR PIC 9(01) VALUE 0.
01 EOF-SIRM-SW PIC X(01) VALUE 'N'.
88 EOF-SIRM VALUE 'Y'.
01 EOF-SIRD-SW PIC X(01) VALUE 'N'.
88 EOF-SIRD VALUE 'Y'.
01 WS-TABLE.
02 BANK-INFO OCCURS 500
INDEXED BY B-IDX.
03 WS-BANK-CODES PIC X(05).
02 STATUS-INFO OCCURS 500
INDEXED BY S-IDX.
03 WS-STATUS-CODES PIC X(3).
02 COUNTER PIC 9(5).
01 HEADING-LINE1.
05 FILLER PIC X(20) VALUE SPACES.
05 FILLER PIC X(36) VALUE
'CHECK MASTER VS DETAIL COUNT REPORT '.
01 DESIGN.
05 FILLER PIC X(20) VALUE SPACES.
05 FILLER PIC X(36) VALUE
'************************************'.
01 HEADING-LINE2.
05 FILLER PIC X(5) VALUE SPACES.
05 FILLER PIC X(9) VALUE 'BANK CODE'.
05 FILLER PIC X(1) VALUE SPACES.
05 FILLER PIC X(12) VALUE 'CHECK STATUS'.
05 FILLER PIC X(2) VALUE SPACES.
05 FILLER PIC X(11) VALUE 'STATUS CODE'.
05 FILLER PIC X(2) VALUE SPACES.
05 FILLER PIC X(20) VALUE 'DETAIL NO OF RECORDS'.
01 DETAIL-LINE.
05 FILLER PIC X(5) VALUE SPACES.
05 DET-BANK-CODE PIC X(05).
05 FILLER PIC X(5) VALUE SPACES.
05 DET-CHK-NBR PIC 9(10).
05 FILLER PIC X(5) VALUE SPACES.
05 DET-STATUS-CODE PIC X(3).
05 FILLER PIC X(10) VALUE SPACES.
05 DET-DETAIL-COUNT PIC 9(5).
COPY VXSIRDTL.
PROCEDURE DIVISION.
PERFORM INTALIZATION
PERFORM OPEN-DETAIL
PERFORM PRINT
PERFORM INIT
PERFORM TERMINATION
GOBACK.
INTALIZATION.
OPEN INPUT SIR-MASTER-FILE
IF SIRM-FILE-STATUS IS NOT EQUAL TO '00'
THEN
GO TO ERROR-EXIT
END-IF.
OPEN-DETAIL.
OPEN INPUT SIR-DETAIL-FILE
IF SIRD-FILE-STATUS IS NOT EQUAL TO '00'
THEN
GO TO ERROR-EXIT
END-IF.
PRINT.
DISPLAY HEADING-LINE1.
DISPLAY DESIGN.
DISPLAY HEADING-LINE2.
INIT.
INITIALIZE WS-TABLE.
SET B-IDX TO 1.
SET S-IDX TO 1.
PERFORM READ-PAR
PERFORM LOAD .
PERFORM UNTIL EOF-SIRM
MOVE SIRM-BANK-CODE TO WS-BANK-CODES(B-IDX)
SET B-IDX UP BY 1
MOVE SIR-STATUS-CODE TO WS-STATUS-CODES(S-IDX)
SET S-IDX UP BY 1
MOVE 'N' TO EOF-SIRD-SW
PERFORM UNTIL EOF-SIRD
PERFORM READ-DETAIL
IF SIRM-BANK-CODE = SIRD-BANK-CODE AND
SIRM-CK-ACH-NBR = SIRD-CHECK-NBR
THEN
ADD 1 TO COUNTER
ELSE
MOVE SIRM-BANK-CODE TO DET-BANK-CODE
MOVE SIRM-CK-ACH-NBR TO DET-CHK-NBR
MOVE SIR-STATUS-CODE TO DET-STATUS-CODE
MOVE COUNTER TO DET-DETAIL-COUNT
DISPLAY DETAIL-LINE
MOVE 0 TO COUNTER
MOVE 'Y' TO EOF-SIRD-SW
END-IF
END-PERFORM
PERFORM READ-PAR
END-PERFORM.
TERMINATION.
CLOSE SIR-MASTER-FILE.
CLOSE SIR-DETAIL-FILE.
READ-PAR.
READ SIR-MASTER-FILE NEXT RECORD
AT END
MOVE 'Y' TO EOF-SIRM-SW
DISPLAY '*******************************************'
NOT AT END
IF SIRM-FILE-STATUS IS NOT EQUAL TO '00'
THEN
GO TO ERROR-EXIT
END-IF
END-READ.
READ-DETAIL.
READ SIR-DETAIL-FILE NEXT RECORD
AT END
MOVE 'Y' TO EOF-SIRD-SW
NOT AT END
IF SIRD-FILE-STATUS IS NOT EQUAL TO '00'
THEN
GO TO ERROR-EXIT
END-IF
END-READ.
ERROR-EXIT.
DISPLAY 'INSIDE ERROR '
DISPLAY '*************************************************'.
DISPLAY '* PROGRAM1 IS ABENDING ABNORMALLY *'.
DISPLAY '*************************************************'.
COMPUTE ABEND-RESULT = 1 / ZERO-VAR.
END-ERROR.
the values in the detail record is wrong in the below result
CHECK MASTER VS DETAIL COUNT REPORT
************************************
BANK CODE CHECK STATUS STATUS CODE DETAIL NO OF RECORDS
BC 2100000074 000 00079
BC 2100000074 902 00000
BC 2100000074 902 00000
BC 2100000074 902 00000
BC 2100000075 000 00014
BC 2100000075 903 00000
BC 2100000076 000 00049
BC 2100000076 902 00000
BC 2100000076 902 00000
BC 2100000077 000 00014
BC 2100000077 902 00000
BC 2100000078 000 00051
BC 2100000078 902 00000
BC 2100000078 902 00000
BC 2100000078 902 00000
BC 2100000079 000 00610
BC 2100000079 902 00000
BC 2100000079 902 00000
BC 2100000079 902 00000
BC 2100000079 902 00000
BC 2100000079 902 00000
BC 2100000079 902 00000
BC 2100000079 902 00000
BC 2100000079 902 00000
BC 2100000079 902 00000