Implicit file closure

I wrote the following COBOL program:

*************************************************************
* VERKOOP  
*************************************************************
       IDENTIFICATION DIVISION.
       PROGRAM-ID. VERKOOP.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT PRODUCTEN ASSIGN TO "BESTANDEN/PRODUCTEN"
           ACCESS MODE IS RANDOM
           ORGANIZATION IS INDEXED
           RECORD KEY IS PRODUCTID
           FILE STATUS IS WS-FILE-STATUS.

       DATA DIVISION.
       FILE SECTION.
       FD  PRODUCTEN BLOCK CONTAINS 10 RECORDS.
       01  PRODUCT.
           02 PRODUCTID PIC X(6).
           02 LEVERANCIERID PIC X(6).
           02 AANTAL PIC 9(6).
       WORKING-STORAGE SECTION.
       77  FOUT PIC X.
           88 PRODUCT-NIET-GEVONDEN VALUE 1.
       77 WS-PRODUCTID PIC X(6).
       77 WS-AANTAL PIC 9(6).
       77 WS-FILE-STATUS PIC XX.
       LINKAGE SECTION.
       01 LS-PRODUCTID PIC X(6).
       01 LS-AANTAL PIC 9(6).
       PROCEDURE DIVISION. 
*      USING LS-PRODUCTID, LS-AANTAL.

       MAIN.
           PERFORM INITIALISEER
           PERFORM LEES-PRODUCT-IN
           PERFORM LEES-BESTAND
           PERFORM SLUIT-BESTAND
           STOP RUN.

       INITIALISEER.
           MOVE ZEROS TO PRODUCT
           OPEN I-O PRODUCTEN.
*          DISPLAY WS-FILE-STATUS..

       LEES-PRODUCT-IN.
*          MOVE LS-PRODUCTID TO WS-PRODUCTID
*          MOVE LS-AANTAL TO WS-AANTAL.
           DISPLAY "GEEF PRODUCTID OP: "
           ACCEPT WS-PRODUCTID
           DISPLAY "GEEF AANTAL OP: "
           ACCEPT WS-AANTAL.

       LEES-BESTAND.
*      DISPLAY "LEES-BESTAND"
       MOVE WS-PRODUCTID TO PRODUCTID
*      DISPLAY PRODUCTID
       READ PRODUCTEN INVALID KEY SET PRODUCT-NIET-GEVONDEN TO TRUE
       END-READ   
       DISPLAY "END-READ" WS-FILE-STATUS    
       IF PRODUCT-NIET-GEVONDEN PERFORM FOUTJE    
       ELSE 
       MOVE WS-PRODUCTID TO PRODUCTID
       SUBTRACT WS-AANTAL FROM AANTAL   
       PERFORM UPDATE-PRODUCT
       END-IF.


      UPDATE-PRODUCT.
        REWRITE PRODUCT INVALID KEY PERFORM FOUTJE.

        SLUIT-BESTAND.
*       DISPLAY "SLUIT-BESTAND"
           CLOSE PRODUCTEN.

        FOUTJE.
           DISPLAY "ER IS EEN FOUT OPGETREDEN"
*          DISPLAY WS-FILE-STATUS
           STOP RUN.

The idea is that I find the product by its product in the PRODUCTEN.dat file and subtract the amount (aantal) to the given number. However, every time I run it, I get the following error: WARNING - Implicit CLOSE OF PRODUCT <"BESTANDEN / PRODUCTEN">. I really don’t see the problem, the WS-FILE-STATUS line even returns me the status 00. I am 100% sure that the product is in the file, so I am not trying to subtract from a nonexistent product or something else.

UPDATE: I fixed it by assigning PRODUCTEN to the newly declared file, because the latter (somehow) got damaged and behaved inadvertently.

+4
source share
1

" ", STOP RUN.

STOP RUN FOUTJE, , FOUTJE.

FOUTJE PERFORM, PRODUCT-NIET-GEVONDEN .

PRODUCT-NIET-GEVONDEN true INVALID KEY READ.

, INVALID KEY .

ZERO. , , .

COBOL-IT, , .

, READ , .

, . , .

. WORKING-STORAGE .

, , , , , / ( ) undefined.

, KEY SELECT . , , .

, :

       MOVE ZEROS TO PRODUCT

   MOVE WS-PRODUCTID TO PRODUCTID

, KEY of WS-PRODUCTID

   READ PRODUCTEN INVALID KEY SET PRODUCT-NIET-GEVONDEN TO TRUE

INVALID KEY, WS-FILE-STATUS, "23" " ". 88. "" (FOUT PRODUCT-NIET-GEVONDEN). FILE STATUS -. , , .

, , .

DISPLAY , , ( FOUT).

"" READ. , . , . , READ ( ) ( ). :

READ PRODUCTEN KEY IS WS-PRODUCTID

FILE STATUS, , (00 ) (23) - (- ).

. , , . .

(, ) COBOL.

, . , INVALID KEY FILE STATUS, , . , , , , , , , .

+4

All Articles