Files
MBS/PROYECTO/addir/adprmt001.4gl
T

346 lines
10 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : ADPRMT001
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Departamentos
PROGRAMADOR : Ing. Betania Guerrero Perez
FECHA REALIZACION : Mayo 19, 1993
------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl"
DEFINE m_estado_a,m_estado_m CHAR(8),
m_depto CHAR(4),
m_depto1 CHAR(1)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL adprmt001()
END MAIN
FUNCTION adprmt001()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM adfmmt001 FROM "adfmmt001"
DISPLAY FORM adfmmt001
DISPLAY "adprmt001" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Departamentos" AT 6,36 ATTRIBUTE(BLACK)
MENU
ON ACTION nuevo
let int_flag = false
INITIALIZE emplea.* TO NULL
CALL adpcad001()
ON ACTION buscar
let int_flag = false
CALL adpcmf001()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION adpcad001()
{WHENEVER ERROR CONTINUE}
## CAPTURA LOS DATOS QUE VA A CONTENER EL REGISTRO
INPUT BY NAME depto.* #,m_estado_a,m_estado_m
## VERIFICA QUE EL CODIGO NO EXISTA EN EL CATALOGO DE DEPARTAMENTO. SI EXISTE,
## ENTONCES DESPLEGA LOS DATOS DEL REGISTRO EXISTENTE.
AFTER FIELD departamento
IF depto.departamento IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD departamento
ELSE
SELECT * INTO depto.* FROM adtb00001
WHERE departamento = depto.departamento
IF status >= 0 THEN
IF status != NOTFOUND THEN
IF depto.status_t = "E" THEN
LET numero_msg = 36
CALL msg(numero_msg)
NEXT FIELD departamento
END IF
DISPLAY BY NAME depto.*
LET numero_msg = 12
CALL msg(numero_msg)
LET depto.nom_dpto = NULL
NEXT FIELD departamento
END IF
ELSE
{ CALL integridad()}
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
END IF
END IF
AFTER FIELD nom_dpto
IF depto.nom_dpto IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nom_dpto
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
## SI NO HAY NINGUN PROBLEMA SE PROCEDE A INSERTAR EL REGISTRO
IF depto.nom_dpto IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nom_dpto
ELSE
INSERT INTO adtb00001 VALUES (depto.departamento,depto.nom_dpto,
null, SUSER_SNAME (), GETDATE (), null, null)
INSERT INTO adtb00029 VALUES (depto.departamento,m_estado_a,m_estado_m,
depto.departamento,null,SUSER_SNAME(), GETDATE (),null,null)
LET m_depto = depto.departamento
LET m_depto1 = m_depto[1] CLIPPED
{
display " paso "
display "depto ", m_depto1
}
INSERT INTO adtb00033 VALUES (m_depto1,depto.departamento,
depto.nom_dpto,null,SUSER_SNAME (), GETDATE (),
null,null)
LET numero_msg = 1
CALL msg(numero_msg)
CLEAR FORM
LET depto.departamento = NULL
LET depto.nom_dpto = NULL
NEXT FIELD departamento
END IF
AFTER FIELD fech_mod
EXIT INPUT
END INPUT
END FUNCTION
FUNCTION adpcmf001()
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA
## MODIFICACION DE REGISTROS
{WHENEVER ERROR CONTINUE}
CONSTRUCT criterio ON adtb00001.departamento,adtb00001.nom_dpto FROM departamento,nom_dpto
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET SELEC = " SELECT UNIQUE * FROM adtb00001 where ",
" status_t is null and ",
criterio clipped,
" ORDER BY 1"
PREPARE busca FROM selec
{CALL integridad()}
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
DECLARE dato SCROLL CURSOR FOR busca
OPEN dato
FETCH FIRST dato INTO depto.*
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
ELSE
{CALL integridad()}
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
END IF
DISPLAY BY NAME depto.departamento,depto.nom_dpto
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT dato INTO depto.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
CALL busca_contabilidad()
DISPLAY BY NAME depto.departamento,depto.nom_dpto
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS dato INTO depto.*
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
CALL busca_contabilidad()
DISPLAY BY NAME depto.departamento,depto.nom_dpto
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST dato INTO depto.*
CALL busca_contabilidad()
DISPLAY BY NAME depto.departamento,depto.nom_dpto
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST dato INTO depto.*
CALL busca_contabilidad()
DISPLAY BY NAME depto.departamento,depto.nom_dpto
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
IF depto.status_t = "E" THEN
LET numero_msg = 39
CALL msg(numero_msg)
RETURN
END IF
## SE SELECCIONAN LOS CAMPOS QUE SON MODIFICABLES
INPUT BY NAME depto.nom_dpto,
m_estado_a,
m_estado_m WITHOUT DEFAULTS
AFTER FIELD nom_dpto
IF depto.nom_dpto IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nom_dpto
END IF
#### Verifica si el usuario presiono la tecla <Ctrl-C>
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
CLEAR FORM
RETURN
END IF
{ CALL integridad()}
IF bandera = 1 THEN
CLEAR SCREEN
RETURN
END IF
## AQUI SE ACTUALIZA EL REGISTRO
UPDATE adtb00001 SET nom_dpto = depto.nom_dpto,
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE departamento = depto.departamento
UPDATE chequeo SET nom_dpto = depto.nom_dpto
WHERE departamento = depto.departamento
UPDATE adtb00029 SET estado_a = m_estado_a,
estado_m = m_estado_m,
us_mod = SUSER_NAME(),
fech_mod = GETDATE()
WHERE departamento = depto.departamento
UPDATE adtb00033 SET nom_dpto = depto.nom_dpto,
us_mod = SUSER_NAME(),
fech_mod = GETDATE ()
WHERE departamento = depto.departamento
LET numero_msg = 13
CALL msg(numero_msg)
EXIT INPUT
END INPUT
## AQUI SE ELIMINAN LOS REGISTROS
COMMAND KEY ("L") "eLiminar"
UPDATE adtb00001 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE departamento = depto.departamento
UPDATE adtb00033 SET status_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE departamento = depto.departamento
UPDATE adtb00029 SET estatus_t = "E",
us_mod = SUSER_SNAME(),
fech_mod = GETDATE()
WHERE departamento = depto.departamento
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION
FUNCTION busca_contabilidad()
DEFINE arr_cuentas DYNAMIC ARRAY OF RECORD
cuenta_no VARCHAR(10),
descripcion VARCHAR(100),
estado_a VARCHAR(10),
estado_m VARCHAR(10)
END RECORD
DECLARE busca_cuenta CURSOR FOR
SELECT a.cuenta_no,b.descripcion,a.estado_a,a.estado_m
FROM adtb00029 a LEFT OUTER JOIN cgtb00001 b ON a.cuenta_no = b.cuenta_no
WHERE a.departamento = depto.departamento
LET idx = 1
FOREACH busca_cuenta INTO arr_cuentas[idx].*
LET idx = idx + 1
END FOREACH
DISPLAY ARRAY arr_cuentas TO s_cuentas.*
END FUNCTION