{ ------------------------------------------------------------------ PROGRAMA : ISPRMT008 OBJETIVO : Capturar Informacion del Conteo Fisico del Inventario Suministro. PROGRAMADOR : Ing. Juan Fco. Soto. FECHA REALIZACION : Octubre 21, 1993. ------------------------------------------------------------------ } GLOBALS "isprgb000.4gl" FUNCTION isprmt008() DEFINE p_hoy DATE DEFINE documen INTEGER DEFINE documento CHAR(6) DEFINE ano CHAR (4) DEFINE existe,salir,otra,de,mueve CHAR(1) DEFINE dife_ant,diferencia,cant_ex,cant_ant,balance_in,ex_mov DECIMAL(10,2) OPEN WINDOW cuenta AT 8,7 WITH FORM "isfmmt008" ATTRIBUTE (BORDER, FORM LINE FIRST + 1,COMMENT LINE LAST -1, PROMPT LINE LAST) WHENEVER ERROR CONTINUE ## Captura los datos que va a contener el registro LET p_conteo.fecha = today LABEL volver: CLEAR FORM LET cant_ex = 0 LET p_hoy = p_conteo.fecha INITIALIZE p_conteo.* to null LET p_conteo.fecha = p_hoy INPUT BY NAME p_conteo.* WITHOUT DEFAULTS ATTRIBUTE (YELLOW) BEFORE FIELD fecha IF otra != "S" THEN INITIALIZE p_conteo.* TO NULL LET documento = null END IF LET otra = null AFTER FIELD fecha LET p_fechas = p_conteo.fecha using "ddmmyy" #CALL prd(p_fechas) CALL prd() IF bandera = 1 THEN LET bandera = 0 NEXT FIELD fecha END IF AFTER FIELD bodega SELECT * FROM istb00009 WHERE cod_bodega = p_conteo.bodega IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD bodega END IF AFTER FIELD cod_sec ## Verifica que el codigo no exista en el catalogo de unidades. Si existe, ## entonces despliega los datos del registro existente. SELECT a.descrip_esp,a.unidad_med INTO articulos.descrip_esp, articulos.unidad_med FROM intb00001 a,istb00002 b WHERE a.cod_n = p_conteo.cod_n and a.cod_grupo = p_conteo.cod_grupo and a.cod_tipo = p_conteo.cod_tipo and a.cod_sec = p_conteo.cod_sec and b.cod_n = p_conteo.cod_n and b.cod_grupo = p_conteo.cod_grupo and b.cod_tipo = p_conteo.cod_tipo and b.cod_sec = p_conteo.cod_sec and b.bodega = p_conteo.bodega IF status >= 0 THEN IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF ELSE CALL integridad() IF bandera = 1 THEN CLEAR SCREEN RETURN END IF END IF DISPLAY BY NAME articulos.descrip_esp DISPLAY BY NAME articulos.unidad_med LET documen = documento AFTER FIELD cantidad IF p_conteo.cantidad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE LET salir = "S" GOTO sale END IF SELECT sum(cantidad_2) INTO balance FROM istb00006 WHERE cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and status_t is null and fecha <= p_conteo.fecha LET ex_mov = balance LET ex_mov = ex_mov USING "---,---,---.##" DISPLAY BY NAME ex_mov LABEL sale: EXIT INPUT END INPUT IF salir = "S" THEN GOTO sale1 END IF LET diferencia = ex_mov - p_conteo.cantidad IF diferencia < 0 THEN LET datos_gen.cod_mov = 52 LET diferencia = diferencia * -1 ELSE LET datos_gen.cod_mov = 25 END IF DISPLAY BY NAME diferencia #A1 COMIENZA IF diferencia = 0 THEN PROMPT "No tiene Diferencia, Desea Proseguir (S/N)" FOR CHAR OPC IF opc = "N" or opc = "n" THEN GOTO volver LET OPC = NULL ELSE SELECT unique cod_n FROM istb00011 WHERE fecha = p_conteo.fecha and cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and bodega = p_conteo.bodega IF STATUS = NOTFOUND THEN INSERT INTO istb00011 values (p_conteo.*,ex_mov,user,current,null,null) ELSE UPDATE istb00011 set cantidad = p_conteo.cantidad, us_mod = user, fech_mod = current WHERE fecha = p_conteo.fecha and cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and bodega = p_conteo.bodega END IF GOTO dif LET OPC = NULL END IF END IF LABEL dif: #A1 TERMINA IF ex_mov != p_conteo.cantidad THEN PROMPT "Tiene Diferencia el Conteo, Desea Hacer Ajuste (S/N)" FOR CHAR OPC #A1 COMIENZA IF opc = "S" OR opc = "s" THEN DISPLAY "Codigo de Movimiento" AT 11,3 DISPLAY "Numero Documento " AT 12,3 SELECT descrip_mov,status_mov INTO datos_gen.descrip_mov,mueve FROM istb00005 WHERE cod_mov = datos_gen.cod_mov DISPLAY BY NAME datos_gen.descrip_mov,datos_gen.cod_mov LABEL err1: INPUT BY NAME datos_gen.num_doc ATTRIBUTE (YELLOW) # Ejecuta los movimientos dependiendo si es de entrada o salida IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false GOTO sale1 END IF LET documento = datos_gen.num_doc # Llama a la funcion que actializa las tablas que se afectara por el ajuste CALL introduce(documento,mueve,diferencia,de,cant_ex,ex_mov) END IF END IF CLEAR FORM GOTO volver LABEL sale1: CLOSE WINDOW cuenta END FUNCTION FUNCTION introduce(documento,mueve,diferencia,de,cant_ex,ex_mov) # Funcion actualizadora de las tablas del ajuste y conteo fisico DEFINE documento CHAR(6) DEFINE documen INTEGER DEFINE mueve,de CHAR(1) DEFINE ex_mov,cant_ex, diferencia DECIMAL(10,2) LET documen = documento DELETE FROM istb00006 WHERE num_doc = documen and cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and cod_mov = datos_gen.cod_mov IF datos_gen.cod_mov = 25 THEN LET diferencia = diferencia * -1 END IF INSERT INTO istb00006(num_doc,cod_mov,fecha,cod_n,cod_grupo,cod_tipo, cod_sec,cantidad_2,bodega,us_crea,fech_crea) VALUES (documento,datos_gen.cod_mov,p_conteo.fecha, p_conteo.cod_n,p_conteo.cod_grupo,p_conteo.cod_tipo, p_conteo.cod_sec,diferencia,p_conteo.bodega, user,current) UPDATE istb00002 set existencia = p_conteo.cantidad WHERE cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and bodega = p_conteo.bodega SELECT unique cantidad FROM istb00011 WHERE fecha = p_conteo.fecha and cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and bodega = p_conteo.bodega IF STATUS = NOTFOUND THEN INSERT INTO istb00011 values (p_conteo.*,ex_mov,user,current,null,null) ELSE # Si el conteo existe busca la cantidad que se le digito anterior a este # conteo SELECT unique cantidad_2 INTO cant_ex FROM istb00006 WHERE num_doc = documen and cod_mov = datos_gen.cod_mov and cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and bodega = p_conteo.bodega UPDATE istb00011 set cantidad = p_conteo.cantidad, us_mod = user, fech_mod = current WHERE fecha = p_conteo.fecha and cod_n = p_conteo.cod_n and cod_grupo = p_conteo.cod_grupo and cod_tipo = p_conteo.cod_tipo and cod_sec = p_conteo.cod_sec and bodega = p_conteo.bodega IF datos_gen.cod_mov = 52 THEN LET p_conteo.cantidad = (ex_mov - cant_ex) + diferencia ELSE LET p_conteo.cantidad = (ex_mov+ cant_ex) + diferencia END IF END IF IF de = "S" THEN LET numero_msg = 13 CALL msg(numero_msg) ELSE LET numero_msg = 1 CALL msg(numero_msg) END IF let de = null END FUNCTION