{ ======================================================================= Programa : GEPRRP013 Sistema : Sistema de Informacion Gerencia Proceso : Ranking de Ventas por Vendedor, Compania y Producto Autor : Tadeo A. Ferreras Fecha : Enero 18, 1995 Modificado Por : Juan Soto Descripcion : Se quito las columnas devoluciones y neto. Se Agrego la columna VENTAS DEL ANO ANTERIOR AL ACTUAL. Fecha : MAyo 21, 1996. Modificado Por :Juan Soto Descripcion : Insertar el cliente Fecha : Febrero 28, 2001 ======================================================================= } GLOBALS "geprgb000.4gl" DEFINE ger_comp131 RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med, cantidad DECIMAL(16,4), valor DECIMAL(12,2), cantidad_ant DECIMAL(14,2), codigo CHAR(7) END RECORD, desc_mes CHAR(12), tipo_ranking CHAR(30), cantidad_registros SMALLINT DEFINE ger_comp132 RECORD LIKE ranking.* DEFINE p_mes,p_ano,p_ano_ant SMALLINT, idx2 INTEGER DEFINE fecha1,fecha2,fecha_inicial,fecha_final DATE MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT TO "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias CALL geprrp013() END MAIN FUNCTION geprrp013() DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings() r_filename STRING, -- filename of Report Design Document including .4rp extension r_output STRING, -- output format option preview INTEGER -- TRUE/FALSE, to set preview option LET int_flag = FALSE OPTIONS FORM LINE 8 OPEN FORM gefmrp013 FROM "gefmrp013" DISPLAY "geprrp013" AT 4,3 ATTRIBUTE(RED) DISPLAY FORM gefmrp013 DISPLAY "Ranking de Ventas Por Vendedor, Compania y Producto" AT 6,15 ATTRIBUTE(BLACK) INPUT BY NAME p_ano,p_mes,cantidad_registros,tipo_ranking BEFORE INPUT { CALL combo_din("formonly.p_ano","select distinct a.ano from prdtable a order by a.ano") CALL combo_din("formonly.p_mes","select a.descrip from mestable a order by a.mes") } LET p_ano= YEAR(TODAY) LET p_mes = MONTH(today) DISPLAY BY NAME p_ano,p_mes AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET p_ano_ant = p_ano - 1 SELECT MIN(a.fecha_inicio)INTO fecha_inicial FROM prdtable a WHERE a.ano = p_ano SELECT a.fecha_corte INTO fecha_final FROM prdtable a WHERE a.mes = p_mes and a.ano = p_ano SELECT MIN(a.fecha_inicio) INTO fecha1 FROM prdtable a WHERE a.ano = p_ano_ant SELECT a.fecha_corte INTO fecha2 FROM prdtable a WHERE a.mes = p_mes AND a.ano = p_ano_ant EXIT INPUT END INPUT CONSTRUCT criterio ON b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec FROM cod_n,cod_grupo,cod_tipo,cod_sec IF int_flag tHEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CALL seleccionarsalida() RETURNING r_output # CALL configureoutput(r_output) RETURNING HANDLER DELETE FROM ranking IF tipo_ranking = "CANTIDAD" THEN LET selec1 = " SELECT TOP ",cantidad_registros USING "<<<","a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,", " SUM(b.cantidad),SUM(b.cantidad*b.precio*f.tasa) FROM iptb00002 a,vetb00003 b,vetb00002 c,prdtable d,cgtb00084 f ", " WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo and ", " a.cod_Sec = b.cod_sec and b.factura = c.factura and c.fecha_factura between '",fecha_inicial USING "dd/mm/yyyy","' and '",fecha_final USING "mm/dd/yyyy","' and ", " c.fecha_factura between d.fecha_inicio and d.fecha_corte and ", " d.ano =f.ano and d.mes = f.mes and c.ventas = f.ventas and c.tipo_cliente = f.tipo_cliente and ", " c.status_t is null and ",criterio CLIPPED, " GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med", " ORDER BY SUM(b.cantidad) desc " ELSE LET selec1 =" SELECT TOP ",cantidad_registros USING "<<<"," a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,", " SUM(b.cantidad),SUM(b.cantidad*b.precio*f.tasa) FROM iptb00002 a,vetb00003 b,vetb00002 c,prdtable d,cgtb00084 f ", " WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo and ", " a.cod_Sec = b.cod_sec and b.factura = c.factura and c.fecha_factura between '",fecha_inicial USING "dd/mm/yyyy","' and '",fecha_final USING "mm/dd/yyyy","' and ", " c.fecha_factura between d.fecha_inicio and d.fecha_corte and ", " d.ano =f.ano and d.mes = f.mes and c.ventas = f.ventas and c.tipo_cliente = f.tipo_cliente and ", " c.status_t is null and ",criterio CLIPPED, " GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med", " ORDER BY SUM(b.cantidad*b.precio) desc " END IF PREPARE comando1 FROM selec1 DECLARE buscar1 CURSOR FOR comando1 OPEN buscar1 LET r_filename = "geprrp013.4rp" LET preview = 1 # LET r_output = "SVG" IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes START REPORT repor_13 TO XML HANDLER handler # Busqueda de los registros que estan en el ano actual y estan en el # Ano anterior LET idx = 1 FOREACH buscar1 INTO ger_comp131.* SELECT a.cod_n FROM ranking a WHERE a.cod_n = ger_comp131.cod_n AND a.cod_grupo = ger_comp131.cod_grupo AND a.cod_tipo = ger_comp131.cod_tipo AND a.cod_sec = ger_comp131.cod_sec IF STATUS= NOTFOUND THEN INSERT INTO ranking VALUES (idx,'0',ger_comp131.cod_n,ger_comp131.cod_grupo, ger_comp131.cod_tipo,ger_comp131.cod_sec, ger_comp131.descrip_esp,ger_comp131.unidad_med, ger_comp131.cantidad,ger_comp131.valor,'0','0') END IF LET idx = idx + 1 END FOREACH IF tipo_ranking = "CANTIDAD" THEN LET selec1 = " SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,", " SUM(b.cantidad),SUM(b.cantidad*b.precio*f.tasa) FROM iptb00002 a,vetb00003 b,vetb00002 c,prdtable d,cgtb00084 f ", " WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo and ", " a.cod_Sec = b.cod_sec and b.factura = c.factura and c.fecha_factura between '",fecha1 USING "dd/mm/yyyy","' and '",fecha2 USING "mm/dd/yyyy","' and ", " c.fecha_factura between d.fecha_inicio and d.fecha_corte and ", " d.ano =f.ano and d.mes = f.mes and c.ventas = f.ventas and c.tipo_cliente = f.tipo_cliente and ", " c.status_t is null and ",criterio CLIPPED, " GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med", " ORDER BY SUM(b.cantidad) desc " DISPLAY "fecha ",fecha1," fecha 2 ",fecha2 ELSE LET selec1 =" SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med,", " SUM(b.cantidad),SUM(b.cantidad*b.precio*f.tasa) FROM iptb00002 a,vetb00003 b,vetb00002 c,prdtable d,cgtb00084 f ", " WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo and ", " a.cod_Sec = b.cod_sec and b.factura = c.factura and c.fecha_factura between '",fecha1 USING "dd/mm/yyyy","' and '",fecha2 USING "mm/dd/yyyy","' and ", " c.fecha_factura between d.fecha_inicio and d.fecha_corte and ", " d.ano =f.ano and d.mes = f.mes and c.ventas = f.ventas and c.tipo_cliente = f.tipo_cliente and ", " c.status_t is null and ",criterio CLIPPED, " GROUP BY a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp,a.unidad_med", " ORDER BY SUM(b.cantidad*b.precio) desc " END IF PREPARE comando2 FROM selec1 DECLARE buscar2 CURSOR FOR comando2 OPEN buscar2 LET idx2 = 1 LET idx =0 FOREACH buscar2 INTO ger_comp131.* SELECT a.cod_n FROM ranking a WHERE a.cod_n = ger_comp131.cod_n AND a.cod_grupo = ger_comp131.cod_grupo AND a.cod_tipo = ger_comp131.cod_tipo AND a.cod_sec = ger_comp131.cod_sec IF STATUS<> NOTFOUND THEN UPDATE ranking SET rankingant = idx2, cantidad_ant = ger_comp131.cantidad, valor_ant = ger_comp131.valor WHERE cod_n = ger_comp131.cod_n AND cod_Grupo = ger_comp131.cod_grupo AND cod_tipo = ger_comp131.cod_tipo AND cod_sec = ger_comp131.cod_sec END IF LET idx2 = idx2 + 1 END FOREACH DECLARE busca_ranking CURSOR FOR SELECT a.* FROM ranking a ORDER BY a.rankingact LET idx = 1 FOREACH busca_ranking INTO ger_comp132.* IF idx < cantidad_registros THEN OUTPUT TO REPORT repor_13(ger_comp132.*) END IF END FOREACH FINISH REPORT repor_13 END IF END FUNCTION REPORT repor_13(x) DEFINE x RECORD LIKE ranking.* DEFINE hora CHAR(16) FORMAT FIRST PAGE HEADER LET hora = TODAY USING "dd/mm/yyyy" PRINTX desc_mes ON EVERY ROW PRINTX x.rankingact, x.rankingant, x.cod_n,x.cod_grupo, x.cod_tipo,x.cod_sec,cantidad_registros, x.descripcion,x.unidad_med, x.cantidad,x.cantidad_ant,x.valor_ant, x.valor,p_companias.nombre,p_ano,p_ano_ant,tipo_ranking,hora END REPORT