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