{ ------------------------------------------------------------------------------- PROGRAMA : CCPRRP048 OBJETIVO : Comisiones REALIZADO POR : JUAN F. SOTO FECHA : Abril 17, 2015. ------------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE tipo_reporte VARCHAR(3), precio,descuento,valor DEC(12,2), datos_cocina RECORD orden INT, fecha_orden DATE, cliente VARCHAR(100), vendedor VARCHAR(100), producto VARCHAR(100), cantidad_o FLOAT, cantidad_e FLOAT, simbolo VARCHAR(5), porc_vendedor FLOAT, comisionDespacho FLOAT, comisionCotizado FLOAT END RECORD MAIN DEFER INTERRUPT CALL STARTLOG("ccrp048.txt") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL ccprrp043() END MAIN FUNCTION ccprrp043() DEFINE datos RECORD codigo_supervisor SMALLINT, nombre_supervisor VARCHAR(60), sec_vend SMALLINT, nombre_vendedor VARCHAR(60), fecha DATE, documento INT, tipo_doc VARCHAR(2), cotizacion_no INT, nombre_cliente VARCHAR(100), valor_orig DEC(12,2), porc_cobros_vend DEC(8,4), chitbis CHAR(2), comision_vend DEC(12,4), sec_vend_a SMALLINT, valor_adicional DEC(12,4), comision_adicional DEC(12,4), str_reporte VARCHAR(50) END RECORD 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 porc_itbis DEC(8,2) OPEN FORM ccfmrp043 FROM "ccfmrp047" DISPLAY FORM ccfmrp043 DELETE FROM tmpccrp48 INPUT BY NAME tipo_reporte,p_ano,p_mes BEFORE INPUT SELECT a.itbi INTO porc_itbis FROM vetb00019 a WHERE a.disponible = 'S' AFTER FIELD p_ano IF p_ano IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_ano END IF AFTER FIELD p_mes IF p_mes IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD p_mes END IF SELECT a.fecha_inicio,a.fecha_corte INTO rango.fecha_ini,rango.fecha_fin FROM prdtable a WHERE a.ano = p_ano AND a.mes = p_mes DISPLAY BY NAME rango.fecha_ini,rango.fecha_fin END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF tipo_reporte = "GE" THEN CONSTRUCT criterio ON a.sec_vend,a.sec_vend_a FROM sec_vend,sec_vend_a # Chequo de la cancelacion del programa con la variable global int_flag IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF #CALL seleccionarSalida() RETURNING r_output # CALL crear_registros() # Prepara al sistema operativo para recibir el reporte LET selec = " select a.sec_vend,(SELECT RTRIM(c.nom1_emp)+' '+c.apell1_emp from adtb00003 c where a.sec_vend = c.num_emp) ,", " a.sec_vend_a, RTRIM(b.nom1_emp)+' '+b.apell1_emp,CONVERT(CHAR(10),j.fecha_orig,103),j.num_doc,j.tipo_doc,", " j.num_cheque,x1.nombre,j.valor*x2.tasa,a.porc_cobros,j1.chitbis ", " from cctb00001 j INNER JOIN vetb00075 a ON j.cod_emp_sec = a.sec_vend_a and j.tipo_doc IN ('AV') AND ", " j.num_doc = j.aplica_a INNER JOIN vetb00004 x1 ON j.tipo_cliente = x1.tipo_cliente AND j.sec_cliente = x1.sec_cliente ", " INNER JOIN cgtb00084 x2 ON x2.ano = ? AND x2.mes = ? AND x2.tipo_cliente = j.tipo_cliente ", " INNER JOIN cctb00011 j1 ON j.num_doc = j1.num_doc and j1.tipo_doc = j.tipo_doc, adtb00003 b ", " where a.sec_vend_a = b.num_emp and j.fecha_orig between ? and ? AND j.status_t is null AND ", " a.sec_vend_a not in (select sec_vend from vetb00076) AND", criterio CLIPPED, " UNION ", " select a.sec_vend,(SELECT RTRIM(c.nom1_emp)+' '+c.apell1_emp from adtb00003 c where a.sec_vend = c.num_emp) ,", " a.sec_vend_a, RTRIM(b.nom1_emp)+' '+b.apell1_emp,CONVERT(CHAR(10),j.fecha_orig,103),j.num_doc,j.tipo_doc,", " j.aplica_a,x1.nombre,j.valor*x2.tasa,a.porc_cobros,j1.chitbis ", " from cctb00001 j INNER JOIN vetb00075 a ON j.cod_emp_sec = a.sec_vend_a and j.tipo_doc IN ('PG') ", " INNER JOIN vetb00004 x1 ON j.tipo_cliente = x1.tipo_cliente AND j.sec_cliente = x1.sec_cliente ", " INNER JOIN cgtb00084 x2 ON x2.ano = ? AND x2.mes = ? AND x2.tipo_cliente = j.tipo_cliente ", " INNER JOIN vetb00002 x3 ON j.aplica_a = x3.factura ", " INNER JOIN cctb00011 j1 ON j.num_doc = j1.num_doc AND j.tipo_doc = j1.tipo_doc, adtb00003 b ", " where a.sec_vend_a = b.num_emp and j.fecha_orig between ? and ? AND j.status_t IS NULL AND ", " DATEDIFF(day,x3.fecha_factura,j.fecha_orig) < 91 AND ", " a.sec_vend_a not in (select sec_vend from vetb00076) AND", criterio CLIPPED, " order by a.sec_vend,a.sec_vend_a,j.tipo_doc,j.num_doc" PREPARE comando_inicial FROM selec DECLARE busca_datos CURSOR FOR comando_inicial OPEN busca_datos USING p_ano,p_mes,rango.fecha_ini,rango.fecha_fin,p_ano,p_mes,rango.fecha_ini,rango.fecha_fin LET progreso = 20 DISPLAY progreso TO progreso CALL ui.Interface.refresh() LET r_filename ="ccprrp048.4rp" CALL seleccionarsalida() RETURNING r_output # LET r_output="PDF" LET preview=1 LET idx = 1 FOREACH busca_datos INTO datos.* IF idx = 1 THEN IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file 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 reporte43 TO XML HANDLER handler END IF LET datos.str_reporte="COMISIONES VENDEDORES" IF datos.chitbis = "SI" THEN LET datos.valor_orig = (datos.valor_orig/(1+(porc_itbis/100))) END IF IF datos.valor_orig < 0 THEN LET datos.valor_orig = datos.valor_orig * -1 END IF LET datos.comision_vend = datos.valor_orig * datos.porc_cobros_vend IF datos.comision_vend IS NULL THEN LET datos.comision_vend =0 END IF INSERT INTO tmpccrp48 VALUES (datos.*) OUTPUT TO REPORT reporte43(datos.*) LET progreso = 50 DISPLAY progreso TO progreso CALL ui.Interface.refresh() LET idx = idx + 1 END FOREACH LET progreso = 100 DISPLAY progreso TO progreso CALL ui.Interface.refresh() # OTRAS COMISIONES LET selec= " SELECT a.sec_vend,j.num_doc,j.tipo_doc, CONVERT(char(10),j.fecha_orig,103),j.aplica_a,a.porc_cobros,x1.nombre, ", " SUM(b.cantidad*((b.precio*x2.tasa)-((b.precio*x2.tasa)*(b.cantidad_2)/100)))/((x3.sub_total-x3.monto_desc)*x2.tasa),", " e.nom1_emp || ' '||e.apell1_emp,j.valor*x2.tasa,j1.chitbis ", " FROM cctb00001 j,cctb00008 a,vetb00003 b,vetb00093 d,adtb00003 e,vetb00004 x1, ", " cgtb00084 x2,vetb00002 x3,prtb00012 c,cctb00011 j1 ", " WHERE j.fecha_orig BETWEEN '", rango.fecha_ini USING "mm/dd/yyyy","' AND '",rango.fecha_fin USING "mm/dd/yyyy","' AND ", " j.tipo_doc IN ('PG') AND ", " b.factura = x3.factura AND ", " b.factura = j.aplica_a AND ", " DATEDIFF(day,j.fecha_orig,x3.fecha_factura) < 91 AND ", # " j.fecha_orig-x3.fecha_factura < 91 AND ", " x3.orden = c.num_oc AND ", " j.tipo_cliente = j1.tipo_cliente AND ", " c.cotizacion_no = d.cotizacion_no AND ", " a.cod_n = b.cod_n AND ", " a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_sec = b.cod_sec AND ", " j.tipo_cliente = x1.tipo_cliente AND ", " j.sec_cliente = x1.sec_cliente AND ", " j1.num_doc = j.num_doc AND ", " j1.tipo_doc = j.tipo_doc AND ", " a.sec_vend = e.num_emp AND ", " a.sec_vend = d.sec_vend AND ", " x2.ano = ",p_ano," AND ", " x2.mes = ",p_mes," AND ", " x2.tipo_cliente = j.tipo_cliente AND ", " j.status_t IS NULL ", " GROUP BY j.cod_emp_sec,a.sec_vend,a.porc_cobros,e.nom1_emp,e.apell1_emp,x1.nombre, ", " j.num_doc,j.tipo_doc, j.aplica_a,x3.sub_total,j.valor,x2.tasa,j1.chitbis, ", " j.fecha_orig,x3.monto_Desc ", " UNION ", " SELECT a.sec_vend,j.num_doc,j.tipo_doc, CONVERT(char(10),j.fecha_orig,103),j.aplica_a,a.porc_cobros,x1.nombre, ", " SUM(b.cantidad*((b.precio*x2.tasa)-((b.precio*x2.tasa)*(b.cantidad_2)/100)))/((x3.sub_total-x3.monto_desc)*x2.tasa), ", " e.nom1_emp || ' '||e.apell1_emp,j.valor*x2.tasa,j1.chitbis ", " FROM cctb00001 j,cctb00008 a,vetb00003 b,vetb00050 d,adtb00003 e,vetb00004 x1, ", " cgtb00084 x2,vetb00002 x3,prtb00012 c,cctb00011 j1 ", " WHERE j.fecha_orig BETWEEN '",rango.fecha_ini USING "mm/dd/yyyy","' AND '",rango.fecha_fin USING "mm/dd/yyyy","' AND ", " j.tipo_doc IN ('PG') AND ", " b.factura = x3.factura AND ", " b.factura = j.aplica_a AND ", " x3.orden = c.num_oc AND ", " j.tipo_cliente = j1.tipo_cliente AND ", " c.cotizacion_no = d.cotizacion_no AND ", " a.cod_n = b.cod_n AND ", " a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_sec = b.cod_sec AND ", " j.tipo_cliente = x1.tipo_cliente AND ", " j.sec_cliente = x1.sec_cliente AND ", " j1.num_doc = j.num_doc AND ", " j1.tipo_doc = j.tipo_doc AND ", " a.sec_vend = e.num_emp AND ", " a.sec_vend = d.sec_vend AND ", " x2.ano = ", p_ano," AND ", " x2.mes = ",p_mes," AND ", " x2.tipo_cliente = j.tipo_cliente AND ", " j.status_t IS NULL ", " GROUP BY j.cod_emp_sec,a.sec_vend,a.porc_cobros,e.nom1_emp,e.apell1_emp,x1.nombre, ", " j.num_doc,j.tipo_doc, j.aplica_a,x3.sub_total,j.valor,x2.tasa,j1.chitbis, ", " j.fecha_orig,x3.monto_desc ", " UNION ", " SELECT a.sec_vend,j.num_doc,j.tipo_doc,CONVERT(char(10),j.fecha_orig,103), x3.cotizacion_no, a.porc_cobros,x1.nombre, ", " SUM(b.cantidad*((b.precio*x2.tasa)-((b.precio*x2.tasa)*(b.porc_desc)/100)))/(x3.sub_total*x2.tasa), ", " e.nom1_emp || ' '||e.apell1_emp,j.valor*x2.tasa,j1.chitbis ", " FROM cctb00001 j,cctb00008 a,vetb00051 b,vetb00093 d,adtb00003 e,vetb00004 x1, ", " cgtb00084 x2,vetb00050 x3,cctb00011 j1 ", " WHERE j.fecha_orig BETWEEN '",rango.fecha_ini USING "mm/dd/yyyy","' AND '",rango.fecha_fin USING "mm/dd/yyyy","' AND ", " j.tipo_doc IN ('AV') AND ", " j.documento_ref = b.cotizacion_no AND ", " b.cotizacion_no=x3.cotizacion_no AND ", " b.cotizacion_no=d.cotizacion_no AND ", " a.cod_n = b.cod_n AND ", " a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_sec = b.cod_sec AND ", " j.tipo_cliente = x1.tipo_cliente AND ", " j.sec_cliente = x1.sec_cliente AND ", " j.tipo_cliente = j1.tipo_cliente AND ", " j1.num_doc = j.num_doc AND ", " j1.tipo_doc = j.tipo_doc AND ", " a.sec_vend = e.num_emp AND ", " a.sec_vend = d.sec_vend AND ", " x2.ano =", p_ano," AND ", " x2.mes =", p_mes," AND ", " x2.tipo_cliente = j.tipo_cliente AND ", " j.status_t IS NULL ", " GROUP BY j.cod_emp_sec,a.sec_vend,a.porc_cobros,e.nom1_emp,e.apell1_emp,x1.nombre,j.num_doc,j.tipo_doc, x3.cotizacion_no, ", " x3.sub_total,j.valor,x2.tasa,j1.chitbis,j.fecha_orig ", " UNION ", " SELECT j.cod_emp_sec,j.num_doc,j.tipo_doc,CONVERT(char(10),j.fecha_orig,103), x3.cotizacion_no, a.porc_cobros,x1.nombre, ", " SUM(b.cantidad*((b.precio*x2.tasa)-((b.precio*x2.tasa)*(b.porc_desc)/100)))/(x3.sub_total*x2.tasa), ", " e.nom1_emp || ' '||e.apell1_emp,j.valor*x2.tasa,j1.chitbis ", " FROM cctb00001 j,cctb00008 a,vetb00051 b,adtb00003 e,vetb00004 x1, ", " cgtb00084 x2,vetb00050 x3,cctb00011 j1 ", " WHERE j.fecha_orig BETWEEN '",rango.fecha_ini USING "mm/dd/yyyy","' AND '",rango.fecha_fin USING "mm/dd/yyyy","' AND ", " j.tipo_doc IN ('AV') AND ", " j.documento_Ref = b.cotizacion_no AND ", " b.cotizacion_no=x3.cotizacion_no AND ", " a.cod_n = b.cod_n AND ", " a.cod_grupo = b.cod_grupo AND ", " a.cod_tipo = b.cod_tipo AND ", " a.cod_sec = b.cod_sec AND ", " j.tipo_cliente = x1.tipo_cliente AND ", " j.sec_cliente = x1.sec_cliente AND ", " j.tipo_cliente = j1.tipo_cliente AND ", " j1.num_doc = j.num_doc AND ", " j1.tipo_doc = j.tipo_doc AND ", " a.sec_vend = e.num_emp AND ", " a.sec_vend = j.cod_emp_sec AND ", " x2.ano =", p_Ano," AND ", " x2.mes =", p_mes," AND ", " x2.tipo_cliente = j.tipo_cliente AND ", " j.status_t IS NULL ", " GROUP BY j.cod_emp_sec,a.sec_vend,a.porc_cobros,e.nom1_emp,e.apell1_emp,x1.nombre,j.num_doc,j.tipo_doc, x3.cotizacion_no, ", " x3.sub_total,j.valor,x2.tasa,j1.chitbis,j.fecha_orig " PREPARE comando1 FROM selec DECLARE busca_adicional CURSOR FOR comando1 FOREACH busca_adicional INTO datos.sec_vend,datos.documento,datos.tipo_doc,datos.fecha, datos.cotizacion_no, datos.porc_cobros_vend, datos.nombre_cliente, datos.valor_adicional,datos.nombre_vendedor, datos.valor_orig,datos.chitbis LET datos.codigo_supervisor=0 IF datos.chitbis = "SI" THEN LET datos.valor_orig = (datos.valor_orig/(1+(porc_itbis/100))) END IF IF datos.valor_orig < 0 THEN LET datos.valor_orig=datos.valor_orig * -1 END IF LET datos.valor_orig = datos.valor_adicional*datos.valor_orig LET datos.comision_adicional = datos.valor_orig * datos.porc_cobros_vend LET datos.comision_vend= datos.comision_adicional IF datos.valor_orig IS NOT NULL THEN INSERT INTO tmpccrp48 VALUES (datos.*) OUTPUT TO REPORT reporte43(datos.*) END IF END FOREACH IF idx > 1 THEN FINISH REPORT reporte43 END IF ELSE CALL seleccionarsalida() RETURNING r_output LET preview=1 LET selec = "SELECT a.orden,CONVERT(CHAR(10),a.fecha_orden,103), ", "a.cliente,a.soporteventas,a.producto,a.cantidad_ordenada,a.cantidadFacturada,a.simbolo,a.porc_vendedor, ", "a.comisionDespacho,a.comisionCotizado ", " FROM vwordenescocinas a ", " WHERE a.ano=",p_ano," and a.numeroMes=",p_mes PREPARE comando_c FROM selec DECLARE busca_ordenes CURSOR FOR comando_c LET idx = 1 LET r_filename = "ccprrp048b.4rp" FOREACH busca_ordenes INTO datos_cocina.* IF idx = 1 THEN IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file 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 reporte48b TO XML HANDLER handler END IF LET idx = idx +1 OUTPUT TO REPORT reporte48b(datos_cocina.vendedor) END FOREACH FINISH REPORT reporte48b END IF END FUNCTION # Rutina de reporte REPORT reporte43(x) # Variable que toma el valor de la funcion que llamo a esta rutina DEFINE x RECORD codigo_supervisor SMALLINT, nombre_supervisor VARCHAR(60), sec_vend SMALLINT, nombre_vendedor VARCHAR(60), fecha DATE, documento INT, tipo_doc VARCHAR(2), cotizacion_no INT, nombre_cliente VARCHAR(100), valor_orig DEC(12,2), porc_cobros_vend DEC(8,4), chitbis CHAR(2), comision_vend DEC(12,4), sec_vend_a SMALLINT, valor_adicional DEC(12,2), comision_adicional DEC(12,2), str_reporte VARCHAR(50) END RECORD, nombre_mes CHAR(30), hora CHAR(16), t_valor_supervisor,t_valor_vendedor DEC(12,2) ORDER BY x.codigo_supervisor,x.sec_vend FORMAT PAGE HEADER LET hora = TODAY SELECT a.descrip INTO nombre_mes FROM mestable a WHERE a.mes = p_mes BEFORE GROUP OF x.codigo_supervisor LET t_valor_supervisor =0 BEFORE GROUP OF x.sec_vend LET t_valor_vendedor = 0 ON EVERY ROW LET t_valor_vendedor = t_valor_vendedor + x.comision_vend LET t_valor_supervisor = t_valor_supervisor + x.comision_vend PRINTX x.*,t_valor_supervisor,p_companias.nombre,p_ano,nombre_mes,hora,t_valor_vendedor END REPORT REPORT reporte48b(xvendedor) DEFINE xvendedor VARCHAR(100), total_comision_d,total_comision_c FLOAT FORMAT FIRST PAGE HEADER PRINTX p_companias.nombre BEFORE GROUP OF xvendedor PRINTX xvendedor LET total_comision_d = 0 LET total_comision_c = 0 ON EVERY ROW LET total_comision_d = total_comision_d + datos_cocina.comisionDespacho LET total_comision_c = total_comision_c + datos_cocina.comisionCotizado PRINTX datos_cocina.*,total_comision_d,total_comision_c END REPORT