Files
MBS/PROYECTO/gedir/geprrp012.jh
T

579 lines
19 KiB
Plaintext

{
=======================================================================
Programa : GEPRRP012
Sistema : Sistema de Informacion Gerencia
Proceso : Ranking de Ventas por Vendedor, Compania y Cliente
Autor : Tadeo A. Ferreras
Fecha : Enero 18, 1995
Modificado Por: Juan F. Soto
Descripcion : Se le quito las columnas Devoluciones y neto.
Se Agrego la columna de VENTAS DEL ANO ANTERIOR AL ACTUAL.
Fecha : Mayo 21, 1996.
=======================================================================
}
GLOBALS
"geprgb000.4gl"
DEFINE ger_comp12 RECORD
sec_vend INTEGER,
compania SMALLINT,
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
venta DECIMAL(14,2),
venta_ant DECIMAL(14,2),
venta_ant1 DECIMAL(14,2)
END RECORD,
p_mes_ini SMALLINT
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, desc_mes_ini CHAR(12)
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 geprrp012()
LET int_flag = FALSE
OPTIONS
FORM LINE 8
CALL pantalla()
OPEN FORM gefmrp012 FROM "gefmrp012"
DISPLAY "geprrp012" AT 4,3 ATTRIBUTE(RED)
DISPLAY FORM gefmrp012
DISPLAY "Ranking de Ventas Por Vendedor, Compania y Cliente" 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_ini,p_mes
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 = p_mes_ini 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 = p_mes_ini 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 = p_mes_ini 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
SELECT descrip INTO desc_mes_ini
FROM mestable
WHERE mes = p_mes_ini
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
# Ano Actual
LET selec1 =
"SELECT a.sec_vend,a.cod_cia,a.tipo_cliente,a.sec_cliente, ",
" SUM(a.neto) ",
"FROM vetb00002 a ",
"WHERE ",
" (a.fecha_factura BETWEEN ? AND ?) AND ",
" (a.ventas = '1') AND (a.status_t IS NULL) AND ",criterio CLIPPED,
" GROUP BY 1,2,3,4 ORDER BY 1,2,3,4,5 "
DISPLAY "Buscando Informacion2... Espere por Favor" AT 17,14
ATTRIBUTE(BOLD)
PREPARE comando1 FROM selec1
DECLARE buscar1 SCROLL CURSOR FOR comando1
OPEN buscar1 USING fecha_inicial,fecha_final
# Ano Anterior
LET selec4 =
"SELECT a.sec_vend,a.cod_cia,a.tipo_cliente,a.sec_cliente, ",
" SUM(a.neto) ",
"FROM vetb00002 a ",
"WHERE ",
" (a.fecha_factura BETWEEN ? AND ?) AND ",
" (a.ventas = '1') AND (a.status_t IS NULL) AND ",criterio CLIPPED,
" GROUP BY 1,2,3,4 ORDER BY 1,2,3,4,5 "
DISPLAY "Buscando Ano Anterior... Espere por Favor" AT 17,14
ATTRIBUTE(BOLD)
PREPARE comando2 FROM selec4
DECLARE buscar2 SCROLL CURSOR FOR comando2
OPEN buscar2 USING fecha1,fecha2
# Ano Anterior Anterior
LET selec4 =
"SELECT a.sec_vend,a.cod_cia,a.tipo_cliente,a.sec_cliente, ",
" SUM(a.neto) ",
"FROM vetb00002 a ",
"WHERE ",
" (a.fecha_factura BETWEEN ? AND ?) AND ",
" (a.ventas = '1') AND (a.status_t IS NULL) AND ",criterio CLIPPED,
" GROUP BY 1,2,3,4 ORDER BY 1,2,3,4,5 "
DISPLAY "Buscando Ano Anterior 2... Espere por Favor" AT 17,14
ATTRIBUTE(BOLD)
PREPARE comando3 FROM selec4
DECLARE buscar3 SCROLL CURSOR FOR comando3
OPEN buscar3 USING fecha3,fecha4
START REPORT repor_12 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
LET ger_comp12.sec_vend = ger_comp121.sec_vend
LET ger_comp12.compania = ger_comp121.compania
LET ger_comp12.tipo_cliente = ger_comp121.tipo_cliente
LET ger_comp12.sec_cliente = ger_comp121.sec_cliente
LET ger_comp12.venta = ger_comp121.ventas
LET ger_comp12.venta_ant = 0
LET ger_comp12.venta_ant1 = 0
display ger_comp12.sec_cliente at 17,2
# Busca Las Informaciones del ano anterior
LET idx = 1
LET salir2 = "N"
WHILE salir2 != "S"
FETCH ABSOLUTE idx buscar2 INTO ger_comp122.*
IF status = notfound THEN
LET salir2 = "S"
LET idx = 1
EXIT WHILE
END IF
LET idx = idx + 1
IF ger_comp122.sec_vend = ger_comp12.sec_vend and
ger_comp122.compania = ger_comp12.compania and
ger_comp122.tipo_cliente = ger_comp12.tipo_cliente and
ger_comp122.sec_cliente = ger_comp12.sec_cliente THEN
LET ger_comp12.venta_ant = ger_comp122.ventas
EXIT WHILE
END IF
END WHILE
# Busca las informaciones del ano anterior anterior
LET idx1 = 1
LET salir3 = "N"
WHILE salir3 != "S"
FETCH ABSOLUTE idx1 buscar3 INTO ger_comp123.*
IF status = notfound THEN
LET salir3 = "S"
LET idx1 = 1
EXIT WHILE
END IF
LET idx1 = idx1 + 1
IF ger_comp123.sec_vend = ger_comp12.sec_vend and
ger_comp123.compania = ger_comp12.compania and
ger_comp123.tipo_cliente = ger_comp12.tipo_cliente and
ger_comp123.sec_cliente = ger_comp12.sec_cliente THEN
LET ger_comp12.venta_ant1 = ger_comp123.ventas
EXIT WHILE
END IF
END WHILE
OUTPUT TO REPORT repor_12(ger_comp12.*)
END WHILE
# Busca los registros que estan en el ano anterior y no estan en el ano actual
LET idx = 1
LET idx1 = 0
LET salir1 = "N"
WHILE salir1 != "S"
FETCH buscar2 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
LET ger_comp12.sec_vend = ger_comp121.sec_vend
LET ger_comp12.compania = ger_comp121.compania
LET ger_comp12.tipo_cliente = ger_comp121.tipo_cliente
LET ger_comp12.sec_cliente = ger_comp121.sec_cliente
LET ger_comp12.venta = 0
LET ger_comp12.venta_ant = ger_comp121.ventas
LET ger_comp12.venta_ant1 = 0
# Busca Las Informaciones del ano actual
LET esta = "N"
LET salir2 = "N"
WHILE salir2 != "S"
FETCH ABSOLUTE idx buscar1 INTO ger_comp122.*
IF status = notfound THEN
LET salir2 = "S"
EXIT WHILE
END IF
LET idx = idx + 1
IF ger_comp122.sec_vend = ger_comp12.sec_vend and
ger_comp122.compania = ger_comp12.compania and
ger_comp122.tipo_cliente = ger_comp12.tipo_cliente and
ger_comp122.sec_cliente = ger_comp12.sec_cliente THEN
LET esta = "S"
EXIT WHILE
END IF
END WHILE
IF esta = "N" THEN
OUTPUT TO REPORT repor_12(ger_comp12.*)
END IF
LET esta1 = "N"
# Busca las informaciones del ano anterior anterior
LET salir3 = "N"
WHILE salir3 != "S"
FETCH ABSOLUTE idx1 buscar3 INTO ger_comp123.*
IF status = notfound THEN
LET salir3 = "S"
EXIT WHILE
END IF
LET idx1 = idx1 + 1
IF ger_comp123.sec_vend = ger_comp12.sec_vend and
ger_comp123.compania = ger_comp12.compania and
ger_comp123.tipo_cliente = ger_comp12.tipo_cliente and
ger_comp123.sec_cliente = ger_comp12.sec_cliente THEN
LET esta1 = "S"
LET ger_comp12.venta_ant1 = ger_comp123.ventas
EXIT WHILE
END IF
END WHILE
IF esta1 = "S" THEN
LET ger_comp12.venta = 0
OUTPUT TO REPORT repor_12(ger_comp12.*)
END IF
END WHILE
# Busca los registros que estan en el ano anterior anterior
# y no estan en el ano Anterior
LET idx = 1
LET idx1 = 0
LET salir1 = "N"
WHILE salir1 != "S"
FETCH buscar3 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
LET ger_comp12.sec_vend = ger_comp121.sec_vend
LET ger_comp12.compania = ger_comp121.compania
LET ger_comp12.tipo_cliente = ger_comp121.tipo_cliente
LET ger_comp12.sec_cliente = ger_comp121.sec_cliente
LET ger_comp12.venta_ant1 = ger_comp121.ventas
LET ger_comp12.venta_ant = 0
LET ger_comp12.venta = 0
# Busca Las Informaciones del ano anterior
LET esta = "N"
LET salir2 = "N"
WHILE salir2 != "S"
FETCH ABSOLUTE idx1 buscar2 INTO ger_comp122.*
IF status = notfound THEN
LET salir2 = "S"
EXIT WHILE
END IF
LET idx1 = idx1 + 1
IF ger_comp122.sec_vend = ger_comp12.sec_vend and
ger_comp122.compania = ger_comp12.compania and
ger_comp122.tipo_cliente = ger_comp12.tipo_cliente and
ger_comp122.sec_cliente = ger_comp12.sec_cliente THEN
LET esta = "S"
EXIT WHILE
END IF
END WHILE
IF esta = "N" THEN
OUTPUT TO REPORT repor_12(ger_comp12.*)
END IF
LET esta1 = "N"
# Busca las informaciones del ano anterior anterior
LET salir3 = "N"
WHILE salir3 != "S"
FETCH ABSOLUTE idx buscar1 INTO ger_comp123.*
IF status = notfound THEN
LET salir3 = "S"
EXIT WHILE
END IF
LET idx = idx + 1
IF ger_comp123.sec_vend = ger_comp12.sec_vend and
ger_comp123.compania = ger_comp12.compania and
ger_comp123.tipo_cliente = ger_comp12.tipo_cliente and
ger_comp123.sec_cliente = ger_comp12.sec_cliente THEN
LET esta1 = "S"
EXIT WHILE
END IF
END WHILE
IF esta1 = "N" THEN
OUTPUT TO REPORT repor_12(ger_comp12.*)
END IF
END WHILE
FINISH REPORT repor_12
RUN imprime
END FUNCTION
REPORT repor_12(x)
DEFINE x RECORD
sec_vend INTEGER,
compania SMALLINT,
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
venta DECIMAL(14,2),
venta_ant DECIMAL(14,2),
venta_ant1 DECIMAL(14,2)
END RECORD
DEFINE hora CHAR(5)
OUTPUT
LEFT MARGIN 2
TOP MARGIN 1
ORDER BY x.sec_vend,x.compania,x.venta DESC,x.tipo_cliente,x.sec_cliente
FORMAT
PAGE HEADER
LET hora = time
PRINT COLUMN 1, letras.doce,letras.negrillas_on
PRINT COLUMN 1, "geprrp012",
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 1, "MES INICIAL: ",desc_mes_ini," HASTA ",desc_mes
PRINT COLUMN 1, "-------------------------------------------------",
"-------------------------------------------------"
PRINT COLUMN 59, "Venta",
COLUMN 72, "Venta",
COLUMN 93, "Venta"
PRINT COLUMN 1, "Posicion y Cliente",
COLUMN 59, p_ano using "####",
COLUMN 72, p_ano_ant using "####",
COLUMN 93, 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 CLIPPED,
COLUMN 51, x.venta USING "-,---,---,---.##",
COLUMN 68, x.venta_ant USING "-,---,---,---.##",
COLUMN 85, 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