peoblemas con porgress

Preguntas y consejos sobre Progress 4GL

peoblemas con porgress

Notapor tomy2010 el Jue May 13, 2010 5:43 pm

hola soy tomas de Mexico DF.

llevo como 2 meses con progress y sinceramente no se nada y en mi trabajo ya me encargaron filtros de progress a word.
no se como empezar a trabajar me han dado algunos programas similares pero no corren bien.
sin embargo estos programas me llevan a la solucion; pero hay desenredarlos.
este es el siguiente codigo que me han dado:

Código: Seleccionar todo
DEF VAR  limita      AS CHAR INITIAL '@@' NO-UNDO.
DEF VAR  t_pos1      AS INT NO-UNDO.
DEF VAR  t_pos2      AS INT NO-UNDO.
DEF VAR  t_voy_en    AS INT NO-UNDO.
DEF VAR  t_tamano    AS INT NO-UNDO.
DEF VAR  t_campo     AS CHAR NO-UNDO.
DEF VAR  t_regresa   AS CHAR NO-UNDO.
DEF VAR  t_regresa1  AS CHAR NO-UNDO.
DEF VAR  t_imp1      AS CHAR NO-UNDO.
DEF VAR  t_imp2      AS CHAR NO-UNDO.
DEF VAR  t_tot       AS DEC  NO-UNDO.
DEF VAR  t_porc      AS DEC  NO-UNDO.

DEF VAR  t_texto     AS CHAR NO-UNDO FORMAT 'X(300)'.
DEF VAR  t_tex1      AS CHAR NO-UNDO.
DEF VAR  t_wrk       AS CHAR NO-UNDO.

DEF VAR  RUTA        AS CHAR NO-UNDO.

DEF VAR  vc-fecha    AS CHAR NO-UNDO.

{MESES.I}.

DEF INPUT PARAMETER T_DOCTO AS CHAR.

DEF VAR v-reg       AS ROWID NO-UNDO.
IF V-REG = ? THEN DO:
    RUN  FI01901.W(TRUE, OUTPUT V-REG).
END.
IF V-REG = ? THEN RETURN.

DEF VAR v-doc-fte   AS CHAR  NO-UNDO.
DEF VAR v-doc-fin   AS CHAR  NO-UNDO.
DEF VAR T_SALIDA      AS CHAR NO-UNDO.
DEF VAR T_TIPO_IMP    AS CHAR NO-UNDO.

DEFINE VARIABLE Wdirector      LIKE Unidad_adm.Director     NO-UNDO.
DEFINE VARIABLE WSubdir_obras  LIKE Unidad_adm.Subdirector  NO-UNDO.
DEFINE VARIABLE wdir           LIKE Unidad_adm.Direccion    NO-UNDO.
DEFINE VARIABLE wciud          LIKE Unidad_adm.Ciudad       NO-UNDO.
DEFINE VARIABLE wcol           LIKE Unidad_adm.Colonia      NO-UNDO.
DEFINE VARIABLE wcp            LIKE Unidad_adm.C_P          NO-UNDO.


RUN GUARDAR-A.P(OUTPUT T_SALIDA, OUTPUT T_TIPO_IMP).
ASSIGN v-doc-fte = SEARCH(T_DOCTO)   
       v-doc-fin = T_SALIDA. /*'FALLO_RE' + vg_usuario + '.RTF'*/
       RUTA = T_SALIDA. /*SEARCH('FALLO_RE' + vg_usuario + '.RTF').       */
IF RUTA NE ? THEN DO:
   DEF VAR N AS INT.
   FIND licitacion WHERE
        ROWID(licitacion) = v-reg NO-LOCK.
   FIND obras.estado OF licitacion NO-LOCK.
   RUN CON_SIA.P.      /* Conectando la base del Datos del Sia*/
   RUN CONS_ADM3.P(INPUT licitacion.id_estado, OUTPUT Wdirector,
                   OUTPUT WSubdir_obras, OUTPUT wdir, OUTPUT Wciud,
                   OUTPUT wcol, OUTPUT wcp).
   IF CONNECTED ('SIA') THEN DISCONNECT SIA. /* DESCONECTA EL SIA */

   INPUT FROM  VALUE(v-doc-fte) NO-ECHO BINARY NO-CONVERT.
   OUTPUT TO VALUE(v-doc-fin) BINARY NO-CONVERT.
   REPEAT:
      IMPORT UNFORMATTED T_TEXTO.
      RUN CAMBIA.
      PUT UNFORMATTED T_TEXTO.
      PUT SKIP.
   END.
   PUT UNFORMATTED '\par }}'.
   OUTPUT CLOSE.
   DEFINE VAR WORD      AS COM-HANDLE NO-UNDO.
   DEFINE VAR WORDBOOK  AS COM-HANDLE NO-UNDO.
   DEFINE VAR WORDSHEET AS COM-HANDLE NO-UNDO.
   DEFINE VAR CHART     AS COM-HANDLE NO-UNDO.

   CREATE "WORD.APPLICATION" WORD.
   WORD:VISIBLE = TRUE.
   WORDBOOK = WORD:DOCUMENTS:OPEN(RUTA).      /* Abre un documento   */
   RELEASE OBJECT WORD.
   RELEASE OBJECT WORDBOOK.
