Files
MBS/PROYECTOS/ipdir/ipprrp036.4gl
T

255 lines
8.7 KiB
Plaintext

{
===============================================================
PROGRAMA : IPPRRP036
OBJETIVO : COSTOS DE CALIDAD 2
DESARROLLADOR : Ing. Elvis Garcia
===============================================================
}
GLOBALS "ipprgb000.4gl"
DEFINE
departamento INT,
fecha1 DATE,
fecha2 DATE,
inv DYNAMIC ARRAY OF RECORD
tipo_producto STRING,
origen_producto STRING,
mov44 DECIMAL(18, 2),
mov12 DECIMAL(18, 2),
mov13 DECIMAL(18, 2),
total DECIMAL(18, 2),
total_fact DECIMAL(18, 2)
END RECORD,
idx INT,
query STRING,
titulo_col1 STRING,
ventas_total DECIMAL(18, 2)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
CALL ipprrp036()
END MAIN
FUNCTION ipprrp036()
OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21
CLEAR SCREEN
OPEN FORM ipfmrp036 FROM "ipfmrp036"
DISPLAY FORM ipfmrp036
INPUT BY NAME fecha1, fecha2
BEFORE INPUT
INITIALIZE fecha1, fecha2 TO NULL
AFTER FIELD fecha1
IF fecha1 IS NULL OR fecha1 > TODAY THEN
CALL msg(16)
NEXT FIELD fecha1
END IF
LET fecha2 = TODAY
DISPLAY BY NAME fecha2
AFTER FIELD fecha2
IF fecha2 IS NULL OR fecha2 < fecha1 THEN
CALL msg(16)
NEXT FIELD fecha1
END IF
ON ACTION CANCEL
EXIT PROGRAM
AFTER INPUT
LET idx = 1
-- Solo para mostrar en el header (referencia CAM).
SELECT ISNULL(SUM(monto_bruto - descuento), 0)
INTO ventas_total
FROM ventas_facturas
WHERE ano = YEAR(TODAY)
AND numero_mes <= MONTH(TODAY)
LET query =
"SELECT
a.producto,
a.origen,
CAST(ISNULL(SUM(CASE
WHEN a.codigo_mov = 44
THEN a.costo_standard * ABS(ISNULL(a.cantidad2,0))
ELSE 0
END),0) AS DECIMAL(18,2)) AS total_costo_44,
CAST(ISNULL(SUM(CASE
WHEN a.codigo_mov = 12
THEN a.costo_standard * ABS(ISNULL(a.cantidad2,0))
ELSE 0
END),0) AS DECIMAL(18,2)) AS total_costo_12,
CAST(ISNULL(SUM(CASE
WHEN a.codigo_mov = 13
THEN a.costo_standard * ABS(ISNULL(a.cantidad2,0))
ELSE 0
END),0) AS DECIMAL(18,2)) AS total_costo_13,
CAST(ISNULL(SUM(CASE
WHEN a.codigo_mov IN (44,12,13)
THEN a.costo_standard * ABS(ISNULL(a.cantidad2,0))
ELSE 0
END),0) AS DECIMAL(18,2)) AS total_costo_general,
CAST(ISNULL(SUM(CASE
WHEN a.codigo_mov IN (30,31,55,56)
THEN a.costo_standard * ABS(ISNULL(a.cantidad2,0))
ELSE 0
END),0) AS DECIMAL(18,2)) AS total_calculado
FROM vwipprodterm a
WHERE a.codigo_mov IN (44,12,13,30,31,55,56)
AND a.ano BETWEEN YEAR('",
fecha1 USING 'yyyy-mm-dd',
"') AND YEAR('",
fecha2 USING 'yyyy-mm-dd',
"')
AND a.mes_orden BETWEEN MONTH('",
fecha1 USING 'yyyy-mm-dd',
"') AND MONTH('",
fecha2 USING 'yyyy-mm-dd',
"')
GROUP BY a.origen, a.producto
ORDER BY a.origen, a.producto;
"
LET titulo_col1 = 'PRODUCTOS'
DECLARE buscar CURSOR FROM query
FOREACH buscar INTO inv[idx].*
LET idx = idx + 1;
END FOREACH
IF idx > 1 THEN
LET r_filename = "ipprrp036.4rp"
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview=1
CALL selectoutput() 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
END IF
START REPORT inv1 TO XML HANDLER HANDLER
FOR idx = 1 TO inv.getlength()
OUTPUT TO REPORT inv1(inv[idx].*, fecha1, fecha2, titulo_col1, ventas_total)
END FOR
FINISH REPORT inv1
ELSE
CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS", "INFO")
END IF
END INPUT
END FUNCTION
REPORT inv1(x, fecha1, fecha2, titulo_columna1, ventas_total)
DEFINE x RECORD
tipo_producto STRING,
origen_producto STRING,
mov44 DECIMAL(18, 2),
mov12 DECIMAL(18, 2),
mov13 DECIMAL(18, 2),
total DECIMAL(18, 2),
total_fact DECIMAL(18, 2) -- PRODUCTOS: venta de la clase | DEPARTAMENTOS: MOV 30,31,55,56
END RECORD
DEFINE total_registros,total_mov44, total_mov12, total_mov13, total_general, total_general_fact DECIMAL(18, 2)
DEFINE registros_prod,prod_mov44, prod_mov12, prod_mov13, prod_general, prod_general_fact DECIMAL(18, 2)
DEFINE total_costoCalidad, costoCalidad, prod_costoCalidad DECIMAL (18,6)
DEFINE container, titulo_columna1 STRING
DEFINE ventas_total DECIMAL(18, 2)
DEFINE fecha1, fecha2, fecha_actual DATE
FORMAT
FIRST PAGE HEADER
LET fecha_actual = CURRENT
PRINTX fecha1, fecha2, fecha_actual, titulo_columna1, ventas_total
AFTER GROUP OF x.origen_producto
LET prod_mov44 = GROUP SUM(x.mov44)
LET prod_mov12 = GROUP SUM(x.mov12)
LET prod_mov13 = GROUP SUM(x.mov13)
LET prod_general = GROUP SUM(x.total)
LET prod_general_fact = GROUP SUM(x.total_fact)
IF prod_general_fact IS NULL OR prod_general_fact = 0 THEN
LET prod_costoCalidad = 0
ELSE
LET prod_costoCalidad = ((prod_mov44 + prod_mov12 + prod_mov13)
/ ventas_total) * 100
END IF
LET container = prod_costoCalidad, '%'
LET registros_prod = GROUP COUNT(*)
PRINTX registros_prod,prod_mov44, prod_mov12, prod_mov13,
prod_general, prod_general_fact, x.origen_producto, container
ON EVERY ROW
IF x.total_fact IS NULL OR x.total_fact = 0 THEN
LET costoCalidad = 0
ELSE
LET costoCalidad = ((x.mov12 + x.mov13 + x.mov44) /ventas_total) * 100
END IF
LET container = costoCalidad, '%'
PRINTX x.mov12, x.mov13, x.mov44, x.tipo_producto, x.total, x.total_fact, container
ON LAST ROW
LET total_mov44 = SUM(x.mov44)
LET total_mov12 = SUM(x.mov12)
LET total_mov13 = SUM(x.mov13)
LET total_general = SUM(x.total)
LET total_general_fact = SUM(x.total_fact)
IF total_general_fact IS NULL OR total_general_fact = 0 THEN
LET total_costoCalidad = 0
ELSE
LET total_costoCalidad = ((total_mov44 + total_mov12 + total_mov13)
/ ventas_total) * 100
END IF
LET container = total_costoCalidad, '%'
LET total_registros = COUNT(*)
PRINTX total_registros,total_mov44, total_mov12, total_mov13,
total_general, total_general_fact, container
END REPORT
FUNCTION busca_departamento()
DEFINE
pdepartamento ui.combobox,
kdepartamento SMALLINT,
kdescripcion CHAR(30)
LET pdepartamento = ui.combobox.forname("formonly.departamento")
CALL pdepartamento.clear()
DECLARE pagar CURSOR FOR
SELECT departamento, nom_dpto
FROM adtb00001
WHERE status_t IS NULL
ORDER BY nom_dpto
FOREACH pagar INTO kdepartamento, kdescripcion
CALL pdepartamento.additem(kdepartamento, kdescripcion)
END FOREACH
END FUNCTION