{ ------------------------------------------------------------------------------- PROGRAMA : VEPRRP015 OBJETIVO : Relacion de Ventas Brutas y Reales, Margen de ventas. PROGRAMADOR : Ing. Juan Soto (Johnny) FECHA REALIZACION : Agosto 28, 2021 ------------------------------------------------------------------------------- } IMPORT JAVA javax.mail.Session GLOBALS "veprgb000.4gl" DEFINE mes, ano INTEGER, fecha_inicial, fecha_final DATE, subject, attachment VARCHAR(100), cuerpo_correo STRING, toEmail STRING, retorne BOOLEAN DEFINE rutafile VARCHAR(200) DEFINE xusername, xsmtphost, xsmtpport, xpassword STRING MAIN DEFER INTERRUPT CALL STARTLOG("ventasemail.txt") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING toEmail CONNECT TO "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias CALL veprrp015() END MAIN FUNCTION veprrp015() 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 DEFINE historico CHAR(2), mensajes STRING DEFINE ventas RECORD origen VARCHAR(100), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(30), unidad_med CHAR(4), ventas CHAR(1), cantidad_vend DECIMAL(12, 2), valor DECIMAL(12, 2), precio, precio_neto, porc_desc DECIMAL(12, 2), sucid SMALLINT, factura INT, costo DEC(12, 5), tasa, margen, porc_margen_c, porc_margen_v DEC(12, 2), cliente VARCHAR(100), vendedor VARCHAR(100) END RECORD ### Definicion del registro a exportar al reporte DEFINE salida, titulomes CHAR(50), gastos_totales, ventas_totales DEC(12, 2) #### Pide los parametros para busqueda de informacion LET rutafile = '.\\FILES\\' #SELECT a.fecha_inicio INTO fecha_inicial FROM prdtable a #WHERE a.ano =YEAR(today) AND a.mes = MONTH(today) LET ano = YEAR(TODAY) LET mes = MONTH(TODAY) - 1 # LET ano = 2025 # LET mes = 12 SELECT a.fecha_inicio, a.fecha_corte INTO fecha_inicial, fecha_final FROM prdtable a WHERE a.ano = ano AND a.mes = mes SELECT a.descrip INTO titulomes FROM mestable a WHERE a.mes = mes {#DEDTERMINA LOS GASTOS TOTALES SELECT SUM(a.debito-a.credito) INTO gastos_totales FROM cgtb00004 a WHERE a.fecha BETWEEN fecha_inicial AND fecha_final AND a.departamento BETWEEN 4000 AND 49999 AND a.cuenta_no[1] = '7' AND a.status_t IS null } #LET fecha_inicial = today-29 # Buscando Pilas vendidas del ano actual LET selec = "SELECT f1.descripcion as origen,f.cod_n,f.cod_grupo,f.cod_tipo,f.cod_sec,f.descrip_esp,f.unidad_med, c.ventas,c.sucid,b.factura,b.precio*d.tasa as precioventa,(b.precio -(b.precio *(b.cantidad_2/100)))*d.tasa as precioneto, k.material+k.labor+k.gastos as costo,b.cantidad as cantidadVendida,d.tasa as tasa, b.cantidad_2,cli.nombre,RTRIM(vend.nom1_emp) + ' '+vend.apell1_emp,f.cod_cia from iptb00020 a LEFT OUTER JOIN vetb00003 b ON a.cod_n = b.cod_n INNER JOIN iptb00002 f ON a.cod_n = f.cod_n and b.cod_grupo = f.cod_grupo and f.cod_tipo = b.cod_tipo and f.cod_sec =b.cod_Sec INNER JOIN iptb00022 f1 ON f1.cod_cia = f.cod_cia CROSS JOIN prdtable e INNER JOIN vetb00002 c ON c.factura = b.factura AND c.sucid = b.sucid AND c.fecha_factura between e.fecha_inicio and e.fecha_corte AND e.ano = ",ano," and e.mes = ",mes," and c.status_t is null INNER JOIN vetb00004 cli ON cli.tipo_cliente = c.tipo_cliente and cli.sec_cliente=c.sec_cliente INNER JOIN adtb00003 vend ON vend.num_emp = c.sec_vend INNER JOIN vetb00061 g ON g.ventas = c.ventas INNER JOIN cgtb00084 d ON d.ventas = c.ventas AND d.tipo_cliente = c.tipo_cliente AND d.ano = e.ano and d.mes = e.mes LEFT OUTER JOIN iptb00004 k ON k.ano = e.ano AND b.cod_n = k.cod_n and b.cod_grupo = k.cod_grupo and b.cod_tipo = k.cod_tipo and b.cod_sec = k.cod_sec order by f.cod_cia " PREPARE busca_act FROM selec DECLARE act2 SCROLL CURSOR FOR busca_act # OPEN act2 USING ano,fecha_inicial,fecha_final,fecha_inicial,fecha_final # OPEN act2 USING ano, mes LET salida = "veprrp015b_2.4rp" IF NOT fgl_report_loadCurrentSettings(salida) THEN EXIT PROGRAM END IF CALL fgl_report_selectDevice("XLSX") CALL fgl_report_selectPreview(FALSE) LET attachment = rutafile CLIPPED, 'ventasgrupos.xlsx' DISPLAY "Ruta: ",attachment CALL fgl_report_setOutputFileName(attachment) CALL fgl_report_configureXLSXDevice( NULL, #fromPage INTEGER, NULL, #toPage INTEGER, TRUE, #removeWhitespace BOOLEAN, NULL, #ignoreRowAlignment BOOLEAN, NULL, #ignoreColumnAlignment BOOLEAN, NULL, #removeBackgroundImages BOOLEAN, TRUE) #mergePages TRUE LET handler = fgl_report_commitCurrentSettings() START REPORT grupo TO XML HANDLER HANDLER FOREACH act2 INTO ventas.origen, ventas.cod_n, ventas.cod_grupo, ventas.cod_tipo, ventas.cod_sec, ventas.descrip_esp, ventas.unidad_med, ventas.ventas, ventas.sucid, ventas.factura, ventas.precio, ventas.precio_neto, ventas.costo, ventas.cantidad_vend, ventas.tasa, ventas.porc_desc, ventas.cliente, ventas.vendedor LET ventas.margen = ventas.precio_neto - ventas.costo LET ventas.porc_margen_c = (ventas.margen / ventas.costo) * 100 LET ventas.porc_margen_v = (ventas.margen / ventas.precio_neto) * 100 LET ventas.descrip_esp = ventas.descrip_esp CLIPPED IF ventas.porc_margen_c IS NULL THEN LET ventas.porc_margen_c = 0 END IF IF ventas.porc_margen_v IS NULL THEN LET ventas.porc_margen_v = 0 END IF IF ventas.costo IS NULL THEN LET ventas.costo = 0 END IF IF ventas.margen IS NULL THEN LET ventas.margen = 0 END IF OUTPUT TO REPORT grupo(ventas.*) END FOREACH FINISH REPORT grupo # LET toEmail = 'jsoto@marmotech.com.do' LET xusername = 'notificacion@marmotech.com.do' LET xsmtphost = 'smtp.office365.com' LET xsmtpport = '587' LET xpassword = 'Lmmjvsd2020' LET subject = 'MARGENES DE VENTAS POR PRODUCTOS PARA EL MES DE ', titulomes CLIPPED, " DEL PERIODO ", ano USING "<<<<<" LET cuerpo_correo = 'laS tasas como se comercializo la factura se encuentra en cada linea al final del registro, no obstante toda la informacion es en RD$' CALL enviaemail( toEmail, subject, cuerpo_correo, attachment, xusername, xsmtphost, xsmtpport, xpassword) #RETURNING mensajes END FUNCTION REPORT grupo(x) DEFINE hora CHAR(5), xorigen VARCHAR(100) DEFINE X RECORD origen VARCHAR(100), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descrip_esp CHAR(100), unidad_med CHAR(4), ventas CHAR(1), cantidad_vend DECIMAL(12, 2), valor DECIMAL(12, 2), precio, precio_neto, porc_desc DECIMAL(12, 2), sucid SMALLINT, factura INT, costo DEC(12, 5), tasa, margen, porc_margen_c, porc_margen_v DEC(12, 2), cliente VARCHAR(100), vendedor VARCHAR(100) END RECORD DEFINE t_t_t_cantidad_dev, t_t_t_valor_dev, g_g_g_cantidad_vend, g_g_g_valor_vend, g_g_g_unidad_acum, g_g_g_valor_acum, t1_cantidad_dev, t1_valor_dev, margen_v, margen_p, valor_costo, valor_vendido DECIMAL(12, 2) ORDER BY x.origen FORMAT FIRST PAGE HEADER LET g_g_g_unidad_acum = 0 LET g_g_g_valor_acum = 0 LET t_t_t_cantidad_dev = 0 LET t_t_t_valor_dev = 0 LET t1_cantidad_dev = 0 LET t1_valor_dev = 0 LET g_g_g_cantidad_vend = 0 LET g_g_g_valor_vend = 0 ON EVERY ROW LET valor_vendido = X.precio_neto * x.cantidad_vend PRINTX X.*, p_companias.nombre, hora, fecha_inicial, fecha_final LET g_g_g_valor_acum = valor_vendido + g_g_g_valor_acum AFTER GROUP OF x.origen LET valor_costo = GROUP SUM(x.costo) LET g_g_g_cantidad_vend = GROUP SUM(x.cantidad_vend) PRINTX valor_costo, g_g_g_cantidad_vend, g_g_g_valor_acum END REPORT