Я меняю три значения внутри файла, который определяет 7500 байт. Раньше я помещал все определения файлов после своего файла, чтобы лучше их видеть. Но так как я поднялся на уровень в COBOL, я просто хочу сделать все заполнителем, а затем сделать видимыми четыре поля, к которым мне нужно получить доступ.
Я продолжаю получать ошибку sB37, когда запускаю свой JCL. Мой выходной файл также определяется как 7500 байт. Я просмотрел список компиляции, и он показывает все мои поля в правильных местах.
Я посмотрел на свой выходной файл, и, кажется, было записано только 28 000 записей, и первые десять выглядят как мусорная информация.
Я не могу перечислить всю программу для правил компании, но как мне решить ошибку sB37.
Вопрос: как исправить ошибку sB37?
Код:
FD OUTPUT-FILE
RECORD VARYING FROM 2900 TO 7500
RECORDING MODE IS V
BLOCK CONTAINS 0.
01 O-PROVIDER-RECORD.
05 FILLER PIC X(149).
05 END-DTE PIC X(8).
05 CANCEL PIC X(2).
05 FILLER PIC X(1133).
05 LAST-ACTIVITY-DTE PIC X(8).
05 FILLER PIC X(1598).
05 GROUP-CTR PIC S999 COMP-3.
05 FILLER PIC X(4600).
JCL:
//STEP2 EXEC PGM=programnamehere
//STEPLIB DD DSN=SW89.DEBUG.programnamehere,DISP=SHR
//SYSOUT DD SYSOUT=1
//SYSDBOUT DD SYSOUT=1
//SYSOUC DD SYSOUT=2
//SYSPRINT DD SYSOUT=1
//SYSUDUMP DD SYSOUT=1
//INPUT1 DD DSN=MainFile.B01(+0),DISP=SHR,BUFNO=30
//INPUT2 DD DSN=CDP.PARMLIB(SW00T111),DISP=SHR
//OUTPUT1 DD DSN=SW89.DEBUG.OUTPUTFILE,DISP=(NEW,CATLG),
// DCB=TS20.VB7504.MODEL,MGMTCLAS=TMM,
// SPACE=(CYL,(100,10),RLSE)
//PRTOUTA DD SYSOUT=3,DCB=(BLKSIZE=0,LRECL=133,RECFM=FBM)
//*
Последняя часть файла:
05 AREA.
10 IND PIC X.
10 CTR PIC S999 COMP-3.
10 P-GROUP-INFO OCCURS 200 TIMES DEPENDING ON CTR.
15 P-NO PIC 9(7).
15 P-START-DTE.
20 PSTART-CC PIC 99.
20 P-START-DATE.
25 P-START-YY PIC 99.
25 P-START-MM PIC 99.
25 P-START-DD PIC 99.
15 P-STOP-DTE.
20 P-STOP-CC PIC 99.
20 P-STOP-DATE.
25 YY PIC 99.
25 MM PIC 99.
25 DD PIC 99.
Когда я иду проверять свои совпадения, я обнаруживаю, что мой оператор записи вставляет пустую строку между всеми моими обычными строками файла. Единственное, что здесь должно произойти, это то, что три значения изменяются в o-provider-record, а затем записываются обратно в файл. В каждой второй строке не должно быть пустых строк с этой новой информацией.
Код:
CHECK-MATCH.
PERFORM VARYING SUB FROM 1 BY 1 UNTIL SUB > TABLECOUNTER
IF P-PROVIDER >= TRIG-PROV-FROM(SUB) AND
P-PROVIDER <= TRIG-PROV-THRU(SUB) THEN
IF WS-CURRENT-DATE < P-END-DTE THEN
IF P-YTD-TOTAL-PD = 0 AND
P-PYR-TOTAL-PD = 0 AND
P-PYR2-TOTAL-PD = 0 AND
P-PYR3-TOTAL-PD = 0 AND
P-PYR4-TOTAL-PD = 0 THEN
IF P-NON-BILL-IND NOT EQUAL 'Y'
PERFORM VARYING TAB FROM 1 BY 1 UNTIL TAB > 5
IF P-TAXONOMY-CD(TAB) = TRIG-TAXONOMY(SUB) THEN
ADD 1 TO T-REC-FOUND
ADD 1 TO T-REC-UPDATED
MOVE 'ZZ' TO O-CANCEL
MOVE '93939393' TO O-END-DTE
MOVE '93939393' TO O-LAST-ACTIVITY-DTE
PERFORM LOAD-PRINT-REPORT THRU X-LPR
PERFORM PRINT-REPORT THRU X-PR
PERFORM ERASE-REPORT THRU X-ER
END-IF
END-PERFORM
END-IF
END-IF
END-IF
END-IF
ADD 1 TO T-REC-WRITTEN
WRITE O-PROVIDER-RECORD END-WRITE
END-PERFORM.
X-CHECK-MATCH. EXIT.