{ ------------------------------------------------------------------ PROGRAMA : INPRMT011 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla de Solicitud de Internamiento de material. PROGRAMADOR : Tadeo A. Ferreas FECHA REALIZACION : Julio 22, 1993. ------------------------------------------------------------------ } GLOBALS "inprgb000.4gl" DEFINE solicitud RECORD num_sol SMALLINT, #### Numero de solicitud de internamento material. fecha DATE #### Fecha dee la solicitud. END RECORD DEFINE codgp SMALLINT DEFINE arr_form2 ARRAY[200] OF RECORD cod_n_p SMALLINT, #### Parte del codigo de la pila cod_grupo_p SMALLINT, ## Parte del codigo de la pila (Grupo a que pertenece descrip1 CHAR(30), ### Descripcion del tipo del pila cantidad INTEGER ### Cantidad a solicitar END RECORD DEFINE descrip CHAR(30) DEFINE curr,i INTEGER #### Funcion para manejar el menu de proceso en la solicitud. FUNCTION inprmt011() CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM infmmt011 FROM "infmmt011" DISPLAY FORM infmmt011 CALL pantalla() DISPLAY "inprmt011" AT 4,3 DISPLAY "Solicitud de Exoneracion" AT 6,28 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" CLEAR FORM CALL inmtad018() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" CALL inmtmd018() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION ### Funcion para agregar un registro. FUNCTION inmtad018() # WHENEVER ERROR CONTINUE # Captura los datos que va a contener el registro INPUT BY NAME solicitud.* AFTER FIELD num_sol IF solicitud.num_sol = 0 OR solicitud.num_sol IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_sol END IF SELECT UNIQUE a.num_sol FROM intb00017 a WHERE a.num_sol = solicitud.num_sol IF status != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD num_sol END IF BEFORE FIELD fecha LET solicitud.fecha = today DISPLAY BY NAME solicitud.fecha AFTER FIELD fecha IF solicitud.fecha IS NULL THEN LET solicitud.fecha = today END IF LET p_fechas = solicitud.fecha CALL prd() IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF ##### Para manejar arreglo de los diferentes item en la solicitud de inter- ##### namiento de un material. INPUT ARRAY arr_form2 FROM arr_form3.* BEFORE ROW LET curr = ARR_CURR() LET fila = SCR_LINE() AFTER FIELD cod_n_p IF arr_form2[curr].cod_n_p IS NOT NULL THEN IF arr_form2[curr].cod_n_p != 3 THEN LET numero_msg = 157 CALL msg(numero_msg) NEXT FIELD cod_n_p END IF END IF AFTER FIELD cod_grupo_p IF arr_form2[curr].cod_grupo_p < 1 OR arr_form2[curr].cod_grupo_p > 3 THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n_p END IF SELECT UNIQUE a.cod_n_p,a.cod_grupo_p FROM intb00016 a WHERE a.cod_n_p = arr_form2[curr].cod_n_p AND a.cod_grupo_p = arr_form2[curr].cod_grupo_p IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n_p END IF ##### Chequea que el codigo a digitar no exista mas de una vez en el ##### registro. FOR i = 1 TO ARR_COUNT() - 1 IF arr_form2[curr].cod_grupo_p = arr_form2[i].cod_grupo_p THEN LET numero_msg = 135 CALL msg(numero_msg) NEXT FIELD cod_n_p END IF END FOR CASE WHEN arr_form2[curr].cod_grupo_p = 1 LET descrip = "PILA TIPO D (2LP)" WHEN arr_form2[curr].cod_grupo_p = 2 LET descrip = "PILA TIPO C (1LP)" WHEN arr_form2[curr].cod_grupo_p = 3 LET descrip = "PILA TIPO AA (R6/7HD)" END CASE LET arr_form2[curr].descrip1 = descrip DISPLAY arr_form2[curr].descrip1 TO arr_form3[fila].descrip1 AFTER FIELD cantidad IF arr_form2[curr].cantidad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF ###### Proceso para insertar registro dentro de la maestra de solicitud de ###### internamiento de un amterial. FOR i = 1 TO ARR_COUNT() IF arr_form2[i].cod_n_p IS NOT NULL AND arr_form2[i].cod_grupo_p IS NOT NULL THEN INSERT INTO intb00017 VALUES (solicitud.*,arr_form2[i].cod_n_p, arr_form2[i].cod_grupo_p,arr_form2[i].cantidad,NULL,USER,CURRENT, NULL,NULL) END IF END FOR LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM END FUNCTION ###### Funcion para modificar un registro que contenga un solicitud. FUNCTION inmtmd018() # Aqui se prepara para la captura del criterio de seleccion CONSTRUCT criterio ON a.num_sol,a.fecha FROM num_sol,fecha IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET SELEC = "SELECT UNIQUE a.num_sol,a.fecha FROM intb00017 a WHERE ", "a.status_t is null AND ", criterio clipped, "ORDER BY 1,2" PREPARE busca FROM selec CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF DECLARE datos SCROLL CURSOR FOR busca OPEN datos CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF FETCH FIRST datos INTO solicitud.* IF status >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF DISPLAY BY NAME solicitud.* MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO solicitud.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME solicitud.* COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO solicitud.* IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME solicitud.* COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO solicitud.* DISPLAY BY NAME solicitud.* LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO solicitud.* DISPLAY BY NAME solicitud.* LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" INPUT BY NAME solicitud.fecha WITHOUT DEFAULTS AFTER FIELD fecha IF solicitud.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF LET p_fechas = solicitud.fecha CALL prd() IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DECLARE buscar CURSOR FOR SELECT a.cod_n_p,a.cod_grupo_p,a.us_crea,a.cantidad FROM intb00017 a WHERE a.num_sol = solicitud.num_sol LET i = 1 FOREACH buscar INTO arr_form2[i].* IF arr_form2[i].cod_grupo_p = 1 THEN LET arr_form2[i].descrip1 = "PILA TIPO D (2LP)" ELSE IF arr_form2[i].cod_grupo_p = 2 THEN LET arr_form2[i].descrip1 = "PILA TIPO C (1LP)" ELSE LET arr_form2[i].descrip1 = "PILA TIPO AA (R6/7HD)" END IF END IF LET i = i + 1 END FOREACH CALL SET_COUNT(i - 1) INPUT ARRAY arr_form2 WITHOUT DEFAULTS FROM arr_form3.* BEFORE ROW LET curr = ARR_CURR() LET fila = SCR_LINE() AFTER FIELD cod_n_p IF arr_form2[curr].cod_n_p IS NOT NULL THEN IF arr_form2[curr].cod_n_p != 3 THEN LET numero_msg = 157 CALL msg(numero_msg) NEXT FIELD cod_n_p END IF END IF AFTER FIELD cod_grupo_p IF arr_form2[curr].cod_grupo_p < 1 OR arr_form2[curr].cod_grupo_p > 3 THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n_p END IF FOR i = 1 TO ARR_COUNT() IF i <> curr THEN IF arr_form2[curr].cod_grupo_p = arr_form2[i].cod_grupo_p THEN LET numero_msg = 135 CALL msg(numero_msg) NEXT FIELD cod_n_p END IF END IF END FOR SELECT UNIQUE a.cod_n_p,a.cod_grupo_p FROM intb00016 a WHERE a.cod_n_p = arr_form2[curr].cod_n_p AND a.cod_grupo_p = arr_form2[curr].cod_grupo_p IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n_p END IF CASE WHEN arr_form2[curr].cod_grupo_p = 1 LET descrip = "PILA TIPO D (2LP)" WHEN arr_form2[curr].cod_grupo_p = 2 LET descrip = "PILA TIPO C (1LP)" WHEN arr_form2[curr].cod_grupo_p = 3 LET descrip = "PILA TIPO AA (R6/7HD)" END CASE LET arr_form2[curr].descrip1 = descrip DISPLAY arr_form2[curr].descrip1 TO arr_form3[fila].descrip1 AFTER FIELD cantidad IF arr_form2[curr].cantidad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF ###### Proceso de actualizacion de un registro en la maestra de solicitud. DELETE FROM intb00017 WHERE num_sol = solicitud.num_sol FOR i = 1 TO ARR_COUNT() IF arr_form2[i].cod_n_p IS NOT NULL AND arr_form2[i].cod_grupo_p IS NOT NULL THEN INSERT INTO intb00017 VALUES (solicitud.*,arr_form2[i].cod_n_p, arr_form2[i].cod_grupo_p,arr_form2[i].cantidad,NULL,USER,CURRENT, USER,CURRENT) END IF END FOR LET numero_msg = 13 CALL msg(numero_msg) ##### Proceso para elimianr logicamente un registro. COMMAND KEY ("L") "eLiminar" UPDATE intb00017 set (status_t,us_mod,fech_mod) = ("E",USER,CURRENT) WHERE num_sol = solicitud.num_sol LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION