A* *********************************************************************** A* Table: Archivo de Parametros de Tablas Para Reportes A* *********************************************************************** A* Date/Time: 07 de Abril de 2006 A* User: Yon Tomas Briceño Buitrago ** A* *********************************************************************** A* A R RARCPAR TEXT(\'Parametros de Tablas Para Rep- A ortes \') A* A*Datos Principales A NOMARC 10A TEXT(\'Nombre de Archivo \') A COLHDG(\'Nombre de Archivo\') A NOMLIB 10A TEXT(\'Nombre de Libreria \') A COLHDG(\'Nombre de Libreri\') A DESCRI 40A TEXT(\'Descripcion Archivo\') A COLHDG(\'Descripcion Archi\') A SEPARA 5A TEXT(\'Separador Campos \') A COLHDG(\'Separador Campos \') A* Datos de Auditoria A USRCRE 10A COLHDG(\'Cod. Usuario\' \'Creac\') A TEXT(\'Codigo Usuario Creac\') A FECCRE 8S 0 COLHDG(\'Fecha de \' \'Creac\') A* A K NOMARC A K NOMLIB Se debe Crear una tabla con el nombre ICFARCREP, este contendra los Campos de las tablas parametrizadas, en ICFARCPAR. A* *********************************************************************** A* Table: Archivo de Parametros de Campos Para Reportes A* *********************************************************************** A* Date/Time: 07 de Abril de 2006 A* User: Yon Tomas Briceño Buitrago ** *********************************************************************** A* A R RARCREP TEXT(\'Parametros de Tablas Para Rep- A ortes \') A* A*Datos Principales A NOMARC 10A TEXT(\'Nombre de Archivo \') A COLHDG(\'Nombre de Archivo\') A NOMLIB 10A TEXT(\'Nombre de Libreria \') A COLHDG(\'Nombre de Libreri\') A NOMCAM 10A TEXT(\'Nombre de Campo \') A COLHDG(\'Nombre de Campo \') A DESCAM 40A TEXT(\'Descripcion Campo \') A COLHDG(\'Descripcion Campo\') A POSDES 5S 0 TEXT(\'Posicion Desde \') A COLHDG(\'Posicion Desde \') A POSHAS 5S 0 TEXT(\'Posicion Hasta \') A COLHDG(\'Posicion Hasta \') A LONGIT 5S 0 TEXT(\'Longitud \') A COLHDG(\'Longitud \') A INDFEC 1S 0 TEXT(\'Es Campo Fecha? \') A COLHDG(\'Es Campo Fecha? \') A FORFEE 10A TEXT(\'Formato Fecha Entra\') A COLHDG(\'Formato Fecha Ent\') A FORFES 10A TEXT(\'Formato Fecha Entra\') A COLHDG(\'Formato Fecha Ent\') A* Datos de Auditoria A USRCRE 10A COLHDG(\'Cod. Usuario\' \'Creac\') A TEXT(\'Codigo Usuario Creac\') A FECCRE 8S 0 COLHDG(\'Fecha de \' \'Creac\') A TEXT(\'Fecha de Creac\') A USRMOD 10A COLHDG(\'Cod. Usuario\' \'Modif\') A TEXT(\'Codigo Usuario Modif\') A FECMOD 8S 0 COLHDG(\'Fecha de \' \'Modif\') A TEXT(\'Fecha de Modif\') A* A K NOMARC A K NOMLIB A K NOMCAM Se debe Crear una Vista Logica, al archivo ICFARCREP, con el nopmbre ICFARCREP1 A* *********************************************************************** A* Table: Archivo de Parametros de Campos Para Reportes A* *********************************************************************** A* Date/Time: 07 de Abril de 2006 A* User: Yon Tomas Briceño Buitrago ** A* *********************************************************************** A* A R RARCREP PFILE(ICFARCREP) A* A K NOMARC A K NOMLIB A K POSDES Se crea un CL, que recibe como parametros el Archivo y la libreria a parametrizar, este CL ayuda al usuario a llenar el Archivo ICFARCREP. PGM PARM(&XNOMARC &XNOMLIB) /* ----------------------------------------------------------------- */ /* PROGRAMA: ICCPRT003D */ /* FUNCION : ACTUALIZA ARCHIVO DE PARAMETROS DE CAMPOS */ /* */ /* AUTOR: YON TOMAS BRICEÑO ** COLNEX *** */ /* FECHA: ABRIL 07 DE 2006 */ /* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */ /* DECLARACION DE VARIABLES */ /* ----------------------------------------------------------------- */ DCL VAR(&XNOMARC) TYPE(*CHAR) LEN(10) DCL VAR(&XNOMLIB) TYPE(*CHAR) LEN(10) /* ----------------------------------------------------------------- */ /* GENERA ARCHIVO DE SALIDA */ /* ----------------------------------------------------------------- */ DSPFFD FILE(&XNOMLIB/&XNOMARC) OUTPUT(*OUTFILE) + OUTFILE(QTEMP/ICFCAMPOS) ENDPGM Entrar a Parametrizar los archivos ya sea por UPDDTA o Alguna herramienta que se tenga, para actualizar Archivos directamente. Se crea el programa ICCARREGLA, que es el que va a realizar el cambio, asi: /* ----------------------------------------------------------------- */ /* PROGRAMA: ICARREGLA */ /* FUNCION : ARREGLA ARCHIVOS PARA ENVIAR A PC */ /* */ /* AUTOR: YON TOMAS BRICEÑO ** *** */ /* FECHA: ABRIL 07 DE 2006 */ /* ----------------------------------------------------------------- */ PGM PARM(&XNOMARC &XNOMLIB &XNOMARS ) /* ----------------------------------------------------------------- */ /* DECLARACION DE VARIABLES */ /* ----------------------------------------------------------------- */ DCL VAR(&XNOMARC) TYPE(*CHAR) LEN(10) DCL VAR(&XNOMLIB) TYPE(*CHAR) LEN(10) DCL VAR(&XNOMARS) TYPE(*CHAR) LEN(10) DCL VAR(&XCODUSU) TYPE(*CHAR) LEN(10) /* ----------------------------------------------------------------- */ /* RECUPERA USUARIO */ /* ----------------------------------------------------------------- */ RTVJOBA USER(&XCODUSU) /* ----------------------------------------------------------------- */ /* DUPLICA ARCHIVOS */ /* ----------------------------------------------------------------- */ CRTDUPOBJ OBJ(ICFSALIIN) FROMLIB(PPSYVDTA) + OBJTYPE(*FILE) TOLIB(QTEMP) NEWOBJ(ICFSALIIN) MONMSG MSGID(CPF0000) CRTDUPOBJ OBJ(ICFSALIDA) FROMLIB(PPSYVDTA) + OBJTYPE(*FILE) TOLIB(QTEMP) NEWOBJ(ICFSALIDA) MONMSG MSGID(CPF0000) CHGVAR VAR(%SST(&XNOMARS 1 5)) VALUE(%SST(&XNOMARC + 4 5)) CHGVAR VAR(%SST(&XNOMARS 6 5)) VALUE(%SST(&XCODUSU + 6 5)) CRTDUPOBJ OBJ(ICFSALIDA) FROMLIB(PPSYVDTA) + OBJTYPE(*FILE) TOLIB(&XNOMLIB) + NEWOBJ(&XNOMARS) MONMSG MSGID(CPF0000) /* ----------------------------------------------------------------- */ /* DUPLICA ARCHIVOS */ /* ----------------------------------------------------------------- */ CPYF FROMFILE(&XNOMLIB/&XNOMARC) + TOFILE(QTEMP/ICFSALIIN) MBROPT(*REPLACE) + FMTOPT(*NOCHK) OVRDBF FILE(ICFSALIIN) TOFILE(QTEMP/ICFSALIIN) OVRDBF FILE(ICFSALIDA) TOFILE(QTEMP/ICFSALIDA) CALL PGM(ICRARREGLA) PARM(&XNOMARC &XNOMLIB) CPYF FROMFILE(QTEMP/ICFSALIDA) + TOFILE(&XNOMLIB/&XNOMARS) + MBROPT(*REPLACE) FMTOPT(*NOCHK) ENDPGM Y por ultimo el programa RPGLE, ICRARREGLA, que se encargara de realizar el Cambio. *------------------------------------------------------------- * ICRARREGLA + *PROCESO: TOMA LOS DATOS DE UN ARCHIVO DE ENTRADA Y CON + * BASE EN UNOS PARAMETROS GENERA UNO DE SALIDA + * + * ........................ + *FECHA : ABRIL 07 DEL 2006 + *AUTOR : YTBB ** YON TOMAS BRICEÑO B. ** + *MODIFICADO POR: + *------------------------------------------------------------- H DATEDIT(*YMD/) * *%.. Lógico del BOFCPOLI X Núm documento DESCEND FICFSALIIN IP E DISK PREFIX (E_) FICFSALIDA UF A E DISK PREFIX (S_) FICFARCPAR IF A E K DISK PREFIX (PA) FICFARCREP1IF A E K DISK PREFIX (P_) * ------------------------------------------------------ D SDS DUSUARI 254 263 DPROGRA 324 333 DJOB 244 253 DNUMJOB 264 269 DFECHA 191 198 DHORA 282 287 D* DW_FECHA_ENT 10 DW_ANO_SUB 4 DW_MES_SUB 2 DW_DIA_SUB 2 DW_FECHA_SAL 10 C* C *ENTRY PLIST C PARM NOMARC 10 C PARM NOMLIB 10 C* C KREP1 KLIST C KFLD P_NOMARC C KFLD P_NOMLIB C KFLD P_POSDES C* C KREP KLIST C KFLD P_NOMARC C KFLD P_NOMLIB C* C KPAR KLIST C KFLD PANOMARC C KFLD PANOMLIB C* C IF *IN96 = \'0\' C MOVEL NOMARC PANOMARC C MOVEL NOMLIB PANOMLIB C KPAR CHAIN RARCPAR 86 C IF *IN86 = \'0\' C SETON 87 C ELSE C SETOFF 87 C ENDIF C SETON 96 C ENDIF C IF *IN87 = \'1\' C MOVEL NOMARC P_NOMARC C MOVEL NOMLIB P_NOMLIB C MOVE *ALL\'0\' P_POSDES C SETOFF 95 C KREP1 SETLL RARCREP C KREP READE RARCREP 85 C DOW *IN85 = \'0\' C* C* Mueve Nombre Archivo C MOVEL *ALL\' \' W_SUBSTR 1000 C EVAL W_SUBSTR = %SUBST(E_CAMSAI:P_POSDES:P_LONGIT) C IF P_INDFEC = 1 C IF P_FORFEE <> P_FORFES C EXSR CAMBIA_FMT C ENDIF C ENDIF C IF *IN95 = \'0\' C EVAL S_CAMSAL = %TRIM(W_SUBSTR ) + PASEPARA C SETON 95 C ELSE C EVAL S_CAMSAL = %TRIM( S_CAMSAL ) + C %TRIM( W_SUBSTR ) + PASEPARA C ENDIF C* C KREP READE RARCREP 85 C ENDDO C* C WRITE RSALIDA C* C ELSE C* C SETON LR C* C ENDIF CLR SETON LR C* *************************************************************** C* CAMBIA-FMT : CAMBIA FORMATO DE FECHA C* *************************************************************** C CAMBIA_FMT BEGSR C* C MOVEL *ALL\' \' W_FECHA_ENT C MOVEL *ALL\' \' W_FECHA_SAL C MOVEL *ALL\'0\' W_ANO_SUB C MOVEL *ALL\'0\' W_MES_SUB C MOVEL *ALL\'0\' W_DIA_SUB C MOVEL W_SUBSTR W_FECHA_ENT C* Desbarata Fecha de Entrada C SELECT C WHEN P_FORFEE = \'AAAA-MM-DD\' OR C P_FORFEE = \'AAAA/MM/DD\' C EVAL W_ANO_SUB = %SUBST(W_FECHA_ENT:1:4) C EVAL W_MES_SUB = %SUBST(W_FECHA_ENT:6:2) C EVAL W_DIA_SUB = %SUBST(W_FECHA_ENT:9:2) C WHEN P_FORFEE = \'AAAA-DD-MM\' OR C P_FORFEE = \'AAAA/DD/MM\' C EVAL W_ANO_SUB = %SUBST(W_FECHA_ENT:1:4) C EVAL W_DIA_SUB = %SUBST(W_FECHA_ENT:6:2) C EVAL W_MES_SUB = %SUBST(W_FECHA_ENT:9:2) C WHEN P_FORFEE = \'DD-MM-AAAA\' OR C P_FORFEE = \'DD/MM/AAAA\' C EVAL W_DIA_SUB = %SUBST(W_FECHA_ENT:1:2) C EVAL W_MES_SUB = %SUBST(W_FECHA_ENT:4:2) C EVAL W_ANO_SUB = %SUBST(W_FECHA_ENT:7:4) C WHEN P_FORFEE = \'MM-DD-AAAA\' OR C P_FORFEE = \'MM/DD/AAAA\' C EVAL W_MES_SUB = %SUBST(W_FECHA_ENT:1:2) C EVAL W_DIA_SUB = %SUBST(W_FECHA_ENT:4:2) C EVAL W_ANO_SUB = %SUBST(W_FECHA_ENT:7:4) C WHEN P_FORFEE = \'AAAAMMDD\' C EVAL W_ANO_SUB = %SUBST(W_FECHA_ENT:1:4) C EVAL W_MES_SUB = %SUBST(W_FECHA_ENT:5:2) C EVAL W_DIA_SUB = %SUBST(W_FECHA_ENT:7:2) C WHEN P_FORFEE = \'AAAADDMM\' C EVAL W_ANO_SUB = %SUBST(W_FECHA_ENT:1:4) C EVAL W_DIA_SUB = %SUBST(W_FECHA_ENT:5:2) C EVAL W_MES_SUB = %SUBST(W_FECHA_ENT:7:2) C WHEN P_FORFEE = \'DDMMAAAA\' C EVAL W_DIA_SUB = %SUBST(W_FECHA_ENT:1:2) C EVAL W_MES_SUB = %SUBST(W_FECHA_ENT:3:2) C EVAL W_ANO_SUB = %SUBST(W_FECHA_ENT:5:4) C WHEN P_FORFEE = \'MMDDAAAA\' C EVAL W_MES_SUB = %SUBST(W_FECHA_ENT:1:2) C EVAL W_DIA_SUB = %SUBST(W_FECHA_ENT:3:2) C EVAL W_ANO_SUB = %SUBST(W_FECHA_ENT:5:4) C ENDSL C* C* Arma Fecha de Salida C* C SELECT C WHEN P_FORFES = \'AAAA/MM/DD\' C EVAL %SUBST(W_FECHA_SAL:1:4) = W_ANO_SUB C EVAL %SUBST(W_FECHA_SAL:5:1) = \'/\' C EVAL %SUBST(W_FECHA_SAL:6:2) = W_MES_SUB C EVAL %SUBST(W_FECHA_SAL:8:1) = \'/\' C EVAL %SUBST(W_FECHA_SAL:9:2) = W_DIA_SUB C WHEN P_FORFES = \'AAAA-MM-DD\' C EVAL %SUBST(W_FECHA_SAL:1:4) = W_ANO_SUB C EVAL %SUBST(W_FECHA_SAL:5:1) = \'-\' C EVAL %SUBST(W_FECHA_SAL:6:2) = W_MES_SUB C EVAL %SUBST(W_FECHA_SAL:8:1) = \'-\' C EVAL %SUBST(W_FECHA_SAL:9:2) = W_DIA_SUB C WHEN P_FORFES = \'AAAA/DD/MM\' C EVAL %SUBST(W_FECHA_SAL:1:4) = W_ANO_SUB C EVAL %SUBST(W_FECHA_SAL:5:1) = \'/\' C EVAL %SUBST(W_FECHA_SAL:6:2) = W_DIA_SUB C EVAL %SUBST(W_FECHA_SAL:8:1) = \'/\' C EVAL %SUBST(W_FECHA_SAL:9:2) = W_MES_SUB C WHEN P_FORFES = \'AAAA-DD-MM\' C EVAL %SUBST(W_FECHA_SAL:1:4) = W_ANO_SUB C EVAL %SUBST(W_FECHA_SAL:5:1) = \'-\' C EVAL %SUBST(W_FECHA_SAL:6:2) = W_DIA_SUB C EVAL %SUBST(W_FECHA_SAL:8:1) = \'-\' C EVAL %SUBST(W_FECHA_SAL:9:2) = W_MES_SUB C WHEN P_FORFES = \'DD/MM/AAAA\' C EVAL %SUBST(W_FECHA_SAL:1:2) = W_DIA_SUB C EVAL %SUBST(W_FECHA_SAL:3:1) = \'/\' C EVAL %SUBST(W_FECHA_SAL:4:2) = W_MES_SUB C EVAL %SUBST(W_FECHA_SAL:6:1) = \'/\' C EVAL %SUBST(W_FECHA_SAL:7:4) = W_ANO_SUB C WHEN P_FORFES = \'DD-MM-AAAA\' C EVAL %SUBST(W_FECHA_SAL:1:2) = W_DIA_SUB C EVAL %SUBST(W_FECHA_SAL:3:1) = \'-\' C EVAL %SUBST(W_FECHA_SAL:4:2) = W_MES_SUB C EVAL %SUBST(W_FECHA_SAL:6:1) = \'-\' C EVAL %SUBST(W_FECHA_SAL:7:4) = W_ANO_SUB C WHEN P_FORFES = \'MM/DD/AAAA\' C EVAL %SUBST(W_FECHA_SAL:1:2) = W_MES_SUB C EVAL %SUBST(W_FECHA_SAL:3:1) = \'/\' C EVAL %SUBST(W_FECHA_SAL:4:2) = W_DIA_SUB C EVAL %SUBST(W_FECHA_SAL:6:1) = \'/\' C EVAL %SUBST(W_FECHA_SAL:7:4) = W_ANO_SUB C WHEN P_FORFES = \'MM-DD-AAAA\' C EVAL %SUBST(W_FECHA_SAL:1:2) = W_MES_SUB C EVAL %SUBST(W_FECHA_SAL:3:1) = \'-\' C EVAL %SUBST(W_FECHA_SAL:4:2) = W_DIA_SUB C EVAL %SUBST(W_FECHA_SAL:6:1) = \'-\' C EVAL %SUBST(W_FECHA_SAL:7:4) = W_ANO_SUB C WHEN P_FORFES = \'AAAAMMDD\' C EVAL %SUBST(W_FECHA_SAL:1:4) = W_ANO_SUB C EVAL %SUBST(W_FECHA_SAL:5:2) = W_MES_SUB C EVAL %SUBST(W_FECHA_SAL:7:2) = W_DIA_SUB C WHEN P_FORFES = \'AAAADDMM\' C EVAL %SUBST(W_FECHA_SAL:1:4) = W_ANO_SUB C EVAL %SUBST(W_FECHA_SAL:5:2) = W_DIA_SUB C EVAL %SUBST(W_FECHA_SAL:7:2) = W_MES_SUB C WHEN P_FORFES = \'DDMMAAAA\' C EVAL %SUBST(W_FECHA_SAL:1:2) = W_DIA_SUB C EVAL %SUBST(W_FECHA_SAL:3:2) = W_MES_SUB C EVAL %SUBST(W_FECHA_SAL:5:4) = W_ANO_SUB C WHEN P_FORFES = \'MMDDAAAA\' C EVAL %SUBST(W_FECHA_SAL:1:2) = W_MES_SUB C EVAL %SUBST(W_FECHA_SAL:3:2) = W_DIA_SUB C EVAL %SUBST(W_FECHA_SAL:5:4) = W_ANO_SUB C ENDSL C* C* Actualiza Campo de String C MOVEL *ALL\' \' W_SUBSTR C MOVEL W_FECHA_SAL W_SUBSTR C* C ENDSR