Report de un Fichero usando el comando DISPLAY.
Fichero RECS:
----+----1----+----2--
1111000021 | CCCCCCCCC | 010 |
1111000021 | CCCCCCCCC | 090 |
1111000021 | QQQQQQQQQ | 020 |
1111000022 | VVVVVVVVV | 050 |
JCL que realiza el cruce:
//PASO010 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//TOOLIN DD *
SORT FROM(RECS) TO(TMP) USING(CNTL1)
DISPLAY FROM(TMP) LIST(REPORT) -
DATE TITLE('Facturacion XXXXXXX de la empresa') PAGE -
BTITLE('Factura:') BREAK(1,10,CH) -
HEADER('Documento') ON(12,10,CH) -
HEADER('Importe') ON(22,3,ZD) -
BTOTAL('Total x Factura:') -
BMINIMUM('Minimo x Factura:') -
BMAXIMUM('Maximo x Factura:') -
BAVERAGE('Media x Factura:') -
BLANK
//RECS DD DISP=SHR,
// DSN=USER.ICETOOL.IN
//TMP DD DSN=&&TEMP,DISP=(MOD,PASS),
// SPACE=(TRK,(10,10)),UNIT=SYSDA
//REPORT DD SYSOUT=*
//CNTL1CNTL DD *
SORT FIELDS=(1,10,CH,A,12,9,CH,A)
/*
Para hacer un informe a partir de un fichero usaremos la sentencia DISPLAY con varios complementos que iremos viendo.
En este informe utilizamos una ruptura por el campo "Factura", por lo que será importante ordenar el fichero por ese campo, para poder ver la información agrupada por Factura.
Para este paso previo usamos la sentencia SORT con la sentencia USING (en este caso sólo hemos hecho un SORT FIELDS pero podría acompañarse de otras sentencias como INCLUDE COND para seleccionar un determinado número de registros):
SORT FROM(RECS) TO(TMP) USING(CNTL1)
...
//CNTL1CNTL DD *
SORT FIELDS=(1,10,CH,A,12,9,CH,A)
/*
Para escribir el informe hacemos varios pasos:
Mostramos el informe a partir del fichero temporal TMP (que está ordenado para nuestro propósito).
DISPLAY FROM(TMP) LIST(REPORT) -
Podemos tanto enviarlo a la cola de ejecución, como a un fichero. En [//REPORT DD SYSOUT=*] especificamos el tipo de salida que queramos.
Mostramos la cabecera del informe.
DATE TITLE('Facturación XXXXXXX de la empresa') PAGE -
En este caso se va componer por:
- La fecha (a la izquierda).
- El título (en el centro).
- El número de página (a la derecha).
Mostramos el detalle del informe.
BTITLE('Factura:') BREAK(1,10,CH) -
HEADER('Documento') ON(12,10,CH) -
HEADER('Importe') ON(22,3,ZD) -
En este caso se va a componer por:
- Una ruptura (código de factura BREAK(posición incial, longitud, tipo).
- Por cada factura dos columnas de detalle:
- Documento (ON(posicion inicial, longitud, tipo).
- Importe.
Mostramos los totales por factura (total, mínimo, máximo y media de los importes de detalle por cada factura).
BTOTAL('Total x Factura:') -
BMINIMUM('Minimo x Factura:') -
BMAXIMUM('Maximo x Factura:') -
BAVERAGE('Media x Factura:') -
Finalmente tenemos la sentencia BLANK cuya función es eliminar del informe espacios en blanco (es opcional).
BLANK
Esta es una manera sencilla de presentación de los datos de un fichero.
Se podría ampliar con más cosas como totales generales, formatos de campos, etc.
1 comentario:
Buenas tardes, tengo una duda, al generar mi reporte me pone en automatico saltos de pagina cada 60 lineas y reimprimie los encabezados ¿esto como puedo evitarlo? tambien al poner el header me pone un 1 junto con el primer encabezado ¿por que es esto?