IDENTIFICATION DIVISION. PROGRAM-ID. CORTE-DE-CONTROL-INDEXADO. REMARKS. EJEMPLO DE CORTE DESDE UN ARCHIVO INDEXADO. Tomando como entrada el archivo de clientes generado en el ejemplo 1 realizar un listado de total de clientes clasificados por provincia, zona de venta y vendedor. ARCHIVO DE CLIENTES. NUMERO DE CLIENTE 5 N. RAZON SOCIAL 30 AN. DIRECCION. CALLE 30 AN. NUMERO 5 N. LOCALIDAD 30 AN. CODIGO. PROVINCIA 1 N (VALORES POSIBLES 1 A 5). ZONA DE VENTA 2 N (VALORES POSIBLES 1 A 12). VENDEDOR 2 N (VALORES POSIBLES 1 A 15). SALDO 10 N (8 ENTEROS 2 DECIMALES PUEDE TOMAR VALORES NEGATIVOS). Organizaci¢n: Indexado claves = n£mero de cliente (clave principal), raz¢n social (puede tener valores duplicados) y c¢digo (puede tener valores duplicados). LISTADO. TOTAL DE CLIENTES PROVINCIA: XXXXXXXXXXXXXXXXXXX ZONA DE VENTA VENDEDOR TOTAL DE CLIENTES * *************************************************************** Z9 Z9 Z.ZZ9 TOTAL ZONA : ZZ.ZZ9 TOTAL PROVINCIA : ZZ.ZZ9 TOTAL GENERAL : ZZZ.ZZ9 ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. PC. OBJECT-COMPUTER. PC. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CLIENTES ASSIGN TO RANDOM "CLIENTES.DAT" ORGANIZATION IS INDEXED ACCESS IS SEQUENTIAL RECORD KEY IS NRO-CLIENTE ALTERNATE RECORD KEY IS RAZON-SOCIAL WITH DUPLICATES ALTERNATE RECORD KEY IS CODIGO WITH DUPLICATES. SELECT LISTADO ASSIGN TO PRINT "LISTA.TXT". DATA DIVISION. FILE SECTION. FD CLIENTES. 01 REG-CLIENTES. 03 NRO-CLIENTE. 05 NRO-CLI PIC 9(5). 03 RAZON-SOCIAL PIC X(30). 03 DIRECCION. 05 CALLE PIC X(30). 05 NRO PIC 9(5). 03 LOCALIDAD PIC X(30). 03 CODIGO. 05 PROVINCIA PIC 9. 05 ZONA-VENTA PIC 9(2). 05 VENDEDOR PIC 9(2). 03 SALDO PIC S9(8)V9(2). FD LISTADO LINAGE IS 58 WITH FOOTING AT 56 LINES AT TOP 3 LINES AT BOTTOM 3. 01 REG-LISTADO PIC X(80). WORKING-STORAGE SECTION. 01 P. 03 PIC X(19) VALUE "DE BUENOS AIRES". 03 PIC X(19) VALUE "SANTIADO DEL ESTERO". 03 PIC X(19) VALUE "FORMOSA". 03 PIC X(19) VALUE "SANTA FE". 03 PIC X(19) VALUE "LA PAMPA". 01 VECTOR-PROVINCIAS REDEFINES P. 03 V-PCIA OCCURS 5 TIMES PIC X(19). 01 TITULO-1. 03 PIC X(31) VALUE SPACES. 03 PIC X(17) VALUE "TOTAL DE CLIENTES". 03 PIC X(32) VALUE SPACES. 01 TITULO-2. 03 PIC X(25) VALUE SPACES. 03 PIC X(11) VALUE "PROVINCIA: ". 03 I-PROV PIC X(19). 03 PIC X(25) VALUE SPACES. 01 TITULO-3. 03 PIC X(11) VALUE SPACES. 03 PIC X(13) VALUE "ZONA DE VENTA". 03 PIC X(10) VALUE SPACES. 03 PIC X(8) VALUE "VENDEDOR". 03 PIC X(10) VALUE SPACES. 03 PIC X(17) VALUE "TOTAL DE CLIENTES". 03 PIC X(11) VALUE SPACES. 01 TITULO-4 PIC X(80) VALUE ALL "*". 01 DETALLE. 03 PIC X(16) VALUE SPACES. 03 I-ZONA PIC Z9. 03 PIC X(19) VALUE SPACES. 03 I-VENDE PIC Z9. 03 PIC X(19) VALUE SPACES. 03 I-TOTAL PIC Z.ZZ9. 03 PIC X(17) VALUE SPACES. 01 TOTAL-ZONA. 03 PIC X(25) VALUE SPACES. 03 PIC X(12) VALUE "TOTAL ZONA: ". 03 I-TOT-ZON PIC ZZ.ZZ9. 03 PIC X(25) VALUE SPACES. 01 TOTAL-PCIA. 03 PIC X(25) VALUE SPACES. 03 PIC X(17) VALUE "TOTAL PROVINCIA: ". 03 I-TOT-PCIA PIC ZZ.ZZ9. 03 PIC X(25) VALUE SPACES. 01 TOTAL-GRAL. 03 PIC X(25) VALUE SPACES. 03 PIC X(15) VALUE "TOTAL GENERAL: ". 03 I-TOT-GRAL PIC ZZZ.ZZ9. 03 PIC X(25) VALUE SPACES. 01 AUX-PCIA PIC 9. 01 AUX-ZONA PIC 9(2). 01 AUX-VEND PIC 9(2). 77 ACUM-VEND PIC 9(5). 77 ACUM-ZONA PIC 9(5). 77 ACUM-PCIA PIC 9(5). 77 ACUM-GRAL PIC 9(6). 77 SENIAL PIC A VALUE "N". PROCEDURE DIVISION. COMIENZO. OPEN INPUT CLIENTES OUTPUT LISTADO. DISPLAY " " ERASE. MOVE ZEROES TO ACUM-VEND ACUM-ZONA ACUM-PCIA ACUM-GRAL. MOVE 10101 TO CODIGO. START CLIENTES KEY IS GREATER THAN OR EQUAL TO CODIGO. READ CLIENTES AT END CLOSE CLIENTES LISTADO STOP RUN. MOVE PROVINCIA TO AUX-PCIA. MOVE ZONA-VENTA TO AUX-ZONA. MOVE VENDEDOR TO AUX-VEND. PERFORM TITULOS. PERFORM UNTIL SENIAL = "S" IF PROVINCIA NOT = AUX-PCIA PERFORM CORTE-VEND THRU CORTE-PCIA END-IF IF ZONA-VENTA NOT = AUX-ZONA PERFORM CORTE-VEND THRU CORTE-ZONA END-IF IF VENDEDOR NOT = AUX-VEND PERFORM CORTE-VEND END-IF ADD 1 TO ACUM-VEND END-ADD READ CLIENTES AT END MOVE "S" TO SENIAL PERFORM CORTE-VEND THRU TOTAL-GENERAL END-READ END-PERFORM. CLOSE CLIENTES LISTADO. STOP RUN. CORTE-VEND. MOVE ZONA-VENTA TO I-ZONA. MOVE VENDEDOR TO I-VENDE. MOVE ACUM-VEND TO I-TOTAL. WRITE REG-LISTADO FROM DETALLE AFTER ADVANCING 1 LINE AT EOP PERFORM TITULOS END-WRITE. ADD ACUM-VEND TO ACUM-ZONA. MOVE ZEROES TO ACUM-VEND. MOVE VENDEDOR TO AUX-VEND. CORTE-ZONA. MOVE ACUM-ZONA TO I-TOT-ZON. WRITE REG-LISTADO FROM TOTAL-ZONA AFTER ADVANCING 2 LINES AT EOP PERFORM TITULOS. MOVE SPACES TO REG-LISTADO. WRITE REG-LISTADO AFTER ADVANCING 1 LINES. ADD ACUM-ZONA TO ACUM-PCIA. MOVE ZEROES TO ACUM-ZONA. MOVE ZONA-VENTA TO AUX-ZONA. CORTE-PCIA. MOVE ACUM-PCIA TO I-TOT-PCIA. WRITE REG-LISTADO FROM TOTAL-PCIA AFTER ADVANCING 2 LINES. ADD ACUM-PCIA TO ACUM-GRAL. MOVE ZEROES TO ACUM-PCIA. IF SENIAL NOT = "S" PERFORM TITULOS MOVE PROVINCIA TO AUX-PCIA END-IF. TOTAL-GENERAL. MOVE ACUM-GRAL TO I-TOT-GRAL. WRITE REG-LISTADO FROM TOTAL-GRAL AFTER ADVANCING 2 LINES. TITULOS. WRITE REG-LISTADO FROM TITULO-1 AFTER ADVANCING PAGE. MOVE V-PCIA(PROVINCIA) TO I-PROV. WRITE REG-LISTADO FROM TITULO-2 AFTER ADVANCING 3 LINES. WRITE REG-LISTADO FROM TITULO-3 AFTER ADVANCING 3 LINES. WRITE REG-LISTADO FROM TITULO-4 AFTER ADVANCING 1 LINES.