Files
MBS/PROYECTO/PRDIR/prprrp019.4gl
T

280 lines
12 KiB
Plaintext

{=====================================================
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