{ ------------------------------------------------------------------------------- PROGRAMA : ipprrp057 (Diario) 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 ipprrp057() END MAIN FUNCTION ipprrp057() 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 } display "aqui 1" # SELECT MAX(a.ano) INTO pano # FROM prdtable a display "aqui 2" #SELECT MAX(a.mes) INTO pmes FROM prdtable a #WHERE a.ano = pano AND # a.fecha_inicio <= TODAY display "aqui 3" LET pano = 2007 display "aqui 4" 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 ano = pano DISPLAY "Insertando Ventas Locales... Espere Por Favor" AT 19,14 INSERT INTO analisis SELECT b.cod_cia,'FACTURAS', 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,x2.descripcion,' ', 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,OUTER iptb00024 x2, 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 b.cod_tipo = x2.cod_tipo and b.cod_n = x2.cod_n 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 DISPLAY "Insertando Devoluciones ... Espere Por Favor" AT 19,14 ATTRIBUTE (REVERSE,BOLD) INSERT INTO analisis SELECT b.cod_cia,'DEVOLUCIONES', x4.num_doc,d.factura,x4.fecha,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,x2.descripcion,' ', b.descrip_esp,b.unidad_med, x3.descripcion, x.descrip,y.nombre_provincia,'1','TIPO NEGOCIO', x4.cantidad_2*-1,x4.cantidad_2*f.precio*-1,'0','0','0', ' ', '0','0','0','0','0','0','0','0','0','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,OUTER iptb00024 x2, vetb00004 j,prdtable p,adtb00003 m,vetb00008 x,OUTER vetb00020 y,OUTER vetb00009 z,vetb00059 x3,iptb00020 x1, iptb00006 x4 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 (b.cod_n = x4.cod_n and b.cod_grupo = x4.cod_grupo and b.cod_tipo = x4.cod_tipo and b.cod_sec = x4.cod_sec) AND x4.cod_mov in (12,13) AND d.factura = x4.fact_no AND b.cod_tipo = x2.cod_tipo and b.cod_n = x2.cod_n 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 X4.fecha 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 AND x4.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 = ? AND a.mes = ? " "SELECT a.*,a.rowid FROM analisis a WHERE a.ano = ? " PREPARE comando FROM seleccion DECLARE accion SCROLL CURSOR FOR comando OPEN accion USING pano # OPEN accion USING pano,pmes 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 #------------------------------------------------------------------------------------------- IF producto.ventas = "LOCAL RD$" THEN 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.ventas = 1 AND a.ano = pano AND a.status_t is null END IF IF producto.ventas = "LOCAL USD$" THEN 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.ventas = 3 AND a.ano = pano AND a.status_t is null END IF IF producto.ventas = "EXTERIOR USD$" THEN 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.ventas = 2 AND a.ano = pano AND a.status_t is null END IF 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 display "VENTAS ",producto.valor_bruto," Dev ",producto.valor_devuelto," Boni ",producto.valor_bonfica," Des ",producto.descuento IF producto.cod_cia = 1 THEN LET producto.origen_producto = "LOCAL" ELSE LET producto.origen_producto = "EXPORTACION" END IF UPDATE analisis set analisis.costo_real = producto.costo_real, analisis.costo_unid_b = producto.costo_real*producto.unidades_brutas, 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