Files
MBS/PROYECTO/gedir/geprrp020.4gl
T

541 lines
19 KiB
Plaintext

{
=======================================================================
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