Files
2026-09-22 20:38:51 -04:00

1097 lines
29 KiB
Plaintext

#######################################################################
# 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 <ESC> para Grabar <Ctrl-C> Para Cancelar"
LET int_flag = FALSE
CLEAR FORM
CALL dsprad002()
COMMAND "Consulta-Modificar"
"Presione <ESC> para Actualizar <Ctrl-C> 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 <ESC> Para Actualizar <Ctrl-C> 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