####################################################################### # SISTEMA : DOCUMENTACION DE SISTEMA # PROGRAMA : DSPRMT002.4GL # OBJETIVO : Documentar Los Programas de cada Sistema # AUTOR : Tadeo A. Ferreras F. # FECHA : JUNIO 7, 1995 # MODIFICADO POR: JUAN F. SOTO # DESCRIPCION : IMPRIMIR DOCUMENTO DE CREACION Y/O MODIFICACION DE PROGRAMAS # FECHA : OCTUBRE 19, 1995. ######################################################################## DATABASE rayovac GLOBALS "dsprgb000.4gl" DEFINE la_presione,opt1 CHAR(1) DEFINE numero_ant,k1,k2,k3,i INTEGER FUNCTION dsprmt002() OPTIONS FORM LINE 8, ERROR LINE 23, PROMPT LINE 23 OPEN FORM dsfmmt002 FROM "dsfmmt002" DISPLAY FORM dsfmmt002 CALL pantalla() DISPLAY "dsprmt002" AT 4,3 ATTRIBUTE(RED) DISPLAY "Documentacion de Programas" AT 6,27 ATTRIBUTE(BLACK) MENU "Mant" COMMAND "Adicionar" "Presione para Grabar Para Cancelar" LET int_flag = FALSE CLEAR FORM CALL dsprad002() COMMAND "Consulta-Modificar" "Presione para Actualizar Para Cancelar" LET int_flag = FALSE CLEAR FORM CALL dsprmd002() COMMAND "Salir" EXIT MENU END MENU END FUNCTION FUNCTION dsprad002() LET dstb01.no_solicitud= NULL LET dstb01.programa = NULL LET dstb01.numero_act = 0 LET dstb01.descripcion = NULL LET dstb01.objetivo1 = NULL LET dstb01.objetivo2 = NULL INPUT BY NAME dstb01.programa THRU dstb01.objetivo2 WITHOUT DEFAULTS AFTER FIELD no_solicitud SELECT UNIQUE no_solicitud FROM dstb00001 WHERE no_solicitud = dstb01.no_solicitud and cod_sistema = dstb01.cod_sistema and status_t is null IF status != notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD no_solicitud END IF AFTER FIELD programa IF dstb01.programa IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD programa END IF LET dstb01.numero_act = 0 SELECT MAX(a.numero_act) INTO dstb01.numero_act FROM dstb00001 a WHERE a.programa = dstb01.programa AND a.status_t IS NULL SELECT UNIQUE descripcion,fecha_creacion INTO dstb01.descripcion,dstb01.fecha_creacion FROM dstb00001 a WHERE a.programa = dstb01.programa AND a.numero_act = 1 AND a.status_t IS NULL IF dstb01.numero_act IS NULL OR dstb01.numero_act = 0 THEN LET dstb01.numero_act = 0 ELSE SELECT UNIQUE numero_act INTO dstb01.numero_act FROM dstb00001 a WHERE a.programa = dstb01.programa AND a.numero_act = dstb01.numero_act DISPLAY BY NAME dstb01.cod_sistema THRU dstb01.numero_act END IF LET dstb01.numero_act = dstb01.numero_act + 1 DISPLAY BY NAME dstb01.numero_act,dstb01.descripcion, dstb01.fecha_creacion AFTER FIELD cod_sistema IF dstb01.cod_sistema IS NULL THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD cod_sistema END IF {IF dstb01.cod_sistema != dstb01.programa[1,2] THEN LET numero_msg = 242 CALL msg(numero_msg) NEXT FIELD cod_sistema END IF} SELECT a.desc_sistema INTO dstb03.desc_sistema FROM dstb00003 a WHERE a.cod_sistema = dstb01.cod_sistema AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sistema END IF DISPLAY BY NAME dstb03.desc_sistema AFTER FIELD num_emp IF dstb01.num_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb01.num_emp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME nombre BEFORE FIELD fecha_creacion IF dstb01.numero_act > 1 THEN NEXT FIELD fecha_modificacion END IF AFTER FIELD fecha_creacion IF dstb01.fecha_creacion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_creacion END IF IF dstb01.fecha_creacion > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha_creacion END IF BEFORE FIELD fecha_modificacion IF dstb01.numero_act = 1 THEN NEXT FIELD descripcion END IF AFTER FIELD fecha_modificacion IF dstb01.fecha_modificacion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_modificacion END IF IF dstb01.fecha_modificacion > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha_modificacion END IF IF dstb01.fecha_modificacion < dstb01.fecha_creacion THEN LET numero_msg = 241 CALL msg(numero_msg) NEXT FIELD fecha_modificacion END IF NEXT FIELD objetivo1 AFTER FIELD descripcion IF dstb01.descripcion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descripcion END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET opt1 = "A" CALL entradas001() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CALL procesos001() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CALL salidas001() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CALL tablas001() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF INSERT INTO dstb00001 VALUES(dstb01.*) UPDATE dstb00001 SET (us_crea,fech_crea) = (USER,CURRENT) WHERE @programa = dstb01.programa AND @numero_act = dstb01.numero_act IF idx > idx1 THEN LET maximo = idx ELSE LET maximo = idx1 END IF IF maximo > idx2 THEN LET maximo = maximo ELSE LET maximo = idx2 END IF LET p = 0 FOR j = 1 TO maximo IF (arr_ent[j] IS NULL OR arr_ent[j] = " ") AND (arr_pro[j] IS NULL OR arr_pro[j] = " ") AND (arr_sal[j] IS NULL OR arr_sal[j] = " ") THEN LET p = p ELSE LET p = p + 1 INSERT INTO dstb00002 VALUES (dstb01.programa,dstb01.numero_act,p, arr_ent[j],arr_pro[j],arr_sal[j],NULL,USER, CURRENT,USER,CURRENT) {LET arr_ent[j] = " " LET arr_pro[j] = " " LET arr_sal[j] = " "} END IF END FOR FOR j = 1 TO idx3 IF arr_tab[j] IS NOT NULL THEN IF arr_tab[j] != " " THEN INSERT INTO dstb00006 VALUES (dstb01.programa,dstb01.numero_act, arr_tab[j],NULL,USER,CURRENT,NULL,NULL) LET arr_tab[j] = " " END IF END IF END FOR # Impresion del documento cuando se esta creando el programa PROMPT "Desea Imprimir Este Documento (S/N)? " FOR CHAR opcion LET opcion = upshift(opcion) IF opcion = "S" THEN START REPORT reporte4 TO PRINTER FOR idx = 1 TO 60 OUTPUT TO REPORT reporte4(dstb01.programa,dstb01.numero_act,p, arr_ent[idx],arr_pro[idx],arr_sal[idx]) END FOR FINISH REPORT reporte4 END IF #----------------------------------------------------------------------------- LET numero_msg = 1 CALL msg(numero_msg) END FUNCTION FUNCTION dsprmd002() CONSTRUCT criterio ON a.programa,a.cod_sistema,a.no_solicitud,a.num_emp, a.numero_act FROM programa,cod_sistema,no_solicitud,num_emp,numero_act IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET selec = "SELECT UNIQUE a.* FROM dstb00001 a WHERE a.status_t IS NULL AND ", criterio CLIPPED," ORDER BY 1" PREPARE comando FROM selec DECLARE busca SCROLL CURSOR FOR comando OPEN busca FETCH FIRST busca INTO dstb01.* IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb01.num_emp LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME dstb01.programa THRU dstb01.numero_act,nombre MENU "OPCION" COMMAND "Siguiente" FETCH NEXT busca INTO dstb01.* IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb01.num_emp LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME dstb01.programa THRU dstb01.numero_act,nombre COMMAND "Anterior" FETCH PREVIOUS busca INTO dstb01.* IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb01.num_emp LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME dstb01.programa THRU dstb01.numero_act,nombre COMMAND "Primero" FETCH FIRST busca INTO dstb01.* IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb01.num_emp LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME dstb01.programa THRU dstb01.numero_act,nombre COMMAND "Ultimo" FETCH LAST busca INTO dstb01.* IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb01.num_emp LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME dstb01.programa THRU dstb01.numero_act,nombre COMMAND "Escoger" "Presione Para Actualizar Para Cancelar" LET numero_ant = dstb01.no_solicitud INPUT BY NAME dstb01.cod_sistema THRU dstb01.objetivo2 WITHOUT DEFAULTS AFTER FIELD no_solicitud IF dstb01.no_solicitud != numero_ant THEN SELECT UNIQUE no_solicitud FROM dstb00003 WHERE no_solicitud = dstb01.no_solicitud and cod_sistema = dstb01.cod_sistema and status_t is null IF status != notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD no_solicitud END IF END IF AFTER FIELD cod_sistema IF dstb01.cod_sistema IS NULL THEN LET numero_msg = 2 CALL msg(numero_msg) NEXT FIELD cod_sistema END IF {IF dstb01.cod_sistema != dstb01.programa[1,2] THEN LET numero_msg = 242 CALL msg(numero_msg) NEXT FIELD cod_sistema END IF} SELECT a.desc_sistema INTO dstb03.desc_sistema FROM dstb00003 a WHERE a.cod_sistema = dstb01.cod_sistema AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_sistema END IF DISPLAY BY NAME dstb03.desc_sistema AFTER FIELD num_emp IF dstb01.num_emp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_emp END IF SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb01.num_emp IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_emp END IF LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED DISPLAY BY NAME nombre BEFORE FIELD fecha_creacion IF dstb01.numero_act > 1 THEN NEXT FIELD fecha_modificacion END IF AFTER FIELD fecha_creacion IF dstb01.fecha_creacion IS NULL THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD fecha_creacion END IF IF dstb01.fecha_creacion > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha_creacion END IF BEFORE FIELD fecha_modificacion IF dstb01.numero_act = 1 THEN NEXT FIELD descripcion END IF AFTER FIELD fecha_modificacion IF dstb01.fecha_modificacion IS NULL THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD fecha_modificacion END IF IF dstb01.fecha_modificacion > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha_modificacion END IF IF dstb01.fecha_modificacion < dstb01.fecha_creacion THEN LET numero_msg = 241 CALL msg(numero_msg) NEXT FIELD fecha_modificacion END IF NEXT FIELD objetivo1 AFTER FIELD descripcion IF dstb01.descripcion IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descripcion END IF END INPUT IF int_flag THEN LET numero_msg = 16 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET opt1 = "C" CALL entradas001() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CALL procesos001() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CALL salidas001() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CALL tablas001() IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF UPDATE dstb00001 SET dstb00001.* = dstb01.* WHERE @programa = dstb01.programa AND @numero_act=dstb01.numero_act UPDATE dstb00001 SET (us_mod,fech_mod) = (USER,CURRENT) WHERE @programa = dstb01.programa AND @numero_act=dstb01.numero_act DELETE FROM dstb00002 WHERE @programa = dstb01.programa AND @numero_act=dstb01.numero_act DELETE FROM dstb00006 WHERE @programa = dstb01.programa AND @numero_act=dstb01.numero_act LET maximo = 0 IF idx > idx1 THEN LET maximo = idx ELSE LET maximo = idx1 END IF IF maximo > idx2 THEN LET maximo = maximo ELSE LET maximo = idx2 END IF LET p = 0 FOR j = 1 TO maximo IF (arr_ent[j] IS NULL OR arr_ent[j] = " ") AND (arr_pro[j] IS NULL OR arr_pro[j] = " ") AND (arr_sal[j] IS NULL OR arr_sal[j] = " ") THEN LET p = p ELSE LET p = p + 1 INSERT INTO dstb00002 VALUES (dstb01.programa,dstb01.numero_act,p, arr_ent[j],arr_pro[j],arr_sal[j],NULL,USER, CURRENT,NULL,NULL) END IF END FOR FOR j = 1 TO idx3 IF arr_tab[j] IS NOT NULL THEN IF arr_tab[j] != " " THEN INSERT INTO dstb00006 VALUES (dstb01.programa,dstb01.numero_act, arr_tab[j],NULL,USER,CURRENT,NULL,NULL) LET arr_tab[j] = " " END IF END IF END FOR # Impresion del documento cuando se esta modificando el programa PROMPT "Desea Imprimir Este Documento (S/N)? " FOR CHAR opcion LET opcion = upshift(opcion) IF opcion = "S" THEN START REPORT reporte4 TO PRINTER FOR idx = 1 TO maximo OUTPUT TO REPORT reporte4(dstb01.programa,dstb01.numero_act,p, arr_ent[idx],arr_pro[idx],arr_sal[idx]) END FOR FINISH REPORT reporte4 END IF #----------------------------------------------------------------------------- ERROR "(13) ACTUALIZACION EXITOSA" COMMAND KEY ("L") "eLiminar" UPDATE dstb00001 SET (status_t,us_mod,fech_mod) = ("E",USER,CURRENT) WHERE @programa = dstb01.programa AND @numero_act=dstb01.numero_act UPDATE dstb00002 SET (status_t,us_mod,fech_mod) = ("E",USER,CURRENT) WHERE @programa = dstb01.programa AND @numero_act=dstb01.numero_act UPDATE dstb00006 SET (status_t,us_mod,fech_mod) = ("E",USER,CURRENT) WHERE @programa = dstb01.programa AND @numero_act=dstb01.numero_act ERROR "(39) REGISTRO ELIMINADO" COMMAND "Retornar" EXIT MENU END MENU END FUNCTION FUNCTION entradas001() OPEN WINDOW dsprwd001 AT 11,4 WITH FORM "dsfmwd001" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST,MESSAGE LINE LAST -1) MESSAGE "Ctrl-F Llena linea" FOR i = 1 TO 200 LET arr_ent[i] = " " END FOR IF opt1 = "C" THEN LET selec1 = "SELECT a.linea_no,a.entradas FROM dstb00002 a ", "WHERE a.programa = ? AND a.numero_act = ? AND ", " a.entradas IS NOT NULL ORDER BY 1 " PREPARE com_a FROM selec1 DECLARE busca1 CURSOR FOR com_a OPEN busca1 USING dstb01.programa,dstb01.numero_act LET p = 1 WHILE STATUS != NOTFOUND FETCH busca1 INTO linea_no[p],arr_ent[p] IF STATUS = NOTFOUND THEN EXIT WHILE END IF LET p = p + 1 END WHILE CALL SET_COUNT(p - 1) END IF INPUT ARRAY arr_ent WITHOUT DEFAULTS FROM arr_ent1.* # Esta parte es para facilitar insertar lineas ON KEY(CONTROL-O) LET idx = arr_count() WHILE curr <= idx LET arr_ent[idx+1] = arr_ent[idx] LET idx = idx - 1 END WHILE LET arr_ent[curr] = null FOR idx = curr TO fila DISPLAY arr_ent[idx] TO arr_ent1[idx].arr_ent END FOR # Marca el bloque para mover ON KEY(CONTROL-P) LET k1 = curr ON KEY(CONTROL-B) LET k2 = curr ON KEY(CONTROL-U) LET k3 = curr FOR idx = k1 TO k2 LET arr_ent[k3] = arr_ent[idx] LET k3 = k3 + 1 END FOR CALL SET_COUNT(k3) ON KEY(CONTROL-F) LET arr_ent[curr] = "-----------------------------------------------------------" DISPLAY arr_ent[curr] TO arr_ent1[fila].arr_ent BEFORE ROW LET curr = ARR_CURR() LET fila = SCR_LINE() AFTER FIELD arr_ent IF arr_ent[curr] IS NULL THEN LET arr_ent[curr] = NULL END IF LET idx = 0 FOR p = 1 TO ARR_COUNT() LET idx = idx + 1 END FOR END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) END IF CLOSE WINDOW dsprwd001 END FUNCTION FUNCTION procesos001() OPEN WINDOW dsprwd002 AT 11,4 WITH FORM "dsfmwd002" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST,MESSAGE LINE LAST -1) MESSAGE "Ctrl-F Llena linea" FOR i = 1 TO 200 LET arr_pro[i] = " " END FOR IF opt1 = "C" THEN LET selec1 = "SELECT a.linea_no,a.proceso FROM dstb00002 a ", "WHERE a.programa = ? AND a.numero_act = ? AND ", " a.proceso IS NOT NULL ORDER BY 1 " PREPARE com_2 FROM selec1 DECLARE busca2 CURSOR FOR com_2 OPEN busca2 USING dstb01.programa,dstb01.numero_act LET p = 1 WHILE STATUS != NOTFOUND FETCH busca2 INTO linea_no[p],arr_pro[p] IF STATUS = NOTFOUND THEN EXIT WHILE END IF LET p = p + 1 END WHILE CALL SET_COUNT(p-1) END IF INPUT ARRAY arr_pro WITHOUT DEFAULTS FROM arr_pro1.* ON KEY(CONTROL-O) LET idx = arr_count() WHILE curr <= idx LET arr_pro[idx+1] = arr_pro[idx] LET idx = idx - 1 END WHILE LET arr_pro[curr] = null FOR idx = curr TO fila DISPLAY arr_pro[idx] TO arr_pro1[idx].arr_pro END FOR # Marca el bloque para mover ON KEY(CONTROL-P) LET k1 = curr ON KEY(CONTROL-B) LET k2 = curr ON KEY(CONTROL-U) LET k3 = curr FOR idx = k1 TO k2 LET arr_pro[k3] = arr_pro[idx] LET k3 = k3 + 1 END FOR CALL SET_COUNT(k3) ON KEY(CONTROL-F) LET arr_pro[curr] = "-----------------------------------------------------------" DISPLAY arr_pro[curr] TO arr_pro1[fila].arr_pro BEFORE ROW LET curr = ARR_CURR() LET fila = SCR_LINE() AFTER FIELD arr_pro LET idx1 = 0 FOR p = 1 TO ARR_COUNT() LET idx1 = idx1 + 1 END FOR END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) END IF CLOSE WINDOW dsprwd002 END FUNCTION FUNCTION salidas001() OPEN WINDOW dsprwd003 AT 11,4 WITH FORM "dsfmwd003" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST,MESSAGE LINE LAST -1) MESSAGE "Ctrl-F Llena linea" FOR i = 1 TO 200 LET arr_sal[i] = " " END FOR IF opt1 = "C" THEN LET selec1 = "SELECT a.linea_no,a.salida FROM dstb00002 a ", "WHERE a.programa = ? AND a.numero_act = ? AND ", " a.salida IS NOT NULL ORDER BY 1 " PREPARE com_s FROM selec1 DECLARE busca3 CURSOR FOR com_s OPEN busca3 USING dstb01.programa,dstb01.numero_act LET p = 1 WHILE STATUS != NOTFOUND FETCH busca3 INTO linea_no[p],arr_sal[p] IF STATUS = NOTFOUND THEN EXIT WHILE END IF LET p = p + 1 END WHILE CALL SET_COUNT(p - 1) END IF INPUT ARRAY arr_sal WITHOUT DEFAULTS FROM arr_sal1.* ON KEY(CONTROL-O) LET idx = arr_count() WHILE curr <= idx LET arr_sal[idx+1] = arr_sal[idx] LET idx = idx - 1 END WHILE LET arr_sal[curr] = null FOR idx = curr TO fila DISPLAY arr_sal[idx] TO arr_sal1[idx].arr_sal END FOR # Marca el bloque para mover ON KEY(CONTROL-P) LET k1 = curr ON KEY(CONTROL-B) LET k2 = curr ON KEY(CONTROL-U) LET k3 = curr FOR idx = k1 TO k2 LET arr_sal[k3] = arr_sal[idx] LET k3 = k3 + 1 END FOR CALL SET_COUNT(k3) ON KEY(CONTROL-F) LET arr_sal[curr] = "-----------------------------------------------------------" DISPLAY arr_sal[curr] TO arr_sal1[fila].arr_sal BEFORE ROW LET curr = ARR_CURR() LET fila = SCR_LINE() AFTER FIELD arr_sal IF arr_sal[curr] IS NULL OR arr_sal[curr] = " " THEN LET arr_sal[curr] = NULL END IF LET idx2 = 0 FOR p = 1 TO ARR_COUNT() LET idx2 = idx2 + 1 END FOR END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) END IF CLOSE WINDOW dsprwd003 END FUNCTION FUNCTION tablas001() OPEN WINDOW dsprwd006 AT 11,4 WITH FORM "dsfmwd006" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST) IF opt1 = "C" THEN LET selec1 = "SELECT a.tabla FROM dstb00006 a ", "WHERE a.programa = ? AND a.numero_act = ? ORDER BY 1 " ELSE LET selec1 = "SELECT a.tabla FROM dstb00006 a ", "WHERE a.programa = ? AND a.numero_act = ?-1 ORDER BY 1 " END IF IF dstb01.numero_act = 1 AND opt1 = "A" THEN INITIALIZE arr_tab TO NULL ELSE PREPARE com_t FROM selec1 DECLARE busca4 CURSOR FOR com_t OPEN busca4 USING dstb01.programa,dstb01.numero_act LET p = 1 WHILE STATUS != NOTFOUND FETCH busca4 INTO arr_tab[p] IF STATUS = NOTFOUND THEN EXIT WHILE END IF LET p = p + 1 END WHILE CALL SET_COUNT(p - 1) END IF INPUT ARRAY arr_tab WITHOUT DEFAULTS FROM arr_tab1.* BEFORE ROW LET curr = ARR_CURR() LET fila = SCR_LINE() AFTER FIELD arr_tab IF arr_tab[curr] IS NOT NULL THEN SELECT UNIQUE tabname FROM systables WHERE tabname = arr_tab[curr] IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD arr_tab END IF FOR idx3 = 1 TO ARR_COUNT() IF idx3 != curr THEN IF arr_tab[curr] = arr_tab[idx3] THEN LET numero_msg = 21 CALL msg(numero_msg) NEXT FIELD arr_tab END IF END IF LET idx3 = idx3 END FOR END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) END IF CLOSE WINDOW dsprwd006 END FUNCTION REPORT reporte4(x) DEFINE x RECORD programa LIKE dstb00001.programa, numero_act LIKE dstb00001.numero_act, linea_no LIKE dstb00002.linea_no, entradas LIKE dstb00002.entradas, proceso LIKE dstb00002.proceso, salida LIKE dstb00002.salida END RECORD DEFINE entr1 ARRAY[200] OF CHAR(60) DEFINE proc1 ARRAY[200] OF CHAR(60) DEFINE sali1 ARRAY[200] OF CHAR(60) DEFINE sistema CHAR(35) DEFINE tabla1 CHAR(9) DEFINE l INTEGER DEFINE negrillas_on,negrillas_off,comp_on,comp_off,normal CHAR(2) DEFINE hora char(5) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 ORDER BY x.programa,x.numero_act,x.linea_no FORMAT PAGE HEADER LET negrillas_on = ASCII 27,ASCII 69 LET negrillas_off = ASCII 27,ASCII 70 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET normal = ASCII 27, ASCII 80 LET hora = TIME PRINT COLUMN 1, negrillas_on PRINT COLUMN 1, "dsprmt002", COLUMN 17, "R A Y . O . V A C D O M I N I C A N A, S. A.", COLUMN 73, "Pag. ", PAGENO USING "###" PRINT COLUMN 17, " GERENCIA DE INFORMATICA", COLUMN 73, TODAY USING "dd/mm/yyyy" PRINT COLUMN 17, " CREACION / MODIFICACION DE PROGRAMAS", COLUMN 76, hora SKIP 1 LINE BEFORE GROUP OF x.programa LET sistema = NULL SELECT a.desc_sistema INTO sistema FROM dstb00003 a WHERE a.cod_sistema = dstb01.cod_sistema SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a WHERE a.num_emp = dstb01.num_emp LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED PRINT COLUMN 1, "----------------------------------------------------------", "----------------------" PRINT COLUMN 1, "NOMBRE DEL PROGRAMA: ", x.programa PRINT COLUMN 1, "SISTEMA : ", sistema CLIPPED PRINT COLUMN 1, "PROGRAMADOR: ", "(",dstb01.num_emp USING "####",") ", nombre CLIPPED, COLUMN 40, "NO.SOLICITUD : ", dstb01.no_solicitud using "###" PRINT COLUMN 1, "FECHA CREACION : ", dstb01.fecha_creacion USING "dd/mm/yyyy", COLUMN 40, "ACTUALIZACION NO.: ", x.numero_act using "###" IF x.numero_act > 1 THEN PRINT COLUMN 1, "FECHA MODIFICACION : ", dstb01.fecha_modificacion USING "dd/mm/yyyy" END IF PRINT COLUMN 1, "----------------------------------------------------------", "----------------------" PRINT negrillas_off BEFORE GROUP OF x.numero_act LET j = 0 ON EVERY ROW IF j IS NULL THEN LET j = 0 END IF LET j = j + 1 {LET entr1[j] = NULL LET proc1[j] = NULL LET sali1[j] = NULL } LET entr1[j] = x.entradas LET proc1[j] = x.proceso LET sali1[j] = x.salida AFTER GROUP OF x.numero_act PRINT negrillas_on PRINT COLUMN 1, "1. - DESCRIPCION DEL PROGRAMA: " PRINT COLUMN 6, dstb01.descripcion SKIP 1 LINE PRINT COLUMN 1, "2. - OBJETIVO (S): : " PRINT COLUMN 6, dstb01.objetivo1 PRINT COLUMN 6, dstb01.objetivo2 SKIP 1 LINE PRINT COLUMN 1, "3. - DESCRIPCION PROCESAL: " SKIP 1 LINE PRINT COLUMN 1, " 3-1. ENTRADA (S): " FOR m = 1 TO j IF entr1[m] IS NOT NULL THEN IF entr1[m] != " " THEN PRINT COLUMN 11, entr1[m] END IF END IF END FOR SKIP 1 LINE PRINT COLUMN 1, " 3-2. PROCESO: " FOR m = 1 TO j IF proc1[m] IS NOT NULL THEN IF proc1[m] != " " THEN PRINT COLUMN 11, proc1[m] END IF END IF END FOR SKIP 1 LINE PRINT COLUMN 1, " 3-3. SALIDA (S): " FOR m = 1 TO j IF sali1[m] IS NOT NULL THEN IF sali1[m] != " " THEN PRINT COLUMN 11, sali1[m] END IF END IF END FOR SKIP 1 LINE DECLARE busca_tb CURSOR FOR SELECT a.tabla FROM dstb00006 a WHERE a.programa = x.programa AND a.numero_act = x.numero_act AND a.status_t IS NULL ORDER BY 1 PRINT COLUMN 1, "4. - TABLA (S) QUE UTILIZA: " LET l = 6 LET j = 0 LET m = 0 FOREACH busca_tb INTO tabla1 LET j = j + 1 LET m = m + 1 IF m = 1 THEN PRINT COLUMN l, tabla1 CLIPPED; LET l = l + 9 ELSE PRINT COLUMN l, ", ",tabla1 CLIPPED; LET l = l + 11 END IF IF j = 5 THEN PRINT COLUMN l," " LET m = 0 LET l = 6 LET j = 0 END IF END FOREACH PRINT " " SKIP 1 LINE PRINT COLUMN 1, "REVISADO POR: ","_____________", COLUMN 50, "EN FECHA : ","___/___/___" SKIP 1 LINE PRINT COLUMN 1, "PASADO POR : ","_____________", COLUMN 50, "EN FECHA : ","___/___/___" SKIP 1 LINE PRINT COLUMN 1, "ENTREGADO POR : ","_____________", COLUMN 50, "ENTREGA NUM : ","_____________" SKIP 1 LINE PAGE TRAILER PRINT " " END REPORT