{ ------------------------------------------------------------------ PROGRAMA : INPRMT001 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla Catalogo de Bienes y Servicios PROGRAMADOR : Lic. Abner Montalvo Z. MODIFICADO : ING. PAULINO Y LIC. JUAN FCO SOTO FECHA REALIZACION : Julio 27, 1992. ------------------------------------------------------------------ } GLOBALS "irprgb000.4gl" FUNCTION irprmt001() #WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM infmmt01 FROM "/users/rova/sysinfo/db/infmmt001" DISPLAY FORM infmmt01 CALL pantalla() DISPLAY "irprmt001" AT 4,3 DISPLAY "Maestra Bienes y Servicios" AT 6,27 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" LET int_flag = FALSE CLEAR FORM CALL irpcad001() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" LET INT_FLAG = FALSE CALL irpcmf001() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION FUNCTION irpcad001() WHENEVER ERROR CONTINUE ## Captura los datos que va a contener el registro LET int_flag = false INPUT BY NAME articulos.* ## Verifica que el codigo no exista en el catalogo de articulos. Si existe, ## entonces despliega los datos del registro existente. AFTER FIELD cod_n IF articulos.cod_n is null then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF AFTER FIELD cod_tipo IF articulos.cod_tipo is null then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_tipo END IF AFTER FIELD cod_grupo IF articulos.cod_grupo is null then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_grupo END IF AFTER FIELD cod_sec IF (articulos.cod_n is null AND articulos.cod_grupo is null AND articulos.cod_tipo is null AND articulos.cod_sec is null) THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n ELSE SELECT * INTO articulos.* FROM intb00001 WHERE cod_n = articulos.cod_n AND cod_grupo = articulos.cod_grupo AND cod_tipo = articulos.cod_tipo AND cod_sec = articulos.cod_sec IF status >= 0 THEN IF status != NOTFOUND THEN IF articulos.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD cod_n END IF DISPLAY BY NAME articulos.* LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_n END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF END IF AFTER FIELD descrip_esp IF articulos.descrip_esp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descrip_esp END IF ## Verifica si la unidad de medida existe en la tabla correspondiente. AFTER FIELD unidad_med IF articulos.unidad_med IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD unidad_med ELSE SELECT codigo_unidad FROM intb00007 WHERE codigo_unidad = articulos.unidad_med and status_t is null IF status = NOTFOUND THEN LET numero_msg = 17 CALL msg(numero_msg) NEXT FIELD unidad_med END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN 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 IF articulos.unidad_med IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD unidad_med ELSE SELECT codigo_unidad FROM intb00007 WHERE codigo_unidad = articulos.unidad_med and status_t is null IF STATUS = NOTFOUND THEN LET numero_msg = 17 CALL msg(numero_msg) NEXT FIELD unidad_med END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF # Verifica si el articulo existe. Si existe, despliega los datos del articulo. IF ( articulos.cod_n is null AND articulos.cod_grupo is null AND articulos.cod_tipo is null AND articulos.cod_sec is null) THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n ELSE SELECT * INTO articulos.* FROM intb00001 WHERE cod_n = articulos.cod_n AND cod_grupo = articulos.cod_grupo AND cod_tipo = articulos.cod_tipo AND cod_sec = articulos.cod_sec IF status >= 0 THEN IF STATUS != NOTFOUND THEN IF articulos.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD cod_n END IF DISPLAY BY NAME articulos.* LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_n {ELSE INITIALIZE articulos.descrip_esp,articulos.descrip_ing, articulos.unidad_med TO NULL DISPLAY BY NAME articulos.descrip_esp,articulos.descrip_ing, articulos.unidad_med } END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF END IF # Valida que el codigo del articulo no sea cero. Si no es cero, adiciona el # registro en la tabla, de lo contrario, presenta mensaje de error y acepta # el codigo de nuevo. IF ( articulos.cod_n is null AND articulos.cod_grupo is null AND articulos.cod_tipo is null AND articulos.cod_sec is null) THEN LET numero_msg = 16 CALL msg(numero_msg) ELSE INSERT INTO intb00001 VALUES (articulos.cod_n, articulos.cod_grupo, articulos.cod_tipo, articulos.cod_sec, articulos.descrip_esp, articulos.descrip_ing, articulos.unidad_med, null,USER, CURRENT, null, null) # Verifica el Status que retorna luego de insertar el registro en la tabla. # Si el Status es diferente de cero quiere decir que hubo problemas durante # la creacion del registro, entonces despliega un mensaje . CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF LET numero_msg = 1 CALL msg(numero_msg) NEXT FIELD cod_n END IF AFTER FIELD fech_mod EXIT INPUT END INPUT END FUNCTION FUNCTION irpcmf001() WHENEVER ERROR CONTINUE LET int_flag = false ## Aqui se prepara para la captura del criterio de seleccion CONSTRUCT criterio ON intb00001.* FROM intb00001.* IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = " SELECT UNIQUE * FROM intb00001 ", " WHERE status_t is null and ", criterio clipped, " ORDER BY 1,2,3,4" PREPARE busca FROM selec CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO articulos.* 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 LET bandera = 0 RETURN END IF END IF DISPLAY BY NAME articulos.* MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO articulos.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME articulos.* COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO articulos.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME articulos.* COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO articulos.* DISPLAY BY NAME articulos.* LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO articulos.* DISPLAY BY NAME articulos.* LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF articulos.status_t="E" THEN LET numero_msg= 36 CALL msg(numero_msg) RETURN END IF INPUT BY NAME articulos.descrip_esp, articulos.descrip_ing, articulos.unidad_med, articulos.us_crea, articulos.fech_crea, articulos.us_mod, articulos.fech_mod WITHOUT DEFAULTS AFTER FIELD descrip_esp IF articulos.descrip_esp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descrip_esp END IF AFTER FIELD unidad_med IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF articulos.unidad_med IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD unidad_med ELSE SELECT codigo_unidad FROM intb00007 WHERE codigo_unidad = articulos.unidad_med IF STATUS = NOTFOUND THEN LET numero_msg = 17 CALL msg(numero_msg) NEXT FIELD unidad_med END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF ## Chequea que el codigo se encuentre en la tabla de articulos IF STATUS = NOTFOUND THEN LET numero_msg = 19 CALL msg(numero_msg) NEXT FIELD descrip_esp END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF articulos.unidad_med IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD unidad_med ELSE SELECT codigo_unidad FROM intb00007 WHERE codigo_unidad = articulos.unidad_med AND status_t is null IF STATUS = NOTFOUND THEN LET numero_msg = 17 CALL msg(numero_msg) NEXT FIELD unidad_med END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF IF articulos.descrip_esp IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descrip_esp END IF ## Chequea que el codigo se encuentre en la tabla de articulos { IF STATUS = NOTFOUND THEN LET numero_msg = 19 CALL msg(numero_msg) NEXT FIELD descrip_esp END IF } EXIT INPUT END INPUT #### Verifica si el usuario presiono la tecla IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF { IF articulos.unidad_med IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) ELSE } UPDATE intb00001 SET descrip_esp = articulos.descrip_esp, descrip_ing = articulos.descrip_ing, unidad_med = articulos.unidad_med, us_mod = USER, fech_mod = CURRENT WHERE cod_n = articulos.cod_n AND cod_grupo = articulos.cod_grupo AND cod_tipo = articulos.cod_tipo AND cod_sec = articulos.cod_sec { END IF } LET numero_msg = 13 CALL msg(numero_msg) COMMAND KEY ("L") "eLiminar" UPDATE intb00001 SET status_t ="E" , us_mod = user, fech_mod = current where cod_n = articulos.cod_n and cod_grupo = articulos.cod_grupo AND cod_tipo = articulos.cod_tipo AND cod_sec = articulos.cod_sec LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" EXIT MENU END MENU END FUNCTION