* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Ordinamento (SORT) di un archivio INDEXED *
* e creazione di un archivio LINE SEQUENTIAL ordinato *
* sulla base delle chiavi fornite *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG-3.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
CONSOLE IS CRT
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
*
* al nome interno ANAGRAFICA-MAG associo l'identificatore FILE-1
* a cui sarà assegnato il nome del file su disco
*
* la chiave di accesso e' articolo
* la chiave alternativa e' articolo-fornit
*
SELECT ANAGRAFICA-MAG ASSIGN TO FILE-1
ORGANIZATION IS INDEXED
ACCESS IS DYNAMIC
RECORD KEY IS ARTICOLO
ALTERNATE RECORD KEY IS ARTICOLO-FORNIT
WITH DUPLICATES
LOCK MODE IS AUTOMATIC
STATUS MAG-STAT.
*
* al nome interno SORTED-MAG associo l'identificatore FILE-2
* a cui sarà assegnato il nome del file su disco
*
SELECT SORTED-MAG ASSIGN TO FILE-2
ORGANIZATION IS LINE SEQUENTIAL
ACCESS IS SEQUENTIAL
LOCK MODE IS AUTOMATIC
STATUS SOR-STAT.
*
* al nome interno SORT-AREA associo l'identificatore FILE-3
* a cui sarà assegnato il nome del file su disco
*
* l'area di SORT provvede a creare un file temporaneo per
* le operazioni di ordinamento
*
SELECT SORT-AREA ASSIGN TO FILE-3.
DATA DIVISION.
FILE SECTION.
*
* descrizione della struttura dei records di ANAGRAFICA-MAG
*
FD ANAGRAFICA-MAG.
01 REC-MAG.
02 ARTICOLO PIC X(16).
02 ARTICOLO-FORNIT PIC X(16).
02 DESCRIZIONE PIC X(30).
02 UNITA-MISURA PIC XX.
02 GRUPPO-MERC PIC S9(3) COMP-3.
02 CODICE-IVA PIC 99.
02 SCORTA-MIN PIC S9(7) COMP-3.
02 COSTO-ULTIMO PIC S9(6)V99 COMP-3.
02 COSTO-MEDIO PIC S9(6)V99 COMP-3.
02 PREZZO-VEND PIC S9(6)V99 COMP-3 OCCURS 4.
02 ESISTENZA PIC S9(7)V99 COMP-3.
02 ORDINATO PIC S9(7)V99 COMP-3.
02 IMPEGNATO PIC S9(7)V99 COMP-3.
02 CONFEZIONE PIC 99.
02 CODICE-FORNIT PIC 9999.
02 PROG-CARICO PIC S9(7)V99 COMP-3 OCCURS 4.
02 PROG-SCARICO PIC S9(7)V99 COMP-3 OCCURS 4.
02 COSTO-VENDUTO PIC S9(7)V99 COMP-3.
02 FATTUR-NETTO PIC S9(7)V99 COMP-3.
02 ULTIMO-CARICO PIC 9(8) COMP-3.
02 ULTIMO-SCARICO PIC 9(8) COMP-3.
02 CARICO-ANNUO PIC S9(7)V99 COMP-3.
02 ESIST-INIZ PIC S9(7)V99 COMP-3.
02 ESIST-FINALE PIC S9(7)V99 COMP-3.
02 FILLER PIC X(22).
*
*
* descrizione della struttura dei records di SORTED-MAG
* la struttura è la stessa di ANAGRAFICA-MAG
* ed usiamo una descrizione dei campi simile ma NON UGUALE
*
FD SORTED-MAG.
01 REC-MAG-2.
02 ARTICOLO-2 PIC X(16).
02 ARTICOLO-FORNIT-2 PIC X(16).
02 DESCRIZIONE-2 PIC X(30).
02 UNITA-MISURA-2 PIC XX.
02 GRUPPO-MERC-2 PIC S9(3) COMP-3.
02 CODICE-IVA-2 PIC 99.
02 SCORTA-MIN-2 PIC S9(7) COMP-3.
02 COSTO-ULTIMO-2 PIC S9(6)V99 COMP-3.
02 COSTO-MEDIO-2 PIC S9(6)V99 COMP-3.
02 PREZZO-VEND-2 PIC S9(6)V99 COMP-3 OCCURS 4.
02 ESISTENZA-2 PIC S9(7)V99 COMP-3.
02 ORDINATO-2 PIC S9(7)V99 COMP-3.
02 IMPEGNATO-2 PIC S9(7)V99 COMP-3.
02 CONFEZIONE-2 PIC 99.
02 CODICE-FORNIT-2 PIC 9999.
02 PROG-CARICO-2 PIC S9(7)V99 COMP-3 OCCURS 4.
02 PROG-SCARICO-2 PIC S9(7)V99 COMP-3 OCCURS 4.
02 COSTO-VENDUTO-2 PIC S9(7)V99 COMP-3.
02 FATTUR-NETTO-2 PIC S9(7)V99 COMP-3.
02 ULTIMO-CARICO-2 PIC 9(8) COMP-3.
02 ULTIMO-SCARICO-2 PIC 9(8) COMP-3.
02 CARICO-ANNUO-2 PIC S9(7)V99 COMP-3.
02 ESIST-INIZ-2 PIC S9(7)V99 COMP-3.
02 ESIST-FINALE-2 PIC S9(7)V99 COMP-3.
02 FILLER PIC X(22).
*
*
* descrizione della struttura dei records di SORT-AREA
* la struttura è la stessa di ANAGRAFICA-MAG
* ed usiamo una descrizione dei campi simile ma NON UGUALE
*
SD SORT-AREA.
01 REC-MAG-S.
02 ARTICOLO-S PIC X(16).
02 ARTICOLO-FORNIT-S PIC X(16).
02 DESCRIZIONE-S PIC X(30).
02 UNITA-MISURA-S PIC XX.
02 GRUPPO-MERC-S PIC S9(3) COMP-3.
02 CODICE-IVA-S PIC 99.
02 SCORTA-MIN-S PIC S9(7) COMP-3.
02 COSTO-ULTIMO-S PIC S9(6)V99 COMP-3.
02 COSTO-MEDIO-S PIC S9(6)V99 COMP-3.
02 PREZZO-VEND-S PIC S9(6)V99 COMP-3 OCCURS 4.
02 ESISTENZA-S PIC S9(7)V99 COMP-3.
02 ORDINATO-S PIC S9(7)V99 COMP-3.
02 IMPEGNATO-S PIC S9(7)V99 COMP-3.
02 CONFEZIONE-S PIC 99.
02 CODICE-FORNIT-S PIC 9999.
02 PROG-CARICO-S PIC S9(7)V99 COMP-3 OCCURS 4.
02 PROG-SCARICO-S PIC S9(7)V99 COMP-3 OCCURS 4.
02 COSTO-VENDUTO-S PIC S9(7)V99 COMP-3.
02 FATTUR-NETTO-S PIC S9(7)V99 COMP-3.
02 ULTIMO-CARICO-S PIC 9(8) COMP-3.
02 ULTIMO-SCARICO-S PIC 9(8) COMP-3.
02 CARICO-ANNUO-S PIC S9(7)V99 COMP-3.
02 ESIST-INIZ-S PIC S9(7)V99 COMP-3.
02 ESIST-FINALE-S PIC S9(7)V99 COMP-3.
02 FILLER PIC X(22).
*
WORKING-STORAGE SECTION.
*
* campi per la gestione FILE-STATUS
*
01 MAG-STAT PIC XX.
01 SOR-STAT PIC XX.
01 VIDEO-1.
02 VIDEO-2 PIC X(12).
01 INDICE PIC 99.
01 FILE-STAT.
02 S1 PIC X.
02 S2 PIC X.
01 STAT-BIN REDEFINES FILE-STAT PIC 9(4) COMP.
01 DISPLAY-STAT.
02 S1-VID PIC X.
02 FILLER PIC X(3).
02 S2-VID PIC 9(4).
*
* campi contenenti i nomi dei file correnti
* la tabella viene ridefinita per indicizzare
* la posizione del nome-file
*
01 TAB-FILE.
02 FILE-01 PIC X(12) VALUE "MAGAZZ.IT ".
02 FILE-02 PIC X(12) VALUE "MAGSORT.LSQ ".
02 FILE-03 PIC X(12) VALUE "AREASORT ".
02 FILE-04 PIC X(12) VALUE " ".
02 FILE-05 PIC X(12) VALUE " ".
01 TAB-FIL REDEFINES TAB-FILE.
02 FIL PIC X(12) OCCURS 5.
*
01 IN-KEY PIC X.
PROCEDURE DIVISION.
INIZIO.
MOVE FILE-01 TO FILE-1.
MOVE FILE-02 TO FILE-2.
MOVE FILE-03 TO FILE-3.
PERFORM SET-COLOR THRU TITOLO.
APERTURA-FILE.
OPEN INPUT ANAGRAFICA-MAG.
MOVE MAG-STAT TO FILE-STAT.
IF S1 NOT = ZERO
MOVE 1 TO INDICE
PERFORM STATUS-TEST THRU EX-STATUS-TEST.
OPEN OUTPUT SORTED-MAG.
MOVE SOR-STAT TO FILE-STAT.
IF S1 NOT = ZERO
MOVE 2 TO INDICE
PERFORM STATUS-TEST THRU EX-STATUS-TEST.
*
* eseguiremo l'ordinamento dell'archivio sulla base dei
* seguenti criteri:
* ordine crescente di categoria merceologica
* ordine crescente di codice articolo
* ordine descrescente di ultimo prezzo di acquisto
*
ORDINAMENTO.
SORT SORT-AREA ON ASCENDING KEY GRUPPO-MERC-S ARTICOLO-S
ON DESCENDING KEY COSTO-ULTIMO-S
INPUT PROCEDURE LEGGI THRU LETTO
OUTPUT PROCEDURE SCRIVI THRU SCRITTO.
CHIUSURA-FILE.
CLOSE ANAGRAFICA-MAG.
CLOSE SORTED-MAG.
FINE-PROG.
DISPLAY SPACE.
STOP RUN.
* * * * Routines * * *
*
* estrazione dei records in base ai criteri forniti
*
LEGGI.
READ ANAGRAFICA-MAG NEXT AT END GO TO LETTO.
RELEASE REC-MAG-S FROM REC-MAG.
GO TO LEGGI.
LETTO.
EXIT.
*
* scrittura del nuovo file ordinato
*
SCRIVI.
RETURN SORT-AREA INTO REC-MAG-2 AT END GO TO SCRITTO.
WRITE REC-MAG-2.
GO TO SCRIVI.
SCRITTO.
EXIT.
* pulisce il video e setta il colore del testo e del fondo
*
SET-COLOR.
DISPLAY SPACE WITH BACKGROUND-COLOR 7
FOREGROUND-COLOR 8.
TITOLO.
DISPLAY " S O R T D I U N F I L E I N D E X E D "
AT 0117 WITH FOREGROUND-COLOR 9
BACKGROUND-COLOR 7
REVERSE-VIDEO.
*
* * * * inizio STATUS-TEST * * *
*
STATUS-TEST.
MOVE FIL(INDICE) TO VIDEO-1.
DISPLAY "Errore sul File" AT 2303 WITH FOREGROUND-COLOR 4.
DISPLAY VIDEO-2 AT 2319 WITH FOREGROUND-COLOR 2.
IF S1 = 1
DISPLAY "Fine File"
AT 2334 WITH FOREGROUND-COLOR 4
GO TO EX-STAT.
IF S1 = 2
DISPLAY "Chiave del record non valida"
AT 2334 WITH FOREGROUND-COLOR 4
GO TO EX-STAT.
IF S1 = 9
PERFORM TROVA-ERRORE THRU FINE-ERRORE.
MOVE S1 TO S1-VID.
MOVE LOW-VALUES TO S1.
MOVE STAT-BIN TO S2-VID.
DISPLAY "Tipo" AT 2403 WITH FOREGROUND-COLOR 4.
DISPLAY S2-VID AT 2408 WITH FOREGROUND-COLOR 4.
EX-STAT.
DISPLAY "Premi un tasto per continuare " AT 2436.
ACCEPT IN-KEY WITH AUTO-SKIP.
STOP RUN.
EX-STATUS-TEST.
EXIT.
*
* * * * fine STATUS-TEST * * *
*
TROVA-ERRORE.
MOVE LOW-VALUES TO S1.
MOVE STAT-BIN TO S2-VID.
IF S2-VID = 13
DISPLAY "File inesistente"
AT 2413 WITH FOREGROUND-COLOR 4.
IF S2-VID = 65
DISPLAY "File non disponibile"
AT 2413 WITH FOREGROUND-COLOR 4.
IF S2-VID = 68
DISPLAY "Record non disponibile"
AT 2413 WITH FOREGROUND-COLOR 4.
FINE-ERRORE.
EXIT.
*************************************************************