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