Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IDENTIFICATION DIVISION.
- PROGRAM-ID STAX011B.
- AUTHOR. BORDIN ALEX.
- *-----------------------------------------------
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- FILE-CONTROL.
- SELECT FILECLI ASSIGN TO FILECLI.
- SELECT FILESTA ASSIGN TO FILESTA.
- *
- DATA DIVISION.
- *
- FILE SECTION.
- *
- FD FILECLI
- LABEL RECORD IS STANDARD.
- 01 REC-FILE-CLI PIC X(100).
- *
- FD FILESTA
- LABEL RECORD IS STANDARD.
- 01 REC-FILE-STA PIC X(132).
- *
- WORKING-STORAGE SECTION.
- *
- 01 NOME-PGM PIC X(08) VALUE 'STAX011B'.
- *TRACCIATO FILE-CLI
- 01 W-REC-FILE-CLI.
- 03 W-COD-CLIENTE-CLI PIC 9(16).
- 03 W-DENOMINAZIONE-CLI PIC X(60).
- *TRACCIATO FILE-STA
- 01 W-REC-INTESTA-CLI.
- 03 FILLER PIC X.
- 03 FILLER PIC X(16) VALUE '*CODICE CLIENTE*'.
- 03 FILLER PIC X.
- 03 FILLER PIC X(60) VALUE '*---------------------'
- - 'DENOMINAZIONE------------------------*'.
- 03 FILLER PIC X.
- 03 FILLER PIC X(13) VALUE 'NUMERO PAGINA'.
- 01 W-REC-DATI-CLI.
- 03 FILLER PIC X.
- 03 W-COD-CLIENTE-STA PIC 9(16).
- 03 FILLER PIC X.
- 03 W-DENOMINAZIONE-STA PIC X(60).
- 03 FILLER PIC X(07).
- 03 W-NUM-PAG-STA PIC Z9(06).
- 01 W-REC-INTESTA-IND.
- 03 FILLER PIC X.
- 03 FILLER PIC X(60) VALUE '*---------------------'
- - '-----VIA-----------------------------*'.
- 03 FILLER PIC X.
- 03 FILLER PIC X(30) VALUE '*------------COMUNE-----'
- - '-----*'.
- 03 FILLER PIC X.
- 03 FILLER PIC X(19) VALUE '*----TELEFONO-----*'.
- 01 W-REC-DATI-IND.
- 03 FILLER PIC X.
- 03 W-VIA-STA PIC X(60).
- 03 FILLER PIC X.
- 03 W-COMUNE-STA PIC X(30).
- 03 FILLER PIC X.
- 03 W-TELEFONO-STA PIC Z9(18).
- 01 W-REC-COLONNE-PRO.
- 03 FILLER PIC X.
- 03 FILLER PIC X(10) VALUE 'DATA ORDINE'.
- 03 FILLER PIC X.
- 03 FILLER PIC X(15) VALUE '*CODICE ORDINE*'.
- 03 FILLER PIC X.
- 03 FILLER PIC X(30) VALUE '*---DESCRIZIONE PRODOTTO'
- - '-----*'.
- 03 FILLER PIC X.
- 03 FILLER PIC X(10) VALUE '*QUANTITA*'.
- 03 FILLER PIC X.
- 03 FILLER PIC X(18) VALUE '*IMPORTO UNITARIO*'.
- 01 W-REC-DATI-PRO.
- 03 FILLER PIC X.
- 03 W-DATA-ORDINE-STA PIC X(10).
- 03 FILLER PIC X.
- 03 W-CODICE-ORDINE-STA PIC 9(15).
- 03 FILLER PIC X.
- 03 W-DESCR-PROD-STA PIC X(30).
- 03 FILLER PIC X.
- 03 W-QUANT-STA PIC 9(10).
- 03 FILLER PIC X.
- 03 W-IMPORTO-UNI-STA PIC 9(18).
- 01 W-REC-TOTALE-STA.
- 03 FILLER PIC X.
- 03 FILLER PIC X(53).
- 03 FILLER PIC X(15) VALUE 'TOTALE FATTURA:'.
- 03 FILLER PIC X.
- 03 W-TOTALE-STA PIC 9(18).
- *DATI SCHEDA PARAMETRO
- 01 SKEDA PARAMETRO.
- 03 SK-DATA-CTRL PIC X(10).
- *COMODI
- 01 COMODI.
- 03 Z-SQL PIC -(04) VALUE ZERO.
- *PER AMBEND
- 01 DAMP PIC X VALUE SPACE.
- 01 DUMP REDEFINES DAMP PIC S9.
- *ALTRE VARIABILI
- 01 W-DATA-CTRL.
- 01 FILLER REDEFINES W-DATA-CTRL.
- 03 W-GIORNO-CTRL PIC X(02).
- 03 FILLER PIC X(01).
- 03 W-MESE-CTRL PIC X(02).
- 03 FILLER PIC X(01).
- 03 W-ANNO-CTRL PIC X(04).
- 01 W-DATA-LIMITE-SUP PIC X(10).
- 01 FILLER REDEFINES W-DATA-LIMITE-SUP.
- 03 W-ANNO-SUP PIC X(04).
- 03 TRAT1 PIC X(01).
- 03 W-MESE-SUP PIC X(02).
- 03 TRAT2 PIC X(01).
- 03 W-GIORNO-SUP PIC X(02).
- 01 W-DATA-LIMITE-INF PIC X(10).
- 01 FILLER REDEFINES W-DATA-LIMITE-INF.
- 03 FILLER PIC X(08).
- 03 W-GIORNO-INF PIC X(02).
- *CONTATORI
- 01 CONT-RIGHE-PAG PIC 9(06) VALUE ZERO.
- 01 MAX-RIGHE-PAG PIC 9(06) VALUE 30.
- 01 W-NUM-PAG PIC 9(06) VALUE ZERO.
- 01 CONT-RIGHE-CLI PIC 9(06) VALUE ZERO.
- 01 CONT-CLI PIC 9(06) VALUE ZERO.
- 01 CONT-CLI-0 PIC 9(06) VALUE ZERO.
- 01 CONT-WRITE PIC 9(06) VALUE ZERO.
- 01 CONT-NO-WRITE PIC 9(06) VALUE ZERO.
- *COUNT
- 01 COUNT-ORDINI PIC S9(09) COMP-3 VALUE ZERO.
- *SWITCH
- 01 SW-PRIMA-PAG PIC 9 VALUE ZERO.
- *INCLUDE TABELLE DB2
- EXEC SQL INCLUDE SQLCA END-EXEC.
- EXEC SQL INCLUDE VC00TA91 END-EXEC.
- *CURSORI
- EXEC SQL DECLARE CURS-ORDINI CURSOR FOR
- SELECT AREA-DATI
- FROM VC0ORDINI
- WHERE TA91_COD_CLIENTE = :TA91-COD-CLIENTE
- AND TA91_DATA_ORDINE BETWEEN :W-DATA-LIMITE-INF AND :W-DATA-LIMITE-SUP
- FOR FETCH ONLY
- END-EXEC.
- *EOF
- 01 EOF-FILE-CLI PIC 9 VALUE 0.
- *ROUTINE
- 01 STAX011R PIC X(08) VALUE 'STAX011R'.
- COPY STAX011C.
- *
- PROCEDURE DIVISION.
- *
- MAIN.
- PERFORM INIZIO-PGM
- PERFORM PREPARA-DATE
- PERFORM LEGGI-FILE-CLI
- PERFORM ELABORA-CLI-ORD UNTIL EOF-FILE-CLI = 1
- PERFORM DISPLAY-REPORT
- PERFORM FINE-PGM.
- .
- *----------------*
- INIZIO-PGM.
- *----------------*
- DISPLAY 'INIZIO PGM: 'NOME-PGM
- OPEN INPUT FILECLI
- OUTPUT FILESTA
- ACCEPT SKEDA-PARAMETRO
- .
- *----------------*
- ELABORA-CLI-ORD.
- *----------------*
- PERFORM COUNT-ORDINI-CLI
- ADD 1 TO CONT-RIGHE-CLI
- IF COUNT-ORDINI > 0
- PERFORM CHIAMA-STAX011R
- ADD 1 TO CONT-CLI
- IF RETURNCODE-RC-STAX011R = 0
- INITIALIZE W-NUM-PAG
- PERFORM INTESTA-PAGINA
- PERFORM OPEN-CURS-ORD
- PERFORM FETCH-CURS-ORD
- PERFORM SCRIVI-DATI-STA UNTIL SQLCODE = 100
- PERFORM CLOSE-CURS-ORD
- PERFORM SCRIVI-TOTALE
- ADD 1 TO CONT-WRITE
- ELSE
- ADD 1 TO CONT-NO-WRITE
- END-IF
- ELSE
- ADD 1 TO CONT-CLI-0
- END-IF
- PERFORM LEGGI-FILE-CLI
- .
- *----------------*
- INTESTA-PAGINA.
- *----------------*
- ADD 1 TO W-NUM-PAG
- PERFORM VALORIZZA-DATI-CLI
- IF SW-PRIMA-PAG = 0
- WRITE REC-FILE-STA FROM W-REC-INTESTA-CLI
- ELSE
- WRITE REC-FILE-STA FROM W-REC-INTESTA-CLI AFTER PAGE
- END-IF
- WRITE REC-FILE-STA FROM W-REC-DATI-CLI
- WRITE REC-FILE-STA FROM W-REC-INTESTA-IND
- WRITE REC-FILE-STA FROM W-REC-DATI-IND
- WRITE REC-FILE-STA FROM W-REC-COLONNE-PRO AFTER LINES
- MOVE 1 TO SW-PRIMA-PAG
- .
- *----------------*
- VALORIZZA-DATI-CLI.
- *----------------*
- MOVE COD-CLIENTE-OUTPUT-STAX011R TO W-COD-CLIENTE-STA
- MOVE DENOMINAZIONE-OUTPUT-STAX011R TO W-DENOMINAZIONE-STA
- MOVE W-NUM-PAG TO W-NUM-PAG-STA
- MOVE VIA-OUTPUT-STAX011R TO W-VIA-STA
- MOVE COMUNE-OUTPUT-STAX011R TO W-COMUNE-STA
- MOVE TELEFONO-OUTPUT-STAX011R TO W-TELEFONO-STA
- .
- *----------------*
- SCRIVI-TOTALE.
- *----------------*
- WRITE REC-FILE-STA FROM W-REC-TOTALE-STA
- INITIALIZE W-TOTALE-STA
- .
- *----------------*
- COUNT-ORDINI-CLI.
- *----------------*
- MOVE W-COD-CLIENTE-CLI TO TA91-COD-CLIENTI
- EXEC SQL
- SELECT COUNT(*)
- INTO :COUNT-ORDINI
- FROM VC0ORDINI
- WHERE TA91_COD_CLIENTI = :TA91-COD-CLIENTI
- AND TA91_DATA_ORDINE BETWEEN :W-DATA-LIMITE-INF AND :W-DATA-LIMITE-SUP
- END-EXEC
- IF SQLCODE NOT = 0
- MOVE SQLCODE TO Z-SQL
- DISPLAY 'ERRORE IN COUNT VC0ORDINI'
- DISPLAY 'SQLCODE: ' Z-SQL
- DISPLAY 'TA91_COD_CLIENTI: ' TA91-COD-CLIENTI
- ADD 1 TO DUMP
- END-IF
- .
- *----------------*
- SCRIVI-DATI-STA.
- *----------------*
- IF TA9100-TIPO-RECORD = 1
- MOVE TA9101-COD-ORDINE TO W-COD-ORDINE
- ADD TA9101-IMPORTO-TOT TO W-TOTALE-STA
- ELSE
- PERFORM SCRIVI-DATI-PRO
- END-IF
- PERFORM FETCH-CURS-ORD
- .
- *----------------*
- SCRIVI-DATI-PRO.
- *----------------*
- PERFORM CONTROLLA-FINE-RIGHE
- MOVE TA9100-DATA-ORDINE TO W-DATA-ORDINE-STA
- MOVE W-COD-ORDINE TO W-CODICE-ORDINE-STA
- MOVE TA9102-DESCR-PROD TO W-DESCR-PROD-STA
- MOVE TA9102-QUANT TO W-QUANT-STA
- MOVE TA9102-IMPORTO TO W-IMPORTO-UNI-STA
- WRITE REC-FILE-STA FROM W-REC-DATI-PRO
- ADD 1 TO CONT-RIGHE-PAG
- .
- *----------------*
- CONTROLLA-FINE-RIGHE.
- *----------------*
- IF CONT-RIGHE-PAG > MAX-RIGHE-PAG
- PERFORM INTESTA-PAGINA
- INITIALIZE CONT-RIGHE-PAG
- END-IF
- .
- *----------------*
- PREPARA-DATE.
- *----------------*
- MOVE SK-DATA-CTRL TO W-DATA-CTRL
- MOVE '-' TO TRAT1
- MOVE '-' TO TRAT2
- MOVE 31 TO W-GIORNO-SUP
- MOVE W-MESE-CTRL TO W-MESE-SUP
- MOVE W-ANNO-CTRL TO W-ANNO-SUP
- MOVE W-DATA-SUP TO W-DATA-INF
- MOVE 1 TO W-GIORNO-INF
- .
- *----------------*
- CHIAMA-STAX011R.
- *----------------*
- INITIALIZE AREA-STAX011R
- MOVE 'RIC' TO AZIONE-INPUT-STAX011R
- MO0E W-COD-CLIENTE-CLI TO COD-CLIENTE-INPUT-STAX011R
- CALL STAX011R USING AREA-STAX011R
- EVALUATE RETURNCODE-RC-STAX011R
- WHEN 4
- DISPLAY MESSAGE-RC-STAX011R
- ADD 1 TO CONT-NO-WRITE
- WHEN 8
- WHEN 12
- DISPLAY MESSAGE-RC-STAX011R
- ADD 1 TO DUMP
- END-EVALUATE
- .
- *----------------*
- OPEN-CURS-ORD.
- *----------------*
- INITIALIZE VC00TAB91
- MOVE W-COD-CLIENTE-CLI TO TA91-COD-CLIENTE
- EXEC SQL
- OPEN CURS-ORD
- END-EXEC
- IF SQLCODE NOT = 0
- MOVE SQLCODE TO Z-SQL
- DISPLAY 'ERRORE IN OPEN CURSORE'
- DISPLAY 'SQLCODE: ' Z-SQL
- DISPLAY 'CURSORE: CURS-ORD'
- ADD 1 TO DUMP
- END-IF
- .
- *----------------*
- FETCH-CURS-ORD.
- *----------------*
- EXEC SQL
- FETCH CURS-ORD
- INTO :AREA-DATI
- END-EXEC
- IF SQLCODE NOT = 100 AND NOT = 0
- MOVE SQLCODE TO Z-SQL
- DISPLAY 'ERRORE IN FETCH CURSORE'
- DISPLAY 'CURSORE: CURS-ORD'
- DISPLAY 'SQLCODE: ' Z-SQL
- ADD 1 TO DUMP
- END-IF
- .
- *----------------*
- CLOSE-CURS-ORD.
- *----------------*
- EXEC SQL
- CLOSE CURS-ORD
- END-EXEC
- IF SQLCODE NOT = 0
- MOVE SQLCODE TO Z-SQL
- DISPLAY 'ERRORE IN CLOSE CURSORE'
- DISPLAY 'SQLCODE: ' Z-SQL
- DISPLAY 'CURSORE: CURS-ORD'
- ADD 1 TO DUMP
- END-IF
- .
- *----------------*
- DISPLAY-REPORT.
- *----------------*
- DISPLAY '*----------------------REPORT-----------------------*'
- DISPLAY 'RIGHE LETE NEL FILE-CLI : ' CONT-RIGHE-CLI
- DISPLAY 'CLIENTI CON ALMENO 1 ORDINE : ' CONT-CLI
- DISPLAY 'CLIENTI CON ALMENO 0 ORDINI : ' CONT-CLI-0
- DISPLAY 'CLIENTI NON SCRITTI IN FILE STAMPA : ' CONT-NO-WRITE
- DISPLAY 'CLIENTI SCRITTI IN FILE STAMPA : ' CONT-WRITE
- DISPLAY '*----------------------------------------------------*'
- .
- *----------------*
- LEGGI-FILE-CLI.
- *----------------*
- READ FILECLI INTO W-REC-FILE-CLI
- AT END MOVE 1 TO EOF-FILE-CLI
- .
- *----------------*
- FINE-PGM.
- *----------------*
- CLOSE FILECLI
- FILESTA
- DISPLAY 'FINE PGM: 'NOME-PGM
- GOBACK
- .
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement