{ ======================================================================= Programa : GEPRRP015 Sistema : Sistema de Informacion Gerencia Proceso : Ranking de Ventas por Vendedor, Compania y Cliente Acumulado Autor : Juan F. Soto Fecha : Mayo 22, 1996. ======================================================================= } GLOBALS "geprgb000.4gl" DEFINE ger_comp12 RECORD sec_vend INTEGER, compania SMALLINT, tipo_cliente SMALLINT, sec_cliente SMALLINT, venta DECIMAL(14,2), venta_ant DECIMAL(14,2), venta_ant1 DECIMAL(14,2), nombre_zona CHAR(20), nombre_prov CHAR(20), nombre CHAR(30) END RECORD, valor_dev DEC(12,2) DEFINE ger_comp121 RECORD sec_vend INTEGER, compania SMALLINT, tipo_cliente SMALLINT, sec_cliente SMALLINT, ventas DECIMAL(14,2) END RECORD DEFINE ger_comp122 RECORD sec_vend INTEGER, compania SMALLINT, tipo_cliente SMALLINT, sec_cliente SMALLINT, ventas DECIMAL(14,2) END RECORD DEFINE ger_comp123 RECORD sec_vend INTEGER, compania SMALLINT, tipo_cliente SMALLINT, sec_cliente SMALLINT, ventas DECIMAL(14,2) END RECORD DEFINE nomb,apell CHAR(15), nombre CHAR(30), mov1 SMALLINT, idx1,idx2 INTEGER, venta_ant1,venta_ant2 DECIMAL(12,4) , desc_mes CHAR(12), valor DEC(12,2) DEFINE esta,esta1,salir,salir1,salir2,salir3 CHAR(1), p_ano_ant1,p_ano_ant,p_ano,p_mes SMALLINT DEFINE fecha3,fecha4,fecha1,fecha2,fecha_inicial,fecha_final DATE FUNCTION geprrp015() LET int_flag = FALSE OPTIONS FORM LINE 8 CALL pantalla() OPEN FORM gefmrp015 FROM "gefmrp015" DISPLAY "geprrp015" AT 4,3 ATTRIBUTE(RED) DISPLAY FORM gefmrp015 DISPLAY "Ranking de Ventas Por Vendedor, Compania y Cliente Acumulada" AT 6,10 ATTRIBUTE(BLACK) LET tipo_papel = 1 CALL msgrp000(tipo_papel) CALL defecto(impresor) RETURNING imprime,letras.*, archivo INPUT BY NAME p_ano,p_mes,valor ON KEY(CONTROL-P) CALL busca_printer() RETURNING imprime,letras.*, archivo 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_mes IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_mes END IF LET p_ano_ant = p_ano - 1 LET p_ano_ant1 = p_ano - 2 SELECT fecha_inicio INTO fecha_inicial FROM prdtable WHERE mes = 10 and ano = p_ano SELECT fecha_corte INTO fecha_final FROM prdtable WHERE mes = p_mes and ano = p_ano SELECT fecha_inicio INTO fecha1 FROM prdtable WHERE mes = 10 and ano = p_ano_ant SELECT fecha_corte INTO fecha2 FROM prdtable WHERE mes = p_mes and ano = p_ano_ant SELECT fecha_inicio INTO fecha3 FROM prdtable WHERE mes = 10 and ano = p_ano_ant1 SELECT fecha_corte INTO fecha4 FROM prdtable WHERE mes = p_mes and ano = p_ano_ant1 SELECT descrip INTO desc_mes FROM mestable WHERE mes = p_mes END INPUT IF int_flag tHEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF CONSTRUCT criterio ON a.sec_vend,a.tipo_cliente,a.sec_cliente FROM sec_vend,tipo_cliente,sec_cliente 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 # Creacion Tabla Temporal Para el Reporte CREATE TEMP TABLE geprrp015 ( sec_vend SMALLINT, cod_cia SMALLINT, tipo_cliente SMALLINT, sec_cliente SMALLINT, valor DECIMAL(12,2), valor_ant DECIMAL(12,2), valor_ant1 DECIMAL(12,2)) WITH NO LOG CREATE UNIQUE INDEX temp1 ON geprrp015(sec_vend,cod_cia,tipo_cliente, sec_cliente) # Ano Actual LET selec1 = "SELECT b.sec_vend,'1',a.tipo_cliente,a.sec_cliente, ", " SUM(a.sub_total -a.monto_desc) ", "FROM vetb00002 a,vetb00028 b,cctb00012 d ", "WHERE a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND ", " a.tipo_cliente = d.tipo_cliente and ", " a.sec_cliente = d.sec_cliente and d.tipo_negocio = 2 and ", " (a.fecha_factura BETWEEN ? AND ?) AND ", " (a.ventas = '1') AND (a.status_t IS NULL) AND ",criterio CLIPPED, " GROUP BY 1,2,3,4 HAVING SUM(a.sub_total -a.monto_desc) > ? ", "ORDER BY 1,2,5 DESC,3,4 " DISPLAY "Buscando Informacion2... Espere por Favor" AT 17,14 ATTRIBUTE(BOLD) PREPARE comando1 FROM selec1 DECLARE buscar1 CURSOR FOR comando1 OPEN buscar1 USING fecha_inicial,fecha_final,valor # Ano Anterior LET selec4 = "SELECT b.sec_vend,a.cod_cia,a.tipo_cliente,a.sec_cliente, ", " SUM(a.sub_total -a.monto_desc) ", "FROM vetb00002 a,vetb00028 b,cctb00012 d ", "WHERE a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND ", " a.tipo_cliente = d.tipo_cliente and ", " a.sec_cliente = d.sec_cliente and d.tipo_negocio = 2 and ", " (a.fecha_factura BETWEEN ? AND ?) AND ", " (a.ventas = '1') AND (a.status_t IS NULL) AND ",criterio CLIPPED, " GROUP BY 1,2,3,4 HAVING SUM(a.sub_total -a.monto_desc) > ? ", "ORDER BY 1,2,5 DESC,3,4 " DISPLAY "Buscando Ano Anterior... Espere por Favor" AT 17,14 ATTRIBUTE(BOLD) PREPARE comando2 FROM selec4 DECLARE buscar2 CURSOR FOR comando2 OPEN buscar2 USING fecha1,fecha2,valor # Ano Anterior Anterior LET selec4 = "SELECT b.sec_vend,a.cod_cia,a.tipo_cliente,a.sec_cliente, ", " SUM(a.sub_total -a.monto_desc) ", "FROM vetb00002 a,vetb00028 b,cctb00012 d ", "WHERE a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND ", " a.tipo_cliente = d.tipo_cliente and ", " a.sec_cliente = d.sec_cliente and d.tipo_negocio = 2 and ", " (a.fecha_factura BETWEEN ? AND ?) AND ", " (a.ventas = '1') AND (a.status_t IS NULL) AND ",criterio CLIPPED, " GROUP BY 1,2,3,4 HAVING SUM(a.sub_total -a.monto_desc) > ? ", "ORDER BY 1,2,5 DESC,3,4 " DISPLAY "Buscando Ano Anterior 2... Espere por Favor" AT 17,14 ATTRIBUTE(BOLD) PREPARE comando3 FROM selec4 DECLARE buscar3 CURSOR FOR comando3 OPEN buscar3 USING fecha3,fecha4,valor START REPORT repor_15 TO archivo DISPLAY "Reporte Generandose ... Espere por Favor" AT 17,14 ATTRIBUTE(BOLD) LET ger_comp12.sec_vend = 0 LET ger_comp12.compania = 0 LET ger_comp12.tipo_cliente= 0 LET ger_comp12.sec_cliente = 0 LET ger_comp12.nombre = " " LET ger_comp12.venta = 0 LET ger_comp12.venta_ant = 0 LET ger_comp12.venta_ant1 = 0 LET idx = 1 LET idx1 = 0 LET salir1 = "N" WHILE salir1 != "S" FETCH buscar1 INTO ger_comp121.* IF STATUS = NOTFOUND THEN LET salir1 = "S" EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF # Busca devoluciones por vendedor LET valor_Dev = 0 SELECT SUM(a.cantidad*b.precio) INTO valor_dev FROM iptb00023 a,vetb00003 b WHERE (a.fecha BETWEEN fecha_inicial AND fecha_final) AND a.sec_vend = ger_comp121.sec_vend AND (a.sec_cliente = ger_comp121.sec_cliente AND 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 (a.factura = b.factura) AND (a.status_t IS NULL) IF valor_Dev IS NULL THEN LET valor_dev = 0 END IF LET ger_comp121.ventas = ger_comp121.ventas - valor_dev # Insertar en la tabla temporal INSERT INTO geprrp015 VALUES (ger_comp121.sec_vend,ger_comp121.compania, ger_comp121.tipo_cliente,ger_comp121.sec_cliente, ger_comp121.ventas,0,0) END WHILE # Busca Las Informaciones del ano anterior LET idx = 1 LET salir2 = "N" WHILE salir2 != "S" FETCH buscar2 INTO ger_comp122.* IF status = notfound THEN LET salir2 = "S" LET idx = 1 EXIT WHILE END IF LET idx = idx + 1 # Busca devoluciones por vendedor LET valor_Dev = 0 SELECT SUM(a.cantidad*b.precio) INTO valor_dev FROM iptb00023 a,vetb00003 b WHERE (a.fecha BETWEEN fecha1 AND fecha2) AND a.sec_vend = ger_comp121.sec_vend AND (a.sec_cliente = ger_comp121.sec_cliente AND 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 (a.factura = b.factura) AND (a.status_t IS NULL) IF valor_Dev IS NULL THEN LET valor_dev = 0 END IF LET ger_comp121.ventas= ger_comp121.ventas - valor_dev SELECT unique a.sec_cliente FROM geprrp015 a WHERE a.sec_vend = ger_comp122.sec_vend AND a.cod_cia = ger_comp122.compania AND a.tipo_cliente = ger_comp122.tipo_cliente AND a.sec_cliente = ger_comp122.sec_cliente IF STATUS != NOTFOUND THEN UPDATE geprrp015 SET valor_ant = ger_comp122.ventas WHERE sec_vend = ger_comp122.sec_vend AND cod_cia = ger_comp122.compania AND tipo_cliente = ger_comp122.tipo_cliente AND sec_cliente = ger_comp122.sec_cliente ELSE INSERT INTO geprrp015 VALUES (ger_comp122.sec_vend,ger_comp122.compania, ger_comp122.tipo_cliente,ger_comp122.sec_cliente, 0,ger_comp122.ventas,0) END IF END WHILE # Busca las informaciones del ano anterior anterior LET idx1 = 1 LET salir3 = "N" WHILE salir3 != "S" FETCH buscar3 INTO ger_comp123.* IF status = notfound THEN LET salir3 = "S" LET idx1 = 1 EXIT WHILE END IF # Busca devoluciones por vendedor LET valor_Dev = 0 SELECT SUM(a.cantidad*b.precio) INTO valor_dev FROM iptb00023 a,vetb00003 b WHERE (a.fecha BETWEEN fecha3 AND fecha4) AND a.sec_vend = ger_comp121.sec_vend AND (a.sec_cliente = ger_comp121.sec_cliente AND 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 (a.factura = b.factura) AND (a.status_t IS NULL) IF valor_Dev IS NULL THEN LET valor_dev = 0 END IF LET ger_comp121.ventas = ger_comp121.ventas - valor_dev SELECT unique a.sec_cliente FROM geprrp015 a WHERE a.sec_vend = ger_comp123.sec_vend AND a.cod_cia = ger_comp123.compania AND a.tipo_cliente = ger_comp123.tipo_cliente AND a.sec_cliente = ger_comp123.sec_cliente IF STATUS != NOTFOUND THEN UPDATE geprrp015 SET valor_ant1 = ger_comp123.ventas WHERE sec_vend = ger_comp123.sec_vend AND cod_cia = ger_comp123.compania AND tipo_cliente = ger_comp123.tipo_cliente AND sec_cliente = ger_comp123.sec_cliente ELSE INSERT INTO geprrp015 VALUES (ger_comp123.sec_vend,ger_comp123.compania, ger_comp123.tipo_cliente,ger_comp123.sec_cliente, 0,0,ger_comp123.ventas) END IF END WHILE DECLARE temporal CURSOR FOR SELECT a.*,b.descrip,c.nombre_provincia FROM geprrp015 a,vetb00008 b,vetb00020 c,vetb00004 f WHERE a.tipo_cliente = f.tipo_cliente and a.sec_cliente = f.sec_cliente and f.cod_zona = b.cod_zona and f.cod_provincia = c.cod_provincia ORDER BY sec_vend,cod_cia,valor DESC,tipo_cliente,sec_cliente FOREACH temporal INTO ger_comp12.* OUTPUT TO REPORT repor_15(ger_comp12.*) END FOREACH FINISH REPORT repor_15 RUN imprime END FUNCTION REPORT repor_15(x) DEFINE x RECORD sec_vend INTEGER, compania SMALLINT, tipo_cliente SMALLINT, sec_cliente SMALLINT, venta DECIMAL(14,2), venta_ant DECIMAL(14,2), venta_ant1 DECIMAL(14,2), nombre_zona CHAR(20), nombre_prov CHAR(20), nombre CHAR(30) END RECORD DEFINE hora CHAR(5) OUTPUT LEFT MARGIN 2 TOP MARGIN 1 FORMAT PAGE HEADER LET hora = time PRINT COLUMN 1, letras.doce,letras.negrillas_on PRINT COLUMN 1, "geprrp015", 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 25, " Sistema de Informacion Gerencial", COLUMN 91, today using "dd/mm/yyyy" PRINT COLUMN 25, "Ranking de Ventas Por Vendedor, Compania y Cliente", COLUMN 94, hora SKIP 1 LINES PRINT COLUMN 25, " ACUMULADO" PRINT COLUMN 1, "Mes De ",desc_mes PRINT COLUMN 1, "-------------------------------------------------", "---------------------------------------------------" PRINT COLUMN 63, "Venta", COLUMN 80, "Venta", COLUMN 96, "Venta" PRINT COLUMN 1, "Posicion y Cliente", COLUMN 63, p_ano using "####", COLUMN 80, p_ano_ant using "####", COLUMN 96, p_ano_ant1 using "####" 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 ON EVERY ROW SELECT a.nombre INTO x.nombre FROM vetb00004 a WHERE a.tipo_cliente = x.tipo_cliente AND a.sec_cliente = x.sec_cliente LET idx2 = idx2 + 1 PRINT COLUMN 1, idx2 USING "&&&"," ", x.tipo_cliente USING "&&","-", x.sec_cliente USING "&&&&"," ", " ",x.nombre ," ",x.nombre_zona,x.nombre_prov," ", COLUMN 88, x.venta USING "-,---,---,---.##", COLUMN 106, x.venta_ant USING "-,---,---,---.##", COLUMN 121, x.venta_ant1 USING "-,---,---,---.##" AFTER GROUP OF x.compania PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 51, "----------------", COLUMN 68, "----------------", COLUMN 85, "----------------" PRINT COLUMN 1, "Total Compania ---> ", COLUMN 51, GROUP SUM(x.venta) USING "-,---,---,---.##", COLUMN 68, GROUP SUM(x.venta_ant) USING "-,---,---,---.##", COLUMN 85, GROUP SUM(x.venta_ant1) USING "-,---,---,---.##" PRINT COLUMN 1, letras.negrillas_off AFTER GROUP OF x.sec_vend PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 51, "----------------", COLUMN 68, "----------------", COLUMN 85, "----------------" PRINT COLUMN 1, "Total Vendedor ---> ", COLUMN 51, GROUP SUM(x.venta) USING "-,---,---,---.##", COLUMN 68, GROUP SUM(x.venta_ant) USING "-,---,---,---.##", COLUMN 85, GROUP SUM(x.venta_ant1) USING "-,---,---,---.##" PRINT COLUMN 1, letras.negrillas_off ON LAST ROW PRINT COLUMN 1, letras.negrillas_on PRINT COLUMN 51, "================", COLUMN 68, "================", COLUMN 85, "================" PRINT COLUMN 1, "Total General ---> ", COLUMN 51, SUM(x.venta) USING "-,---,---,---.##", COLUMN 68, SUM(x.venta_ant) USING "-,---,---,---.##", COLUMN 85, SUM(x.venta_ant1) USING "-,---,---,---.##" PRINT COLUMN 1, letras.normal,letras.negrillas_off END REPORT