Files
MBS/PROYECTO/vedir/veprrp009.4gl
T

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