Files
MBS/PROYECTOS/irdir/irprmt009.4gl
T

376 lines
14 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : IRPRMT009
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla Maquinas.
PROGRAMADOR : Ing. Juan Fco. Soto.
FECHA REALIZACION : Marzo 2, 1993.
------------------------------------------------------------------
}
GLOBALS "irprgb000.4gl"
DEFINE
# xcuenta VARCHAR(14),
xcodigo_externo VARCHAR(60)
DEFINE desc_activo STRING, id_maintain STRING
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "smarmotech" USER usuarios USING clave
SELECT * INTO p_companias.* FROM companias
CALL irprmt009()
END MAIN
FUNCTION irprmt009()
CLEAR SCREEN
OPTIONS
FORM LINE 9,
ERROR LINE 23,
COMMENT LINE 21
OPEN FORM irfmmt009 FROM "irfmmt009"
DISPLAY FORM irfmmt009
DISPLAY "irprmt009" AT 4,3
DISPLAY "Maquinas" AT 6,35
MENU
{ ON ACTION Adicionar
let int_flag = false
CLEAR FORM
CALL irpcad009()}
ON ACTION buscar
let int_flag = FALSE
CALL irpcmf009()
ON ACTION salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION irpcad009()
# WHENEVER ERROR CONTINUE
## Captura los datos que va a contener el registro
INPUT BY NAME maquinaria.*,xcodigo_externo
BEFORE INPUT
CALL busca_departamento()
NEXT FIELD nombre
AFTER FIELD nombre
IF maquinaria.nombre IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nombre
END IF
AFTER FIELD serie
IF maquinaria.serie IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD serie
END IF
AFTER FIELD id_codigo
SELECT descripcion INTO desc_activo FROM actb00001
WHERE codigo = maquinaria.id_codigo
DISPLAY BY NAME desc_activo
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF maquinaria.serie IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD serie
END IF
IF maquinaria.departamento IS NULL THEN
CALL msg(16)
NEXT FIELD departamento
END IF
IF maquinaria.nombre IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nombre
ELSE
SELECT ISNULL(MAX(codigo),0) INTO maquinaria.codigo FROM irtb00009
LET maquinaria.codigo = maquinaria.codigo + 1
DISPLAY BY NAME maquinaria.codigo
INSERT INTO irtb00009 (codigo,nombre,unidad_med,modelo,serie,fabricante,us_crea,fech_crea,departamento,
codigo_externo, id_codigo)
VALUES (maquinaria.codigo, maquinaria.nombre,
maquinaria.unidad_med,
maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,
usuarios, getdate(),maquinaria.departamento,xcodigo_externo, maquinaria.id_codigo)
IF maquinaria.id_codigo IS NOT NULL THEN
UPDATE actb00001 SET id_codigo = maquinaria.codigo
WHERE codigo = maquinaria.id_codigo
END IF
LET numero_msg = 1
CALL msg(numero_msg)
NEXT FIELD codigo
END IF
AFTER FIELD fech_mod
EXIT INPUT
END INPUT
END FUNCTION
FUNCTION irpcmf009()
## Aqui se prepara para la captura del criterio de seleccion
# WHENEVER ERROR CONTINUE
DEFINE activo INT
CONSTRUCT criterio ON irtb00009.codigo,irtb00009.nombre FROM irtb00009.codigo,nombre
BEFORE CONSTRUCT
CALL busca_departamento()
AFTER CONSTRUCT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
EXIT CONSTRUCT
END CONSTRUCT
LET SELEC = " SELECT codigo,nombre,unidad_med,modelo,serie,fabricante,us_crea,fech_crea,departamento,
codigo_externo, id_codigo FROM irtb00009 where ",
" status_t is null and ",
criterio clipped,
" ORDER BY codigo"
PREPARE busca FROM selec
DECLARE datos SCROLL CURSOR FOR busca
OPEN datos
FETCH FIRST datos INTO maquinaria.codigo,maquinaria.nombre,maquinaria.unidad_med,maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,maquinaria.us_crea,maquinaria.fech_crea,maquinaria.departamento,
xcodigo_externo, maquinaria.id_codigo
IF status >= 0 THEN
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
end IF
SELECT descripcion, id_maintainx INTO desc_activo, id_maintain FROM actb00001 WHERE codigo = maquinaria.id_codigo
IF status = NOTFOUND THEN
INITIALIZE desc_activo, id_maintain TO NULL
END IF
DISPLAY BY NAME maquinaria.codigo,maquinaria.nombre,maquinaria.unidad_med,maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,maquinaria.us_crea,maquinaria.fech_crea,maquinaria.departamento,
xcodigo_externo, maquinaria.id_codigo, desc_activo, id_maintain
MENU "OPCIONES "
COMMAND "Siguiente"
"Presenta en pantalla el proximo registro encontrado"
FETCH NEXT datos INTO maquinaria.codigo,maquinaria.nombre,maquinaria.unidad_med,maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,maquinaria.us_crea,maquinaria.fech_crea,maquinaria.departamento,
xcodigo_externo, maquinaria.id_codigo
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT descripcion, id_maintainx INTO desc_activo, id_maintain FROM actb00001 WHERE codigo = maquinaria.id_codigo
IF STATUS = NOTFOUND THEN
INITIALIZE desc_activo, id_maintain TO NULL
END IF
DISPLAY BY NAME maquinaria.codigo,maquinaria.nombre,maquinaria.unidad_med,maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,maquinaria.us_crea,maquinaria.fech_crea,maquinaria.departamento,
xcodigo_externo, maquinaria.id_codigo,desc_activo, id_maintain
COMMAND "Anterior"
"Presenta en pantalla el registro anterior encontrado"
FETCH PREVIOUS datos INTO maquinaria.codigo,maquinaria.nombre,maquinaria.unidad_med,maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,maquinaria.us_crea,maquinaria.fech_crea,maquinaria.departamento,
xcodigo_externo, maquinaria.id_codigo
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT descripcion, id_maintainx INTO desc_activo, id_maintain FROM actb00001 WHERE codigo = maquinaria.id_codigo
IF STATUS = NOTFOUND THEN
INITIALIZE desc_activo, id_maintain TO NULL
END IF
DISPLAY BY NAME maquinaria.codigo,maquinaria.nombre,maquinaria.unidad_med,maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,maquinaria.us_crea,maquinaria.fech_crea,maquinaria.departamento,
xcodigo_externo, maquinaria.id_codigo, desc_activo, id_maintain
COMMAND "Primero"
"Presenta en pantalla el primer registro encontrado"
FETCH FIRST datos INTO maquinaria.codigo,maquinaria.nombre,maquinaria.unidad_med,maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,maquinaria.us_crea,maquinaria.fech_crea,maquinaria.departamento,
xcodigo_externo, maquinaria.id_codigo
SELECT descripcion, id_maintainx INTO desc_activo, id_maintain FROM actb00001 WHERE codigo = maquinaria.id_codigo
IF status = NOTFOUND THEN
INITIALIZE desc_activo, id_maintain TO NULL
END IF
DISPLAY BY NAME maquinaria.codigo,maquinaria.nombre,maquinaria.unidad_med,maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,maquinaria.us_crea,maquinaria.fech_crea,maquinaria.departamento,
xcodigo_externo, maquinaria.id_codigo,desc_activo, id_maintain
LET numero_msg = 5
CALL msg(numero_msg)
COMMAND "Ultimo"
"Presenta en pantalla el ultimo registro encontrado"
FETCH LAST datos INTO maquinaria.codigo,maquinaria.nombre,maquinaria.unidad_med,maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,maquinaria.us_crea,maquinaria.fech_crea,maquinaria.departamento,
xcodigo_externo, maquinaria.id_codigo
SELECT descripcion, id_maintainx INTO desc_activo, id_maintain FROM actb00001 WHERE codigo = maquinaria.id_codigo
IF status = NOTFOUND THEN
INITIALIZE desc_activo, id_maintain TO NULL
END IF
DISPLAY BY NAME maquinaria.codigo,maquinaria.nombre,maquinaria.unidad_med,maquinaria.modelo,maquinaria.serie,
maquinaria.fabricante,maquinaria.us_crea,maquinaria.fech_crea,maquinaria.departamento,
xcodigo_externo, maquinaria.id_codigo,desc_activo, id_maintain
LET numero_msg = 4
CALL msg(numero_msg)
COMMAND "Escoger"
"<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
IF maquinaria.status_t = "E" THEN
LET numero_msg = 39
CALL msg(numero_msg)
RETURN
END IF
INPUT BY NAME maquinaria.*,xcodigo_externo
WITHOUT DEFAULTS
BEFORE INPUT
CALL dialog.setFieldActive('codigo', FALSE)
CALL dialog.setFieldActive('nombre', FALSE)
BEFORE FIELD codigo
NEXT FIELD nombre
AFTER FIELD nombre
IF maquinaria.nombre IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD nombre
END IF
AFTER FIELD serie
IF maquinaria.serie IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD serie
END IF
AFTER FIELD id_codigo
SELECT descripcion INTO desc_activo FROM actb00001
WHERE codigo = maquinaria.id_codigo
DISPLAY BY NAME desc_activo
#### 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
IF maquinaria.departamento IS NULL THEN
CALL msg(16)
NEXT FIELD departamento
END IF
IF maquinaria.id_codigo IS NOT NULL THEN
SELECT codigo INTO activo FROM actb00001 WHERE codigo = maquinaria.id_codigo
AND status_t IS NULL
IF activo IS NOT NULL THEN
UPDATE actb00001 SET id_codigo = NULL
WHERE codigo = activo
SELECT codigo INTO activo FROM irtb00009 WHERE id_codigo = maquinaria.id_codigo
IF activo IS NOT NULL THEN
UPDATE irtb00009 SET id_codigo = NULL WHERE codigo = activo
END IF
END IF
UPDATE actb00001 SET id_codigo = maquinaria.codigo
WHERE codigo = maquinaria.id_codigo
END IF
UPDATE irtb00009 SET nombre = maquinaria.nombre,
modelo = maquinaria.modelo,
unidad_med = maquinaria.unidad_med,
serie = maquinaria.serie,
fabricante = maquinaria.fabricante,
departamento = maquinaria.departamento,
codigo_externo = xcodigo_externo,
us_mod = USUARIOS,
fech_mod = GETDATE(),
id_codigo = maquinaria.id_codigo
WHERE codigo = maquinaria.codigo
LET numero_msg = 13
CALL msg(numero_msg)
EXIT INPUT
END INPUT
COMMAND KEY ("L") "eLiminar"
UPDATE irtb00009 SET status_t = "E",
us_mod = usuarios,
fech_mod = GETDATE()
WHERE codigo = maquinaria.codigo
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
"Retorna al menu anterior"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION