SYMNAMES: Nombres simbólicos en un Sort

En este artículo vamos a introducir el uso de nombres simbólicos (SYMNAMES) en un SORT para hacer referencia a campos y constantes. Se trata de una facilidad que hace más legibles  los Sort y facilita su mantenimiento.

Por ejemplo, supongamos que tenemos un fichero con la siguiente estructura:

Campo Pos. Inicio Longitud Formato COBOL
COD_FACTURA 1 8 X(8)
CENTRO 9 4 X(4)
FECHA 13 10 X(10)
COD_CLIENTE 23 8 X(8)
IMP_FACTURA 31 8 9(6)V9(2)

Queremos obtener las facturas del centro ‘2040’ (Madrid),  que se hayan generado durante el periodo de rebajas (del 07/01/2013 al 10/02/2013)  y cuyo importe sea igual o superior a 500.

El SORT  para conseguirlo sería el siguiente:

//SELECCI  EXEC PGM=SORT,COND=(0,NE)
//SYSOUT   DD SYSOUT=*
//SORTIN   DD DSN=A144759.SYMNAMES.SMSSTD,DISP=SHR
//SORTOUT  DD DSN=A144759.SYMNAMES.SMSSTD.SORT,
//         DISP=(NEW,CATLG,DELETE),LRECL=38,RECFM=FB,
//         DSORG=PS
//SYSIN    DD *
SORT FIELDS=COPY
INCLUDE COND=(9,4,CH,EQ,C'2040',AND,
13,10,CH,GE,C'2013-01-07',AND,
13,10,CH,LE,C'2013-02-10',AND,
31,8,ZD,GT,+50000)

Si cambia la estructura del fichero, tendremos que recalcular las posiciones de inicio de los campos afectados y sustituirlas en todas las condiciones en que aparezcan (en este Sort y en cualquier otro que utilice el mismo fichero).

Lo mismo ocurrirá si cambia alguna de las constantes; por ejemplo, si queremos cambiar la fecha de fin del periodo de rebajas, tendremos que sustituirla en todas las condiciones de todos los Sort en que aparezca.

Estos inconvenientes podemos evitarlos mediante el uso de SYMNAMES. Veámoslo mediante una nueva versión del SORT anterior en la que hemos sustituido los nombres de campos y las constantes por nombres simbólicos.

//SELECCI  EXEC PGM=SORT,COND=(0,NE)
//SYSOUT   DD SYSOUT=*
//SORTIN   DD DSN=A144759.SYMNAMES.SMSSTD,DISP=SHR
//SORTOUT  DD DSN=A144759.SYMNAMES.SMSSTD.SORT,
//         DISP=(NEW,CATLG,DELETE),LRECL=38,RECFM=FB,
//         DSORG=PS
//SYMNAMES DD *
*CAMPOS
COD_FACTURA,1,8,CH
CENTRO,*,4,CH
FECHA,*,10,CH
COD_CLIENTE,*,8,CH
IMPORTE,*,8,ZD
*CONSTANTES
MADRID,'2040'
INI_REBA,'2013-01-07'
FIN_REBA,'2013-02-10'
TOPE_FACT,50000
//SYSIN    DD *
SORT FIELDS=COPY
INCLUDE COND=(CENTRO,EQ,MADRID,AND,
FECHA,GE,INI_REBA,AND,
FECHA,LE,FIN_REBA,AND,
IMPORTE,GT,TOPE_FACT)

En este ejemplo hemos incluido los nombres simbólicos directamente en la ficha SYMNAMES para mayor claridad, pero lo lógico es incluirlos en un fichero. De esa forma podremos reutilizarlos en cualquier otro Sort que utilice el fichero referenciado.  Además será posible hacer modificaciones en la estructura del fichero sin tener que cambiar los Sort.

Vemos que es posible incluir la posición de inicio y la longitud del campo, o bien indicar que comienza en la posición siguiente al campo anterior mediante un asterisco.



1 comentario sobre SYMNAMES: Nombres simbólicos en un Sort

Deja un comentario