303 lines
10 KiB
Plaintext
303 lines
10 KiB
Plaintext
{
|
|
------------------------------------------------------------------
|
|
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
|