Vamos a recordar un viejo truco para utilizarlo cuando estamos desarrollando un programa que permita al usuario modificar la data por pantalla.
Supongamos que tenemos un archivo llamdo MovCuentas conformado por cuatro campos:
- Fecha (Key)
- Cuenta (Key)
- Monto
- Moneda
Luego de mostrar la pantalla al usuario, ejecutando en el programa un EXFMT, debemos validar la data ingresada. Generalmente declaramos los campos en pantalla con nombres distintos a los campos del archivo para no perder los cambios introducidos por el usuario.
La Secuencia de instrucciones sería algo como esto:
1.-Chain (fecha:Cuenta) MovCuentas
2.-Si el registro existe:
Movemos los campos del archivo a los campos de pantalla.
sino
Mensaje de error
Endif
3.- El usuario ingresa la data
4.- Chain (fecha:Cuenta) MovCuentas
5.- Movemos los campos de la pantalla al archivo.
6.- Update Movcuentas
El ejemplo anterior es sencillo porque tenemos cuatro campos en pantalla. Sin embargo podemos tener 15 campos o muchos mas. Se vuelve realmente pesado mover los campos de la pantalla al archivo y del archivo a la pantalla y ademas, se genera mucho mas código en el programa del que realmente es necesario.
Para ahorrar código y agilizar nuestro desarrollo podemos hacer lo siguiente:
1.-Declarar en la pantalla los campos con los mismos nombres que tienen en el archivo.
2.-Declarar una estructura de datos que referencie los campos del archivo y que tenga dos ocurrencias.
Dcl-ds dsmovcuentas extname('MOVCUENTAS') occurs(2);
end-ds;
3.-Exfmt pantalla; //usuario ingresa Fecha y cuenta
4.- %occur(dsmovcuentas) = 01; //posicionarse en la primera ocurrencia
5.- Con el siguiente chain se guardan los valores del archivo en la primera ocurrencia de la estructura de datos
chain(n) (Fecha:Cuenta) Movcuentas;
6.- If %found(MovCuentas); //validamos fecha-cuenta exista
%occur(dsmovcuentas) = 02; //posiciona segunda ocurrencia
( El siguiente chain carga valores en pantalla y en la segunda ocurrencia
al mismo tiempo )
Chain(n) (Fecha:cuenta) movcuentas;
Endif;
7.-Muestra al usuario los datos en pantalla Exfmt.
8.-El usuario realiza las modificaciones. ( Recordar que estamos posicionados en la segunda ocurrencia de la estructura de datos)
9.-Recupero el registro para actualizar el archivo sin perder cambios de pantalla
%occur(DsMovcuentas) = 01;
Chain (Fecha:Cuenta) DsMovcuentas;
10.- Recupero los valores editados por el usuario
%occur(dspersonas) = 02;
11.-Grabo archivo
update rmovcuentas;
3 comments:
Buenas tardes liliana. Muy bueno este articulo. Pero tengo una duda al final del proceso. Por qué el chain en posición 2 de la ocurrencia lo haces con las variables $país y dsp_dni, tengo esa duda. Gracias
hola Bellorín,
me equivoqué. Ya lo corregí,
Gracias por tu observación.
Vale, gracias a ti. Por publicar cosas interesantes de esta plataforma. Muy podederoso este truco a la hora de ahorrar código a la hora de mover campos. Menos enredos.. Jajajaj. Gracias.
Post a Comment