344 lines
11 KiB
Plaintext
344 lines
11 KiB
Plaintext
{
|
|
-------------------------------------------------------------------------------
|
|
PROGRAMA : VEPRRP009
|
|
OBJETIVO : Control de ventas mensual por vendedor
|
|
PROGRAMADOR : Ing. Juan Soto (Johnny)
|
|
FECHA REALIZACION : Enero 08, 1993
|
|
-------------------------------------------------------------------------------
|
|
}
|
|
GLOBALS "veprgb000.4gl"
|
|
|
|
FUNCTION veprrp009()
|
|
|
|
DEFINE mes_ini_p,mes_fin_p,mes_ini,mes_fin CHAR(2)
|
|
DEFINE select_zona,select_cliente,select_pilas CHAR(1500)
|
|
DEFINE idx_o,idx_e,idx_p,idx_m SMALLINT
|
|
DEFINE esta,encontre,salir2,salir1,salir CHAR(1)
|
|
|
|
DEFINE vendedor RECORD
|
|
meses SMALLINT,
|
|
zona SMALLINT,
|
|
sec_vend SMALLINT,
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad_Pres DECIMAL(12,3),
|
|
descrip_esp CHAR(30),
|
|
unidad_med CHAR(4) ,
|
|
porciento DECIMAL(8,4),
|
|
nom_emp CHAR(30),
|
|
apell_emp CHAR(30),
|
|
ventas_acum DECIMAL(12,3),
|
|
cantidad_vend DECIMAL(12,3)
|
|
END RECORD
|
|
|
|
#WHENEVER ERROR CONTINUE
|
|
|
|
OPTIONS
|
|
FORM LINE 8,
|
|
ERROR LINE 23,
|
|
COMMENT LINE 21,
|
|
PROMPT LINE 14
|
|
|
|
OPEN FORM vefmrp009 FROM "vefmrp009"
|
|
DISPLAY FORM vefmrp009
|
|
CALL pantalla()
|
|
DISPLAY "veprrp009" AT 4,3
|
|
DISPLAY "Control de Ventas Mensual" AT 6,27
|
|
|
|
## TIPO DE PAPEL NECESARIO PARA IMPRIMIR EL REPORTE
|
|
LET tipo_papel = 1
|
|
CALL msgrp000(tipo_papel)
|
|
|
|
## CRITERIO PARA LA IMPRESION DEL REPORTE
|
|
INPUT BY NAME fact_gral.cod_cia,fact_gral.ventas
|
|
AFTER FIELD ventas
|
|
IF fact_gral.ventas is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD ventas
|
|
END IF
|
|
|
|
AFTER FIELD cod_cia
|
|
IF fact_gral.cod_cia is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_cia
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
LET mes_ini = MONTH(rango.fech_in) using "&&"
|
|
LET mes_fin = MONTH(rango.fech_fi) using "&&"
|
|
LET ano_c = YEAR(today)
|
|
|
|
CONSTRUCT criterio ON c.mes,c.zona,f.sec_vend FROM mes,zona,sec_vend
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
|
|
# Busca Los Movimientos de las Facturas
|
|
|
|
LET select_cliente =
|
|
"SELECT UNIQUE c.mes,c.zona,f.sec_vend,d.cod_n,d.cod_grupo,d.cod_tipo, ",
|
|
" d.cod_sec,e.cantidad,d.descrip_esp, d.unidad_med,c.porciento ",
|
|
"FROM iptb00002 d,vetb00017 e,vetb00010 f,vetb00016 c ",
|
|
"WHERE ",criterio clipped," and f.cod_zona = c.zona and e.mes = c.mes and ",
|
|
" c.ventas = ? and c.ventas = e.ventas and c.cod_n = e.cod_n and ",
|
|
" c.cod_grupo = e.cod_grupo and c.cod_tipo = e.cod_tipo and ",
|
|
" c.cod_sec = e.cod_sec and d.cod_n = e.cod_n and ",
|
|
" d.cod_grupo = e.cod_grupo and d.cod_tipo = e.cod_tipo and ",
|
|
" d.cod_sec = e.cod_sec and e.ano = ? ",
|
|
"ORDER BY 1,2,3,4,5,6,7"
|
|
|
|
DISPLAY " " AT 19,14
|
|
DISPLAY "<< Buscando Informacion ... Espere Por Favor >>" AT 19,14
|
|
ATTRIBUTE (REVERSE,BOLD)
|
|
|
|
PREPARE busca_movi FROM select_cliente
|
|
DECLARE movi_curs SCROLL CURSOR FOR busca_movi
|
|
OPEN movi_curs USING fact_gral.ventas,ano_c
|
|
START REPORT control TO "C:\\archivo"
|
|
|
|
DISPLAY " " AT 19,14
|
|
DISPLAY "<< Reporte Generandose ... Por Favor Espere >>"
|
|
AT 19,14 ATTRIBUTE (REVERSE)
|
|
|
|
LET idx_p = 1
|
|
LET salir1 = "N"
|
|
WHILE salir1 != "S"
|
|
FETCH movi_curs INTO vendedor.*
|
|
|
|
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
|
|
|
|
IF vendedor.cantidad_vend is null THEN
|
|
LET vendedor.cantidad_vend = 0
|
|
END IF
|
|
|
|
OUTPUT TO REPORT control(vendedor.*)
|
|
END WHILE
|
|
FINISH REPORT control
|
|
CLEAR SCREEN
|
|
RUN "type C:\\archivo > %USPRINT%" END FUNCTION
|
|
|
|
REPORT control(x)
|
|
DEFINE x RECORD
|
|
meses SMALLINT,
|
|
zona SMALLINT,
|
|
sec_vend SMALLINT,
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
cantidad_Pres DECIMAL(12,3),
|
|
descrip_esp CHAR(30),
|
|
unidad_med CHAR(4) ,
|
|
porciento DECIMAL(8,4),
|
|
nom_emp CHAR(30),
|
|
apell_emp CHAR(30),
|
|
ventas_acum DECIMAL(12,3),
|
|
cantidad_vend DECIMAL(12,3)
|
|
END RECORD
|
|
|
|
DEFINE vendedor,imp,imp1 CHAR (1)
|
|
DEFINE nombre_mes CHAR(11)
|
|
DEFINE descrip_zone CHAR(30)
|
|
DEFINE doble_on CHAR(3)
|
|
DEFINE pais,doble_off CHAR(3)
|
|
DEFINE negrillas_on CHAR(6)
|
|
DEFINE negrillas_off CHAR(6)
|
|
DEFINE comp_on CHAR(3)
|
|
DEFINE comp_off CHAR(3)
|
|
DEFINE doce CHAR(6)
|
|
DEFINE normal CHAR(6)
|
|
DEFINE hora CHAR(5)
|
|
DEFINE variacion,monto DECIMAL(12,2)
|
|
DEFINE i SMALLINT
|
|
DEFINE periodo1,periodo2 DATE
|
|
|
|
OUTPUT
|
|
TOP MARGIN 0
|
|
LEFT MARGIN 7
|
|
BOTTOM MARGIN 2
|
|
|
|
FORMAT
|
|
PAGE HEADER
|
|
LET doble_on = ASCII 14
|
|
LET doble_off = ASCII 20
|
|
LET negrillas_on = ASCII 27, ASCII 69
|
|
LET negrillas_off = ASCII 27, ASCII 70
|
|
LET comp_on = ASCII 15
|
|
LET comp_off = ASCII 18
|
|
LET doce = ASCII 27, ASCII 77
|
|
LET normal = ASCII 27, ASCII 80
|
|
LET hora = time
|
|
LET lj = (122 - LENGTH(p_companias.nombre CLIPPED))/2
|
|
|
|
PRINT comp_on
|
|
PRINT COLUMN 1,negrillas_on
|
|
PRINT COLUMN 1, "veprrp009",
|
|
COLUMN lj, p_companias.nombre CLIPPED,
|
|
COLUMN 115, "Pag. ", pageno using "###"
|
|
PRINT COLUMN 52, "Sistema de Ventas ",
|
|
COLUMN 113, today using "dd/mm/yyyy"
|
|
PRINT COLUMN 41, "Control de Ventas Mensual Por Vendedor",
|
|
COLUMN 118, hora
|
|
|
|
SKIP 1 LINES
|
|
|
|
PRINT COLUMN 1, "--------------------------------------------------",
|
|
"--------------------------------------------------" ,
|
|
"------------------------"
|
|
PRINT COLUMN 69, "Ventas",
|
|
COLUMN 84, "Presupuesto",
|
|
COLUMN 115, "Porciento"
|
|
|
|
PRINT COLUMN 4, "P r o d u c t o",
|
|
COLUMN 58, "Ventas",
|
|
COLUMN 69, "Acumuladas",
|
|
COLUMN 84, "Mes",
|
|
COLUMN 99, "Presupuestado",
|
|
COLUMN 115, "Variacion"
|
|
|
|
PRINT COLUMN 1, "--------------------------------------------------",
|
|
"--------------------------------------------------" ,
|
|
"------------------------",
|
|
negrillas_off
|
|
|
|
BEFORE GROUP OF x.meses
|
|
CALL meses()
|
|
LET i = x.meses
|
|
LET nombre_mes = mes1[i]
|
|
PRINT COLUMN 18,doble_on,"Mes de: ", nombre_mes
|
|
SKIP 1 LINE
|
|
|
|
# BEFORE GROUP OF x.cod_vend
|
|
# LET vendedor = "S"
|
|
BEFORE GROUP OF x.sec_vend
|
|
LET vendedor = "S"
|
|
|
|
BEFORE GROUP OF x.zona
|
|
IF fact_gral.ventas = "1" THEN
|
|
SELECT descrip INTO descrip_zone FROM vetb00008
|
|
WHERE cod_zona = x.zona
|
|
|
|
IF status = notfound THEN
|
|
LET status = 0
|
|
END IF
|
|
END IF
|
|
|
|
IF fact_gral.ventas = "2" THEN
|
|
SELECT nom_pais INTO descrip_zone FROM cotb00018
|
|
WHERE cod_pais = x.zona
|
|
|
|
IF status = notfound THEN
|
|
LET status = 0
|
|
END IF
|
|
END IF
|
|
|
|
PRINT COLUMN 1, negrillas_on,
|
|
COLUMN 2, "Zona: ","(",x.zona using "<<<",")",
|
|
COLUMN 14, descrip_zone,negrillas_off;
|
|
|
|
IF vendedor = "S" THEN
|
|
SELECT nom1_emp,apell1_emp INTO descrip1,descrip2 FROM adtb00003
|
|
WHERE num_emp = x.sec_vend
|
|
|
|
PRINT COLUMN 40, negrillas_on,"Vendedor: ",
|
|
x.sec_vend using "&&&&"," ",
|
|
descrip1 clipped," ",descrip2 clipped,negrillas_off
|
|
LET vendedor = "N"
|
|
END IF
|
|
|
|
SKIP 1 LINE
|
|
|
|
ON EVERY ROW
|
|
|
|
# Busca La Venta del Vendedor en el mes correspondiente
|
|
|
|
SELECT fecha_inicio,fecha_corte INTO periodo1,periodo2 FROM prdtable
|
|
WHERE ano = ano_c and mes = i
|
|
|
|
SELECT sum(b.cantidad-b.cantidad_2) INTO x.cantidad_vend
|
|
FROM vetb00002 a,vetb00003 b
|
|
WHERE a.zona=x.zona and a.ventas=fact_gral.ventas and a.factura=b.factura and
|
|
a.status_t is null and a.sec_vend=x.sec_vend and a.fecha_factura between
|
|
periodo1 and periodo2 and b.cod_n=x.cod_n and b.cod_grupo=x.cod_grupo
|
|
and b.cod_tipo=x.cod_tipo and b.cod_sec = x.cod_sec
|
|
|
|
# Busca Las ventas acumuladas del vendedor para el mes correspondiente
|
|
|
|
SELECT sum(b.cantidad-b.cantidad_2) INTO x.ventas_acum
|
|
FROM vetb00002 a,vetb00003 b
|
|
WHERE a.zona=x.zona and a.ventas=fact_gral.ventas and a.factura=b.factura and
|
|
b.cod_n=x.cod_n and b.cod_grupo=x.cod_grupo and b.cod_tipo=x.cod_tipo
|
|
and b.cod_sec=x.cod_sec and a.status_t is null and a.sec_vend=x.sec_vend and
|
|
a.fecha_factura <= periodo2
|
|
|
|
IF x.cantidad_vend is null THEN
|
|
LET x.cantidad_vend = 0
|
|
END IF
|
|
|
|
IF x.ventas_acum is null THEN
|
|
LET x.ventas_acum = 0
|
|
END IF
|
|
|
|
# Calculo del sub-total del monto y monto
|
|
IF x.porciento != 0 THEN
|
|
LET monto = x.cantidad_pres * (x.porciento / 100)
|
|
END IF
|
|
|
|
IF x.cantidad_vend != 0 THEN
|
|
LET variacion = x.cantidad_vend / monto
|
|
END IF
|
|
|
|
IF monto > x.cantidad_vend THEN
|
|
LET variacion = variacion * -1
|
|
END IF
|
|
|
|
PRINT COLUMN 1, x.cod_n using "&","-",
|
|
COLUMN 3, x.cod_grupo using "&","-",
|
|
COLUMN 5, x.cod_tipo using "&&","-",
|
|
COLUMN 8, x.cod_sec using "&&&",
|
|
COLUMN 14, x.descrip_esp," ",x.unidad_med,
|
|
COLUMN 52, x.cantidad_vend using "#,###,###.##",
|
|
COLUMN 65, x.ventas_acum using "###,###,###.##",
|
|
COLUMN 80, monto using "##,###,###.##",
|
|
"(",x.porciento using "<<<.####","%",")",
|
|
COLUMN 95, x.cantidad_pres using "#,###,###.##",
|
|
COLUMN 117, variacion USING "((&.&&)"
|
|
|
|
LET imp = "N"
|
|
LET imp1 = "N"
|
|
|
|
# Salida de Sub-totales por zona
|
|
|
|
AFTER GROUP OF x.meses
|
|
SKIP TO TOP OF PAGE
|
|
|
|
END REPORT
|
|
|