Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

martes, 27 de octubre de 2009

Trabajar con Fechas en RPG










Aunque es muy cómodo permanecer en el campo de lo conocido, es importante en el mundo de la tecnología incorporar herramientas, codigos y mecanismos mas actualizados para desarrollar programas. Todavía se encuentran programas que para validar fechas recurren a aquellos famosos arreglos contenidos al final del programa
donde se definía cual mes del año tiene 28,29 30 o 31 dias. Tambien vemos aquel famoso operador mvr utilizado para saber si un año es o no bisiesto. Con rpg 400 y rpg free, existen nuevas funciones proporcionadas por el sistema operativo que ahorran tiempo de programación y lo mas importante: tiempo de respuesta.
Por ejemplo para saber si una fecha es correcta o incorrecta puedes recurrir a la
función test. Declara previamente la fecha que quieres evaluar y si la fecha es erronea el sistema operativo te devuelve el valor de %error en true (verdadero).
Para evaluar Fecnac. (fecha de nacimiento)

d ds
d Fecnac 1 8 0
d Ano 1 4 0
d Mes 5 6 0
d dia 7 8 0


test(de) *iso Fecnac;
if %error;
enviar mensaje al usuario
endif;
………………………………………………………

En el siguiente ejemplo la función %diff nos da la diferencia de en dias
hemos declarado las fechas julianas pero pueden ser declaradas en formato
*iso u otro que resulte cómodo. En el manual de Rpg Reference pueden ver mas detalles
del formato de fechas

dfecha1 s d datfmt(*jul)
dfeccha2 s d datfmt(*jul)

dias = %diff(fecha1:fecha2:*days);

En la variable dias tenemos la diferencia en dias de ambas fechas,
si queremos la diferencia en meses colocamos en el tercer parámetro
de %diff *months
…………………………………………………

Por último, pero no menos importante, podemos realizar operaciones con fechas con las funciones subdur y adddur.

d fechahoy s d datfmt(*eur)
d fechapago s d datfmt(*eur)
d fechafinal s d datfmt(*eur)
d dias s 5 0

fechahoy subdur 3:*m fechafinal

fechahoy subdur fechapago dias :*d


En la primera instrucción restamos 3 meses a la fecha de hoy y obtenemos una fecha resultante.
En la segunda instrucciñon restamos dos fecha y obtenemos el resultado en terminos de dias.
La función Adddur es similar pero en lugar de restar suma los tiempos o fechas
que le indiquemos.

Estas funciones son muy importantes para el cálculo de fechas de vencimientos de pago, intereses, terminos de contratos, entregas de pedidos y miles de transacciones comerciales que se definen en costo y ganancia por el tiempo transcurrido. Ya no se hace necesario desarrollar un programa o diseñar un procedimiento que se encargue de devolvernos el resultado de la operación que requerimos ejecutar con las fechas.

Continuamente se realizan avances en el RPG es nuestro deber mantenernos actualizados.

Si te pareció interesante, reenvialo 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

3 comentarios:

||| Jose ||| dijo...

Muy buen post, yo le agregaría algo sobre la función %date() para obtener la fecha actual, y las funciones %days, %months, %years como alternativa a adddur/subdur.

Debo decir que me ha sorprendido encontrar tu blog, muy poco usual en castellano. Animo!

gerardo dijo...

lo de las fechas esta claro..
tengo que hacer lo siguiente ..
base de datos referencial, dos campos tipo hora...
hora1 (hora de la tansaccion) hora2(tiempo de espera permitido)
que debe pasar.. que sumando hora1+hora2= hora3, esta hora3 debo compararla con la hora actual, y si ya la hora actual es mayor a esa hora3 debe realizar un proceso, de lo contrario debe seguir esperando... no consigo la forma.. podrias orientarme al respecto?

C# IBM AS400, DB2 Y ALGO MAS dijo...

Buen dia,
Quisiera saber si alguno de ustedes sabe como campturar la cantidad de dias que tiene un determinado mes?

Saludos..