END.   


PROCEDURE CAMBIA.
t_wrk = t_texto.
t_voy_en = 1.
REPEAT:
    t_pos1    = INDEX(t_texto,limita,t_voy_en).
    IF t_pos1 = 0 THEN LEAVE.
    t_pos2    = INDEX(t_texto,limita,t_pos1 + 2).
    IF t_pos2 = 0 THEN LEAVE.
    t_tamano  = t_pos2 - (t_pos1 + 2).
    t_campo   = SUBSTRING(t_texto,t_pos1 + 2,t_tamano).
    RUN substituye.
END.
END procedure.


Procedure Substituye.
    t_regresa = ''.
    CASE t_campo:
       WHEN 'licitacion.id_licitacion'  THEN
            t_regresa = STRING(licitacion.id_licitacion,'XXXXXXXX-XXX-XXXXXX').
       WHEN 'licitacion.descripcion' THEN t_regresa = licitacion.descripcion.
       WHEN 'Licitacion.f_apertura' THEN
            RUN fecha-texto(INPUT Licitacion.f_apertura, OUTPUT t_regresa).
       WHEN 'Licitacion.H_apertura' THEN
            t_regresa = SUBSTRING(Licitacion.H_apertura,1,2) + ':' +
                        SUBSTRING(Licitacion.H_apertura,3,2).
       WHEN 'Licitacion.Lugar_apertura' THEN
            t_regresa = Licitacion.Lugar_apertura.
       WHEN 'Licitacion.f_apertura_eco' THEN
            RUN fecha-texto(INPUT Licitacion.f_apertura_eco, OUTPUT t_regresa).
       WHEN 'Licitacion.h_apertura_eco' THEN
            t_regresa = SUBSTRING(Licitacion.h_apertura_eco,1,2) + ':' +
                        SUBSTRING(Licitacion.h_apertura_eco,3,2).
       WHEN 'Licitacion.f_fallo' THEN
            RUN fecha-texto(INPUT Licitacion.f_fallo, OUTPUT t_regresa).
       WHEN 'Licitacion.h_fallo' THEN
            t_regresa = SUBSTRING(Licitacion.h_fallo,1,2) + ':' +
                        SUBSTRING(Licitacion.h_fallo,3,2).
       WHEN 'contrato.firma_sct[1]' THEN
            t_regresa = contrato.firma_sct[1].

       WHEN 'Wciud' THEN
            t_regresa = Wciud.
       WHEN 'Wdir' THEN
            t_regresa = Wdir + ', ' + Wcol + ' ' +
                        'C.P. ' + STRING(Wcp,'99999') + ', ' + Wciud.
       WHEN 'estado.desc_larga' THEN
            t_regresa = OBRAS.estado.desc_larga.
       WHEN 'Wdirector' THEN
            t_regresa = Wdirector.
       WHEN 'Wsubdir_obras' THEN
            t_regresa = Wsubdir_obras.
       WHEN 'nombres' THEN DO:
            t_regresa = ''.
            FOR EACH participante OF licitacion NO-LOCK.
                FIND contratista OF participante NO-LOCK.
                /*t_regresa = t_regresa + STRING(contratista.nombre_largo).*/
                DISPLAY '\par' contratista.nombre_largo WITH STREAM-IO NO-BOX NO-LABELS.
            END.
       END.
       WHEN 'GANADOR' THEN DO:
            t_regresa = ''.
            FIND contratista WHERE
                 contratista.id_contratista = licitacion.id_contratista NO-LOCK NO-ERROR.
            IF AVAILABLE contratista THEN t_regresa = contratista.nombre_largo.
       END.
       WHEN 'PARTICIPANTE.IMPORTE_TOTAL' THEN DO:
            t_regresa = ''.
            FIND participante OF licitacion WHERE
                 participante.id_contratista = licitacion.id_contratista NO-LOCK NO-ERROR.
            IF AVAILABLE participante THEN DO:
                t_regresa = STRING(participante.monto_total,'zzzz,zzz,zz9.99').
                RUN NUM_LET.P(PARTICIPANTE.MONTO_TOTAL, OUTPUT t_imp1, OUTPUT t_imp2).
                t_regresa = t_regresa + t_imp1 + ' ' + t_imp2 + 'M.N.'.
            END.
       END.
    END CASE.
    IF t_regresa = '' THEN t_regresa = '  '.
    t_voy_en = LENGTH(SUBSTRING(t_texto,1,t_pos1 - 1) +  t_regresa).
    t_texto  = SUBSTRING(t_texto,1,t_pos1 - 1) +  t_regresa +
               SUBSTRING(t_texto,t_pos2 + 2).
