lunes, 24 de enero de 2011

Mover de Registro a Registro - RPG (ExtName)

A veces nos hemos visto en la situación de hacer un programa que trabaje 2 tablas (archivos) con la misma estructura (mismo formato de registro y campos)  tenemos que modificar unos datos en la primera tabla y grabar las modificaciones en la segunda tabla. Y nos vemos con la necesidad de mover campo por campo a la segunda tabla. Buscamos en internet y como casi siempre es urgente hacemos las cosas mas simples pero laboriosas a la vez.
Si la tabla contiene pocos campos eso no es ningún problema, pero si hablamos de una tabla con mas de 20 campos resulta algo muy tedioso y hace engorroso nuestro código.
En cobol es realmente fácil hacerlo, solo es mover un registro al otro y listo.

DATA DIVISION.                           
 FILE SECTION.                           
01 REG-FILE1.                             
     COPY DDS-ALL-FORMATS OF ARCHIVO1.   
01 REG-FILE2.                            
     COPY DDS-ALL-FORMATS OF ARCHIVO2.   
...                                      
                                         
MOVE REG-FILE1 TO REG-FILE2              
WRITE  REG-FILE2                          

Pero… y en RPG???
Tienes varias opciones:
1.- Declaras la primera tabla con la hoja I, para la segunda tabla la Hoja O y haces uso del código de operación EXCEPT para grabar.
2.- O haces un SQL, haces el cálculo en los campos y  derivas el resultado a la segunda tabla. Pero si las modificaciones son muy complejas? Accesando a otra tabla por ejemplo? Se hace complicado.
Yo hago uso de las “bondades” del ILE.  Aquí un ejemplo sencillo pero útil.


farchivo1  ip   e             disk                                        
farchivo2  o  a e             disk    rename(regfile1:reg) prefix(x)      
 * declaracion Estructura de Datos Externa                                
d reg1          e ds                  extname(archivo1)                   
d reg2          e ds                  extname(archivo2) prefix(x)         
 * calculo                                                                
c                   eval      campo3 = campo3 + 2.85                      
 * mueve todo el registro                                                 
c                   move      reg1          reg2                          
 * graba el registro                                                      
c                   write     reg                                         


Pueden encontrar mas detalles de la palabra clave EXTNAME en los muchos tutoriales que encontramos en internet, pero la finalidad de esta demostración es su aplicación a los problemas que se nos presentan diariamente y que mayormente no damos la solución mas eficiente o idonea por falta de tiempo o porque no la encontramos oportunamente. Espero les haya servido y les sea de gran utilidad. Saludos.

No hay comentarios:

Publicar un comentario