{===================================================== FUNCION : REPORTE DESPACHO TRANSPORTE OBJETIVO : *************************** PROGRAMADOR : Valentin Rodriguez FECHA : =====================================================} SCHEMA "smarmotech" GLOBALS "prprgb000.4gl" DEFINE datos RECORD fecha_inicial DATE, fecha_final DATE, tiporeporte VARCHAR(50) END RECORD, pcompanias RECORD LIKE companias.*, valorOrden FLOAT DEFINE despachos RECORD orden LIKE iptb00006.num_oc, cotizacion LIKE vetb00050.cotizacion_no, conduce LIKE iptb00006.num_doc, movimiento LIKE iptb00006.cod_mov, bodega LIKE intb00009.descripcion, cliente LIKE vetb00050.nombre_cliente, direccion LIKE vetb00050.direccion_cliente, provincia LIKE vetb00020.nombre_provincia, conductor LIKE vetb00015.nombre, placa LIKE iptb00006.placa, precio LIKE vetb00051.precio, cantidad LIKE vetb00051.cantidad, tasa LIKE cgtb00084.tasa, descuento LIKE vetb00051.porc_desc, moneda CHAR(4), desc_tranporte LIKE vetb00051.descripcion, factura INT 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 'prfmrp019' DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME datos .* --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_inicial IS NULL AND DATOS.fecha_final IS NOT NULL THEN CALL fgl_winmessage("INFO", "SI ESPECIFICA UN RANGO DE FECHA DEBE INDICAR FECHA INICIAL", "INFO") NEXT FIELD fecha_inicial 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 END INPUT CONSTRUCT BY NAME criterio ON a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, x.tipo_cliente,x.sec_cliente,a.num_oc, a.num_doc ON ACTION mostrar LET selec = " select a.num_oc, g.cotizacion_no, a.num_doc, a.cod_mov, b.descripcion, x.nombre, RTRIM(x1.calle)+' '+x1.urbanizacion, h.descrip, cast(e.cod_transp as char(4))+'-'+cast(e.sec_transp as char(10))+' '+e.nombre, isnull(a.placa, 'NO PLACA'), sum(f.precio*f.cantidad),sum(f.cantidad), k.tasa, sum((f.precio*f.cantidad)*(f.cantidad_2/100)),m.simbolo,x2.descrip_esp from iptb00006 a inner join intb00009 b ON b.cod_bodega = a.bodega inner join iptb00002 x2 ON x2.cod_n = a.cod_n and x2.cod_grupo = a.cod_grupo and x2.cod_tipo = a.cod_tipo and x2.cod_sec = a.cod_sec inner join vetb00004 x ON x.tipo_cliente = a.cod_sp AND x.sec_cliente = a.cod_sp_sec inner join vetb00005 x1 ON x.tipo_cliente = x1.tipo_cliente and x.sec_cliente = x1.sec_cliente inner join vetb00002 g ON g.orden = a.num_oc and g.status_t is null inner join vetb00003 f on a.cod_n = f.cod_n and a.cod_grupo = f.cod_grupo and a.cod_tipo = f.cod_tipo and a.cod_sec = f.cod_sec and f.factura = g.factura and f.factura = a.factura AND f.status_t is null inner join vetb00061 m on g.ventas = m.ventas LEFT OUTER JOIN vetb00015 e on a.cod_transp = e.cod_transp and a.sec_transp = e.sec_transp and e.status_t is null LEFT OUTER JOIN vetb00008 h on h.cod_zona = x.cod_zona and h.status_t is null LEFT OUTER join cgtb00084 k on x.tipo_cliente = k.tipo_cliente and g.ventas = k.ventas and k.ano = ",YEAR(datos.fecha_final), " and k.mes = ",MONTH(datos.fecha_final), " where a.fecha BETWEEN '",datos.fecha_inicial USING "MM/DD/YYYY","' and '",datos.fecha_final USING "MM/DD/YYYY", "' and ", " a.cod_n in (25) and a.cod_mov in (30,31,55) and ", criterio CLIPPED, " group by a.num_oc, g.cotizacion_no, a.num_doc, a.cod_mov, b.descripcion, x.nombre, RTRIM(x1.calle)+' '+x1.urbanizacion, h.descrip, e.nombre, a.placa, k.tasa, m.simbolo,x2.descrip_esp order by a.num_oc " PREPARE comando FROM selec DECLARE reservas CURSOR FOR comando LET idx = 1 FOREACH reservas INTO despachos.* LET valorOrden = (despachos.precio - despachos.descuento)*despachos.tasa IF idx = 1 THEN IF datos.tiporeporte = 'DE' THEN LET r_filename ="prprrp019.4rp" ELSE LET r_filename ="prprrp019a.4rp" END IF 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 IF datos.tiporeporte = "DE" THEN START REPORT reserva_rpt TO XML HANDLER HANDLER ELSE START REPORT resumen TO XML HANDLER HANDLER END IF END IF LET idx = 2 END IF IF datos.tiporeporte = 'DE' THEN OUTPUT TO REPORT reserva_rpt(despachos.*, datos.*, valorOrden) ELSE OUTPUT TO REPORT resumen(despachos.*) END IF END FOREACH IF idx > 1 THEN IF datos.tiporeporte = "DE" THEN FINISH REPORT reserva_rpt ELSE FINISH REPORT resumen END IF 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 END CONSTRUCT #"file:///e:/marmotechc/imagenes/genero_logo.png" ON ACTION CANCEL CALL msg(2) LET INT_FLAG = FALSE EXIT PROGRAM END DIALOG CLOSE WINDOW HOME_FRM END FUNCTION REPORT reserva_rpt(x, y, vOrden) DEFINE x RECORD orden LIKE iptb00006.num_oc, cotizacion LIKE vetb00050.cotizacion_no, conduce LIKE iptb00006.num_doc, movimiento LIKE iptb00006.cod_mov, bodega LIKE intb00009.descripcion, cliente LIKE vetb00050.nombre_cliente, direccion LIKE vetb00050.direccion_cliente, provincia LIKE vetb00020.nombre_provincia, conductor LIKE vetb00015.nombre, placa LIKE iptb00006.placa, precio LIKE vetb00051.precio, cantidad LIKE vetb00051.cantidad, tasa LIKE cgtb00084.tasa, descuento LIKE vetb00051.porc_desc, moneda CHAR(4), desc_tranporte LIKE vetb00051.descripcion, factura INT END RECORD DEFINE y RECORD fecha_inicial DATE, fecha_final DATE, tiporeporte VARCHAR(50) END RECORD, fecha_reporte, rango_fecha CHAR(30), total_orden, vOrden FLOAT, dir_cliente VARCHAR(100), cond_mov CHAR(35), Scosto VARCHAR(20), ScostoT VARCHAR(20) ORDER BY x.orden,x.desc_tranporte FORMAT BEFORE GROUP OF x.desc_tranporte PRINTX x.desc_tranporte BEFORE GROUP OF x.orden LET total_orden = 0 LET ScostoT = "" PRINTX x.orden, x.movimiento ON EVERY ROW LET fecha_reporte = CURRENT LET dir_cliente = x.direccion CLIPPED,',','(',x.provincia CLIPPED,')' LET rango_fecha = y.fecha_inicial,'--',y.fecha_final LET cond_mov = x.bodega,'-',x.conduce USING "<<<<<<",'-',x.factura USING "<<<<<<<", x.movimiento USING "<<<<<" CLIPPED,"-Tasa:",x.tasa USING "<<.##" LET Scosto = 'RD$',vOrden USING "<<<,<<<.##" CLIPPED PRINTX cond_mov, x.cliente, dir_cliente, x.conductor, x.placa, Scosto, x.moneda, vOrden, pcompanias.nombre, fecha_reporte, rango_fecha AFTER GROUP OF x.orden LET total_orden = GROUP SUM(vOrden) LET ScostoT = x.moneda,total_orden USING "<<<,<<<.##" CLIPPED PRINTX ScostoT END REPORT REPORT resumen(x) DEFINE x RECORD orden LIKE iptb00006.num_oc, cotizacion LIKE vetb00050.cotizacion_no, conduce LIKE iptb00006.num_doc, movimiento LIKE iptb00006.cod_mov, bodega LIKE intb00009.descripcion, cliente LIKE vetb00050.nombre_cliente, direccion LIKE vetb00050.direccion_cliente, provincia LIKE vetb00020.nombre_provincia, conductor LIKE vetb00015.nombre, placa LIKE iptb00006.placa, precio LIKE vetb00051.precio, cantidad LIKE vetb00051.cantidad, tasa LIKE cgtb00084.tasa, descuento LIKE vetb00051.porc_desc, moneda CHAR(4), desc_tranporte LIKE vetb00051.descripcion, factura INT END RECORD, mvalor,tvalor,bvalor,ttvalor FLOAT, fecha_reporte,rango_fecha STRING ORDER BY x.bodega,x.desc_tranporte FORMAT FIRST PAGE HEADER LET fecha_reporte = CURRENT PRINTX fecha_reporte,pcompanias.nombre,rango_Fecha AFTER GROUP OF x.bodega LET rango_fecha = datos.fecha_inicial,'--',datos.fecha_final LET bvalor = GROUP SUM(x.precio*x.cantidad) PRINTX bvalor,x.bodega AFTER GROUP OF x.desc_tranporte LET tvalor = GROUP SUM(x.precio*x.cantidad) PRINTX x.desc_tranporte,tvalor ON LAST ROW LET ttvalor = SUM(x.precio*x.cantidad) PRINTX ttvalor END REPORT