END procedure.

PROCEDURE fecha-texto:
   DEF INPUT PARAMETER v-fecha AS DATE.
   DEF OUTPUT PARAMETER vf-texto AS CHAR.
   IF v-fecha = ? THEN DO:
        vf-texto = '________'.
        RETURN.
   END.
   vf-texto = STRING(DAY(v-fecha))    + ' de ' +
              LC(t_meses[MONTH(v-fecha)]) + ' de ' +
              STRING(YEAR(v-fecha), '9999').
END.

que alguine me explique que hace este programa por favor c los agradecere muchisimo.

atte: el nuevo en progress
tomy2010
 
Mensajes: 4
Registrado: Mié May 05, 2010 4:16 am

Re: peoblemas con porgress

Notapor fdantas el Vie May 14, 2010 12:58 pm

¿En qué parte del código que tiene dudas?
Fabio Dantas
Analista de Sistemas
Conheça Também http://wiki.4each.com.br/
fdantas
Site Admin
 
Mensajes: 300
Registrado: Jue Mar 26, 2009 6:37 pm

Re: peoblemas con porgress

Notapor tomy2010 el Vie May 14, 2010 6:03 pm

fdantas escribió:¿En qué parte del código que tiene dudas?


si me explicas que ace el programa en general o en partes por favor es que realmente no c nada.

por favor.
tomy2010
 
Mensajes: 4
Registrado: Mié May 05, 2010 4:16 am

Re: peoblemas con porgress

Notapor tomy2010 el Lun May 17, 2010 8:22 pm

echenme la mano por favor me urge..

y otra cosa pueden mandar ejemplos de como cruzar tablas.

atte: el nuevo con progress
tomy2010
 
Mensajes: 4
Registrado: Mié May 05, 2010 4:16 am

Re: peoblemas con porgress

Notapor Spenyas el Lun Jul 05, 2010 4:58 pm

Código: Seleccionar todo
/* DEFINICION DE VARIABLES */

DEF VAR  limita      AS CHAR INITIAL '@@' NO-UNDO.
DEF VAR  t_pos1      AS INT NO-UNDO.
DEF VAR  t_pos2      AS INT NO-UNDO.
DEF VAR  t_voy_en    AS INT NO-UNDO.
DEF VAR  t_tamano    AS INT NO-UNDO.
DEF VAR  t_campo     AS CHAR NO-UNDO.
DEF VAR  t_regresa   AS CHAR NO-UNDO.
DEF VAR  t_regresa1  AS CHAR NO-UNDO.
DEF VAR  t_imp1      AS CHAR NO-UNDO.
DEF VAR  t_imp2      AS CHAR NO-UNDO.
DEF VAR  t_tot       AS DEC  NO-UNDO.
DEF VAR  t_porc      AS DEC  NO-UNDO.

DEF VAR  t_texto     AS CHAR NO-UNDO FORMAT 'X(300)'.
DEF VAR  t_tex1      AS CHAR NO-UNDO.
DEF VAR  t_wrk       AS CHAR NO-UNDO.

DEF VAR  RUTA        AS CHAR NO-UNDO.

DEF VAR  vc-fecha    AS CHAR NO-UNDO.


/* Carga un .i en memoria para utilizar código que esta en el */
{MESES.I}.



DEF INPUT PARAMETER T_DOCTO AS CHAR.

/* Define v-reg como rowid(identificador unico de un registro en la bd progress)
DEF VAR v-reg       AS ROWID NO-UNDO.


/* Si vale ? hace una llamada al programa FI01901.W que devolvera un valor en v-reg)
IF V-REG = ? THEN DO:
    RUN  FI01901.W(TRUE, OUTPUT V-REG).
END.
IF V-REG = ? THEN RETURN.   /*si sigue valiendo ? ya no hace mas)


/* Mas definicion de variables */
DEF VAR v-doc-fte   AS CHAR  NO-UNDO.
DEF VAR v-doc-fin   AS CHAR  NO-UNDO.
DEF VAR T_SALIDA      AS CHAR NO-UNDO.
DEF VAR T_TIPO_IMP    AS CHAR NO-UNDO.

