{ ------------------------------------------------------------------------------- PROGRAMA : VEPRRP048 OBJETIVO : Relacion de Cotizaciones PROGRAMADOR : Ing. Juan Soto (Johnny) FECHA REALIZACION : Mayo 17, 2011 ------------------------------------------------------------------------------- } GLOBALS "veprgb000.4gl" DEFINE act,mes_ini INTEGER , fecha_inicial,fecha_final DATE, conordenes CHAR(1), tiposoporte,descripcion_rep STRING MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT TO "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* 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 ### 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, conduce INT, fechaConduce DATE, orden_cliente CHAR(20) 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 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 CONSTRUCT criterio ON a.ventas,A.sec_vend, x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_Sec FROM pventas,kvendedor, cod_n,cod_grupo,cod_tipo,cod_Sec 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 = 'N' 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,a.nombre_proyecto,CONVERT(CHAR(10),a.fecha_entrega,103),", "'('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ ", "RTRIM(c.apell1_emp),a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,", "a.total_neto,d.descripcion,e.num_oc ", "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 ", " 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 ", " a.sec_vend = f.sec_vend and f.usuario = '",usuarios,"' ", " and a.ventas = d.ventas and ",criterio CLIPPED, " ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no " 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,a.nombre_proyecto,CONVERT(CHAR(10),a.fecha_entrega,103),", "'('+CAST(f.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ ", "RTRIM(c.apell1_emp),a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,", "a.total_neto,d.descripcion,e.num_oc ", "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 ", "WHERE a.fecha between ? and ? and ", "f.sec_vend = c.num_emp and ", " a.tipo_cliente IS NOT NULL AND ", " a.cotizacion_no = x.cotizacion_no and ", " a.status_t IS NULL and ", " a.cotizacion_no = f.cotizacion_no and ", " a.ventas = d.ventas and ",criterio CLIPPED, " ORDER BY d.descripcion,CONVERT(CHAR(10),a.fecha,103),a.cotizacion_no " END IF ELSE 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,a.nombre_proyecto,CONVERT(CHAR(10),a.fecha_entrega,103),", "'('+CAST(a.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ ", "RTRIM(c.apell1_emp),a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,", "a.total_neto,d.descripcion,e.num_oc ", "FROM vetb00050 a,vetb00004 b,adtb00003 c,vetb00061 d,prtb00012 e,seg0007 f,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 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,a.nombre_proyecto,CONVERT(CHAR(10),a.fecha_entrega,103),", "'('+CAST(f.sec_vend AS CHAR(4)) +')'+RTRIM(c.nom1_emp) + ' '+ ", "RTRIM(c.apell1_emp),a.total_bruto,a.monto_desc,a.sub_total,a.monto_itbi,", "a.total_neto,d.descripcion,e.num_oc ", "FROM vetb00050 a,vetb00004 b,adtb00003 c,vetb00061 d,prtb00012 e,vetb00093 f,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 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 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 LET r_output='SVG' LET preview=1 CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default 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 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, conduce INT, fechaConduce DATE, orden_cliente CHAR(20) END RECORD, vvendedor,total_general,tvbruto,tvdesc,tvitbis,ttbruto,ttdesc,ttitbis,sub_total,ttsub_total DEC(12,2) DEFINE hora CHAR(5) ORDER BY x.vendedor,x.tipo_ventas 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.vendedor LET vvendedor = 0 LET tvbruto =0 LET tvdesc = 0 LET tvitbis = 0 LET sub_total = 0 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.*, p_companias.nombre, hora, fecha_inicial,fecha_final,vvendedor,total_general, tvbruto,tvdesc,tvitbis,ttbruto,ttdesc,ttitbis,ttsub_total,sub_total,descripcion_rep # AFTER GROUP OF x.vendedor # LET vvendedor = GROUP SUM(x.valor_bruto) # PRINTX vvendedor 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