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

637 lines
18 KiB
Plaintext

#######################################################################
# SISTEMA : DOCUMENTACION DE SISTEMA
# PROGRAMA : DSPRMT004.4GL
# OBJETIVO : Creacion y Documentacion de Tablas.
# AUTOR : Tadeo A. Ferreras F.
# FECHA : JUNIO 10, 1995
########################################################################
DATABASE rayovac
GLOBALS
"dsprgb000.4gl"
FUNCTION dsprmt004()
OPTIONS
FORM LINE 8,
ERROR LINE 23,
PROMPT LINE 23
CALL pantalla()
OPEN FORM dsfmmt004 FROM "dsfmmt004"
DISPLAY FORM dsfmmt004
DISPLAY "dsprmt004" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Creacion y Documentacion de Tabla" AT 6,23 ATTRIBUTE(BLACK)
MENU "OPCION"
COMMAND "Adicionar-Documentar"
"Presione <ESC> para Grabar <Ctrl-C> Para Cancelar"
LET int_flag = FALSE
CLEAR FORM
CALL dsprad004()
COMMAND "Consulta-Modificar"
"Presione <ESC> para Actualizar <Ctrl-C> Para Cancelar"
LET int_flag = FALSE
CLEAR FORM
CALL dsprmd004()
COMMAND "Salir"
EXIT MENU
END MENU
END FUNCTION
FUNCTION dsprad004()
LET dstb05.tabla = NULL
LET dstb05.descripcion = NULL
INPUT BY NAME dstb05.* WITHOUT DEFAULTS
AFTER FIELD tabla
IF dstb05.tabla IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tabla
END IF
LET dstb05.tabla = dstb05.tabla CLIPPED
SELECT UNIQUE a.created INTO dstb05.fecha_creacion FROM systables a
WHERE a.tabname = dstb05.tabla
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tabla
END IF
SELECT UNIQUE a.tabla FROM dstb00005 a
WHERE a.tabla = dstb05.tabla
IF STATUS != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
NEXT FIELD tabla
END IF
LET tab_1 = dstb05.tabla[1,2]
LET tab_1 = UPSHIFT(tab_1)
SELECT a.desc_sistema INTO dstb03.desc_sistema FROM dstb00003 a
WHERE a.cod_sistema = tab_1
IF STATUS = NOTFOUND THEN
LET numero_msg = 246
CALL msg(numero_msg)
NEXT FIELD tabla
END IF
#DISPLAY BY NAME dstb00003.desc_sistema
SELECT MAX(a.numero_act) INTO dstb05.numero_act FROM dstb00005 a
WHERE a.tabla = dstb05.tabla
IF dstb05.numero_act IS NULL THEN
LET dstb05.numero_act = 0
END IF
LET dstb05.numero_act = dstb05.numero_act + 1
DISPLAY BY NAME dstb05.numero_act
AFTER FIELD descripcion
IF dstb05.descripcion IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD descripcion
END IF
AFTER FIELD num_emp1
IF dstb05.num_emp1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp1
END IF
SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a
WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp1
END IF
LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED
DISPLAY BY NAME nombre
BEFORE FIELD fecha_creacion
DISPLAY BY NAME dstb05.fecha_creacion
AFTER FIELD fecha_creacion
IF dstb05.fecha_creacion IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_creacion
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT INPUT
END INPUT
#IF dstb05.numero_act = 1 THEN
DECLARE busca1 CURSOR FOR
SELECT a.colname,a.colname,a.colname,a.colname,a.colname,a.colname,
a.colno
FROM systables b,syscolumns a
WHERE a.tabid = b.tabid and b.tabname = dstb05.tabla
ORDER BY 7
LET idx = 1
FOREACH busca1 INTO arr_tabla1[idx].*
LET arr_tabla1[idx].campo = UPSHIFT(arr_tabla1[idx].campo)
SELECT a.descrip_campo[1,50],a.descrip_campo[51,100],
a.descrip_campo[101,150],a.tipo,a.longitud
INTO arr_tabla1[idx].descrip_campo1,arr_tabla1[idx].descrip_campo2,
arr_tabla1[idx].descrip_campo3,arr_tabla1[idx].tipo,
arr_tabla1[idx].longitud
FROM dstb00005 a
WHERE a.numero_act = dstb05.numero_act - 1 AND
a.tabla = dstb05.tabla AND a.campo = arr_tabla1[idx].campo
LET idx = idx + 1
END FOREACH
CALL SET_COUNT(idx - 1)
INPUT ARRAY arr_tabla1 WITHOUT DEFAULTS FROM scr_tabla.*
BEFORE ROW
LET curr = ARR_CURR()
LET fila = SCR_LINE()
AFTER FIELD campo
IF arr_tabla1[curr].campo IS NOT NULL THEN
FOR idx = 1 TO ARR_COUNT()
IF curr != idx THEN
IF arr_tabla1[idx].campo = arr_tabla1[curr].campo THEN
LET numero_msg = 21
CALL msg(numero_msg)
NEXT FIELD campo
END IF
END IF
END FOR
END IF
BEFORE FIELD tipo
CALL tipo_campo()
LET arr_tabla1[curr].tipo = tipo_1
DISPLAY arr_tabla1[curr].tipo TO scr_tabla[fila].tipo
AFTER FIELD tipo
IF arr_tabla1[curr].campo IS NOT NULL THEN
IF arr_tabla1[curr].tipo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
IF arr_tabla1[curr].tipo = "DATETIME" THEN
CALL longitud_campo()
LET arr_tabla1[curr].longitud = longitud_1
END IF
DISPLAY arr_tabla1[curr].longitud TO scr_tabla[fila].longitud
END IF
AFTER FIELD longitud
IF arr_tabla1[curr].tipo IS NOT NULL THEN
IF arr_tabla1[curr].longitud IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD longitud
END IF
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT INPUT
END INPUT
LET j = 0
FOR idx = 1 TO ARR_COUNT()
IF arr_tabla1[idx].campo IS NOT NULL THEN
LET descrip_campo6 = " "
LET descrip_campo6 = arr_tabla1[idx].descrip_campo1,
arr_tabla1[idx].descrip_campo2,
arr_tabla1[idx].descrip_campo3
LET j = j + 1
INSERT INTO dstb00005 VALUES (dstb05.tabla,dstb05.descripcion,
dstb05.num_emp1,dstb05.fecha_creacion,
dstb05.numero_act,arr_tabla1[idx].campo,
descrip_campo6,arr_tabla1[idx].tipo,
arr_tabla1[idx].longitud,j,NULL,USER,CURRENT,
NULL,NULL)
END IF
LET arr_tabla1[idx].campo = " "
LET arr_tabla1[idx].descrip_campo1 = " "
LET arr_tabla1[idx].descrip_campo2 = " "
LET arr_tabla1[idx].descrip_campo3 = " "
LET arr_tabla1[idx].tipo = " "
LET arr_tabla1[idx].longitud = " "
END FOR
{
LABEL opp:
PROMPT "Desea Crear Tabla [S/N]?..." FOR CHAR opcion1
LET opcion1 = UPSHIFT(opcion1)
IF opcion1 != "S" AND opcion1 != "N" OR opcion1 IS NULL THEN
GOTO opp
END IF
IF opcion1 = "S" THEN
LET crear1 = NULL
FOR idx = 1 TO ARR_COUNT()
IF arr_tabla1[idx].campo IS NOT NULL THEN
LET crear1 = crear1 CLIPPED," ",arr_tabla1[idx].campo CLIPPED," ",
arr_tabla1[idx].tipo CLIPPED," "
IF arr_tabla1[idx].tipo = "CHAR" OR
arr_tabla1[idx].tipo = "DECIMAL" THEN
LET crear1 = "(",arr_tabla1[idx].longitud CLIPPED,")"
END IF
IF arr_tabla1[idx].tipo = "DATETIME" THEN
LET crear1 = arr_tabla1[idx].longitud CLIPPED
END IF
LET crear1 = crear1 CLIPPED,","
END IF
END FOR
IF crear1 IS NOT NULL THEN
LET crear1 = crear1 CLIPPED," status_t CHAR(1), us_crea CHAR(9), ",
" fech_crea DATETIME YEAR TO MINUTE, us_mod CHAR(9), ",
" fech_mod DATETIME YEAR TO MINUTE"
END IF
LET crear = "CREATE TABLE ",dstb05.tabla CLIPPED," ( ",crear1 CLIPPED," )"
PREPARE actt FROM crear
EXECUTE actt
END IF
}
LET numero_msg = 1
CALL msg(numero_msg)
END FUNCTION
FUNCTION dsprmd004()
CONSTRUCT criterio ON a.tabla,a.descripcion,a.num_emp1,a.fecha_creacion,
a.numero_act
FROM tabla,descripcion,num_emp1,fecha_creacion,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.tabla,a.descripcion,a.num_emp1,a.fecha_creacion, ",
" a.numero_act ",
"FROM dstb00005 a WHERE a.status_t IS NULL AND ",criterio CLIPPED,
"ORDER BY 1,5"
PREPARE comando FROM selec
DECLARE busca SCROLL CURSOR FOR comando
OPEN busca
FETCH FIRST busca INTO dstb05.*
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 = dstb05.num_emp1 AND a.departamento >= 7000
LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED
DISPLAY BY NAME dstb05.*,nombre
MENU "OPCION"
COMMAND "Siguiente"
FETCH NEXT busca INTO dstb05.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a
WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000
LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED
DISPLAY BY NAME dstb05.*,nombre
COMMAND "Anterior"
FETCH PREVIOUS busca INTO dstb05.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a
WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000
LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED
DISPLAY BY NAME dstb05.*,nombre
COMMAND "Primero"
FETCH FIRST busca INTO dstb05.*
SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a
WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000
LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED
DISPLAY BY NAME dstb05.*,nombre
COMMAND "Ultimo"
FETCH LAST busca INTO dstb05.*
SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a
WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000
LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED
DISPLAY BY NAME dstb05.*,nombre
COMMAND "Escoger"
INPUT BY NAME dstb05.descripcion THRU dstb05.fecha_creacion WITHOUT DEFAULTS
AFTER FIELD descripcion
IF dstb05.descripcion IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD descripcion
END IF
AFTER FIELD num_emp1
IF dstb05.num_emp1 IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp1
END IF
SELECT a.nom1_emp,a.apell1_emp INTO nombre1,apellido1 FROM adtb00003 a
WHERE a.num_emp = dstb05.num_emp1 AND a.departamento >= 7000
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp1
END IF
LET nombre = nombre1 CLIPPED," ",apellido1 CLIPPED
DISPLAY BY NAME nombre
AFTER FIELD fecha_creacion
IF dstb05.fecha_creacion IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_creacion
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT INPUT
END INPUT
DECLARE busca4 CURSOR FOR
SELECT a.colname,a.colname,a.colname,a.colname,a.colname,a.colname,
a.colno
FROM systables b,syscolumns a
WHERE a.tabid = b.tabid and b.tabname = dstb05.tabla
ORDER BY 7
LET idx = 1
FOREACH busca4 INTO arr_tabla1[idx].*
LET arr_tabla1[idx].descrip_campo1 = " "
LET arr_tabla1[idx].descrip_campo2 = " "
LET arr_tabla1[idx].descrip_campo3 = " "
LET arr_tabla1[idx].tipo = " "
LET arr_tabla1[idx].longitud = " "
LET arr_tabla1[idx].campo = UPSHIFT(arr_tabla1[idx].campo)
SELECT a.descrip_campo[1,50],a.descrip_campo[51,100],
a.descrip_campo[101,150],a.tipo,a.longitud
INTO arr_tabla1[idx].descrip_campo1,arr_tabla1[idx].descrip_campo2,
arr_tabla1[idx].descrip_campo3,arr_tabla1[idx].tipo,
arr_tabla1[idx].longitud
FROM dstb00005 a
WHERE a.numero_act = dstb05.numero_act AND
a.tabla = dstb05.tabla AND a.campo = arr_tabla1[idx].campo
LET idx = idx + 1
END FOREACH
{DECLARE busca4 CURSOR FOR
SELECT a.campo,a.descrip_campo[1,50],a.descrip_campo[51,100],
a.descrip_campo[101,150],a.tipo,a.longitud,a.secuencia
FROM dstb00005 a
WHERE a.tabla = dstb05.tabla AND a.numero_act = dstb05.numero_act AND
a.status_t IS NULL ORDER BY a.secuencia
LET idx = 1
FOREACH busca4 INTO arr_tabla1[idx].*
LET idx = idx + 1
END FOREACH}
CALL SET_COUNT(idx-1)
INPUT ARRAY arr_tabla1 WITHOUT DEFAULTS FROM scr_tabla.*
BEFORE ROW
LET curr = ARR_CURR()
LET fila = SCR_LINE()
AFTER FIELD campo
IF arr_tabla1[curr].campo IS NOT NULL THEN
FOR idx = 1 TO ARR_COUNT()
IF curr != idx THEN
IF arr_tabla1[idx].campo = arr_tabla1[curr].campo THEN
LET numero_msg = 21
CALL msg(numero_msg)
NEXT FIELD campo
END IF
END IF
END FOR
END IF
BEFORE FIELD tipo
CALL tipo_campo()
LET arr_tabla1[curr].tipo = tipo_1
DISPLAY arr_tabla1[curr].tipo TO scr_tabla[fila].tipo
AFTER FIELD tipo
IF arr_tabla1[curr].campo IS NOT NULL THEN
IF arr_tabla1[curr].tipo IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo
END IF
IF arr_tabla1[curr].tipo = "DATETIME" THEN
CALL longitud_campo()
LET arr_tabla1[curr].longitud = longitud_1
END IF
DISPLAY arr_tabla1[curr].longitud TO scr_tabla[fila].longitud
END IF
AFTER FIELD longitud
IF arr_tabla1[curr].tipo IS NOT NULL THEN
IF arr_tabla1[curr].longitud IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD longitud
END IF
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT INPUT
END INPUT
DELETE FROM dstb00005 WHERE @tabla = dstb05.tabla AND
@numero_act = dstb05.numero_act
LET j = 0
FOR idx = 1 TO ARR_COUNT()
IF arr_tabla1[idx].campo IS NOT NULL THEN
LET descrip_campo6 = " "
LET descrip_campo6 = arr_tabla1[idx].descrip_campo1,
arr_tabla1[idx].descrip_campo2,
arr_tabla1[idx].descrip_campo3
LET j = j + 1
INSERT INTO dstb00005 VALUES (dstb05.tabla,dstb05.descripcion,
dstb05.num_emp1,dstb05.fecha_creacion,
dstb05.numero_act,arr_tabla1[idx].campo,
descrip_campo6,arr_tabla1[idx].tipo,
arr_tabla1[idx].longitud,j,NULL,USER,CURRENT,
NULL,NULL)
END IF
LET arr_tabla1[idx].campo = " "
LET arr_tabla1[idx].descrip_campo1 = " "
LET arr_tabla1[idx].descrip_campo2 = " "
LET arr_tabla1[idx].descrip_campo3 = " "
LET arr_tabla1[idx].tipo = " "
LET arr_tabla1[idx].longitud = " "
END FOR
{
LABEL opp:
PROMPT "Desea Crear Tabla [S/N]?..." FOR CHAR opcion1
LET opcion1 = UPSHIFT(opcion1)
IF opcion1 != "S" AND opcion1 != "N" OR opcion1 IS NULL THEN
GOTO opp
END IF
IF opcion1 = "S" THEN
LET crear1 = NULL
FOR idx = 1 TO ARR_COUNT()
IF arr_tabla1[idx].campo IS NOT NULL THEN
LET crear1 = crear1 CLIPPED," ",arr_tabla1[idx].campo CLIPPED," ",
arr_tabla1[idx].tipo CLIPPED," "
IF arr_tabla1[idx].tipo = "CHAR" OR
arr_tabla1[idx].tipo = "DECIMAL" THEN
LET crear1 = "(",arr_tabla1[idx].longitud CLIPPED,")"
END IF
IF arr_tabla1[idx].tipo = "DATETIME" THEN
LET crear1 = arr_tabla1[idx].longitud CLIPPED
END IF
LET crear1 = crear1 CLIPPED,","
END IF
END FOR
IF crear1 IS NOT NULL THEN
LET crear1 = crear1 CLIPPED," status_t CHAR(1), us_crea CHAR(9), ",
" fech_crea DATETIME YEAR TO MINUTE, us_mod CHAR(9), ",
" fech_mod DATETIME YEAR TO MINUTE"
END IF
LET crear = "CREATE TABLE ",dstb05.tabla CLIPPED," ( ",crear1 CLIPPED," )"
PREPARE actt FROM crear
EXECUTE actt
END IF
}
LET numero_msg = 13
CALL msg(numero_msg)
COMMAND KEY ("L") "eLiminar"
UPDATE dstb00005 SET (status_t,us_mod,fech_mod) = ("E",USER,CURRENT)
WHERE @tabla = dstb05.tabla AND @numero_act = dstb05.numero_act
COMMAND "Retornar"
EXIT MENU
END MENU
END FUNCTION
FUNCTION tipo_campo()
OPEN WINDOW dsprwd004 AT 9,4 WITH FORM "dsfmwd004"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST)
LET campo_t[1].tipo_c = "CHAR"
LET campo_t[2].tipo_c = "DATETIME"
LET campo_t[3].tipo_c = "DATE"
LET campo_t[4].tipo_c = "INTEGER"
LET campo_t[5].tipo_c = "SMALLINT"
LET campo_t[6].tipo_c = "DECIMAL"
LET idx = 6
CALL SET_COUNT(idx)
DISPLAY ARRAY campo_t TO campo_s.*
LET curr1 = ARR_CURR()
LET tipo_1 = campo_t[curr1].tipo_c
CLOSE WINDOW dsprwd004
END FUNCTION
FUNCTION longitud_campo()
OPEN WINDOW dsprwd005 AT 9,4 WITH FORM "dsfmwd005"
ATTRIBUTE (BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST)
LET campo_l[1].tipo_l = "YEAR TO YEAR"
LET campo_l[2].tipo_l = "YEAR TO MONTH"
LET campo_l[3].tipo_l = "YEAR TO DAY"
LET campo_l[4].tipo_l = "YEAR TO HOUR"
LET campo_l[5].tipo_l = "YEAR TO MINUTE"
LET campo_l[6].tipo_l = "MONTH TO MONTH"
LET campo_l[7].tipo_l = "MONTH TO DAY"
LET campo_l[8].tipo_l = "MONTH TO HOUR"
LET campo_l[9].tipo_l = "MONTH TO MINUTE"
LET campo_l[10].tipo_l = "DAY TO DAY"
LET campo_l[11].tipo_l = "DAY TO HOUR"
LET campo_l[12].tipo_l = "DAY TO MINUTE"
LET campo_l[13].tipo_l = "HOUR TO HOUR"
LET campo_l[14].tipo_l = "HOUR TO MINUTE"
LET campo_l[15].tipo_l = "MINUTE TO MINUTE"
LET idx = 15
CALL SET_COUNT(idx)
DISPLAY ARRAY campo_l TO campo_s1.*
LET curr1 = ARR_CURR()
LET longitud_1 = campo_l[curr1].tipo_l
CLOSE WINDOW dsprwd005
END FUNCTION