{ ======================================================================= 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, Carlos Franco 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 sec_vend INTEGER, tipo_cliente LIKE vetb00002.tipo_cliente, sec_cliente LIKE vetb00002.sec_cliente, tipo_negocio SMALLINT, descripcion CHAR(30), compania SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DECIMAL(14,2), valor_act DECIMAL(14,2), cantidad_ant DECIMAL(14,2), valor_ant DECIMAL(14,2), codigo CHAR(7), descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med END RECORD, desc_mes CHAR(12), elije CHAR(1) DEFINE ger_comp132 RECORD sec_vend INTEGER, tipo_cliente LIKE vetb00002.tipo_cliente, sec_cliente LIKE vetb00002.sec_cliente, tipo_negocio SMALLINT, descripcion CHAR(30), compania SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DECIMAL(14,2), valor_act DECIMAL(14,2) END RECORD DEFINE nomb,apell CHAR(15), nombre CHAR(30), p_mes,p_ano,p_ano_ant,mov1 SMALLINT, esta CHAR(1), idx1,idx2 INTEGER, devol1,devol2 DECIMAL(12,4) DEFINE salir,salir1 CHAR(1) DEFINE fecha1,fecha2,fecha_inicial,fecha_final DATE FUNCTION geprrp020() LET int_flag = FALSE OPTIONS FORM LINE 8 CALL pantalla() OPEN FORM gefmrp020 FROM "gefmrp020" DISPLAY "geprrp020" AT 4,3 ATTRIBUTE(RED) DISPLAY FORM gefmrp020 DISPLAY "Ranking de Ventas Por Vendedor, Compania y Producto" AT 6,15 ATTRIBUTE(BLACK) LET tipo_papel = 1 CALL msgrp000(tipo_papel) CALL defecto(impresor) RETURNING imprime, letras.*, archivo INPUT BY NAME p_ano,p_mes, elije AFTER FIELD p_ano IF p_ano is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_ano END IF AFTER FIELD p_mes IF p_ano is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_ano END IF LET p_ano_ant = p_ano - 1 SELECT MIN(fecha_inicio)INTO fecha_inicial FROM prdtable WHERE ano = p_ano SELECT fecha_corte INTO fecha_final FROM prdtable WHERE mes = p_mes and ano = p_ano SELECT MIN(fecha_inicio) INTO fecha1 FROM prdtable WHERE ano = p_ano_ant SELECT fecha_corte INTO fecha2 FROM prdtable WHERE mes = p_mes and ano = p_ano_ant SELECT descrip INTO desc_mes FROM mestable WHERE mes = p_mes AFTER FIELD elije EXIT INPUT END INPUT IF int_flag tHEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CONSTRUCT criterio ON d.sec_vend,b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_sec FROM sec_vend,cod_n,cod_grupo,cod_tipo,cod_sec ON KEY(CONTROL-P) CALL busca_printer() RETURNING imprime,letras.*, archivo AFTER CONSTRUCT EXIT CONSTRUCT END CONSTRUCT IF int_flag tHEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF elije = "C" THEN #Ordenado por Cliente LET selec1 = "SELECT d.sec_vend, d.tipo_cliente, d.sec_cliente, e.tipo_negocio,", "f.descripcion, b.cod_cia, b.cod_n,b.cod_grupo, b.cod_tipo,", "b.cod_sec, SUM(b.cantidad), SUM(b.cantidad*b.precio) ", "FROM vetb00003 b,vetb00002 d, cctb00012 e, cctb00013 f ", "WHERE (b.factura = d.factura) AND ", "(d.fecha_factura between ? and ?) AND ", "(d.ventas = '1') AND ", " d.status_t is null AND ", "(d.sec_cliente = e.sec_cliente) AND ", "(e.tipo_negocio= f.tipo_negocio) AND ", CRITERIO CLIPPED, " GROUP BY 1,2,3,4,5,6,7,8,9,10 ORDER BY 2,3,6,7,8,9,10" DISPLAY "Buscando .. Espere por Favor" AT 17,14 ATTRIBUTE(BOLD) LET selec2 = "SELECT d.sec_vend, d.tipo_cliente, d.sec_cliente, e.tipo_negocio,", "f.descripcion, b.cod_cia, b.cod_n,b.cod_grupo, b.cod_tipo,", "b.cod_sec, SUM(b.cantidad), SUM(b.cantidad*b.precio) ", "FROM vetb00003 b,vetb00002 d, cctb00012 e, cctb00013 f ", "WHERE (b.factura = d.factura) AND ", "(d.fecha_factura between ? and ?) AND ", "(d.ventas = '1') AND ", " d.status_t is null AND ", "(d.sec_cliente = e.sec_cliente) AND ", "(e.tipo_negocio= f.tipo_negocio) AND ", CRITERIO CLIPPED, " GROUP BY 1,2,3,4,5,6,7,8,9,10 ORDER BY 2,3,6,7,8,9,10" DISPLAY "Buscando Ano Anterior... Espere " AT 17,14 ATTRIBUTE(BOLD) ELSE #Ordenado por Vendedor LET selec1 = "SELECT d.sec_vend, d.tipo_cliente, d.sec_cliente, e.tipo_negocio,", "f.descripcion, b.cod_cia, b.cod_n,b.cod_grupo, b.cod_tipo,", "b.cod_sec, SUM(b.cantidad), SUM(b.cantidad*b.precio) ", "FROM vetb00003 b,vetb00002 d, cctb00012 e, cctb00013 f ", "WHERE (b.factura = d.factura) AND ", "(d.fecha_factura between ? and ?) AND ", "(d.ventas = '1') AND ", " d.status_t is null AND ", "(d.sec_cliente = e.sec_cliente) AND ", "(e.tipo_negocio= f.tipo_negocio) AND ", CRITERIO CLIPPED, " GROUP BY 1,2,3,4,5,6,7,8,9,10 ORDER BY 1,6,7,8,9,10" DISPLAY "Buscando .. Espere por Favor" AT 17,14 ATTRIBUTE(BOLD) LET selec2 = "SELECT d.sec_vend, d.tipo_cliente, d.sec_cliente, e.tipo_negocio,", "f.descripcion, b.cod_cia, b.cod_n,b.cod_grupo, b.cod_tipo,", "b.cod_sec, SUM(b.cantidad), SUM(b.cantidad*b.precio) ", "FROM vetb00003 b,vetb00002 d, cctb00012 e, cctb00013 f ", "WHERE (b.factura = d.factura) AND ", "(d.fecha_factura between ? and ?) AND ", "(d.ventas = '1') AND ", " d.status_t is null AND ", "(d.sec_cliente = e.sec_cliente) AND ", "(e.tipo_negocio= f.tipo_negocio) AND ", CRITERIO CLIPPED, " GROUP BY 1,2,3,4,5,6,7,8,9,10 ORDER BY 1,6,7,8,9,10" DISPLAY "Buscando Ano Anterior... " AT 17,14 ATTRIBUTE(BOLD) END IF PREPARE comando1 FROM selec1 DECLARE buscar1 SCROLL CURSOR FOR comando1 OPEN buscar1 USING fecha_inicial,fecha_final PREPARE comando2 FROM selec2 DECLARE buscar2 SCROLL CURSOR FOR comando2 OPEN buscar2 USING fecha1,fecha2 START REPORT repor_20 TO archivo DISPLAY "Reporte Generandose ... Espere por Favor" AT 17,14 ATTRIBUTE(BOLD) # Busqueda de los registros que estan en el ano actual y en el anterior LET idx1 = 0 LET salir1 = "N" WHILE salir1 != "S" FETCH buscar1 INTO ger_comp131.* IF STATUS = NOTFOUND THEN LET salir1 = "S" LET idx1 = 1 EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET idx1 = idx1 + 1 IF ger_comp131.cantidad IS NULL THEN LET ger_comp131.cantidad = 0 END IF IF ger_comp131.valor_act IS NULL THEN LET ger_comp131.valor_act = 0 END IF LET ger_comp131.codigo = ger_comp131.cod_n using "&", ger_comp131.cod_grupo using "&", ger_comp131.cod_tipo using "&&", ger_comp131.cod_sec using "&&&" LET ger_comp131.cantidad_ant = 0 LET ger_comp131.valor_ant = 0 # Busqueda de las informaciones del ano anetrior LET salir = "N" LET idx = 1 WHILE salir != "S" FETCH ABSOLUTE idx buscar2 INTO ger_comp132.* IF STATUS = NOTFOUND THEN LET salir = "S" EXIT WHILE END IF LET idx = idx + 1 IF ger_comp131.cod_n = ger_comp132.cod_n and ger_comp131.cod_grupo = ger_comp132.cod_grupo and ger_comp131.cod_tipo = ger_comp132.cod_tipo and ger_comp131.cod_sec = ger_comp132.cod_sec and ger_comp131.compania = ger_comp132.compania and ger_comp131.sec_vend = ger_comp132.sec_vend THEN LET ger_comp131.cantidad_ant = ger_comp132.cantidad LET ger_comp131.valor_ant = ger_comp132.valor_act EXIT WHILE END IF END WHILE IF ger_comp131.codigo != "0000000" THEN OUTPUT TO REPORT repor_20(ger_comp131.*) END IF END WHILE # Busqueda de los registros que estan en el ano anterior y no en ano Actual LET idx = 1 LET idx1 = 1 LET salir1 = "N" WHILE salir1 != "S" FETCH ABSOLUTE idx1 buscar2 INTO ger_comp131.* IF STATUS = NOTFOUND THEN LET salir1 = "S" LET idx1 = 1 EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF ger_comp131.cantidad IS NULL THEN LET ger_comp131.cantidad = 0 END IF LET esta = "N" LET idx1 = idx1 + 1 LET idx = 1 # Busqueda de las informaciones del ano actual LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx buscar1 INTO ger_comp132.* IF STATUS = NOTFOUND THEN LET salir = "S" EXIT WHILE END IF LET idx = idx + 1 display ger_comp131.cod_n ," ", ger_comp131.cod_grupo ," ", ger_comp131.cod_tipo ," ", ger_comp131.cod_sec ," ", ger_comp131.compania ," ", ger_comp131.sec_vend ," " AT 8,50 display ger_comp132.cod_n ," ", ger_comp132.cod_grupo ," ", ger_comp132.cod_tipo ," ", ger_comp132.cod_sec ," ", ger_comp132.compania ," ", ger_comp132.sec_vend ," " AT 9,50 display idx1," ",esta AT 10,50 IF ger_comp131.cod_n = ger_comp132.cod_n and ger_comp131.cod_grupo = ger_comp132.cod_grupo and ger_comp131.cod_tipo = ger_comp132.cod_tipo and ger_comp131.cod_sec = ger_comp132.cod_sec and ger_comp131.compania = ger_comp132.compania and ger_comp131.sec_vend = ger_comp132.sec_vend THEN LET esta = "S" EXIT WHILE END IF END WHILE IF esta = "N" THEN LET ger_comp131.codigo = ger_comp131.cod_n using "&", ger_comp131.cod_grupo using "&", ger_comp131.cod_tipo using "&&", ger_comp131.cod_sec using "&&&" display ger_comp131.cod_n ," ", ger_comp131.cod_grupo ," ", ger_comp131.cod_tipo ," ", ger_comp131.cod_sec ," ", ger_comp131.compania ," ", ger_comp131.sec_vend ," " AT 12,50 LET ger_comp131.cantidad_ant = ger_comp131.cantidad LET ger_comp131.valor_ant = ger_comp131.valor_act LET ger_comp131.cantidad = 0 LET ger_comp131.valor_act= 0 IF ger_comp131.codigo != "0000000" THEN OUTPUT TO REPORT repor_20(ger_comp131.*) END IF END IF END WHILE FINISH REPORT repor_20 RUN imprime END FUNCTION REPORT repor_20(x) DEFINE x RECORD sec_vend INTEGER, tipo_cliente LIKE vetb00002.tipo_cliente, sec_cliente LIKE vetb00002.sec_cliente, tipo_negocio SMALLINT, descripcion CHAR(30), compania SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, cantidad DECIMAL(14,2), cantidad_ant DECIMAL(14,2), valor_act DECIMAL(14,2), valor_ant DECIMAL(14,2), codigo CHAR(7), descrip_esp LIKE intb00001.descrip_esp, unidad_med LIKE intb00001.unidad_med END RECORD, ventas,ventas_ant DECIMAL(12,2) DEFINE hora CHAR(5), nombre_cli LIKE vetb00004.nombre OUTPUT LEFT MARGIN 2 TOP MARGIN 1 ORDER BY x.sec_vend,x.compania,x.cantidad DESC, x.codigo FORMAT PAGE HEADER LET hora = time PRINT COLUMN 1, letras.comp_on,letras.negrillas_on PRINT COLUMN 1, "geprrp020", COLUMN 25, " R A Y . O . V A C D O M I N I C A N A, S. A.", COLUMN 91, "Pag. ", pageno using "###" PRINT COLUMN 38, "SISTEMA DE INFORMACION GERENCIAL", COLUMN 91, today using "dd/mm/yyyy" PRINT COLUMN 25, "Ranking de Ventas Por Vendedor, Compania y Producto", COLUMN 94, hora SKIP 1 LINES PRINT COLUMN 1, "HASTA MES DE ",desc_mes PRINT COLUMN 1, "-------------------------------------------------", "------------------------------------------", "----------------------------------------------" PRINT COLUMN 65, "Unidades", COLUMN 80, "Valores", COLUMN 95, "Unidades", COLUMN 110, "Valores" PRINT COLUMN 65, "Vendidas", COLUMN 80, "Vendidos", COLUMN 95, "Vendidas", COLUMN 110, "Vendidos" PRINT COLUMN 1, "Posicion y Producto", COLUMN 65, p_ano_ant using "####", COLUMN 80, p_ano_ant using "####", COLUMN 95, p_ano using "####", COLUMN 110, p_ano using "####", COLUMN 127, "Tipo Neg." PRINT COLUMN 1, "-------------------------------------------------", "------------------------------------------", "---------------------------------------------" PRINT COLUMN 1, letras.negrillas_off BEFORE GROUP OF x.sec_vend SKIP TO TOP OF PAGE SELECT UNIQUE a.nom1_emp,a.apell1_emp INTO nomb,apell FROM adtb00003 a WHERE a.num_emp = x.sec_vend LET nombre = nomb CLIPPED," ",apell CLIPPED PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 1, "Vendedor: ",x.sec_vend USING "&&&&"," ",nombre, letras.negrillas_off BEFORE GROUP OF x.compania PRINT COLUMN 1, letras.negrillas_on IF x.compania = 1 THEN PRINT COLUMN 1, "Productos Locales", letras.negrillas_off ELSE PRINT COLUMN 1, "Productos Importados", letras.negrillas_off END IF LET idx2 = 0 AFTER GROUP OF x.codigo LET idx2 = idx2 + 1 SELECT UNIQUE a.descrip_esp,a.unidad_med INTO x.descrip_esp,x.unidad_med FROM intb00001 a WHERE a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec= x.cod_sec LET ventas = GROUP SUM(x.cantidad) WHERE x.sec_vend = x.sec_vend LET ventas_ant = GROUP SUM(x.cantidad_ant) WHERE x.sec_vend = x.sec_vend PRINT COLUMN 1, idx2 USING "&&&"," ", x.cod_n USING "&","-",x.cod_grupo USING "&","-", x.cod_tipo USING "&&","-",x.cod_sec USING "&&&", " ", x.descrip_esp[1,40]," ",x.unidad_med CLIPPED, COLUMN 46, ventas_ant USING "###,###,###,###", COLUMN 61, GROUP SUM(x.valor_ant) USING "###,###,###,###", COLUMN 76, ventas USING "###,###,###,###", COLUMN 91, GROUP SUM(x.valor_act)USING "###,###,###,###", COLUMN 127, x.descripcion clipped AFTER GROUP OF x.compania PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 61, "----------------", COLUMN 76, "----------------", COLUMN 91, "----------------", COLUMN 106, "----------------" LET ventas = GROUP SUM(x.cantidad) WHERE x.sec_vend = x.sec_vend LET ventas_ant = GROUP SUM(x.cantidad_ant) WHERE x.sec_vend = x.sec_vend PRINT COLUMN 1, "Total Compania ---> ", COLUMN 61, ventas_ant USING "###,###,###,###", COLUMN 76, GROUP SUM(x.valor_ant) USING "###,###,###,###", COLUMN 91, ventas USING "###,###,###,###", COLUMN 106, GROUP SUM(x.valor_act)USING "###,###,###,###" PRINT COLUMN 1, letras.negrillas_off AFTER GROUP OF x.sec_vend PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 61, "----------------", COLUMN 76, "----------------", COLUMN 91, "----------------", COLUMN 106,"----------------" LET ventas = GROUP SUM(x.cantidad) LET ventas_ant = GROUP SUM(x.cantidad_ant) PRINT COLUMN 1, "Total Vendedor ---> ", COLUMN 61, ventas_ant USING "###,###,###,###", COLUMN 76, GROUP SUM(x.valor_ant) USING "###,###,###,###", COLUMN 91, ventas USING "###,###,###,###", COLUMN 106, GROUP SUM(x.valor_act)USING "###,###,###,###" PRINT COLUMN 1, letras.negrillas_off ON LAST ROW PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 61, "================", COLUMN 76, "================", COLUMN 91, "================", COLUMN 106, "================" PRINT COLUMN 1, "Total General ---> ", COLUMN 61, SUM(x.cantidad_ant) USING "###,###,###,###", COLUMN 76, SUM(x.valor_ant) USING "###,###,###,###", COLUMN 91, SUM(x.cantidad) USING "###,###,###,###", COLUMN 106, SUM(x.valor_act)USING "###,###,###,###" PRINT COLUMN 1, letras.normal,letras.negrillas_off END REPORT