324 lines
14 KiB
Plaintext
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
|
|
|