Crear informes con un Sort

En este artículo vamos a introducir las sentencias de control del parámetro OUTFIL del Sort que permiten generar un fichero de salida con formato de informe. Las principales son:

HEADER1
Cabecera general del informe.

HEADER2
Cabecera de página.

HEADER3
Cabecera de sección.

TRAILER1
Pie final del informe

TRAILER2
Pie de página.

TRAILER3
Pie de sección.

SECTIONS
Campo/s de ruptura que marcan el final de una sección y el inicio de la siguiente.

Su sintaxis completa se puede encontrar en el manual de IBM. Aquí vamos a aprender a utilizarlas mediante un sencillo ejemplo.

Partimos de un fichero con las ventas que han realizado los comerciales de una empresa. Tiene la siguiente estructura:

Campo Formato COBOL
COMERCIAL PIC X(25)
SUCURSAL PIC X(10)
TOTAL VENDIDO PIC 9(9)V9(2) COMP-3
COMISIONES PIC 9(9)V9(2) COMP-3

Y queremos obtener un informe que muestre las ventas y comisiones de cada vendedor, así como los totales de cada sucursal. Tendrá cabeceras de página y de sección (sucursal) y pies de sección.


                                              23/04/2014  PAG.     1
         INFORME DE VENTAS Y COMISIONES POR SUCURSAL
         -------------------------------------------
SUCURSAL: BARCELONA

NOMBRE                     SUCURSAL    VENTA         COMISION
------------------------   ----------  ------------  ------------
NOMBRE APELL1 APELL2       BARCELONA        4108,92        350,65
NOMBRE APELL1 APELL2       BARCELONA       12789,23       1190,67
NOMBRE APELL1 APELL2       BARCELONA        2109,34        208,65
-----------------------------------------------------------------------
TOTAL BARCELONA                            19007,49       1749,97

SUCURSAL: LEVANTE

NOMBRE                     SUCURSAL    VENTA         COMISION
------------------------   ----------  ------------  ------------
NOMBRE APELL1 APELL2      LEVANTE          8177,01         711,23
…                        …                  …            …
 
TOTAL LEVANTE                               39022,42       3749,92
…
 
                                                 23/04/2014  PAG.     2
            INFORME DE VENTAS Y COMISIONES POR SUCURSAL
            -------------------------------------------
…

Para generarlo utilizaríamos el siguiente paso de Sort:

//PA0010   EXEC PGM=SORT
//SYSOUT   DD SYSOUT=*
//SORTIN   DD DSN=FICHERO.ENTRADA,
//         DISP=SHR
//SALIDA   DD DSN=FICHERO.SALIDA,
//         DISP=(NEW,CATLG,DELETE),RECFM=FB,DSORG=PS,LRECL=72
//SYSIN    DD *
SORT FIELDS=(26,10,CH,A)
OUTFIL FNAMES=SALIDA,
BUILD=(1X,1,25,2X,26,10,2X,36,6,PD,EDIT=(IIIIIIITT,TT),
2X,42,6,PD,EDIT=(IIIIIIITT,TT),6X),
REMOVECC,
HEADER2=(50X,DATE=(DM4/),2X,'PAG.',PAGE,/,
10X,'INFORME DE VENTAS Y COMISIONES POR SUCURSAL',/,
10X,'-------------------------------------------'),
SECTIONS=(26,10,
HEADER3=(/,2:'SUCURSAL: ',26,10,/,
/,2:'NOMBRE',29:'SUCURSAL',41:'VENTA',
55:'COMISION',/,
2:'------------------------',
29:'----------',
41:'------------',
55:'------------'),
TRAILER3=(2:71'-',/,1X,'TOTAL ',26,10,23X,
TOTAL=(36,6,PD,EDIT=(IIIIIIITT,TT)),
2X,
TOTAL=(42,6,PD,EDIT=(IIIIIIITT,TT))))

Vemos que se ordena por el campo de ruptura (sucursal, posición 26). A continuación se incluye la ficha OUTFIL correspondiente al fichero de salida. Dentro de ella incluimos el parámetro BUILD para generar los registros de detalle y a continuación, los parámetros que definen el informe. Algunos de ellos ya los hemos descrito en la introducción; los nuevos que aparecen en el ejemplo son:

REMOVECC
Elimina los caracteres de control que se incluyen por defecto

TOTAL
Parámetro que se puede incluir dentro de cualquiera de los pies del informe (TRAILER1, TRAILER2 y TRAILER3). Muestra la suma de todos los valores del campo indicado. En la suma se incluirán todos los registros del informe, pagina o sección, dependiendo del pie en el que se sitúe.

Deja un comentario