Skip to content
Learn Netverks
0

Subfile WRITE fails with CPF5021 (status 9N / extended status 831D), even on a minimal test program

asked 15 hours ago by @qa-j8byczol0unnjiqgo1rt 0 rep · 29 views

ibm midrange

I'm learning COBOL on IBM i (PUB400, V7R5M0) and I'm stuck on a subfile issue. It reproduces even on the simplest possible program, so I don't think it's a logic bug in my code — it looks more like an environment or DDS-level issue I'm missing.
Here is the DDS source (TESTSFL):

     A                                      INDARA  
     A                                      CA03(03 'F3=Quitter')  
     A          R SFLREC                    SFL  
     A            NOM           10A  O  4  5  
     A          R SFLCTL                    SFLCTL(SFLREC)  
     A                                      SFLSIZ(0010)  
     A                                      SFLPAG(0005)  
     A N31                                  SFLDSP  
     A N32                                  SFLDSPCTL  
     A N33                                  SFLCLR  
     A            FILLER1        1A  H  
     A                                  1  2'TEST SUBFILE MINIMAL'  

And here is the COBOL program (TESTPGM):

IDENTIFICATION DIVISION.  
       PROGRAM-ID. TESTPGM.  
  
       ENVIRONMENT DIVISION.  
       INPUT-OUTPUT SECTION.  
       FILE-CONTROL.  
           SELECT SCREEN-FILE ASSIGN TO WORKSTATION-TESTSFL-SI  
                  ORGANIZATION IS TRANSACTION  
                  ACCESS MODE IS DYNAMIC  
                  RELATIVE KEY IS RRN  
                  FILE STATUS IS WS-STATUS WS-STATUS-EXT.  
  
       DATA DIVISION.  
       FILE SECTION.  
       FD  SCREEN-FILE.  
       01  SCREEN-RECORD.  
           COPY DDS-ALL-FORMATS OF TESTSFL.  
  
       WORKING-STORAGE SECTION.  
       01  WS-STATUS               PIC X(2).  
       01  WS-STATUS-EXT           PIC X(4).  
       01  RRN                     PIC 9(4) VALUE ZERO.  
       01  IND-AREA.  
           05  IND-TAB             PIC X OCCURS 99 TIMES VALUE "0".  
       01  IND-MAP REDEFINES IND-AREA.  
           05  FILLER              PIC X(2).  
           05  IN03                PIC X.  
               88  IN03-ON         VALUE "1".  
  
       PROCEDURE DIVISION.  
       MAIN-LOGIC.  
           OPEN I-O SCREEN-FILE.  
  
           MOVE "1" TO IND-TAB(33).  
           WRITE SCREEN-RECORD FORMAT IS "SFLCTL"  
                 INDICATORS ARE IND-AREA.  
           MOVE "0" TO IND-TAB(33).  
  
           MOVE 1 TO RRN.  
           MOVE "Ligne un"  TO NOM OF SFLREC-O.  
           WRITE SCREEN-RECORD FORMAT IS "SFLREC"  
                 INDICATORS ARE IND-AREA.  
  
           ADD 1 TO RRN.  
           MOVE "Ligne deux" TO NOM OF SFLREC-O.  
           WRITE SCREEN-RECORD FORMAT IS "SFLREC"  
                 INDICATORS ARE IND-AREA.  
  
           MOVE "1" TO IND-TAB(31).  
           MOVE "1" TO IND-TAB(32).  
           WRITE SCREEN-RECORD FORMAT IS "SFLCTL"  
                 INDICATORS ARE IND-AREA.  
           READ SCREEN-FILE FORMAT IS "SFLCTL"  
                 INDICATORS ARE IND-AREA.  
  
           CLOSE SCREEN-FILE.  
           STOP RUN.\>

The very first WRITE SCREEN-RECORD FORMAT IS "SFLREC" (RRN=1) fails with WS-STATUS = '9N'.

The job log shows this message:

CPF5021 (severity 30): "Incorrect relative record number or field selection error.
The relative record number value was either less than one or greater than the
maximum allowed for the operation. If you are using field selection, the field
selected does not fit the available screen area."

Extended file status (second FILE STATUS data item) = 831D.

Here is what I've already checked and ruled out:

  • RRN confirmed = 1 at the time of the failing WRITE (checked in debug).

  • SFLSIZ(0010)/SFLPAG(0005) look consistent with the number of records written (2).

  • -SI suffix present on the ASSIGN clause (required since DDS has INDARA).

  • INDICATORS ARE present on every I/O statement against the file.

  • No duplicate TESTSFL object elsewhere in the library list.

  • Fresh interactive session makes no difference.

  • Tried PIC 9(4) vs PIC 9(4) BINARY for the relative key — no difference.

  • Added CONTROL-AREA IS clause — no difference.

Any idea what could be causing this, or what else I should check?

Comments on this question (0)

Use comments to ask for clarification — answers go in the answer box below.

Log in to comment on this question.

0 answers

Your answer