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

260 lines
13 KiB
Plaintext

{=====================================================
FUNCION : VENTAS POR EQUIPO DE VENTAS
OBJETIVO : ***************************
PROGRAMADOR : Valentin Rodriguez
FECHA : 15/02/2019
=====================================================}
SCHEMA "smarmotech"
DEFINE datos RECORD
fecha_inicial DATE,
fecha_final DATE
END RECORD,
usuarios VARCHAR(20),
clave VARCHAR(20) ,
selec STRING,
pcompanias RECORD LIKE companias.*,
idx int,tipoReporte VARCHAR(30),
visualiza CHAR(1)
DEFINE ventasArea RECORD
equipo LIKE seg0008.nombre,
producto LIKE iptb00002.descrip_esp,
cantidad_vendida FLOAT,
valor FLOAT,
CantidadDevueta FLOAT,
valorDevuelto FLOAT,
vendedor VARCHAR(100)
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
SELECT * INTO pcompanias.* FROM companias
CALL despachoTransporte()
END MAIN
FUNCTION despachoTransporte()
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
r_filename STRING, -- filename of Report Design Document including .4rp extension
r_output STRING, -- output format option
preview INTEGER, -- TRUE/FALSE, to set preview option
criterio STRING
OPEN WINDOW HOME_FRM WITH FORM 'vefmrp054'
DIALOG ATTRIBUTE(UNBUFFERED)
INPUT BY NAME datos .*,tipoReporte
AFTER FIELD fecha_inicial
IF datos.fecha_inicial IS NULL THEN
CALL fgl_winmessage("INFO", "DEBE INDICAR UNA FECHA INICIAL DE BUSQUEDA", "INFO")
NEXT FIELD fecha_inicial
END IF
AFTER FIELD fecha_final
IF datos.fecha_final IS NULL THEN
CALL fgl_winmessage("INFO", "DEBE INDICAR UNA FECHA FINAL DE BUSQUEDA", "INFO")
NEXT FIELD fecha_final
END IF
IF datos.fecha_final < datos.fecha_inicial THEN
CALL fgl_winmessage("INFO", "LA FECHA FINAL DEBE SER MAS RECIENTE A LA INICIAL", "INFO")
NEXT FIELD fecha_final
END IF
AFTER INPUT
DISPLAY "DATO ",tipoReporte
END INPUT
CONSTRUCT criterio ON a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, c.depto,x.num_emp
FROM cod_n,cod_grupo,cod_tipo,cod_sec,equipos,kvendedor
BEFORE CONSTRUCT
CALL cequipos()
CALL cvendedor(usuarios)
ON ACTION mostrar
LET selec = "
select '('+cast(d.depto as char(5))+')'+d.nombre , '('+cast(a.cod_n as varchar(5))+'-'+
cast(a.cod_grupo as varchar(5))+'-'+cast(a.cod_tipo as varchar(5))+'-'+
cast(a.cod_sec as varchar(5))+')' +' '+ ISNULL(e.descrip_esp,' '),
SUM(A.CANTIDAD),
SUM((a.cantidad * a.precio) *f.tasa)-SUM((a.cantidad * a.precio) * (a.cantidad_2 / 100)*f.tasa),
'0', '0','('+CAST(x.num_emp as varchar(10))+')'+ISNULL(RTRIM(x.nom1_emp),' ')+' '+RTRIM(ISNULL(x.apell1_emp,' '))
FROM VETB00003 as a
INNER JOIN VETB00002 b on a.factura = b.factura
INNER JOIN vetb00061 h on b.ventas = h.ventas
INNER JOIN seg0000 c on b.sec_vend = c.sec_vend
INNER JOIN prdtable g on b.fecha_factura BETWEEN g.fecha_inicio AND g.fecha_corte
INNER JOIN cgtb00084 f on b.ventas = f.ventas AND b.tipo_cliente = f.tipo_cliente and f.mes = g.mes and f.ano = g.ano
inner join seg0008 d on c.depto = d.depto
inner join iptb00002 e on a.cod_n = e.cod_n AND a.cod_grupo = e.cod_grupo AND a.cod_tipo = e.cod_tipo AND a.cod_sec = e.cod_sec
inner join iptb00020 i on a.cod_n = i.cod_n
inner join adtb00003 x on x.num_emp = b.sec_vend
where " , criterio CLIPPED, " and ","
b.fecha_factura between '", datos.fecha_inicial USING "mm/dd/yyyy" , "' and '",datos.fecha_final USING "mm/dd/yyyy","' and
f.mes = g.mes AND f.ano = g.ano and
b.status_t IS NULL
group by '('+cast(d.depto as char(5))+')'+d.nombre, e.descrip_esp, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec,x.num_emp,x.nom1_emp,x.apell1_emp
union
SELECT '('+cast(d.depto as char(5))+')'+d.nombre, '('+cast(a.cod_n as varchar(5))+'-'+
cast(a.cod_grupo as varchar(5))+'-'+cast(a.cod_tipo as varchar(5))+'-'+
cast(a.cod_sec as varchar(5))+')' +' '+ ISNULL(e.descrip_esp,' '),
'0', '0',
SUM(q.cantidad_2) ,
SUM((q.cantidad_2 * a.precio) *f.tasa)-SUM((q.cantidad_2 * a.precio) * (a.cantidad_2 / 100)*f.tasa),
'('+CAST(x.num_emp as varchar(10))+')'+ISNULL(RTRIM(x.nom1_emp),' ')+' '+ISNULL(RTRIM(x.apell1_emp),' ')
FROM
iptb00006 AS q INNER JOIN
vetb00002 AS x3 on x3.factura = q.fact_no and x3.tipo_cliente = q.cod_sp and x3.sec_cliente = q.cod_sp_sec
INNER JOIN
prdtable AS g ON q.fecha BETWEEN g.fecha_inicio AND g.fecha_corte
INNER JOIN
cgtb00084 AS f ON x3.ventas = f.ventas AND q.cod_sp = f.tipo_cliente AND
f.mes = g.mes and f.ano = g.ano
INNER JOIN
vetb00003 AS a ON q.area = a.area AND q.cod_n = a.cod_n AND q.cod_grupo = a.cod_grupo AND
q.cod_tipo = a.cod_tipo AND q.cod_sec = a.cod_sec AND a.factura = x3.factura INNER JOIN
iptb00002 AS e ON a.cod_n = e.cod_n AND a.cod_grupo = e.cod_grupo AND a.cod_tipo = e.cod_tipo AND a.cod_sec = e.cod_sec INNER JOIN
iptb00020 AS i ON a.cod_n = i.cod_n AND a.cod_n = i.cod_n AND x3.factura = q.factura AND x3.factura = a.factura INNER JOIN
cctb00001 AS p ON q.cod_mov = p.banco AND q.num_doc = p.num_cheque AND q.cod_sp = p.tipo_cliente AND
q.cod_sp_sec = p.sec_cliente AND x3.factura = p.aplica_a and p.tipo_cliente = x3.tipo_cliente and
p.sec_cliente = x3.sec_cliente
INNER JOIN
vetb00061 AS h ON x3.ventas = h.ventas INNER JOIN
seg0000 c on p.cod_emp_sec = c.sec_vend INNER JOIN
seg0008 d on c.depto = d.depto inner join
adtb00003 x on p.cod_emp_sec = x.num_emp
WHERE " , criterio CLIPPED, " and ","
q.cod_mov IN (12, 13) AND
q.fecha between '", datos.fecha_inicial USING "mm/dd/yyyy" , "' and '",datos.fecha_final USING "mm/dd/yyyy","' and
p.tipo_doc = 'NC' AND
q.status_t IS NULL AND
p.status_t IS NULL
GROUP BY '('+cast(d.depto as char(5))+')'+d.nombre, e.descrip_esp, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec,x.num_emp,x.nom1_emp,x.apell1_emp
ORDER BY '('+cast(d.depto as char(5))+')'+d.nombre"
PREPARE comando FROM selec
DECLARE ventasArea_rpt CURSOR FOR comando
LET r_filename ="veprrp054.4rp"
LET idx = 1
IF tipoReporte = 0 THEN
LET visualiza=0
ELSE
LET visualiza=1
END IF
FOREACH ventasArea_rpt INTO ventasArea.*
IF idx = 1 THEN
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
--LET r_output='SVG'
LET preview=1
CALL seleccionarsalida() RETURNING r_output
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
ELSE
CALL fgl_winmessage("INFO", "NO HAY REGISTROS EN ESTE RANGO DE FECHA Y CON LOS PARAMETROS INDICADOS", "INFO")
NEXT FIELD fecha_final
END IF
LET idx = 2
START REPORT ventasArea_rpt TO XML HANDLER HANDLER
END IF
OUTPUT TO REPORT ventasArea_rpt(ventasArea.*)
END FOREACH
IF idx > 1 THEN
FINISH REPORT ventasArea_rpt
END IF
END CONSTRUCT
ON ACTION CANCEL
CALL msg(2)
LET INT_FLAG = FALSE
EXIT PROGRAM
END DIALOG
CLOSE WINDOW HOME_FRM
END FUNCTION
REPORT ventasArea_rpt(x)
DEFINE x RECORD
equipo LIKE seg0008.nombre,
producto LIKE seg0008.nombre,
cantidad_vendida FLOAT,
valor FLOAT,
CantidadDevueta FLOAT,
valorDevuelto FLOAT,
vendedor VARCHAR(100)
END RECORD,
ValorNeto DECIMAL(12,2) ,
totalCantidadVendida DECIMAL(12,2),
totalValor DECIMAL(12,2),
totalCantidadDevuelta DECIMAL(12,2),
totalCantidadNeta DECIMAL(12,2),
totalValorNeto,total_v,total_v_neto DECIMAL(12,2),
fecha_reporte char(30),
totalGenValorNeto,total_v_dev DECIMAL(12,2),
totalGenCantidadDevuelta,totalValorDevuelto,totalGralValorDev,totalGralvalor DECIMAL(12,2),
fechas VARCHAR (35)
ORDER BY x.equipo,x.vendedor
FORMAT
FIRST PAGE HEADER
LET totalGralValorDev =0
LET totalGralvalor = 0
BEFORE GROUP OF x.equipo
LET totalCantidadVendida = 0
LET totalValor = 0
LET totalValorDevuelto=0
LET totalCantidadDevuelta = 0
LET totalCantidadNeta = 0
LET totalValorNeto = 0
LET fechas = "Desde ",datos.fecha_inicial USING "dd/mm/yyyy"," Hasta ",datos.fecha_final USING "dd/mm/yyyy"
BEFORE GROUP OF x.vendedor
LET total_v = 0
LET total_v_dev =0
LET total_v_neto = 0
ON EVERY ROW
IF x.valor IS NULL THEN
LET x.valor = 0
END IF
LET fecha_reporte = current
LET ValorNeto = x.valor - x.valorDevuelto
LET totalGralvalor = x.valor + totalGralvalor
PRINTX x.equipo, x.producto, x.cantidad_vendida, x.valor,
x.CantidadDevueta, x.valorDevuelto, ValorNeto,
pcompanias.nombre, fecha_reporte,fechas, visualiza
AFTER GROUP OF x.equipo
LET totalCantidadVendida = GROUP SUM(x.cantidad_vendida)
LET totalValor = GROUP SUM(x.valor)
LET totalCantidadDevuelta = GROUP SUM(x.CantidadDevueta)
LET totalCantidadNeta = GROUP SUM(x.valorDevuelto)
LET totalValorNeto = GROUP SUM(x.valor - x.valorDevuelto)
LET totalValorDevuelto = GROUP SUM(x.valorDevuelto)
PRINTX totalCantidadVendida, totalValor,
totalCantidadDevuelta, totalCantidadNeta,
totalValorNeto,totalValorDevuelto
AFTER GROUP OF x.vendedor
LET total_v = GROUP SUM(x.valor)
LET total_v_neto = GROUP SUM(x.valor-x.valorDevuelto)
LET total_v_dev = GROUP SUM(x.valorDevuelto)
PRINTX x.vendedor,total_v,total_v_neto,total_v_dev
ON LAST ROW
LET totalGenValorNeto = SUM(x.valor) - sum(x.valorDevuelto)
LET totalGenCantidadDevuelta = SUM(x.CantidadDevueta)
LET totalGralValorDev =SUM(x.valorDevuelto)
#LET totalGralValor = SUM(x.valor)
PRINTX totalGenValorNeto, totalGenCantidadDevuelta,totalGralValorDev,totalGralValor
END REPORT