Algunos códigos fuentes simples y útiles en RPGLE-FREE
Para ejecutar comandos:
En la hoja D,
declaramos:
d clpstm s 300
d@runsyscmd pr extpgm('QCMDEXC')
d cmd
200a options(*varsize) const
d cmdlen
15p 5 const
Monitoreamos
la sentencia para que el programa no falle estrepitosamente en caso de que haya
un error de ejecución del comando.
En
este ejemplo estamos haciendo un chkobj de un objeto. Si el objeto no existe, el
error que arroja el sistema operativo es CPF9801 con La sentencia monitor y la
operación on-error, enviamos el mensaje al
usuario sin que el programa deje de estar operativo.
monitor;
clpstm = 'chkobj obj(' +
%trim(libreria) +
'/' +
%trim(archivo) +
')
objtype(*file)';
@runsyscmd(clpstm
: %size(clpstm));
on-error;
Dsp_error
= 'Archivo solicitado no existe';
endmon;
Simplificando la Validando de
Fechas
En
la hoja D:
d Wrk_Fecha s D datfmt(*eur)
En
el Ejemplo trabajamos la fecha en formato *EUR (DD.MM.AAAA), por lo que a nivel
de programación esperamos que el usuario haya colocado la fecha en formato *Eur o que la fecha venga de un archivo
generado con ese formato. Sin embargo, cabe destacar que este ejemplo es
aplicable a cualquier formato con el que se desee trabajar.
Detectamos
que la fecha es inválida pero no especificamos la razón (si es por el día, el
mes o el año) cada programador puede refinar el código si así lo desea.
monitor;
Wrk_fecha = %date(Fecha:*EUR);
on-error;
dsp_error = 'Fecha Inválida';
Endmon;
Campos con fecha en pantalla
Podemos tener campos tipo
D (Fecha) en el archivo que no podemos colocar en la pantalla. Para eso
recurrimos a las variables alfanuméricas.
Solicitamos al usuario la
fecha (siendo la fecha un campo alfabético), luego que validamos según el
ejemplo anterior, una vez que el campo tiene una fecha correcta, grabamos en el
archivo:
Fecha_archivo =
%date(Fecha_pantalla:*Eur);
Cuando vamos a mostrar
en pantalla lo que está grabado en el archivo:
Fecha_pantalla =
%char(Fecha_archivo:*Eur);
Es importante tener en
cuenta declarar en la hoja H esto:
hDatFmt (*EUR)
En este ejemplo es *EUR. (Puede
ser *ISO o lo que necesiten).Si no declaran esto, aun cuando llenan la fecha de
la pantalla con el %char y la especificación
*eur, prevalece la especificación
de la JOBD.
Si la jobd tiene fecha
*ISO, prevalece el formato ISO y lo que se muestra en pantalla va a tener este
aspecto: DDMM-AA-AA es decir el día y el mes son representados como el año de
la fecha y el año es descompuesto visualmente en mes y día.
Buscando
el máximo valor de un campo
En algunos procesos,
debemos generar en forma automática el número de documento que debe grabarse en
el archivo. Generalmente los números se generan en forma consecutiva y cada
documento utiliza ese número como campo clave. Cuando trabajamos con RPG sin el
uso de SQL embebebido debemos hacer un SETGT con la clave en *HIVAL, luego un
READP, revisar si el indicador de fin de archivo se encendió o no (o un %found)
y acceder al último número utilizado. Un ejemplo sencillo de cómo hacerlo es el
siguiente.
exec sql
select max(NroDoc)
into :Ult_Documento from Archivo
If sqlcode = 0;
Nro_Documento
= Ult_Documento + 1;
else;
Nro_Documento = 1;
Endif;
Si te pareció interesante, reenvíalo a un amigo
haciendo click en el sobrecito que está al final del artículo. El conocimiento
es valioso, compártelo.
Autor: Ing. Liliana Suárez
Autor: Ing. Liliana Suárez
No comments:
Post a Comment