Files
MBS/PROYECTO/vedir/veprrp055.4gl
T

324 lines
14 KiB
Plaintext

{-------------------------------------------------------------------------------
PROGRAMA : VEPRRP055
OBJETIVO : Ordenes de producion x áreas
PROGRAMADOR : Valentin Rodriguez.
FECHA REALIZACION : Enero 11,2019
-------------------------------------------------------------------------------}
SCHEMA "smarmotech"
GLOBALS
DEFINE datos RECORD
fecha_inicial DATE,
fecha_final DATE,
modo_plantilla CHAR(1)
END RECORD,
usuarios VARCHAR(20),
clave VARCHAR(20),
selec STRING,
selec2 STRING,
pcompanias RECORD LIKE companias.*,
idx int,
cg LIKE prtb00013.cod_grupo,
ct LIKE prtb00013.cod_tipo,
cs LIKE prtb00013.cod_sec,
cn LIKE prtb00013.cod_n,
nc LIKE prtb00012.num_oc,
cantidadPend,
valorPend,
valorOrd,
valorCot FLOAT
DEFINE ordenesProd RECORD
equipo LIKE seg0008.nombre,
vendedor LIKE seg0000.nombre,
cotizacion_no LIKE prtb00012.cotizacion_no,
num_oc LIKE prtb00012.num_oc,
producto LIKE prtb00002.descripcion,
precio LIKE prtb00013.precio,
tasa LIKE cgtb00084.tasa,
descuento LIKE prtb00013.precio,
cantidad_ordenada LIKE prtb00013.cantidad,
cod_grupo LIKE prtb00013.cod_grupo,
cod_tipo LIKE prtb00013.cod_tipo,
cod_sec LIKE prtb00013.cod_sec,
cod_n LIKE prtb00013.cod_n,
cantidad_despachada LIKE iptb00006.cantidad_2
END RECORD
END GLOBALS
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 OrdenProducionXareas()
END MAIN
FUNCTION OrdenProducionXareas()
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 'vefmrp055'
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_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 criterio ON c.cod_n, c.cod_grupo, c.cod_tipo, c.cod_sec, a.num_oc, a.cerrada, g.depto, a.sec_vend
FROM cod_n, cod_grupo, cod_tipo, cod_sec, orden, cerrada, equipos, kvendedor
BEFORE CONSTRUCT
CALL cequipos()
CALL cvendedor(usuarios)
ON ACTION mostrar
LET selec = "select g.nombre, '('+cast(x.num_emp as varchar(6))+')'+ISNULL(rtrim(x.nom1_emp),' ')+isnull(rtrim(x.apell1_emp),' '), a.cotizacion_no, a.num_oc,
'('+cast(c.cod_n as varchar(5))+cast(c.cod_grupo as varchar(5))+cast(c.cod_tipo as varchar(5))+cast(c.cod_sec as varchar(5))+')' +' '+ ISNULL(h.descrip_esp,' '),
c.precio, i.tasa, c.descuento, SUM(c.cantidad), c.cod_grupo, c.cod_tipo, c.cod_sec, c.cod_n
from prtb00013 c
inner join prtb00012 a on a.num_oc = c.num_oc
inner join adtb00003 x on x.num_emp = a.sec_vend
inner join seg0000 f on a.sec_vend = f.sec_vend
inner join seg0008 g on f.depto = g.depto
inner join iptb00002 h on c.cod_n = h.cod_n and c.cod_grupo = h.cod_grupo and c.cod_tipo = h.cod_tipo and c.cod_sec = h.cod_sec
inner join cgtb00084 i on a.tipo_cliente = i.tipo_cliente and a.ventas = i.ventas
inner join prdtable j on i.mes = j.mes and i.ano = j.ano
where " , criterio CLIPPED, " and ","
i.ano between year('", datos.fecha_inicial USING "mm/dd/yyyy" ,"') and year('", datos.fecha_final USING "mm/dd/yyyy" ,"') and
i.mes between month('", datos.fecha_inicial USING "mm/dd/yyyy" ,"') and month('", datos.fecha_final USING "mm/dd/yyyy" ,"') and
a.fecha_oc between '", datos.fecha_inicial USING "mm/dd/yyyy" , "' and '",datos.fecha_final USING "mm/dd/yyyy","' and
a.fecha_oc BETWEEN j.fecha_inicio AND j.fecha_corte and
a.status_t is null
group by g.nombre, f.nombre, x.num_emp, x.nom1_emp, x.apell1_emp, a.cotizacion_no, a.num_oc, c.cod_n, c.cod_grupo, c.cod_tipo,
c.cod_sec, h.descrip_esp, c.precio, i.tasa, c.descuento
"
PREPARE comando FROM selec
DECLARE ordenes CURSOR FOR comando
LET r_filename ="veprrp055.4rp"
LET idx = 1
FOREACH ordenes INTO ordenesProd.*
CALL getCantidadDespachada(ordenesProd.cod_grupo, ordenesProd.cod_tipo, ordenesProd.cod_sec, ordenesProd.cod_n, ordenesProd.num_oc) RETURNING ordenesProd.cantidad_despachada
LET valorCot = (ordenesProd.precio - ((ordenesProd.descuento * ordenesProd.precio)/100)) * ordenesProd.tasa
LET valorOrd = valorCot * ordenesProd.cantidad_ordenada
LET cantidadPend = ordenesProd.cantidad_ordenada + ordenesProd.cantidad_despachada
LET valorPend = cantidadPend * valorCot
IF idx = 1 THEN
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview=1
CALL seleccionarsalida() RETURNING r_output -- 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
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
LET idx = 2
START REPORT ordenes_prod_rpt TO XML HANDLER HANDLER
END IF
OUTPUT TO REPORT ordenes_prod_rpt(ordenesProd.*, datos.*, valorCot, valorOrd, cantidadPend, valorPend)
END FOREACH
IF idx > 1 THEN
FINISH REPORT ordenes_prod_rpt
END IF
END CONSTRUCT
ON ACTION CANCEL
CALL msg(2)
LET INT_FLAG = FALSE
EXIT PROGRAM
END DIALOG
CLOSE WINDOW HOME_FRM
END FUNCTION
FUNCTION getCantidadDespachada(cg, ct, cs, cn, nc)
DEFINE cg LIKE prtb00013.cod_grupo,
ct LIKE prtb00013.cod_tipo,
cs LIKE prtb00013.cod_sec,
cn LIKE prtb00013.cod_n,
nc LIKE prtb00012.num_oc,
cantidad_despachada LIKE iptb00006.cantidad_2
SELECT isnull(SUM(a.cantidad_2),0)
INTO cantidad_despachada
FROM iptb00006 a
WHERE a.cod_grupo = cg AND
a.cod_tipo = ct AND
a.cod_sec = cs AND
a.cod_n = cn AND
a.num_oc = nc AND
a.cod_mov IN (30,31,55,56,12,13) AND
a.status_t IS NULL
RETURN cantidad_despachada
END FUNCTION
REPORT ordenes_prod_rpt(x, y, Vcot, Vorden, canPend, Vpend)
DEFINE x RECORD
equipo LIKE seg0008.nombre,
vendedor LIKE seg0000.nombre,
cotizacion_no LIKE prtb00012.cotizacion_no,
num_oc LIKE prtb00012.num_oc,
producto LIKE prtb00002.descripcion,
precio LIKE prtb00013.precio,
tasa LIKE cgtb00084.tasa,
descuento LIKE prtb00013.precio,
cantidad_ordenada LIKE prtb00013.cantidad,
cod_grupo LIKE prtb00013.cod_grupo,
cod_tipo LIKE prtb00013.cod_tipo,
cod_sec LIKE prtb00013.cod_sec,
cod_n LIKE prtb00013.cod_n,
cantidad_despachada LIKE iptb00006.cantidad_2
END RECORD,
canPend,
cantidadPendiente,
Vcot,
Vpend,
Vorden FLOAT
DEFINE y RECORD
fecha_inicial DATE,
fecha_final DATE,
modo_plantilla CHAR(1)
END RECORD,
fecha_reporte char(30),
fecha char(30),
valorCotizacion NUMERIC(10,2),
--VARIABLES DE TOTALES POR ORDEN
totalOrden,
totalOrdenOrdenada,
totalOrdenDespachada,
totalOrdenCanPendiente,
totalOrdenValPendiente,
--VARIABLES DE TOTALES POR VENDEDOR
totalOrdenVendor,
totalVendordenada,
totalVendorValorPendiente,
totalVendorPendiente,
totalVendorDespachada,
--VARIABLES DE TOTALES POR EQUIPO
totalCantidadOrden,
totalCantidadOrdenada,
totalCantidadDespachada,
totalCantidadPendiente,
totalValorPendiente,
--VARIABLES DE TOTALES PARA TOTALES GENERALES
totalGenValorOrden,
totalGenValorPendiente,
totalGenGenCantidadOrdenada,
totalGenCantidadDespachada,
totalGenCantidadPendiente FLOAT
ORDER BY x.equipo,x.vendedor
FORMAT
BEFORE GROUP OF x.equipo
LET totalCantidadOrdenada = 0
LET valorCotizacion = 0
BEFORE GROUP OF x.vendedor
LET totalOrdenVendor = 0
LET totalVendordenada = 0
LET totalVendorPendiente = 0
LET totalVendorDespachada = 0
PRINTX x.vendedor
BEFORE GROUP OF x.num_oc
LET totalOrdenOrdenada = 0
LET totalOrdenDespachada = 0
LET totalOrdenCanPendiente = 0
LET totalOrdenValPendiente = 0
ON EVERY ROW
LET fecha_reporte = today USING "mm/dd/yyyy"
LET fecha = y.fecha_inicial USING "mm/dd/yyyy",'--',y.fecha_final USING "mm/dd/yyyy"
LET cantidadPendiente = x.cantidad_ordenada + x.cantidad_despachada
PRINTX x.equipo, x.cotizacion_no, x.num_oc, x.producto ,x.tasa,
x.descuento, x.cantidad_ordenada, x.cod_grupo, x.cod_tipo,
x.cod_sec, x.cod_n, x.cantidad_despachada ,cantidadPendiente,
Vpend, Vcot,Vorden, pcompanias.nombre, fecha_reporte, fecha,
y.modo_plantilla
AFTER GROUP OF x.equipo
LET totalCantidadOrden = GROUP SUM(Vorden)
LET totalCantidadOrdenada = GROUP SUM(x.cantidad_ordenada)
LET totalCantidadDespachada = GROUP SUM(x.cantidad_despachada)
LET totalCantidadPendiente = GROUP SUM(cantidadPendiente)
LET totalValorPendiente = GROUP SUM(Vpend)
PRINTX totalCantidadOrden, totalValorPendiente, totalCantidadDespachada,
totalCantidadPendiente, totalCantidadOrdenada
AFTER GROUP OF x.vendedor
LET totalOrdenVendor = GROUP SUM(Vorden)
LET totalVendordenada = GROUP SUM(x.cantidad_ordenada)
LET totalVendorDespachada = GROUP SUM(x.cantidad_despachada)
LET totalVendorPendiente = GROUP SUM(cantidadPendiente)
LET totalVendorValorPendiente = GROUP SUM(Vpend)
PRINTX totalOrdenVendor, totalVendordenada, totalVendorDespachada,
totalVendorPendiente, totalVendorValorPendiente
AFTER GROUP OF x.num_oc
LET totalOrden = GROUP SUM(Vorden)
LET totalOrdenOrdenada = GROUP SUM(x.cantidad_ordenada)
LET totalOrdenDespachada = GROUP SUM(x.cantidad_despachada)
LET totalOrdenCanPendiente = GROUP SUM(cantidadPendiente)
LET totalOrdenValPendiente = GROUP SUM(Vpend)
PRINTX totalOrden ,totalOrdenOrdenada, totalOrdenDespachada,
totalOrdenCanPendiente, totalOrdenValPendiente
ON LAST ROW
LET totalGenValorOrden = SUM(Vorden)
LET totalGenGenCantidadOrdenada = SUM(x.cantidad_ordenada)
LET totalGenCantidadDespachada = SUM(x.cantidad_despachada)
LET totalGenValorPendiente = SUM(Vpend)
LET totalGenCantidadPendiente = SUM(cantidadPendiente)
PRINTX totalGenValorOrden, totalGenGenCantidadOrdenada,
totalGenCantidadDespachada, totalGenValorPendiente,
totalGenCantidadPendiente
END REPORT