{ ------------------------------------------------------------------ PROGRAMA : INPRMT019 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla inventario perpetuo de materia prima PROGRAMADOR : Tadeo A. Ferreras F. FECHA REALIZACION : Mayo 10,1993. ------------------------------------------------------------------ } GLOBALS "inprgb000.4gl" ###### Definician de las varibles que contendran la informacion referente ###### a los resultado del inventario perpetuo. DEFINE p_intb26 RECORD LIKE intb00026.* DEFINE descrip_esp CHAR(30), unidad_med CHAR(3), fecha1 DATE, grupo,grupo1 CHAR(1), cantidad1 DECIMAL(12,2) FUNCTION inprmt019() #WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8 CLEAR SCREEN CALL pantalla() DISPLAY "inprmt019 " AT 4,3 ATTRIBUTE(YELLOW) DISPLAY "Inventario de Cierre Anual" AT 6,27 ATTRIBUTE(YELLOW) OPEN FORM infmmt019 FROM "infmmt019" DISPLAY FORM infmmt019 MENU "OPCIONES" COMMAND "Adicionar" "Agregar datos al archivo" CLEAR FORM CALL inpcad019() COMMAND "Consultar-modificar" "Consultar y/o Modificar datos" CLEAR FORM CALL inpcmd019() COMMAND "Salir" EXIT MENU END MENU END FUNCTION ###### Funcion para adicionar informacion FUNCTION inpcad019() LET fecha1 = p_intb26.fecha LET grupo1 = grupo INPUT BY NAME grupo,p_intb26.fecha,p_intb26.cod_n,p_intb26.cod_grupo, p_intb26.cod_tipo,p_intb26.cod_sec,cantidad1 BEFORE FIELD grupo LET p_intb26.fecha = fecha1 LET grupo = grupo1 DISPLAY BY NAME grupo,p_intb26.fecha AFTER FIELD grupo IF grupo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD grupo END IF LET p_intb26.fecha = fecha1 DISPLAY BY NAME p_intb26.fecha AFTER FIELD fecha IF p_intb26.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF AFTER FIELD cod_n IF p_intb26.cod_n IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF AFTER FIELD cod_grupo IF p_intb26.cod_grupo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF AFTER FIELD cod_tipo IF p_intb26.cod_tipo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF AFTER FIELD cod_sec IF p_intb26.cod_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF ##### Seleciona los datos generales del material SELECT a.descrip_esp,a.unidad_med INTO descrip_esp,unidad_med FROM intb00001 a WHERE a.cod_n = p_intb26.cod_n AND a.cod_grupo = p_intb26.cod_grupo AND a.cod_tipo=p_intb26.cod_tipo AND a.cod_sec = p_intb26.cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF DISPLAY BY NAME descrip_esp,unidad_med IF grupo = "A" THEN SELECT UNIQUE a.* FROM intb00026 a WHERE a.cod_n = p_intb26.cod_n AND a.cod_grupo = p_intb26.cod_grupo AND a.cod_tipo=p_intb26.cod_tipo AND a.cod_sec = p_intb26.cod_sec AND a.status_t IS NULL AND a.fecha = p_intb26.fecha AND a.cantidad_a IS NOT NULL ELSE SELECT UNIQUE a.* FROM intb00026 a WHERE a.cod_n = p_intb26.cod_n AND a.cod_grupo = p_intb26.cod_grupo AND a.cod_tipo=p_intb26.cod_tipo AND a.cod_sec = p_intb26.cod_sec AND a.status_t IS NULL AND a.fecha = p_intb26.fecha AND a.cantidad_b IS NOT NULL END IF IF STATUS != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cod_n END IF AFTER FIELD cantidad1 IF cantidad1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad1 END IF END INPUT #### Creando facilidad para cancelar un proceso por medio de la tecla DELETE #### o SUPR IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF ####### Proceso para insertar informacion IF grupo = "A" THEN LET p_intb26.cantidad_a = cantidad1 ELSE LET p_intb26.cantidad_b = cantidad1 END IF SELECT UNIQUE a.cod_n FROM intb00026 a WHERE a.cod_n = p_intb26.cod_n AND a.cod_grupo = p_intb26.cod_grupo AND a.cod_tipo=p_intb26.cod_tipo AND a.cod_sec = p_intb26.cod_sec AND a.status_t IS NULL AND a.fecha = p_intb26.fecha IF STATUS = NOTFOUND THEN INSERT INTO intb00026 values(p_intb26.*) UPDATE intb00026 SET (us_crea,fech_crea) = (USER,CURRENT) WHERE @cod_n = p_intb26.cod_n AND @cod_grupo = p_intb26.cod_grupo AND @cod_tipo = p_intb26.cod_tipo AND @cod_sec = p_intb26.cod_sec AND @fecha = p_intb26.fecha ELSE IF grupo = "A" THEN UPDATE intb00026 SET (cantidad_a,us_mod,fech_mod) = (cantidad1,USER,CURRENT) WHERE @cod_n=p_intb26.cod_n AND @cod_grupo=p_intb26.cod_grupo AND @cod_tipo=p_intb26.cod_tipo AND @cod_sec=p_intb26.cod_sec AND @fecha = p_intb26.fecha ELSE UPDATE intb00026 SET (cantidad_b,us_mod,fech_mod) = (cantidad1,USER,CURRENT) WHERE @cod_n=p_intb26.cod_n AND @cod_grupo=p_intb26.cod_grupo AND @cod_tipo=p_intb26.cod_tipo AND @cod_sec=p_intb26.cod_sec AND @fecha = p_intb26.fecha END IF END IF LET numero_msg = 1 CALL msg(numero_msg) END FUNCTION ######## Funcion para modificar informacion FUNCTION inpcmd019() CLEAR FORM ####### Crea criterio de busqueda INPUT BY NAME grupo AFTER FIELD grupo IF grupo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD grupo END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF CONSTRUCT criterio ON a.fecha,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec FROM fecha,cod_n,cod_grupo,cod_tipo,cod_sec IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF ###### Seleciona los registro a modificar IF grupo = "A" THEN LET selec = "SELECT a.*,e.descrip_esp,e.unidad_med ", "FROM intb00026 a,intb00001 e ", "WHERE a.cod_n = e.cod_n AND a.cod_grupo = e.cod_grupo AND ", " a.cod_tipo = e.cod_tipo AND a.cod_sec = e.cod_sec AND ", " a.status_t IS NULL AND a.cantidad_a IS NOT NULL AND ", criterio clipped," ORDER BY 1,2,3,4,5" ELSE LET selec = "SELECT a.*,e.descrip_esp,e.unidad_med ", "FROM intb00026 a,intb00001 e ", "WHERE a.cod_n = e.cod_n AND a.cod_grupo = e.cod_grupo AND ", " a.cod_tipo = e.cod_tipo AND a.cod_sec = e.cod_sec AND ", " a.status_t IS NULL AND a.cantidad_b IS NOT NULL AND ", criterio clipped," ORDER BY 1,2,3,4,5" END IF PREPARE busca FROM selec DECLARE busca1 SCROLL CURSOR FOR busca OPEN busca1 FETCH FIRST busca1 INTO p_intb26.*,descrip_esp,unidad_med IF grupo = "A" THEN LET cantidad1 = p_intb26.cantidad_a ELSE LET cantidad1 = p_intb26.cantidad_b END IF DISPLAY BY NAME p_intb26.fecha THRU p_intb26.cod_sec,cantidad1, p_intb26.status_t THRU p_intb26.fech_mod, descrip_esp,unidad_med MENU "Opcion" COMMAND "Siguiente" "Busca Sigte. registro con el criterio de seleccion" FETCH NEXT busca1 INTO p_intb26.*,descrip_esp,unidad_med IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF IF grupo = "A" THEN LET cantidad1 = p_intb26.cantidad_a ELSE LET cantidad1 = p_intb26.cantidad_b END IF DISPLAY BY NAME p_intb26.fecha THRU p_intb26.cod_sec,cantidad1, p_intb26.status_t THRU p_intb26.fech_mod, descrip_esp,unidad_med COMMAND "Anterior" "Busca registro anterior con el criterio de seleccion" FETCH PREVIOUS busca1 INTO p_intb26.*,descrip_esp,unidad_med IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF IF grupo = "A" THEN LET cantidad1 = p_intb26.cantidad_a ELSE LET cantidad1 = p_intb26.cantidad_b END IF DISPLAY BY NAME p_intb26.fecha THRU p_intb26.cod_sec,cantidad1, p_intb26.status_t THRU p_intb26.fech_mod, descrip_esp,unidad_med COMMAND "Primero" "Busca primer registro con el criterio de seleccion" FETCH FIRST busca1 INTO p_intb26.*,descrip_esp,unidad_med IF grupo = "A" THEN LET cantidad1 = p_intb26.cantidad_a ELSE LET cantidad1 = p_intb26.cantidad_b END IF DISPLAY BY NAME p_intb26.fecha THRU p_intb26.cod_sec,cantidad1, p_intb26.status_t THRU p_intb26.fech_mod, descrip_esp,unidad_med LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Busca ultimo registro con el criterio de seleccion" FETCH LAST busca1 INTO p_intb26.*,descrip_esp,unidad_med IF grupo = "A" THEN LET cantidad1 = p_intb26.cantidad_a ELSE LET cantidad1 = p_intb26.cantidad_b END IF DISPLAY BY NAME p_intb26.fecha THRU p_intb26.cod_sec,cantidad1, p_intb26.status_t THRU p_intb26.fech_mod, descrip_esp,unidad_med LET numero_msg = 4 CALL msg(numero_msg) ##### Proceso para eliminar logicamente una informacion COMMAND "Escoger" "ESC Grava la informacion SUPR cancela proceso" ###### Proceso para aceptar los nuevos valores en el proceso de modificacion INPUT BY NAME cantidad1 WITHOUT DEFAULTS AFTER FIELD cantidad1 IF cantidad1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad_a END IF END INPUT #### Creando la facilidad para abortar operacion mediante DELETE o SUPR IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF #### Proceso de actualizacion de la informacion por la opcion Escoger IF grupo = "A" THEN UPDATE intb00026 SET (cantidad_a,us_mod,fech_mod) = (cantidad1,USER,CURRENT) WHERE @cod_n=p_intb26.cod_n AND @cod_grupo=p_intb26.cod_grupo AND @cod_tipo=p_intb26.cod_tipo AND @cod_sec=p_intb26.cod_sec AND @fecha = p_intb26.fecha ELSE UPDATE intb00026 SET (cantidad_b,us_mod,fech_mod) = (cantidad1,USER,CURRENT) WHERE @cod_n=p_intb26.cod_n AND @cod_grupo=p_intb26.cod_grupo AND @cod_tipo=p_intb26.cod_tipo AND @cod_sec=p_intb26.cod_sec AND @fecha = p_intb26.fecha END IF LET numero_msg = 13 CALL msg(numero_msg) COMMAND "Retornar" "Salir al MENU anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION