Lenguaje Progress 4gl como utilizar tablas temporales

Share this Post Share to Facebook Share to Twitter Email This Pin This
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

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/

No hay comentarios.:

Publicar un comentario