{ ------------------------------------------------------------------------------- PROGRAMA : VEPRRP048 OBJETIVO : Relacion de Cotizaciones PROGRAMADOR : Ing. Juan Soto (Johnny) FECHA REALIZACION : Mayo 17, 2011 ------------------------------------------------------------------------------- } SCHEMA 'smarmotech' GLOBALS "veprgb000.4gl" DEFINE act,mes_ini INTEGER , fecha_inicial,fecha_final DATE, conordenes CHAR(1), tiposoporte,descripcion_rep STRING, usuarios, usuario VARCHAR(20), clave VARCHAR(20), selec STRING, idx INT, pcompanias RECORD LIKE companias.* DEFINE kequipo SMALLINT, dequipo CHAR(30), pequipo ui.ComboBox MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave --CALL ARG_VAL(3) RETURNING impresor --LET usuario = 'jsoto' CONNECT TO "smarmotech" USER usuarios USING clave SELECT * INTO pcompanias.* FROM companias CALL veprrp048() END MAIN FUNCTION veprrp048() 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 ### Definicion del registro a exportar al reporte DEFINE ventas RECORD fecha CHAR(10), cotizacion_no INT, tipo_cliente SMALLINT, sec_cliente INT, nombre CHAR(60), nombre_proyecto CHAR(60), fecha_entrega CHAR(10), vendedor CHAR(80), valor_bruto DEC(12,2), valor_Desc DEC(12,2), sub_total DEC(12,2), valor_itbis DEC(12,2), valor_neto DEC(12,2), tipo_ventas CHAR(30), orden INT, equipo_venta CHAR(30), orden_cliente CHAR(20), conduce INT, fechaConduce DATE END RECORD, salida CHAR(50), ptasa DEC(12,4) #WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM vefmrp015 FROM "vefmrp048" DISPLAY FORM vefmrp015 #### Pide los parametros para busqueda de informacion SELECT a.fecha_inicio INTO fecha_inicial FROM prdtable a WHERE a.ano =YEAR(today) AND a.mes = MONTH(today) #LET fecha_inicial = today-29 LET fecha_final = today INPUT BY NAME fecha_inicial,fecha_final,tiposoporte,conordenes,salida WITHOUT DEFAULTS AFTER INPUT IF int_flag THEN CALL msg(2) EXIT INPUT END IF IF salida IS NULL THEN CALL FGL_WINMESSAGE("ERROR","CAMPO EN BLANCO","STOP") NEXT FIELD salida END IF IF conordenes IS NULL THEN NEXT FIELD conordenes END IF END INPUT IF int_flag THEN LET int_flag = false RETURN END IF #### Permite Cancelar reporte mediante el uso de CONTROL-C IF int_flag THEN --LET numero_msg = 2 --CALL msg(numero_msg) LET int_flag = false RETURN END IF CALL cequipos() CONSTRUCT criterio ON a.ventas,A.sec_vend,x.cod_n,x.cod_grupo,x.cod_tipo, x.cod_Sec,h.depto FROM pventas,kvendedor,cod_n,cod_grupo,cod_tipo,cod_Sec, equipos BEFORE CONSTRUCT --CALL cventas1() IF tiposoporte = 'VE' THEN CALL cvendedor1() ELSE CALL csoporte() END IF AFTER CONSTRUCT IF int_flag THEN --LET numero_msg = 2 --CALL msg(numero_msg) LET int_flag = false RETURN END IF EXIT CONSTRUCT END CONSTRUCT LET descripcion_rep = NULL IF conordenes = 'T' THEN IF tiposoporte = "VE" THEN LET descripcion_rep = "TODAS LAS COTIZACIONES ORDENADAS POR VENDEDOR" LET selec = "SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, a.sec_cliente,a.nombre_cliente,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'), CONVERT(CHAR(10),a.fecha_entrega,103), '('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ ISNULL(RTRIM(c.apell1_emp),' '), a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi, a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file FROM vetb00050 a INNER JOIN adtb00003 c ON c.num_emp = a.sec_vend INNER JOIN vetb00061 d ON d.ventas = a.ventas INNER JOIN seg0007 f ON f.sec_vend = a.sec_vend inner join seg0000 g ON a.sec_vend = g.sec_vend inner join seg0008 h on g.depto = h.depto LEFT OUTER JOIN prtb00012 e ON e.cotizacion_no = a.cotizacion_no AND e.status_t IS NULL and e.sec_vend = f.sec_vend INNER JOIN vetb00051 x ON x.cotizacion_no = a.cotizacion_no ", " WHERE a.fecha between ? and ? and ", " a.tipo_cliente IS NOT NULL AND ", " a.status_t IS NULL and ", " g.status_t is null and ", " a.sec_vend = f.sec_vend and f.usuario = '",usuarios,"' ", " and a.ventas = d.ventas and ",criterio CLIPPED ELSE LET descripcion_rep = "TODAS LAS COTIZACIONES ORDENADAS POR SOPORTE A VENTAS" LET selec = "SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, a.sec_cliente, a.nombre_cliente,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'),CONVERT(CHAR(10),a.fecha_entrega,103), isnull('('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ISNULL(RTRIM(c.apell1_emp),' '), 'VENDEDOR NO ESPECIFICADO'), a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi, a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file FROM vetb00050 a INNER JOIN vetb00061 d ON d.ventas =a.ventas INNER JOIN vetb00093 f ON f.cotizacion_no = a.cotizacion_no INNER JOIN adtb00003 c ON c.num_emp = f.sec_vend LEFT OUTER JOIN prtb00012 e ON a.cotizacion_no = e.cotizacion_no AND e.status_t IS NULL AND e.tipo_cliente = a.tipo_cliente AND e.sec_cliente = a.sec_cliente INNER JOIN vetb00051 x ON x.cotizacion_no = a.cotizacion_no inner join seg0000 g on a.sec_vend = g.sec_vend inner join seg0008 h on g.depto = h.depto ", " WHERE a.fecha between ? and ? and ", " f.sec_vend = c.num_emp and ", " a.cotizacion_no = x.cotizacion_no and ", " a.status_t IS NULL and ", " g.status_t is null and ", " a.ventas = d.ventas and ",criterio CLIPPED # " ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no " END IF END IF IF conordenes = 'O' THEN IF tiposoporte = 'VE' THEN LET descripcion_rep = "COTIZACIONES CON ORDENES ORDENADAS POR VENDEDOR" LET selec = " SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, ", " a.sec_cliente,b.nombre,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'),CONVERT(CHAR(10),a.fecha_entrega,103), ", " isnull('('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ISNULL(RTRIM(c.apell1_emp),' '), 'VENDEDOR NO ESPECIFICADO'), a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,", " a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file ", " FROM vetb00050 a,vetb00004 b,adtb00003 c,vetb00061 d,prtb00012 e,seg0007 f,seg0000 g,seg0008 h,vetb00051 x ", " WHERE a.fecha between ? and ? and a.cotizacion_no = e.cotizacion_no AND ", " a.tipo_cliente = b.tipo_cliente and ", " a.sec_cliente = b.sec_cliente and ", " a.sec_vend = c.num_emp and ", " a.tipo_cliente IS NOT NULL AND ", " a.ventas = d.ventas and ",criterio CLIPPED, " and g.sec_vend = a.sec_vend and ", " g.depto = h.depto ", " and a.sec_vend = f.sec_vend and f.usuario = '",usuarios,"' ", " and a.cotizacion_no = x.cotizacion_no ", " and e.status_t is null " #" ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no " ELSE LET descripcion_rep = "COTIZACIONES CON ORDENES ORDENADAS POR SOPORTE A VENTAS" LET selec = "SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, a.sec_cliente,b.nombre,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'),CONVERT(CHAR(10),a.fecha_entrega,103), isnull('('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ISNULL(RTRIM(c.apell1_emp),' '), 'VENDEDOR NO ESPECIFICADO') ,a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi, a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file ", " FROM vetb00050 a,vetb00004 b,adtb00003 c,vetb00061 d,prtb00012 e,vetb00093 f, seg0000 g,seg0008 h, vetb00051 x ", " WHERE a.fecha between ? and ? and a.cotizacion_no = e.cotizacion_no AND ", " a.tipo_cliente = b.tipo_cliente and ", " a.sec_cliente = b.sec_cliente and ", " f.sec_vend = c.num_emp and ", " a.tipo_cliente IS NOT NULL AND ", " a.ventas = d.ventas and ",criterio CLIPPED, " and g.sec_vend = a.sec_vend and ", " g.depto = h.depto ", " and a.cotizacion_no = x.cotizacion_no ", " and a.cotizacion_no = f.cotizacion_no ", " and e.status_t is null " #" ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no " END IF END IF IF conordenes = 'S' THEN IF tiposoporte = "VE" THEN LET descripcion_rep = "COTIZACIONES SIN ORDEN ORDENADAS POR VENDEDOR" LET selec = "SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, a.sec_cliente,a.nombre_cliente,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'), CONVERT(CHAR(10),a.fecha_entrega,103), '('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ISNULL(RTRIM(c.apell1_emp),' '), a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi, a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file, e.cotizacion_no FROM vetb00050 a INNER JOIN adtb00003 c ON c.num_emp = a.sec_vend INNER JOIN vetb00061 d ON d.ventas = a.ventas INNER JOIN seg0007 f ON f.sec_vend = a.sec_vend inner join seg0000 g ON a.sec_vend = g.sec_vend inner join seg0008 h on g.depto = h.depto LEFT OUTER JOIN prtb00012 e ON e.cotizacion_no = a.cotizacion_no AND e.status_t IS NULL and e.sec_vend = f.sec_vend INNER JOIN vetb00051 x ON x.cotizacion_no = a.cotizacion_no ", " WHERE a.fecha between ? and ? and ", " a.tipo_cliente IS NOT NULL AND ", " e.cotizacion_no IS NULL AND ", " a.status_t IS NULL and ", " g.status_t is null and ", " a.sec_vend = f.sec_vend and f.usuario = '",usuarios,"' ", " and a.ventas = d.ventas and ",criterio CLIPPED ELSE LET descripcion_rep = "COTIZACIONES SIN ORDEN ORDENADAS POR SOPORTE A VENTAS" LET selec = "SELECT DISTINCT CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no,a.tipo_cliente, a.sec_cliente, a.nombre_cliente,ISNULL(a.nombre_proyecto,'NO ESPECIFICADO'),CONVERT(CHAR(10),a.fecha_entrega,103), isnull('('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ISNULL(RTRIM(c.apell1_emp),' '), 'VENDEDOR NO ESPECIFICADO'), a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi, a.total_neto,d.descripcion,e.num_oc, h.nombre,e.nombre_file FROM vetb00050 a INNER JOIN vetb00061 d ON d.ventas =a.ventas INNER JOIN vetb00093 f ON f.cotizacion_no = a.cotizacion_no INNER JOIN adtb00003 c ON c.num_emp = f.sec_vend LEFT OUTER JOIN prtb00012 e ON a.cotizacion_no = e.cotizacion_no AND e.status_t IS NULL AND e.tipo_cliente = a.tipo_cliente AND e.sec_cliente = a.sec_cliente INNER JOIN vetb00051 x ON x.cotizacion_no = a.cotizacion_no inner join seg0000 g on a.sec_vend = g.sec_vend inner join seg0008 h on g.depto = h.depto ", " WHERE a.fecha between ? and ? and ", " f.sec_vend = c.num_emp and ", " a.cotizacion_no = x.cotizacion_no and ", " e.cotizacion_no IS NULL AND ", " a.status_t IS NULL and ", " g.status_t is null and ", " a.ventas = d.ventas and ",criterio CLIPPED # " ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no " END IF END IF PREPARE busca_act FROM selec DECLARE act2 CURSOR FOR busca_act OPEN act2 USING fecha_inicial,fecha_final ### Loop para igualar tipo de venta a la variable ventas.ventas LET idx = 1 FOREACH act2 INTO ventas.* IF STATUS <> NOTFOUND THEN -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API IF idx = 1 THEN LET r_filename = salida CLIPPED IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file CALL seleccionarsalida() RETURNING r_output LET preview=1 CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default CALL fgl_report_configurexlsxdevice(null,null,null,null,null,null,1) LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF START REPORT plan TO XML HANDLER handler END IF END IF LET idx = idx + 1 { # BUSCA LA ORDEN DE PEDIDOS LET ventas.orden = null SELECT MAX(a.num_oc) INTO ventas.orden FROM prtb00012 a WHERE a.cotizacion_no = ventas.cotizacion_no AND a.status_t is NULL # BUSCA ORDEN COMPRA CLIENTE LET ventas.orden_cliente =NULL SELECT a.nombre_file INTO ventas.orden_cliente FROM prtb00012 a WHERE a.num_oc = ventas.orden # BUSCA CONDUCE SALIDA LET ventas.conduce = NULL LET ventas.fechaConduce = NULL SELECT MAX(a.num_doc) INTO ventas.conduce FROM iptb00006 a WHERE a.cod_sp = ventas.tipo_cliente AND a.cod_sp_Sec = ventas.sec_cliente AND a.num_oc = ventas.orden AND a.cod_mov IN (30,31,55) AND a.status_t IS NULL IF ventas.conduce IS NOT NULL THEN SELECT MAX(a.fecha) INTO ventas.fechaConduce FROM iptb00006 a WHERE a.cod_sp = ventas.tipo_cliente AND a.cod_sp_Sec = ventas.sec_cliente AND a.num_doc = ventas.orden AND a.cod_mov IN (30,31,55) AND a.status_t IS NULL END IF } # TASA LET ptasa =0 SELECT a.tasa INTO ptasa FROM cgtb00084 a WHERE a.ano = YEAR(fecha_final) AND a.mes = MONTH(fecha_final) AND a.tipo_cliente = ventas.tipo_cliente IF ptasa IS NULL THEN LET ptasa = 1 END IF LET ventas.valor_bruto = ventas.valor_bruto * ptasa LET ventas.valor_Desc = ventas.valor_Desc * ptasa LET ventas.valor_itbis = ventas.valor_itbis * ptasa LET ventas.valor_neto = ventas.valor_neto * ptasa LET ventas.sub_total = ventas.sub_total * ptasa IF ventas.vendedor IS NULL THEN LET ventas.vendedor = 'NO TIENE' END IF OUTPUT TO REPORT plan(ventas.*) END FOREACH IF idx = 1 THEN CALL fgl_winmessage("ERROR","NO EXISTEN REGISTROS CON ESA CONDICION","INFO") ELSE FINISH REPORT plan END IF END FUNCTION REPORT plan(x) DEFINE x RECORD fecha CHAR(10), cotizacion_no INT, tipo_cliente SMALLINT, sec_cliente INT, nombre CHAR(60), nombre_proyecto CHAR(60), fecha_entrega CHAR(10), vendedor CHAR(80), valor_bruto DEC(12,2), valor_Desc DEC(12,2), sub_total DEC(12,2), valor_itbis DEC(12,2), valor_neto DEC(12,2), tipo_ventas CHAR(30), orden INT, equipo_venta CHAR(30), orden_cliente CHAR(20), conduce INT, fechaConduce DATE END RECORD, vvendedor,total_general,tvbruto,tvdesc,tvitbis,ttbruto,ttdesc,ttitbis,sub_total,ttsub_total, ev_tvbruto,ev_tvdesc,ev_sub_total,ev_tvitbis,ev_vvendedor, c_tvbruto,c_tvdesc,c_sub_total,c_tvitbis,c_vvendedor DEC(12,2) DEFINE hora CHAR(5), ch_vendedor STRING ORDER BY x.equipo_venta, x.vendedor FORMAT FIRST PAGE HEADER LET total_general = 0 LET ttbruto = 0 LET ttdesc = 0 LET ttitbis = 0 LET ttsub_total = 0 BEFORE GROUP OF x.equipo_venta LET ev_tvbruto = 0 LET ev_tvdesc = 0 LET ev_sub_total = 0 LET ev_tvitbis = 0 LET ev_vvendedor = 0 PRINTX x.equipo_venta BEFORE GROUP OF x.vendedor LET vvendedor = 0 LET tvbruto =0 LET tvdesc = 0 LET tvitbis = 0 LET sub_total = 0 PRINTX x.vendedor LET ch_vendedor = x.vendedor { BEFORE GROUP OF x.cotizacion_no LET c_tvbruto = 0 LET c_tvdesc = 0 LET c_sub_total = 0 LET c_tvitbis = 0 LET c_vvendedor = 0} PRINTX x.cotizacion_no ON EVERY ROW --LET tvbruto = tvbruto + x.valor_bruto --LET tvdesc = tvdesc + x.valor_desc --LET tvitbis = tvitbis + x.valor_itbis --LET ttbruto = x.valor_bruto + ttbruto --LET ttdesc = x.valor_Desc + ttdesc --LET ttitbis = ttitbis + x.valor_itbis --LET sub_total = sub_total + x.sub_total --LET ttsub_total = ttsub_total + X.sub_total {LET vvendedor = vvendedor + x.valor_neto LET total_general = total_general + x.valor_neto} PRINTX x.*, pcompanias.nombre, hora, fecha_inicial,fecha_final, descripcion_rep {vvendedor,total_general,tvbruto,tvdesc,tvitbis,ttbruto,ttdesc,ttitbis,ttsub_total,sub_total} AFTER GROUP OF x.equipo_venta LET ev_tvbruto = GROUP SUM(x.valor_bruto) LET ev_tvdesc = GROUP SUM(x.valor_desc) LET ev_sub_total = GROUP SUM(x.sub_total) LET ev_tvitbis = GROUP SUM(x.valor_itbis) LET ev_vvendedor = GROUP SUM(x.valor_neto) PRINTX ev_tvbruto,ev_tvdesc,ev_sub_total,ev_tvitbis,ev_vvendedor AFTER GROUP OF x.vendedor LET vvendedor = GROUP SUM(x.valor_bruto) LET tvbruto = GROUP SUM(x.valor_desc) LET tvdesc = GROUP SUM(x.sub_total) LET tvitbis = GROUP SUM(x.valor_itbis) LET sub_total = GROUP SUM(x.valor_neto) PRINTX vvendedor,tvbruto,tvdesc,tvitbis,sub_total { AFTER GROUP OF x.cotizacion_no LET c_tvbruto = GROUP SUM(x.valor_bruto) LET c_tvdesc = GROUP SUM(x.valor_desc) LET c_sub_total = GROUP SUM(x.sub_total) LET c_tvitbis = GROUP SUM(x.valor_itbis) LET c_vvendedor = GROUP SUM(x.valor_neto) PRINTX c_tvbruto,c_tvdesc,c_sub_total,c_tvitbis,c_vvendedor} ON LAST ROW LET ttbruto = sum(x.valor_bruto) LET ttdesc = sum(x.valor_Desc) LET ttitbis = sum(x.valor_itbis) LET sub_total = sum(x.sub_total) LET ttsub_total = sum(x.sub_total) PRINTX ch_Vendedor,ttbruto,ttdesc,ttitbis,sub_total,ttsub_total END REPORT {FUNCTION cventas1() DEFINE kventas SMALLINT, dventas CHAR(30) LET pventas = ui.combobox.forname("formonly.pventas") DECLARE bventas CURSOR FOR SELECT a.ventas,a.descripcion FROM vetb00061 a CALL pventas.clear() FOREACH bventas INTO kventas,dventas CALL pventas.additem(kventas,dventas) END FOREACH END FUNCTION} FUNCTION cequipos() LET pequipo = ui.combobox.forname("formonly.equipos") DECLARE bequipos CURSOR FOR SELECT a.depto,a.nombre FROM seg0008 a CALL pequipo.clear() FOREACH bequipos INTO kequipo,dequipo CALL pequipo.additem(kequipo,dequipo) END FOREACH END FUNCTION