HELP TP 7

Hello,

I seeking advises on my pascal project which I can't solved it. Would
you please help and advise me ??

Program Logic
---------------

UPDATING MODULE

I need to updating of the records and stored into same file which named
as STKCODE.DAT (vfname2).

Problem
--------

Formula  - Okay.
Updating - Unable to transfer new records which used temporary file
(vfname8) to master file, (vfname2).

Here is the pascal statements.
-----------------------------

PROCEDURE CREATE_NEW_FILES;
BEGIN
     ASSIGN (VFNAME3,FNAME3);
     ASSIGN (VFNAME4,FNAME4);
     {SWITCH OFF I/O CHECKING}
     REWRITE (VFNAME3);       {CREATE STKRECVD.DAT}
     REWRITE (VFNAME4);       {CREATE STKISSD.DAT }
     {SWITCH ON I/O CHECKING}

     IF IORESULT <> 0 THEN
        BEGIN
             WRITELN ('FILES NOT FOUND');
             EXIT;
        END;
END;

PROCEDURE IN_OUT_ADJ_OPENFILE;
BEGIN
     ASSIGN (VFNAME3,FNAME3);
     ASSIGN (VFNAME4,FNAME4);
     ASSIGN (VFNAME6,FNAME6);
     {SWITCH OFF I/O CHECKING}
     RESET (VFNAME3);         {OPEN STKRECVD.DAT}
     RESET (VFNAME4);         {OPEN STKISSD.DAT }
     RESET (VFNAME6);         {OPEN ADJ.DAT     }
     {SWITCH ON I/O CHECKING}
     IF IORESULT <> 0 THEN
        BEGIN
             WRITELN ('FILES NOT FOUND');
             HALT;
        END;
END;

PROCEDURE OPEN_STK_GREC_GISS_ADJ_FILES;
BEGIN
     STK_OPENFILE;
     IN_OUT_ADJ_OPENFILE;
END;

PROCEDURE NOT_EOF_VFNAME2;
BEGIN
     WHILE NOT EOF (VFNAME2)  DO
           BEGIN
                READLN (VFNAME2,STK_CODE );
                READLN (VFNAME2,STK_NAME );
                READLN (VFNAME2,STK_QTY  );
                READLN (VFNAME2,U_M      );
                READLN (VFNAME2,STK_PRICE);
                DUM1 :=  TRUE;
           END;

           IF DUM1 = FALSE THEN
              BEGIN
                   WRITELN ('RECORD NOT FOUND');
              END;
END;

PROCEDURE NOT_EOF_VFNAME3;
BEGIN
     WHILE NOT EOF (VFNAME3) DO
           BEGIN
                READLN (VFNAME3,SUPP_CODE1);
                READLN (VFNAME3,SUPP_DOC  );
                READLN (VFNAME3,REC_DATE  );
                READLN (VFNAME3,STK_CODE1 );
                READLN (VFNAME3,STK_QTY_IN);
                READLN (VFNAME3,STK_PRICE1);
                DUM2 :=  TRUE;
           END;

           IF DUM2 = FALSE THEN
              BEGIN
                   WRITELN ('RECORD NOT FOUND');
              END;
END;

PROCEDURE NOT_EOF_VFNAME4;
BEGIN
     WHILE NOT EOF (VFNAME4) DO
           BEGIN
                READLN (VFNAME4,SR_DOC     );
                READLN (VFNAME4,SR_DATE    );
                READLN (VFNAME4,DEPT_CODE1 );
                READLN (VFNAME4,STK_CODE2  );
                READLN (VFNAME4,STK_QTY_OUT);
                READLN (VFNAME4,STK_PRICE2 );
                DUM3 :=  TRUE;
           END;

           IF DUM3 = FALSE THEN
              BEGIN
                   WRITELN ('RECORD NOT FOUND');
              END;
END;

PROCEDURE NOT_EOF_VFNAME6;
BEGIN
     WHILE NOT EOF (VFNAME6) DO
           BEGIN
                READLN (VFNAME6,ADJ_DOC  );
                READLN (VFNAME6,ADJ_DATE );
                READLN (VFNAME6,STK_CODE3);
                READLN (VFNAME6,ADJ_QTY  );
                READLN (VFNAME6,ADJ_PRICE);
                DUM4 :=  TRUE;
           END;

           IF DUM4 = FALSE THEN
              BEGIN
                   WRITELN ('RECORD NOT FOUND');
              END;
END;

PROCEDURE COSTING;
BEGIN
     IF (STK_CODE = STK_CODE1) OR
        (STK_CODE = STK_CODE2) OR
        (STK_CODE = STK_CODE3) THEN
        BEGIN
             ITEM_QTY := (STK_QTY + STK_QTY_IN - STK_QTY_OUT + ADJ_QTY);

             AVG := ((STK_QTY * STK_PRICE) + (STK_QTY_IN * STK_PRICE1)
             - (STK_QTY_OUT * STK_PRICE2) + (ADJ_QTY * ADJ_PRICE)) /
ITEM_QTY;

             STK_PRICE := AVG;

             {WRITE STOCKCODE'S RECORDS TO TEMP FILE}
             WRITELN (VFNAME8,STK_CODE);
             WRITELN (VFNAME8,STK_NAME);
             WRITELN (VFNAME8,STK_QTY );
             WRITELN (VFNAME8,U_M);
             WRITELN (VFNAME8,STK_PRICE);
             FOUND := TRUE;
        END
END;

PROCEDURE TRANS_TMP_STKCODE_FILES;
BEGIN
     RESET   (VFNAME8);
     REWRITE (VFNAME2);
     WHILE NOT EOF (VFNAME8) DO
           BEGIN
                READLN (VFNAME8,STK_CODE );
                READLN (VFNAME8,STK_NAME );
                READLN (VFNAME8,STK_QTY  );
                READLN (VFNAME8,U_M      );
                READLN (VFNAME8,STK_PRICE);

                {TRANSFER DSTKCODE.DAT'S RECORDS TO STKCODE.DAT}
                WRITELN (VFNAME2,STK_CODE );
                WRITELN (VFNAME2,STK_NAME );
                WRITELN (VFNAME2,STK_QTY  );
                WRITELN (VFNAME2,U_M      );
                WRITELN (VFNAME2,STK_PRICE);
           END;
     CLOSE (VFNAME8);
     CLOSE (VFNAME2);
END;
PROCEDURE CLOSE_FILES;
BEGIN
     CLOSE (VFNAME2);
     CLOSE (VFNAME3);
     CLOSE (VFNAME4);
     CLOSE (VFNAME6);
     CLOSE (VFNAME8);
END;

PROCEDURE UPDATING_RECORDS;
BEGIN
     OPEN_STK_GREC_GISS_ADJ_FILES;
     DUM1 := FALSE;
     DUM2 := FALSE;
     DUM3 := FALSE;
     DUM4 := FALSE;
     NOT_EOF_VFNAME2;
     NOT_EOF_VFNAME3;
     NOT_EOF_VFNAME4;
     NOT_EOF_VFNAME6;
     FOUND := FALSE;
     COSTING;
     CLOSE_FILES;
END;

PROCEDURE UPDATING_CONTROL;
BEGIN
     CREATE_TEMP_FILES;
     UPDATING_RECORDS;
     TRANS_TMP_STKCODE_FILES;
     WRITELN ('TOT : ',ITEM_QTY);
     WRITELN ('AVG : ',AVG:5:2);
END;

Full source program is available upon request.

Would you please advise as soon as possible.

Thank you very much.
Sam - Fresh Pascal Student