{ ============================================================================= 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