Files
MBS/PROYECTOS/ipdir/ipprcs042.4gl
T

381 lines
13 KiB
Plaintext

{
=============================================================================
PROGRAMA : IPPRCS042.4GL
OBJETIVO : BUSCAR INFORMACION RELACIONADA A UN PRODUCTO ESPECIFICO
PROGRAMADOR : ING. JUAN SOTO
FECHA : ENERO 22,2014
============================================================================
}
GLOBALS
"ipprgb000.4gl"
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
CALL ipprcs042()
END MAIN
FUNCTION ipprcs042()
DEFINE p1 RECORD
pinventario char(30),
pcodn smallint,
pcodgrupo smallint,
pcodtipo smallint,
pcodsec smallint,
pfecha_inicial DATE,
pfecha_final DATE,
palmacen smallint
END RECORD
DEFINE aproveedor DYNAMIC ARRAY OF RECORD
proveedor CHAR(80),
pais CHAR(50),
num_oc INT,
fechaOrden DATE,
moneda CHAR(20),
precio DEC(12,2),
unidad CHAR(4),
cantidad DEC(12,4),
descuento DEC(12,2),
totalItem DEC(12,2),
costoLQ DEC(12,4),
costoSTD DEC(12,2),
factorLiquidacion DEC(12,2),
tasa DEC(8,2)
END RECORD,
descripcion VARCHAR(100),
entradas,salidas,existencia,pcosto,consumo DEC(12,4),
ptasa DEC(8,2)
DEFINE aprecios DYNAMIC ARRAY OF RECORD
pmoneda VARCHAR(30),
precio DEC(12,2),
factorPrecio DEC(12,2),
pcodlista SMALLINT
END RECORD,
dias,diasinventario smallint
OPEN WINDOW Fo1 WITH FORM "ipfmcs042"
DIALOG ATTRIBUTE (FIELD ORDER FORM,UNBUFFERED)
INPUT BY NAME p1.*
AFTER FIELD pfecha_inicial
LET p1.pfecha_final = TODAY
DISPLAY BY NAME p1.pfecha_inicial
ON ACTION busca_producto
IF p1.pinventario IS NULL THEN
CALL fgl_winmessage("ERROR","INVENTARIO NO PUEDE ESTAR EN BLANCO","INFO")
LET p1.pinventario = '02'
NEXT FIELD pinventario
END IF
CALL busca_prod(P1.pinventario) RETURNING p1.pcodn,p1.pcodgrupo,p1.pcodtipo,p1.pcodsec,articulos.descrip_esp
LET descripcion = articulos.descrip_esp,' ',articulos.unidad_med
DISPLAY BY NAME descripcion
AFTER FIELD pcodsec
IF p1.pinventario = '02' THEN
SELECT a.descrip_esp,a.unidad_med INTO articulos.descrip_esp,articulos.unidad_med
FROM iptb00002 a
WHERE a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("ERROR","REGISTRO NO EXISTE","information")
NEXT FIELD pcodn
END IF
END IF
IF p1.pinventario = '01' THEN
SELECT a.descrip_esp,a.unidad_med INTO articulos.descrip_esp,articulos.unidad_med
FROM intb00001 a
WHERE a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("ERROR","REGISTRO NO EXISTE","information")
NEXT FIELD pcodn
END IF
# COSTO STD
LET pcosto = 0
SELECT a.costo_st INTO pcosto
FROM intb00013 a
WHERE a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_Sec = p1.pcodsec AND
a.ano = YEAR(p1.pfecha_final) AND a.status_t IS NULL
END IF
IF p1.pinventario = '03' THEN
SELECT a.descrip_esp,a.unidad_med INTO articulos.descrip_esp,articulos.unidad_med
FROM irtb00001 a
WHERE a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("ERROR","REGISTRO NO EXISTE","information")
NEXT FIELD pcodn
END IF
# COSTO STD
LET pcosto = 0
SELECT a.costo_st INTO pcosto
FROM irtb00013 a
WHERE a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_Sec = p1.pcodsec AND
a.ano = YEAR(p1.pfecha_final) AND a.status_t IS NULL
END IF
LET descripcion = articulos.descrip_esp,' ',articulos.unidad_med
DISPLAY BY NAME descripcion
ON ACTION buscar
# busca la informacion de los proveedores
CALL aproveedor.clear()
CALL aprecios.clear()
DECLARE busca_prov CURSOR FOR
SELECT CAST(a.cod_sp AS CHAR(2))+' '+
CAST(a.cod_sp_Sec AS CHAR(8))+' '+a.nom_sp,c.nom_pais,b.num_oc,
CONVERT(CHAR(10),b.fech_oc,103),f.descrip_mon,d.precio,' ',
d.cantidad
FROM cotb00001 a,cotb00014 b,cotb00031 f,cotb00015 d, OUTER cotb00018 c
WHERE a.cod_sp = b.cod_sp AND
a.cod_sp_Sec = b.cod_sp_sec AND
a.cod_pais = c.cod_pais AND
b.tipo = p1.pinventario AND
d.cod_n = p1.pcodn AND
d.cod_grupo = p1.pcodgrupo AND
d.cod_tipo = p1.pcodtipo AND
d.cod_sec = p1.pcodsec AND
b.num_oc = d.num_oc AND
d.cod_mon = f.cod_mon AND
b.fech_oc BETWEEN p1.pfecha_inicial AND p1.pfecha_final AND
b.status_t IS NULL
LET idx = 1
FOREACH busca_prov INTO aproveedor[idx].*
IF p1.pinventario = '02' THEN
# COSTO STD
LET pcosto = 0
SELECT a.material+a.labor+a.gastos INTO pcosto
FROM iptb00004 a
WHERE a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_Sec = p1.pcodsec AND
a.ano = YEAR(aproveedor[idx].fechaOrden) AND a.status_t IS NULL
END IF
IF p1.pinventario = '01' THEN
# COSTO STD
LET pcosto = 0
SELECT a.costo_st INTO pcosto
FROM intb00013 a
WHERE a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_Sec = p1.pcodsec AND
a.ano = YEAR(aproveedor[idx].fechaOrden) AND a.status_t IS NULL
END IF
IF p1.pinventario = '03' THEN
# COSTO STD
LET pcosto = 0
SELECT a.costo_st INTO pcosto
FROM intb00013 a
WHERE a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_Sec = p1.pcodsec AND
a.ano = YEAR(aproveedor[idx].fechaOrden) AND a.status_t IS NULL
END IF
# COSTO LIQUIDACION
LET aproveedor[idx].costoLQ = 0
SELECT MAX(a.costo_lq) INTO aproveedor[idx].costoLQ
FROM cttb00013 a
WHERE a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_Sec = p1.pcodsec AND
a.tipo_orden = p1.pinventario AND
a.num_oc = aproveedor[idx].num_oc
LET ptasa = 1
SELECT AVG(a.prima_us) INTO ptasa
FROM cgtb00017 a
WHERE a.tipo = p1.pinventario AND
a.num_oc = aproveedor[idx].num_oc
LET aproveedor[idx].costoSTD = pcosto
LET aproveedor[idx].tasa = ptasa
LET aproveedor[idx].factorLiquidacion = (aproveedor[idx].precio * ptasa) / aproveedor[idx].costoLQ
LET idx = idx + 1
END FOREACH
# informacion inventarios
LET entradas = 0
LET salidas = 0
LET existencia = 0
IF p1.pinventario = '02' THEN
SELECT SUM(a.cantidad_2) INTO entradas
FROM iptb00006 a,iptb00005 b
WHERE a.cod_mov = b.cod_mov AND
a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec AND
a.fecha BETWEEN p1.pfecha_inicial AND
p1.pfecha_final AND
b.status_mov = 1 AND
a.status_t IS NULL
SELECT SUM(a.cantidad_2) INTO salidas
FROM iptb00006 a,iptb00005 b
WHERE a.cod_mov = b.cod_mov AND
a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec AND
a.fecha BETWEEN p1.pfecha_inicial AND
p1.pfecha_final AND
b.status_mov = 2 AND
a.status_t IS NULL
SELECT SUM(a.cantidad_2) INTO existencia
FROM iptb00006 a
WHERE
a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec AND
a.fecha <= p1.pfecha_final AND
a.status_t IS NULL
LET dias = (p1.pfecha_final - p1.pfecha_inicial)+1
LET diasinventario = (existencia/(salidas*-1))*dias
DISPLAY BY NAME entradas,salidas,existencia,diasinventario
END IF
IF p1.pinventario = '01' THEN
SELECT SUM(a.cantidad_2) INTO entradas
FROM intb00006 a,iptb00005 b
WHERE a.cod_mov = b.cod_mov AND
a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec AND
a.fecha BETWEEN p1.pfecha_inicial AND
p1.pfecha_final AND
b.status_mov = 1 AND
a.status_t IS NULL
SELECT SUM(a.cantidad_2) INTO salidas
FROM intb00006 a,iptb00005 b
WHERE a.cod_mov = b.cod_mov AND
a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec AND
a.fecha BETWEEN p1.pfecha_inicial AND
p1.pfecha_final AND
b.status_mov = 2 AND
a.status_t IS NULL
SELECT SUM(a.cantidad_2) INTO existencia
FROM intb00006 a
WHERE
a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec AND
a.fecha <= p1.pfecha_final AND
a.status_t IS NULL
DISPLAY BY NAME entradas,salidas,existencia
END IF
IF p1.pinventario = '03' THEN
SELECT SUM(a.cantidad_2) INTO entradas
FROM irtb00006 a,iptb00005 b
WHERE a.cod_mov = b.cod_mov AND
a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec AND
a.fecha BETWEEN p1.pfecha_inicial AND
p1.pfecha_final AND
b.status_mov = 1 AND
a.status_t IS NULL
SELECT SUM(a.cantidad_2) INTO salidas
FROM irtb00006 a,iptb00005 b
WHERE a.cod_mov = b.cod_mov AND
a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec AND
a.fecha BETWEEN p1.pfecha_inicial AND
p1.pfecha_final AND
b.status_mov = 2 AND
a.status_t IS NULL
SELECT SUM(a.cantidad_2) INTO existencia
FROM irtb00006 a
WHERE
a.cod_n = p1.pcodn AND
a.cod_grupo = p1.pcodgrupo AND
a.cod_tipo = p1.pcodtipo AND
a.cod_sec = p1.pcodsec AND
a.fecha <= p1.pfecha_final AND
a.status_t IS NULL
DISPLAY BY NAME entradas,salidas,existencia
END IF
# INFORMACION PRECIOS
DECLARE busca_precio CURSOR FOR
SELECT a.descripcion,b.precio,'0',b.cod_lista
FROM vetb00061 a,vetb00025 b
WHERE a.ventas = b.ventas AND
b.cod_n = p1.pcodn AND
b.cod_grupo = p1.pcodgrupo AND
b.cod_tipo = p1.pcodtipo AND
b.cod_sec = p1.pcodsec AND
b.status_t IS NULL
LET idx = 1
FOREACH busca_precio INTO aprecios[idx].*
LET idx = idx + 1
END FOREACH
END INPUT
DISPLAY ARRAY aproveedor TO record1.*
END DISPLAY
DISPLAY ARRAY aprecios TO record3.*
END DISPLAY
ON ACTION cancel
LET INT_FLAG = FALSE
RETURN
END DIALOG
END FUNCTION