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.

Friday, July 31, 2009

Uso de arreglos para actualizar campos de un archivo.










Es común encontrar archivos que contienen montos acumulados por mes y año cuando desea conservarse la historia de consumos de clientes, inventarios de productos o deudas y cuentas por pagar.

Generalmente los programas deben sumar las cantidades según el mes en cada campo del archivo esto produce una cantidad de instrucciones engorrosas para modificar los saldos según el mes o el periodo de tiempo que debe actualizarse.

Supongamos por ejemplo que tenemos el siguiente archivo:

A R RSALDOS
A SALDO1 15S 2
A SALDO2 15S 2
A SALDO3 15S 2
A SALDO4 15S 2
A SALDO5 15S 2
A SALDO6 15S 2
A SALDO7 15S 2
A SALDO8 15S 2
A SALDO9 15S 2
A SALDO10 15S 2
A SALDO11 15S 2
A SALDO12 15S 2


Los doce campos almacenan el saldo de cada mes del año.

Generalmente en los programas RPG encontramos instrucciones parecidas a estas:


Select

When mes = 1 eval saldo1 = saldo1 + saldo_mes
When mes = 2 eval saldo2 = saldo2 + saldo_mes
,,,,,,,
,,,,,,,

EndsSl


Declarando apropiadamente una DS en la hoja D del programa podemos ahorrarnos estas instrucciones repetitivas y laboriosas en el manejo de este tipo de archivos.

fsaldos o e disk
*
ddssaldos E DS extname(saldos)
dmontos 15s 2 dim(12)
d inz(0)
d overlay(dssaldos:1)
d*
* Eval mes = 1
c* Dow mes <= 12 c Eval montos(mes) = montos(mes) + saldo_mes c Eval mes = mes + 1 c Enddo c write Rsaldos c seton lr *



Esta es una manera práctica y dinámica de actualizar los campos de un archivo independientemente del nombre de estos campos. La variable saldo_mes se supone que es el resultado de una cantidad de operaciones aritméticas realizadas en pasos o rutinas anteriores. Los elementos del arreglo Montos apuntan cada uno a los campos de saldos del archivo. Siguiendo este orden de ideas, Montos(1) es el campo saldos1 del archivo. Toda operación que se realice sobre Montos(1) se está realizando sobre el valor del campo Saldo1 del archivo, de manera que al realizar el write del archivo el campos Saldo1 será grabado con el valor que tenga Montos(1). Esto es por el efecto del overlay declarado en la DS del programa.

Una ligera variante del ejemplo anterior:

Supongamos que el archivo sea este:

A R RSALDOS
A CLIENTE 6S 0
A SALDO1 15S 2
A SALDO2 15S 2
A SALDO3 15S 2
A SALDO4 15S 2
A SALDO5 15S 2
A SALDO6 15S 2
A SALDO7 15S 2
A SALDO8 15S 2
A SALDO9 15S 2
A SALDO10 15S 2
A SALDO11 15S 2
A SALDO12 15S 2

Como hay un campo cliente declarado antes de los campos de saldos mensuales, la DS en el programa quedaría así:

fsaldos o e disk
*
ddssaldos E DS extname(saldos)
dmontos 15s 2 dim(12)
d inz(0)
d overlay(dssaldos:7)



El overlay comenzaría en la posición 7 y no en la posición 1 como en el ejemplo anterior. Si tenemos dudas de la posición inicial donde debe comenzar el overlay, podemos resolver el dilema haciendo un dspffd del archivo y buscamos la posición de inicio del primer campo de montos o saldos que nos interesa incluir en el arreglo declarado en la DS.


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

No comments: