{ ------------------------------------------------------------------ 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" " Actualiza Registro 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 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