DEFINE VARIABLE Wdirector      LIKE Unidad_adm.Director     NO-UNDO.
DEFINE VARIABLE WSubdir_obras  LIKE Unidad_adm.Subdirector  NO-UNDO.
DEFINE VARIABLE wdir           LIKE Unidad_adm.Direccion    NO-UNDO.
DEFINE VARIABLE wciud          LIKE Unidad_adm.Ciudad       NO-UNDO.
DEFINE VARIABLE wcol           LIKE Unidad_adm.Colonia      NO-UNDO.
DEFINE VARIABLE wcp            LIKE Unidad_adm.C_P          NO-UNDO.


/* LLAMA A  GUARDAR-A.P que aparentemente va a indicar los ficheros que se van a mostrar
RUN GUARDAR-A.P(OUTPUT T_SALIDA, OUTPUT T_TIPO_IMP).
ASSIGN v-doc-fte = SEARCH(T_DOCTO)   
       v-doc-fin = T_SALIDA. /*'FALLO_RE' + vg_usuario + '.RTF'*/
       RUTA = T_SALIDA. /*SEARCH('FALLO_RE' + vg_usuario + '.RTF').       */

/* SI RUTA NO TIENE COMO VALOR ? Pasa a ejecutar este código, en el, carga el texto, lo formatea mediante el procedure CAMBIA y lo carga en word?? )
IF RUTA NE ? THEN DO:
   DEF VAR N AS INT.
   FIND licitacion WHERE
        ROWID(licitacion) = v-reg NO-LOCK.
   FIND obras.estado OF licitacion NO-LOCK.
   RUN CON_SIA.P.      /* Conectando la base del Datos del Sia*/
   RUN CONS_ADM3.P(INPUT licitacion.id_estado, OUTPUT Wdirector,
                   OUTPUT WSubdir_obras, OUTPUT wdir, OUTPUT Wciud,
                   OUTPUT wcol, OUTPUT wcp).
   IF CONNECTED ('SIA') THEN DISCONNECT SIA. /* DESCONECTA EL SIA */

   INPUT FROM  VALUE(v-doc-fte) NO-ECHO BINARY NO-CONVERT.
   OUTPUT TO VALUE(v-doc-fin) BINARY NO-CONVERT.
   REPEAT:
      IMPORT UNFORMATTED T_TEXTO.
      RUN CAMBIA.
      PUT UNFORMATTED T_TEXTO.
      PUT SKIP.
   END.
   PUT UNFORMATTED '\par }}'.
   OUTPUT CLOSE.
   DEFINE VAR WORD      AS COM-HANDLE NO-UNDO.
   DEFINE VAR WORDBOOK  AS COM-HANDLE NO-UNDO.
   DEFINE VAR WORDSHEET AS COM-HANDLE NO-UNDO.
   DEFINE VAR CHART     AS COM-HANDLE NO-UNDO.

   CREATE "WORD.APPLICATION" WORD.
   WORD:VISIBLE = TRUE.
   WORDBOOK = WORD:DOCUMENTS:OPEN(RUTA).      /* Abre un documento   */
   RELEASE OBJECT WORD.
   RELEASE OBJECT WORDBOOK.
END.   


/* TANTO EL PROCEDURE CAMBIA COMO SUBSTITUTE, modifican el contenido/formatean, para mostrarlo de un modo determinado en funcion de sus datos */

PROCEDURE CAMBIA.
t_wrk = t_texto.
t_voy_en = 1.
REPEAT:
    t_pos1    = INDEX(t_texto,limita,t_voy_en).
    IF t_pos1 = 0 THEN LEAVE.
    t_pos2    = INDEX(t_texto,limita,t_pos1 + 2).
    IF t_pos2 = 0 THEN LEAVE.
    t_tamano  = t_pos2 - (t_pos1 + 2).
    t_campo   = SUBSTRING(t_texto,t_pos1 + 2,t_tamano).
    RUN substituye.
END.
END procedure.


Procedure Substituye.
    t_regresa = ''.
    CASE t_campo:
       WHEN 'licitacion.id_licitacion'  THEN
            t_regresa = STRING(licitacion.id_licitacion,'XXXXXXXX-XXX-XXXXXX').
       WHEN 'licitacion.descripcion' THEN t_regresa = licitacion.descripcion.
       WHEN 'Licitacion.f_apertura' THEN
            RUN fecha-texto(INPUT Licitacion.f_apertura, OUTPUT t_regresa).
       WHEN 'Licitacion.H_apertura' THEN
            t_regresa = SUBSTRING(Licitacion.H_apertura,1,2) + ':' +
                        SUBSTRING(Licitacion.H_apertura,3,2).
       WHEN 'Licitacion.Lugar_apertura' THEN
            t_regresa = Licitacion.Lugar_apertura.
       WHEN 'Licitacion.f_apertura_eco' THEN
            RUN fecha-texto(INPUT Licitacion.f_apertura_eco, OUTPUT t_regresa).
       WHEN 'Licitacion.h_apertura_eco' THEN
            t_regresa = SUBSTRING(Licitacion.h_apertura_eco,1,2) + ':' +
                        SUBSTRING(Licitacion.h_apertura_eco,3,2).
       WHEN 'Licitacion.f_fallo' THEN
            RUN fecha-texto(INPUT Licitacion.f_fallo, OUTPUT t_regresa).
       WHEN 'Licitacion.h_fallo' THEN
            t_regresa = SUBSTRING(Licitacion.h_fallo,1,2) + ':' +
                        SUBSTRING(Licitacion.h_fallo,3,2).
       WHEN 'contrato.firma_sct[1]' THEN
            t_regresa = contrato.firma_sct[1].

       WHEN 'Wciud' THEN
            t_regresa = Wciud.
       WHEN 'Wdir' THEN
            t_regresa = Wdir + ', ' + Wcol + ' ' +
                        'C.P. ' + STRING(Wcp,'99999') + ', ' + Wciud.
       WHEN 'estado.desc_larga' THEN
            t_regresa = OBRAS.estado.desc_larga.
       WHEN 'Wdirector' THEN
            t_regresa = Wdirector.
       WHEN 'Wsubdir_obras' THEN
            t_regresa = Wsubdir_obras.
       WHEN 'nombres' THEN DO:
            t_regresa = ''.
            FOR EACH participante OF licitacion NO-LOCK.
                FIND contratista OF participante NO-LOCK.
                /*t_regresa = t_regresa + STRING(contratista.nombre_largo).*/
                DISPLAY '\par' contratista.nombre_largo WITH STREAM-IO NO-BOX NO-LABELS.
            END.
       END.
       WHEN 'GANADOR' THEN DO:
            t_regresa = ''.
            FIND contratista WHERE
                 contratista.id_contratista = licitacion.id_contratista NO-LOCK NO-ERROR.
            IF AVAILABLE contratista THEN t_regresa = contratista.nombre_largo.
       END.
       WHEN 'PARTICIPANTE.IMPORTE_TOTAL' THEN DO:
            t_regresa = ''.
            FIND participante OF licitacion WHERE
                 participante.id_contratista = licitacion.id_contratista NO-LOCK NO-ERROR.
            IF AVAILABLE participante THEN DO:
                t_regresa = STRING(participante.monto_total,'zzzz,zzz,zz9.99').
                RUN NUM_LET.P(PARTICIPANTE.MONTO_TOTAL, OUTPUT t_imp1, OUTPUT t_imp2).
                t_regresa = t_regresa + t_imp1 + ' ' + t_imp2 + 'M.N.'.
            END.
       END.
    END CASE.
    IF t_regresa = '' THEN t_regresa = '  '.
    t_voy_en = LENGTH(SUBSTRING(t_texto,1,t_pos1 - 1) +  t_regresa).
    t_texto  = SUBSTRING(t_texto,1,t_pos1 - 1) +  t_regresa +
               SUBSTRING(t_texto,t_pos2 + 2).
END procedure.


/* FORMATEA UNA FECHA */
PROCEDURE fecha-texto:
   DEF INPUT PARAMETER v-fecha AS DATE.
   DEF OUTPUT PARAMETER vf-texto AS CHAR.
   IF v-fecha = ? THEN DO:
        vf-texto = '________'.
        RETURN.
   END.
   vf-texto = STRING(DAY(v-fecha))    + ' de ' +
              LC(t_meses[MONTH(v-fecha)]) + ' de ' +
              STRING(YEAR(v-fecha), '9999').
END.
Spenyas
 
Mensajes: 7
Registrado: Lun Nov 30, 2009 4:57 pm


Volver a Progress 4GL

¿Quién está conectado?

Usuarios navegando por este Foro: CommonCrawl [Bot], Yandex [Bot] y 0 invitados