{ ------------------------------------------------------------------ PROGRAMA : IRPRMT57 OBJETIVO : Capturar, Modificar, Eliminar registros de la Tabla inventario perpetuo de Repuestos PROGRAMADOR : Tadeo A. Ferreras F. FECHA REALIZACION : Mayo 10,1993. ------------------------------------------------------------------ } GLOBALS "irprgb000.4gl" ###### Definician de las varibles que contendran la informacion referente ###### a los resultado del inventario perpetuo. DEFINE datos_inp RECORD cod_n LIKE irtb00016.cod_n, cod_grupo LIKE irtb00016.cod_grupo, cod_tipo LIKE irtb00016.cod_tipo, cod_sec LIKE irtb00016.cod_sec, unidad_med LIKE intb00001.unidad_med, descrip_esp LIKE intb00001.descrip_esp, categoria LIKE irtb00016.categoria, semana_del LIKE irtb00017.semana_del, semana_al LIKE irtb00017.semana_al, exis_act LIKE irtb00017.exis_act, exis_fisica LIKE irtb00017.exis_fisica END RECORD, fecha1,fecha2,fecha3 date # Fecha de los dias en que se realizo el inventario DEFINE estados RECORD status_t LIKE irtb00017.status_t, us_crea LIKE irtb00017.us_crea, fech_crea LIKE irtb00017.fech_crea, us_mod LIKE irtb00017.us_mod, fech_mod LIKE irtb00017.fech_mod END RECORD, fecha_del,fecha_al DATE MAIN DEFER INTERRUPT SELECT * INTO p_companias.* FROM companias CALL irprmt057() END MAIN FUNCTION irprmt057() #WHENever error continue OPTIONS FORM LINE 8 CLEAR SCREEN CALL pantalla() DISPLAY " irprmt057 " AT 4,3 ATTRIBUTE(blue) DISPLAY "Inventario Perpetuo" AT 6,28 ATTRIBUTE(blue) OPEN FORM irfmmt057 FROM "irfmmt057" DISPLAY FORM irfmmt057 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() DEFINE dia SMALLINT 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,irtb00016 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 (e.cod_n=datos_inp.cod_n AND e.cod_grupo = datos_inp.cod_grupo AND e.cod_tipo=datos_inp.cod_tipo AND e.cod_sec=datos_inp.cod_sec) AND a.status_t IS NULL AND e.categoria IS NOT NULL AND e.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 BEFORE FIELD semana_del LET datos_inp.semana_del = fecha_del BEFORE FIELD semana_al LET datos_inp.semana_al = fecha_al 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 LET fecha_del = datos_inp.semana_del SELECT UNIQUE a.mes_ch INTO fecha3 FROM irtb00016 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 LET fecha_al = datos_inp.semana_al SELECT sum(a.cantidad_2) INTO datos_inp.exis_act FROM irtb00006 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 SUPR #### 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 irtb00017 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, user,current,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 irtb00016 SET mes_ch = datos_inp.semana_al + 28, us_mod = user,fech_mod = current 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 irtb00016 SET mes_ch = datos_inp.semana_al + 56, us_mod = user,fech_mod = current 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 irtb00016 SET mes_ch = datos_inp.semana_al + 84, us_mod = user,fech_mod = current 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 irtb00017 a,intb00001 e, irtb00016 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 irtb00017 set status_t = "E",us_mod = user,fech_mod = current 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 irtb00006 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 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 irtb00017 SET (exis_act,exis_fisica,us_mod,fech_mod) = (datos_inp.exis_act,datos_inp.exis_fisica,user,current) 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