{ ------------------------------------------------------------------------------- PROGRAMA : ipprrp058(Mensual) OBJETIVO : PROCESO PARA LLENAR TABLA Y POSTERIORMENTE HACER PIVOT TABLE, ESTE PROCESO SE EJECUTARA AUTOMATICAMENTE DE ACUERDO AL SCHEDULE QUE SE ESPECIFIQUE PROGRAMADOR : Ing. Juan Francisco Soto FECHA REALIZACION : Julio 4, 2005 MODIFICACDO POR : Ing. Juan Francisco Soto FECHA : Julio 18, 2005 ------------------------------------------------------------------------------- } GLOBALS "ipprgb000.4gl" DEFINE pcosto_tp,pprima,ptasa_tp,precio,tasa_tp DECIMAL(8,4), pidentifica,pnum_oc,tipo_valor,pmes,mesant INTEGER, archivo,filename,sysos CHAR(120), cels CHAR(20), cnt,n,pano,dep_ant,n_row,ppresenta integer, fecha_tp,fecha_lq1,fecha1,fecha2 DATE, desc_pagos,tasa DEC(12,4), pparametro,tipo_rp1 CHAR(1), total_tp DEC(12,2), ano_ant CHAR(1) MAIN DEFER INTERRUPT #CALL pantalla() CALL ipprrp058() END MAIN FUNCTION ipprrp058() DEFINE producto RECORD LIKE analisis.* { factura INTEGER, orden INTEGER, fecha DATE, sec_vend CHAR(40), tipo_cliente SMALLINT, sec_cliente INTEGER, nombre CHAR(60), cod_n LIKE iptb00002.cod_n, cod_grupo LIKE iptb00002.cod_grupo, cod_tipo LIKE iptb00002.cod_tipo, cod_sec LIKE iptb00002.cod_sec, codigo CHAR(25), descrip_t LIKE iptb00021.descripcion, grupo_local CHAR(30), ptipo LIKE iptb00021.descripcion, descrip_esp CHAR(60), unidad_med LIKE intb00001.unidad_med, ventas CHAR(1), Zona_geografica CHAR(30), pais CHAR(30), tipo_negocio SMALLINT, descripcion LIKE cctb00013.descripcion, unidad_b INTEGER, valor_b DEC(12,2), cantidad_dev INTEGER, precio_dev DEC(12,2), unidad_boni INTEGER, valor_boni DEC(12,2), costo_real DEC(12,4), costo_unid_b DEC(12,4), costo_unid_n DEC(12,4), costo_unid_n_us DEC(12,4), costo_std DEC(12,4), costo_std_b DEC(12,4), costo_std_n DEC(12,4), costo_tp DEC(12,4), descuento DEC(12,2), costo_tp1 DEC(12,4), costo_tp2 DEC(12,4), unidad_pres LIKE iptb00010.conversion, unidad_n INTEGER, ano SMALLINT, mes SMALLINT, tasa_tp DEC(10,3), ventas_netas DEC(12,2), valor_rd DEC(12,2), valor_us DEC(12,2), gastos_m_ind DEC(12,2), gastos_d DEC(12,2), gastos_directos DEC(12,2), margen_b_rd DEC(12,2), margen_b_US DEC(12,2), margen_stp_rd DEC(12,2), margen_stp_US DEC(12,2), identifica INTEGER, tipo_producto LIKE iptb00028.descripcion, cantidad_boni INTEGER, costo_boni DEC(12,2), costo_s_tp DEC(12,4), valor_tp DEC(12,2), pcosto DEC(12,4), descuento_p DEC(12,3), kano SMALLINT, kmes SMALLINT, ptasa DEC(8,3), costo DEC(12,4) END RECORD}, codigo CHAR(10), codigo_n integer, nombre CHAR(50), seleccion CHAR(200) # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 CLEAR SCREEN { OPEN FORM ipfmrp057 FROM "ipfmrp057" DISPLAY FORM ipfmrp057 CALL pantalla() DISPLAY "ipprrp057" AT 4,3 DISPLAY "DETERMINAR TP PRODUCTOS" AT 6,20 SELECT MAX(a.ano) INTO pano FROM prdtable a SELECT MAX(a.mes) INTO pmes FROM prdtable a WHERE a.ano = pano AND a.fecha_inicio <= TODAY } LET pano = 2007 DISPLAY "Actualizando campos en NULL... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) DISPLAY "Borrando data de ANALISIS ... Espere Por Favor" AT 19,14 DELETE FROM analisis WHERE fecha = today DISPLAY "Insertando Ventas Locales... Espere Por Favor" AT 19,14 INSERT INTO analisis SELECT b.cod_cia,' ', d.factura,d.orden,d.fecha_factura,m.nom1_emp,d.tipo_cliente,d.sec_cliente,j.nombre,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec, B.nomenclatura,x1.producto,' ',' ', b.descrip_esp,b.unidad_med, x3.descripcion, x.descrip,y.nombre_provincia,'1','TIPO NEGOCIO', f.cantidad,f.cantidad*f.precio,'0','0','0', ' ', '0','0','0','0','0','0','0','0',(f.precio*f.cantidad_2)*(cantidad_2/100),'0','0','0','0', p.ano,p.mes,'0','0','0','0','0','0','0','0','0','0','0' FROM iptb00002 b,vetb00002 d,vetb00003 f, vetb00004 j,prdtable p,adtb00003 m,vetb00008 x,OUTER vetb00020 y,OUTER vetb00009 z,vetb00059 x3,iptb00020 x1 WHERE (b.cod_n = f.cod_n and b.cod_grupo = f.cod_grupo and b.cod_tipo = f.cod_tipo and b.cod_sec = f.cod_sec) AND p.ano = pano AND# p.mes = pmes AND x1.cod_n = b.cod_n AND j.cod_zona = x.cod_zona AND j.cod_provincia = y.cod_provincia AND j.cod_zona = z.cod_zona AND j.cod_provincia = z.cod_provincia AND d.sec_vend = m.num_emp AND d.fecha_factura between p.fecha_inicio AND p.fecha_corte AND d.factura = f.factura AND d.tipo_cliente = j.tipo_cliente and d.sec_cliente = j.sec_cliente and d.ventas = x3.ventas AND f.status_t IS NULL AND (b.cod_n = f.cod_n and b.cod_grupo = f.cod_grupo and b.cod_tipo = f.cod_tipo and b.cod_sec = f.cod_sec) AND d.status_t IS NULL {VERSION RAYOVAC SELECT d.factura,d.orden,d.fecha_factura,m.nom1_emp,d.tipo_cliente,d.sec_cliente,j.nombre,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec, x2.nomenclatura,x1.descripcion,x4.descripcion,e.descripcion, b.descrip_esp,b.unidad_med, x3.descripcion, x.descrip,y.nombre_provincia,c.tipo_negocio,h.descripcion, f.cantidad,f.cantidad*f.precio,'0','0',f.bonificacion*i.cantidad, f.bonificacion*i.cantidad*f.precio, '0','0','0','0','0','0','0','0',(f.cantidad-(i.cantidad*f.bonificacion))*f.precio*f.cantidad_2/100,'0','0','0','0', p.ano,p.mes,'0','0','0','0','0','0','0','0','0','0','0' FROM iptb00022 a,iptb00021 e,intb00001 b,vetb00002 d,vetb00003 f, cctb00012 c,cctb00013 h ,vetb00014 i,vetb00004 j,prdtable p,adtb00003 m,vetb00008 x,vetb00020 y,vetb00009 z, iptb00028 x1,iptb00002 x2,vetb00059 x3,cotb00051 x4 WHERE (a.cod_n = f.cod_n and a.cod_grupo = f.cod_grupo and a.cod_tipo = f.cod_tipo and a.cod_sec = f.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.cod_n = x2.cod_n and a.cod_grupo = x2.cod_grupo and a.cod_tipo = x2.cod_tipo and a.cod_sec = x2.cod_sec) AND x2.codigo = x4.codigo AND a.cod_tamano = e.cod_tamano AND a.pcod_grupo = x1.cod_grupo AND p.ano = pano AND d.fecha_factura = TODAY AND j.cod_zona = x.cod_zona AND j.cod_provincia = y.cod_provincia AND j.cod_zona = z.cod_zona AND j.cod_provincia = z.cod_provincia AND d.sec_vend = m.num_emp AND d.fecha_factura between p.fecha_inicio AND p.fecha_corte AND d.factura = f.factura AND d.tipo_cliente = c.tipo_cliente and d.sec_cliente = c.sec_cliente and d.tipo_cliente = j.tipo_cliente and d.sec_cliente = j.sec_cliente and c.tipo_negocio = h.tipo_negocio and d.ventas = x3.ventas AND f.status_t IS NULL AND h.status_t IS NULL AND (b.cod_n = f.cod_n and b.cod_grupo = f.cod_grupo and b.cod_tipo = f.cod_tipo and b.cod_sec = f.cod_sec) AND d.status_t IS NULL AND d.us_crea = f.us_crea and b.status_t is NULL AND f.fech_crea > datetime (2005-09-30 08:00) year to minute IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DISPLAY "Insertando Devoluciones ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) INSERT INTO analisis SELECT k.factura,f.fecha,m.nom1_emp,f.tipo_cliente,f.sec_cliente,j.nombre,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec, x2.nomenclatura,x1.descripcion,x4.descripcion,e.descripcion, b.descrip_esp,b.unidad_med, 'DOMINICANA', x.descrip,y.nombre_provincia,c.tipo_negocio,h.descripcion, '0','0', f.cantidad,f.cantidad*k.precio,'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0', n.ano,n.mes,'0','0','0','0','0','0','0','0','0','0','0' FROM iptb00022 a,iptb00021 e,intb00001 b,iptb00023 f, cctb00012 c,cctb00013 h ,vetb00003 k,vetb00004 j,prdtable n,adtb00003 m,vetb00008 x,vetb00020 y,vetb00009 z, iptb00028 x1,iptb00002 x2,cotb00051 x4 WHERE (a.cod_n = f.cod_n and a.cod_grupo = f.cod_grupo and a.cod_tipo = f.cod_tipo and a.cod_sec = f.cod_sec) AND (a.cod_n = x2.cod_n and a.cod_grupo = x2.cod_grupo and a.cod_tipo = x2.cod_tipo and a.cod_sec = x2.cod_sec) AND a.cod_tamano = e.cod_tamano AND a.pcod_grupo = x1.cod_grupo AND x2.codigo = x4.codigo AND f.fecha between n.fecha_inicio AND n.fecha_corte AND n.ano = pano AND f.fecha = TODAY AND f.tipo_cliente = c.tipo_cliente and f.sec_cliente = c.sec_cliente and f.tipo_cliente = j.tipo_cliente and f.sec_cliente = j.sec_cliente and c.tipo_negocio = h.tipo_negocio and f.sec_vend = m.num_emp AND x.cod_zona = j.cod_zona AND y.cod_provincia = j.cod_provincia AND x.cod_zona = z.cod_zona AND y.cod_provincia = z.cod_provincia AND f.status_t IS NULL AND h.status_t IS NULL AND (a.cod_n = k.cod_n and a.cod_grupo = k.cod_grupo and a.cod_tipo = k.cod_tipo and a.cod_sec = k.cod_sec) AND (f.factura = k.factura) and (b.cod_n = f.cod_n and b.cod_grupo = f.cod_grupo and b.cod_tipo = f.cod_tipo and b.cod_sec = f.cod_sec) AND b.status_t is NULL IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DISPLAY "Insertando Ventas EXTERIOR... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) # VENTAS EXTERIOR INSERT INTO analisis SELECT k.factura,k.fecha_factura,m.nom1_emp,k.tipo_cliente,k.sec_cliente,j.nombre,'0','0','0','0', a.codigo,X1.descripcion,b.descripcion,g.descripcion,a.descripcion,d.unidad_med,'CARIBBEAN',x.descrip, y.nombre_provincia,c.tipo_negocio, h.descripcion,f.cant_emb,f.cant_emb*f.precio, '0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0', n.ano,n.mes,'0','0','0','0','0','0','0','0','0','0','0' FROM cotb00052 a,cotb00051 b,cotb00073 d,cotb00056 f,cotb00057 k, cctb00012 c,cctb00013 h, iptb00002 p,vetb00004 j,prdtable n,adtb00003 m,vetb00008 x,vetb00020 y,vetb00009 z, iptb00022 e, iptb00021 g,IPTB00028 X1 WHERE a.codigo = f.codigo and f.factura = k.factura AND a.tipo = b.codigo AND k.num_emp = m.num_emp AND k.fecha_factura between n.fecha_inicio AND n.fecha_corte AND n.ano = pano AND k.fecha_factura = TODAY AND f.codigo = p.nomenclatura AND a.codigo = p.nomenclatura AND d.codigo = p.nomenclatura AND p.cod_n = e.cod_n AND p.cod_grupo = e.cod_grupo AND p.cod_tipo = e.cod_tipo AND p.cod_sec = e.cod_sec AND e.cod_tamano = g.cod_tamano AND e.pcod_grupo = x1.cod_grupo AND x.cod_zona = j.cod_zona AND y.cod_provincia = j.cod_provincia AND x.cod_zona = z.cod_zona AND x.cod_zona !=100 AND y.cod_provincia = z.cod_provincia AND k.tipo_cliente = c.tipo_cliente and k.sec_cliente = c.sec_cliente and k.tipo_cliente = j.tipo_cliente and k.sec_cliente = j.sec_cliente and c.tipo_negocio = h.tipo_negocio and f.status_t IS NULL AND h.status_t IS NULL # VENTAS HAITI INSERT INTO analisis SELECT k.factura,k.fecha_factura,m.nom1_emp,k.tipo_cliente,k.sec_cliente,j.nombre,'0','0','0','0', a.codigo,X1.descripcion,b.descripcion,g.descripcion,a.descripcion,d.unidad_med,'HAITI',x.descrip, y.nombre_provincia,c.tipo_negocio, h.descripcion,f.cant_emb,f.cant_emb*f.precio, '0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0', n.ano,n.mes,'0','0','0','0','0','0','0','0','0','0','0' FROM cotb00052 a,cotb00051 b,cotb00073 d,cotb00056 f,cotb00057 k, cctb00012 c,cctb00013 h, iptb00002 p,vetb00004 j,prdtable n,adtb00003 m,vetb00008 x,vetb00020 y,vetb00009 z, iptb00022 e, iptb00021 g,IPTB00028 X1 WHERE a.codigo = f.codigo and f.factura = k.factura AND a.tipo = b.codigo AND k.num_emp = m.num_emp AND k.fecha_factura between n.fecha_inicio AND n.fecha_corte AND n.ano = pano AND k.fecha_factura = TODAY AND f.codigo = p.nomenclatura AND a.codigo = p.nomenclatura AND d.codigo = p.nomenclatura AND p.cod_n = e.cod_n AND p.cod_grupo = e.cod_grupo AND p.cod_tipo = e.cod_tipo AND p.cod_sec = e.cod_sec AND e.cod_tamano = g.cod_tamano AND e.pcod_grupo = x1.cod_grupo AND x.cod_zona = j.cod_zona AND y.cod_provincia = j.cod_provincia AND x.cod_zona = z.cod_zona AND x.cod_zona = 100 AND # PARA IDENTIFICAR HAITI y.cod_provincia = z.cod_provincia AND k.tipo_cliente = c.tipo_cliente and k.sec_cliente = c.sec_cliente and k.tipo_cliente = j.tipo_cliente and k.sec_cliente = j.sec_cliente and c.tipo_negocio = h.tipo_negocio and f.status_t IS NULL AND h.status_t IS NULL IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF } # BUSCA EL MONTO DEL TP GLOBAL DISPLAY "Buscando informacion para costo ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) LET seleccion = "SELECT a.*,a.rowid FROM analisis a WHERE a.ano = ? " PREPARE comando FROM seleccion DECLARE accion SCROLL CURSOR FOR comando OPEN accion USING pano LET cnt = 9 LET mesant = 0 FOREACH accion INTO producto.*,pidentifica IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET codigo = producto.cod_n USING "&","-", producto.cod_grupo using "&","-", producto.cod_tipo using "&&","-", producto.cod_sec using "&&&" # BUSCA COSTO REAL LET producto.costo_real = 0 LET fecha_lq1 = NULL SELECT MAX(fecha_lq) INTO fecha_lq1 FROM cttb00013 a,prdtable b WHERE a.cod_n = producto.cod_n AND a.cod_grupo = producto.cod_grupo AND a.cod_tipo = producto.cod_tipo AND a.cod_sec = producto.cod_sec AND b.ano = pano AND b.mes = producto.mes AND a.tipo_lq != "T" AND a.fecha_lq <= b.fecha_corte SELECT AVG(a.costo_lq) INTO producto.costo_real FROM cttb00013 a WHERE a.cod_n = producto.cod_n AND a.cod_grupo = producto.cod_grupo AND a.cod_tipo = producto.cod_tipo AND a.cod_sec = producto.cod_sec AND a.tipo_lq != "T" AND a.fecha_lq = fecha_lq1 #------------------------------------------------------------------------------------------- # COSTO STANDARD #------------------------------------------------------------------------------------------- LET producto.costo_std = 0 SELECT AVG(a.material+a.labor+a.gastos) INTO producto.costo_std FROM iptb00004 a WHERE a.mes_fin = 12 AND a.cod_n = producto.cod_n AND a.cod_grupo = producto.cod_grupo AND a.cod_tipo = producto.cod_tipo AND a.cod_sec = producto.cod_sec AND a.ano = pano AND a.status_t is null IF producto.costo_std IS NULL THEN LET producto.costo_std = 0 END IF # BUSCA TRANSFER PRICE IF producto.costo_real is null THEN LET producto.costo_real = 0 END IF LET producto.ventas_netas = producto.valor_bruto - producto.valor_devuelto - producto.valor_bonfica - producto.descuento IF producto.cod_cia = 1 THEN LET producto.origen_producto = "LOCAL" ELSE LET producto.origen_producto = "EXPORTACION" END IF display "COD CIA ",producto.cod_cia," ",producto.origen_producto UPDATE analisis set analisis.costo_real = producto.costo_real, analisis.origen_producto = producto.origen_producto, analisis.costo_unid_b = producto.costo_real*producto.unidades_brutas, analisis.costo_real = producto.costo_real, analisis.costo_std = producto.costo_std, analisis.costo_std_b = producto.costo_std*producto.unidades_brutas, analisis.costo_std_n = producto.costo_std*producto.unidades_brutas, analisis.ventas_netas = producto.ventas_netas - producto.descuento WHERE rowid = pidentifica END FOREACH END FUNCTION