Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IDENTIFICATION DIVISION.
- PROGRAM-ID. STA0004B.
- AUTHOR. MAZZAROLO MATTEO.
- DATE-WRITTEN. 2010-12-17
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- FILE-CONTROL.
- SELECT FILENDG ASSIGN TO FILENDG.
- SELECT FILEPAG ASSIGN TO FILEPAG.
- SELECT FILEBLO ASSIGN TO FILEBLO.
- DATA DIVISION.
- FILE SECTION.
- FD FILENDG LABEL RECORD IS STANDARD.
- 01 W-REC-FILE-NDG PIC X(200).
- FD FILEPAG LABEL RECORD IS STANDARD.
- 01 W-REC-FILE-PAG PIC X(100).
- FD FILEBLO LABEL RECORD IS STANDARD.
- 01 W-REC-FILE-BLO PIC X(100).
- WORKING-STORAGE SECTION.
- 01 NOME-PGM PIC X(08) VALUE 'STA0004B'.
- * TRACCIATO FILE-NDG *
- 01 W-REC-FILE-NDG.
- 03 W-COD-NDG-NDG PIC 9(16).
- 03 W-INTESTA-NDG PIC X(60).
- 03 W-LIMITE-NDG PIC 9(15).
- * TRACCIATO FILE-PAGAMENTI *
- 01 W-REC-FILE-PAG.
- 03 W-COD-NDG-PAG PIC 9(16).
- 03 W-SEGNO-PAG PIC X.
- 03 W-IMPORTO-PAG PIC 9(15).
- * TRACCIATO FILE-BLOCCHI *
- 01 W-REC-FILE-BLO.
- 03 W-DATA-BLO PIC X(10).
- 03 W-COD-NDG-BLO PIC 9(16).
- 03 W-SCOPERTO-BLO PIC 9(15).
- 01 EOF-FILE-NDG PIC 9(01) VALUE ZERO.
- 01 EOF-FILE-PAG PIC 9(01) VALUE ZERO.
- 01 SOMMA-IMPORTI PIC S9(18) VALUE ZERO.
- 01 LIMITE-RELATIVO PIC 9(17) VALUE ZERO.
- 01 SKEDA-PARAMETRO.
- 03 SK-DATA-OGGI PIC X(10).
- 01 ARRAY-PAG.
- 03 ARRAY-COD-NDG-PAG PIC 9(16) OCCURS 900 TIMES.
- 03 ARRAY-SEGNO-PAG PIC X OCCURS 900 TIMES.
- 03 ARRAY-IMPORTO-PAG PIC 9(15) OCCURS 900 TIMES.
- 01 IND-ARRAY-PAG PIC 9(03) VALUE ZERO.
- 01 GRANDEZZA-ARRAY-PAG PIC 9(03) VALUE ZERO.
- 01 CONT-ELEMENTI-DISORDINATI PIC 9(03) VALUE ZERO.
- 01 ARRAY-PAG-COMODO.
- 03 ARRAY-COD-NDG-COMODO PIC 9(16) OCCURS 900 TIMES.
- 03 ARRAY-IMPORTO-TOT-COMODO PIC 9(18) OCCURS 900 TIMES.
- 01 IND-ARRAY-COMODO PIC 9(03) VALUE ZERO.
- 01 GRANDEZZA-ARRAY-COMODO PIC 9(03) VALUE ZERO.
- 01 REC-ELEMENTO-TEMP.
- 03 COD-NDG-TEMP PIC 9(16).
- 03 SEGNO-TEMP PIC 9(X).
- 03 IMPORTO-TEMP PIC 9(15).
- PROCEDURE DIVISION.
- *-----*
- MAIN.
- *-----*
- PERFORM INIZIALIZZA
- PERFORM LETTURA-FILENDG
- PERFORM LETTURA-FILEPAG
- PERFORM INSERIMENTO-IN-ARRAY-PAG
- UNTIL EOF-FILE-PAG = 1
- VARYING IND-ARRAY PAG FROM 1 BY 1
- PERFORM VALORIZZAZIONE-PER-ORDINAMENTO
- PERFORM ORDINAMENTO-ARRAY-PAG
- UNTIL CONT-ELEMENTI-DISORDINATI = 1
- MOVE 1 TO IND-ARRAY-PAG
- PERFORM CONTROLLO-SOMMA-IMPORTI
- UNTIL IND-ARRAY-PAG > GRANDEZZA-ARRAY-PAG
- VARYING IND-ARRAY-PAG FROM 1 BY 1
- PERFORM CONFRONTA-CODICI-NDG
- UNTIL IND-ARRAY-COMODO = GRANDEZZA-ARRAY-COMODO
- OR EOF-FILE-NDG = 1
- PERFORM FINE-PGM
- .
- *-------------*
- INIZIALIZZA.
- *-------------*
- DISPLAY 'INIZIO PGM ' NOME-PGM
- OPEN INPUT FILENDG
- INPUT FILEPAG
- OUTPUT FILEBLO
- ACCEPT SKEDA-PARAMETRO
- .
- *------------------------*
- INSERIMENTO-IN-ARRAY-PAG.
- *------------------------*
- IF IND-ARRAY-PAG = 901
- DISPLAY "IL FILE PAGAMENTI E'' TROPPO GRANDE"
- GOBACK.
- ELSE
- MOVE W-COD-NDG-PAG INTO ARRAY-COD-NDG-PAG(IND-ARRAY-PAG)
- MOVE W-SEGNO-PAG INTO ARRAY-SEGNO-PAG(IND-ARRAY-PAG)
- MOVE W-IMPORTO-PAG INTO ARRAY-IMPORTO-PAG(IND-ARRAY-PAG)
- PERFORM LETTURA-FILE-PAG
- END-IF
- .
- *-------------------------------*
- VALORIZZAZIONE-PER-ORDINAMENTO.
- *-------------------------------*
- MOVE IND-ARRAY-PAG INTO GRANDEZZA-ARRAY-PAG
- MOVE IND-ARRAY-PAG INTO CONT-ELEMENTI-DISORDINATI
- MOVE 1 TO IND-ARRAY-PAG
- .
- *---------------------*
- ORDINAMENTO-ARRAY-PAG.
- *---------------------*
- PERFORM CONTROLLO-SCAMBIO-ELEMENTI
- UNTIL IND-ARRAY-PAG = CONT-ELEMENTI-DISORDINATI
- VARYING IND-ARRAY-PAG FROM 1 BY 1
- COMPUTE CONT-ELEMENTI-DISORDINATI - 1
- .
- *--------------------------*
- CONTROLLO-SCAMBIO-ELEMENTI.
- *--------------------------*
- IF ARRAY-NDG-PAG(IND-ARRAY-PAG) > ARRAY-NDG-PAG(IND-ARRAY-PAG + 1)
- PERFORM SCAMBIA-ELEMENTI
- END-IF
- .
- *-----------------*
- SCAMBIA-ELEMENTI.
- *-----------------*
- MOVE ARRAY-COD-NDG-PAG(IND-ARRAY-PAG) INTO COD-NDG-TEMP
- MOVE ARRAY-SEGNO-PAG(IND-ARRAY-PAG) INTO SEGNO-TEMP
- MOVE ARRAY-IMPORTI-PAG(IND-ARRAY-PAG) INTO IMPORTI-TEMP
- MOVE ARRAY-COD-NDG-PAG(IND-ARRAY-PAG + 1) INTO ARRAY-COD-NDG-PAG(IND-ARRAY-PAG)
- MOVE ARRAY-SEGNO-PAG(IND-ARRAY-PAG + 1) INTO ARRAY-SEGNO-PAG(IND-ARRAY-PAG)
- MOVE ARRAY-IMPORTI-PAG(IND-ARRAY-PAG +1) INTO ARRAY-IMPORTI-PAG(IND-ARRAY-PAG)
- MOVE COD-NDG-TEMP INTO ARRAY-COD-NDG-PAG(IND-ARRAY-PAG - 1)
- MOVE SEGNO-TEMP INTO ARRAY-SEGNO-PAG(IND-ARRAY-PAG - 1)
- MOVE IMPORTI-TEMP INTO ARRAY-IMPORTI-PAG(IND-ARRAY-PAG - 1)
- .
- *------------------------*
- CONTROLLO-SOMMA-IMPORTI.
- *------------------------*
- EVALUATE TRUE
- WHEN IND-ARRAY-PAG = GRANDEZZA-ARRAY-PAG
- PERFORM CALCOLA-SOMMA-IMPORTI
- PERFORM INSERIMENTO-IN-ARRAY-COMODO
- COMPUTE GRANDEZZA-ARRAY-COMODO = GRANDEZZA-ARRAY-COMODO + 1
- WHEN ARRAY-COD-NDG-PAG(IND-ARRAY-PAG) = ARRAY-COD-NDG(IND-ARRAY-PAG + 1)
- PERFORM CALCOLA-SOMMA-IMPORTI
- WHEN OTHER
- PERFORM CALCOLA-SOMMA-IMPORTI
- PERFORM INSERIMENTO-IN-ARRAY-COMODO
- INITIALIZE SOMMA-IMPORTI
- COMPUTE GRANDEZZA-ARRAY-COMODO = GRANDEZZA-ARRAY-COMODO + 1
- END-IF
- .
- *----------------------*
- CALCOLA-SOMMA-IMPORTI.
- *----------------------*
- IF ARRAY-SEGNO-PAG = '+'
- ADD ARRAY-IMPORTI-PAG(IND-ARRAY-PAG) TO SOMMA-IMPORTI
- ELSE
- SUBTRACT ARRAY-IMPORTI-PAG(IND-ARRAY-PAG) FROM SOMMA-IMPORTI
- END-IF
- .
- *---------------------------*
- INSERIMENTO-IN-ARRAY-COMODO.
- *---------------------------*
- MOVE ARRAY-COD-NDG-PAG(IND-ARRAY-PAG) INTO ARRAY-COD-NDG-COMODO(IND-ARRAY-PAG)
- MOVE SOMMA-IMPORTI INTO ARRAY-IMPORTO-TOT(IND-ARRAY-PAG)
- .
- *---------------------*
- CONFRONTA-CODICI-NDG.
- *---------------------*
- EVALUATE TRUE
- WHEN ARRAY-COD-NDG-COMODO = W-COD-NDG-NDG
- PERFORM CONTROLLA-SCOPERTO
- COMPUTE INDICE-ARRAY-COMODO = INDICE-ARRAY-COMODO + 1
- PERFORM LETTURA-FILENDG
- WHEN ARRAY-COD-NDG-COMODO > W-COD-NDG-NDG
- PERFORM LETTURA-FILENDG
- WHEN ARRAY-COD-NDG-COMODO < W-COD-NDG-NDG
- DISPLAY 'NON SONO STATE TROVATE LE ANAGRAFICHE DEL CODICE' ARRAY-COD-NDG-COMODO
- COMPUTE INDICE-ARRAY-COMODO = INDICE-ARRAY-COMODO + 1
- END-EVALUATE
- .
- *--------------------*
- CONTROLLA-SCOPERTO.
- *--------------------*
- COMPUTE LIMITE-RELATIVO = W-LIMITE-NDG * 100
- IF ARRAY-IMPORTO-TOTALE-COMODO > LIMITE-RELATIVO
- PERFORM VALORIZZA-W-REC-FILE-BLO
- PERFORM SCRITTURA-FILEBLO
- END-IF
- INITIALIZE LIMITE-RELATIVO
- .
- *-------------------------*
- VALORIZZA-W-REC-FILE-BLO.
- *-------------------------*
- MOVE SK-DATA-OGGI TO W-DATA-BLO
- MOVE W-COD-NDG-NDG TO W-COD-NDG-BLO
- COMPUTE W-SCOPERTO-BLO = ARRAY-IMPORTO-TOT-COMODO - LIMITE-RELATIVO
- .
- *-----------------*
- LETTURA-FILENDG.
- *-----------------*
- READ FILENDG INTO W-REC-FILE-NDG
- AT END MOVE 1 TO EOF-FILE-NDG
- .
- *----------------*
- LETTURA-FILEPAG.
- *----------------*
- READ FILEPAG INTO W-REC-FILE-PAG
- AT END MOVE 1 TO EOF-FILE-PAG
- .
- *-------------------*
- SCRITTURA-FILEBLO.
- *-------------------*
- WRITE FILEBLO FROM W-REC-FILE-BLO
- .
- *---------*
- FINE-PGM.
- *---------*
- CLOSE FILENDG
- FILEPAG
- FILEBLO.
- DISPLAY 'FINE PGM' NOME-PGM
- GOBACK.
- .
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement