Lenguaje Progress 4gl como utilizar tablas temporales
Bienvenidos a este blog, en esta publicación veremos como crear una tabla temporal y colocar índices con el lenguaje Progress 4gl.
Primero veamos un ejemplo en que ocasiones podríamos utilizar una tabla temporal en general no solo Progress:
- Cuando hacemos un reporte normalmente vamos recuperando información de diferentes tablas de una base de datos y para ir guardando las filas con la información que necesitamos en muchas ocasiones necesitamos tener una tabla nueva donde ir almacenando las nuevas filas.
- Si vamos a realizar más cálculos con los datos que obtenemos de diferentes tablas.
- Queremos utilizarlo en reportes como Crystal Reports o en plantillas diferentes.
- Cuando vamos a procesar el contenido de los datos, cuando vamos a realizar segmentaciones de los datos pero no lo vamos almacenar en una tabla física de base datos porque no se tarda mucho la generación de la información y no es una información que se genere con mucha frecuencia.
La definición general de Progress es la siguiente en la imagen
En general están son las ventajas y desventajas de utilizar estas tablas temporales
Ahora veamos un ejemplo en Progress: quiero generar un programa que me lea un archivo de entrada y que con la tabla temporal en la que guardemos el archivo de entrada lo convirtamos en una carga CIM en QAD para crear ubicaciones en el módulo de activos fijos.
{us/mf/mfdtitle.i}
DEF VAR vc-in-file AS CHAR NO-UNDO.
DEF VAR v-totrec AS INTEGER NO-UNDO.
DEF VAR v-toterr AS INTEGER NO-UNDO.
DEF VAR lv-outfile AS CHAR NO-UNDO.
DEF VAR lv-cimfile AS CHAR NO-UNDO.
DEF VAR v-err AS LOGICAL NO-UNDO.
/*******TABLA TEMPORAL**************/
DEF TEMP-TABLE tabla_datos no-undo
field tt_loc like ld_part
field tt_des like ld_site
field tt_ent like ld_loc
field tt_sub like ld_lot
field tt_cc like ld_ref
FIELD tt-error as character
INDEX ttDataCim
tt_loc
tt_des
tt_ent
tt_sub
tt_cc.
/*******TABLA TEMPORAL**************/
DEF FRAME a
vc-in-file COLON 21 LABEL "File to charge" FORMAT "X(30)"
WITH WIDTH 80 SIDE-LABELS.
UPDATE vc-in-file WITH FRAME a.
INPUT FROM VALUE(vc-in-file).
REPEAT:
CREATE tabla_datos.
IMPORT DELIMITER "," tabla_datos EXCEPT tt-error .
END.
INPUT CLOSE.
FOR EACH tabla_datos
WHERE tt_loc <> ""
NO-LOCK
BREAK BY tt_loc
BY tt_des
BY tt_ent
BY tt_sub
BY tt_cc.
IF tt-error = "" THEN DO:
ASSIGN
v-totrec = v-totrec + 1
lv-outfile = tt_loc + ".cim"
lv-cimfile = tt_loc + ".log".
OUTPUT TO VALUE(lv-outfile).
PUT UNFORMAT '"' tt_loc '" ' SKIP.
IF tt_des <> '' THEN
put unformat '"' tt_des '" ' .
ELSE
put unformat '-' .
IF tt_ent <> '' THEN
put unformat '"' tt_ent '" ' .
ELSE
put unformat '-' .
IF tt_sub <> '' THEN
put unformat '"' tt_sub '" ' .
ELSE
put unformat '-' .
IF tt_cc <> '' THEN
put unformat '"' tt_cc '" ' skip.
ELSE
put unformat '-' skip.
PUT UNFORMAT '-' SKIP.
PUT UNFORMAT '.' SKIP.
PUT UNFORMAT '.' SKIP.
OUTPUT CLOSE.
DO TRANSACTION:
OUTPUT TO VALUE(lv-cimfile).
input from value(lv-outfile).
batchrun = true.
{us/bbi/gprun.i ""falcmt.p""}
batchrun = false.
pause 0 before-hide.
input close.
output close.
v-err = false.
if v-err then do:
v-toterr = v-toterr + 1.
undo, next.
END.
END.
END.
END.
DISPLAY "TOTAL errores" v-toterr.
Otros artículos en este blog acerca de Progress 4gl
- Como instalar Open Edge para practicar estos ejemplos
Espero les haya gustado y servido esta publicación, comparta en sus redes sociales y también pueden seguirnos en este blog o en Facebook https://www.facebook.com/Programacionparatodosmsg/
Comentarios
Publicar un comentario