{ ------------------------------------------------------------------ PROGRAMA : INPRMT057 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 datos_inp RECORD cod_n LIKE intb00014.cod_n, cod_grupo LIKE intb00014.cod_grupo, cod_tipo LIKE intb00014.cod_tipo, cod_sec LIKE intb00014.cod_sec, unidad_med LIKE intb00001.unidad_med, descrip_esp LIKE intb00001.descrip_esp, categoria LIKE intb00014.categoria, semana_del LIKE intb00015.semana_del, semana_al LIKE intb00015.semana_al, exis_act LIKE intb00015.exis_act, exis_fisica LIKE intb00015.exis_fisica END RECORD, fecha2,fecha3 date # Fecha de los dias en que se realizo el inventario DEFINE estados RECORD status_t LIKE intb00015.status_t, us_crea LIKE intb00015.us_crea, fech_crea LIKE intb00015.fech_crea, us_mod LIKE intb00015.us_mod, fech_mod LIKE intb00015.fech_mod END RECORD MAIN DEFER INTERRUPT CALL STARTLOG("ircs08.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave SELECT * INTO p_companias.* FROM companias CALL inprmt057() END MAIN FUNCTION inprmt057() #WHENever error continue OPTIONS FORM LINE 8 CLEAR SCREEN CALL pantalla() DISPLAY "inprmt057 " AT 4,3 ATTRIBUTE(YELLOW) DISPLAY "Conteo Fisico Perpetuo" AT 6,29 ATTRIBUTE(YELLOW) OPEN FORM infmmt057 FROM "infmmt057" DISPLAY FORM infmmt057 MENU "OPCIONES" COMMAND "Adicionar" "Agregar datos al archivo" CALL adddatos() COMMAND "Consultar-modificar" "Consultar y/o Modificar datos" CALL moddatos() COMMAND "Salir" EXIT MENU END MENU END FUNCTION ###### Funcion para adicionar informacion FUNCTION adddatos() CLEAR FORM INPUT BY NAME datos_inp.* AFTER FIELD cod_grupo IF datos_inp.cod_grupo is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF AFTER FIELD cod_tipo IF datos_inp.cod_tipo is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_n END IF AFTER FIELD cod_sec IF datos_inp.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,e.categoria INTO datos_inp.descrip_esp,datos_inp.unidad_med,datos_inp.categoria FROM intb00001 a,intb00014 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.cod_n=datos_inp.cod_n AND a.cod_grupo = datos_inp.cod_grupo AND a.cod_tipo=datos_inp.cod_tipo AND a.cod_sec = datos_inp.cod_sec AND e.status_t IS NULL AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 35 CALL msg(numero_msg) NEXT FIELD cod_n ELSE DISPLAY BY NAME datos_inp.unidad_med,datos_inp.descrip_esp, datos_inp.categoria END IF AFTER FIELD semana_del IF datos_inp.semana_del is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD semana_del ELSE IF datos_inp.semana_del > today THEN LET numero_msg = 51 CALL msg(numero_msg) NEXT FIELD semana_del END IF END IF ##### Impide que digite una fecha menor que la fecha en que le toca SELECT UNIQUE a.mes_ch INTO fecha3 FROM intb00014 a WHERE a.cod_n = datos_inp.cod_n AND a.cod_grupo = datos_inp.cod_grupo AND a.cod_tipo = datos_inp.cod_tipo AND a.cod_sec = datos_inp.cod_sec AND a.status_t IS NULL IF datos_inp.semana_del < fecha3 THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD semana_del END IF AFTER FIELD semana_al IF datos_inp.semana_al IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD semana_al END IF IF datos_inp.semana_al < datos_inp.semana_del THEN LET numero_msg = 51 CALL msg(numero_msg) NEXT FIELD semana_al END IF #######$ Selecionando la existencia automatizada a la fecha final de la ####### semana SELECT sum(a.cantidad_2) INTO datos_inp.exis_act FROM intb00006 a WHERE a.cod_n = datos_inp.cod_n AND a.cod_grupo = datos_inp.cod_grupo AND a.cod_tipo = datos_inp.cod_tipo AND a.cod_sec = datos_inp.cod_sec AND a.fecha <= datos_inp.semana_al AND a.status_t IS NULL DISPLAY BY NAME datos_inp.exis_act AFTER FIELD exis_fisica IF datos_inp.exis_fisica is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD exis_fisica END IF DISPLAY BY NAME datos_inp.exis_fisica 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 ##### En caso de que no exista valores en nul insertar nueva informacion IF datos_inp.cod_n is not null AND datos_inp.cod_grupo is not null AND datos_inp.cod_tipo is not null AND datos_inp.cod_sec is not null AND datos_inp.exis_fisica is not null AND datos_inp.semana_del is not null THEN ####### Proceso para insertar informacion INSERT INTO intb00015 values(datos_inp.cod_n,datos_inp.cod_grupo, datos_inp.cod_tipo,datos_inp.cod_sec,datos_inp.semana_del, datos_inp.semana_al,datos_inp.exis_act,datos_inp.exis_fisica,null, suser_sname(),getdate(),null,null) #LET dia = DAY(datos_inp.semana_al) - 1 CASE ######## Si la categoria es A le tocara inventariar dentro de 4 semanas WHEN datos_inp.categoria = "A" UPDATE intb00014 SET mes_ch = datos_inp.semana_al + 28, us_mod = suser_sname(),fech_mod = getdate() WHERE cod_n = datos_inp.cod_n AND cod_grupo = datos_inp.cod_grupo AND cod_tipo = datos_inp.cod_tipo AND cod_sec = datos_inp.cod_sec EXIT CASE ######## Si la categoria es B le tocara inventariar dentro de 8 semanas WHEN datos_inp.categoria = "B" UPDATE intb00014 SET mes_ch = datos_inp.semana_al + 56, us_mod = suser_sname,fech_mod = getdate() WHERE cod_n = datos_inp.cod_n AND cod_grupo = datos_inp.cod_grupo AND cod_tipo = datos_inp.cod_tipo AND cod_sec = datos_inp.cod_sec EXIT CASE OTHERWISE ######## Caso contrario la categoria es C y le tocara inventariar dentro ######## de 12 semanas UPDATE intb00014 SET mes_ch = datos_inp.semana_al + 84, us_mod = suser_sname,fech_mod = getdate() WHERE cod_n = datos_inp.cod_n AND cod_grupo = datos_inp.cod_grupo AND cod_tipo = datos_inp.cod_tipo AND cod_sec = datos_inp.cod_sec END CASE LET numero_msg=1 CALL msg(numero_msg) END IF END FUNCTION ######## Funcion para modificar informacion FUNCTION moddatos() CLEAR FORM ####### Crea criterio de busqueda CONSTRUCT criterio ON a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.semana_del, a.semana_al FROM cod_n,cod_grupo,cod_tipo,cod_sec,semana_del,semana_al ###### Seleciona los registro a modificar LET selec = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo, ", "a.cod_sec,e.unidad_med, ", "e.descrip_esp,i.categoria,a.semana_del,a.semana_al, ", "a.exis_act,a.exis_fisica,a.status_t,a.us_crea,a.fech_crea, ", "a.us_mod,a.fech_mod FROM intb00015 a,intb00001 e, ", "intb00014 i ", "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.cod_n = i.cod_n AND ", "a.cod_grupo = i.cod_grupo AND a.cod_tipo = i.cod_tipo AND ", "a.cod_sec = i.cod_sec AND a.status_t is null AND ", criterio clipped, "order BY 1,2,3,4" IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF PREPARE busca FROM selec DECLARE busca1 SCROLL CURSOR FOR busca IF status < 0 THEN CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF OPEN busca1 FETCH FIRST busca1 INTO datos_inp.*,estados.* DISPLAY BY NAME datos_inp.*,estados.* MENU "Opcion" COMMAND "Siguiente" "Busca Sigte. registro con el criterio de seleccion" FETCH NEXT busca1 INTO datos_inp.*,estados.* IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF DISPLAY BY NAME datos_inp.*,estados.* COMMAND "Anterior" "Busca registro anterior con el criterio de seleccion" FETCH PREVIOUS busca1 INTO datos_inp.*,estados.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF DISPLAY BY NAME datos_inp.*,estados.* COMMAND "Primero" "Busca primer registro con el criterio de seleccion" FETCH FIRST busca1 INTO datos_inp.*,estados.* DISPLAY BY NAME datos_inp.*,estados.* LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Busca ultimo registro con el criterio de seleccion" FETCH LAST busca1 INTO datos_inp.*,estados.* DISPLAY BY NAME datos_inp.*,estados.* LET numero_msg = 4 CALL msg(numero_msg) ##### Proceso para eliminar logicamente una informacion COMMAND key ("L") "eLiminar" UPDATE intb00015 set status_t = "E",us_mod = suser_sname,fech_mod = getdate() WHERE cod_n = datos_inp.cod_n AND cod_grupo = datos_inp.cod_grupo AND cod_tipo = datos_inp.cod_tipo AND cod_sec = datos_inp.cod_sec LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Escoger" "ESC Grava la informacion DEL o SUPR cancela proceso" LET fecha2 = datos_inp.semana_del ###### Proceso para aceptar los nuevos valores en el proceso de modificacion INPUT BY NAME datos_inp.exis_fisica WITHOUT DEFAULTS BEFORE FIELD exis_fisica SELECT sum(a.cantidad_2) INTO datos_inp.exis_act FROM intb00006 a WHERE a.cod_n=datos_inp.cod_n AND a.cod_grupo=datos_inp.cod_grupo AND a.cod_tipo=datos_inp.cod_tipo AND a.cod_sec = datos_inp.cod_sec AND a.fecha <= datos_inp.semana_al AND a.status_t IS NULL DISPLAY BY NAME datos_inp.exis_act AFTER FIELD exis_fisica IF datos_inp.exis_fisica IS NULL THEN LET numero_msg = 16 CALL msg( numero_msg) NEXT FIELD exis_fisica 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 CLEAR FORM RETURN ELSE #### Proceso de actualizacion de la informacion por la opcion Escoger UPDATE intb00015 SET (exis_act,exis_fisica,us_mod,fech_mod) = (datos_inp.exis_act,datos_inp.exis_fisica,suser_sname(),getdate()) WHERE cod_n = datos_inp.cod_n AND cod_grupo = datos_inp.cod_grupo AND cod_tipo = datos_inp.cod_tipo AND cod_sec = datos_inp.cod_sec AND semana_del = datos_inp.semana_del AND status_t IS NULL LET numero_msg = 13 CALL msg(numero_msg) END IF COMMAND "Retornar" "Salir al MENU anterior" CLEAR FORM EXIT MENU END MENU END FUNCTION