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

287 lines
10 KiB
Plaintext

{
===============================================================
PROGRAMA : IPPRRP035
OBJETIVO : COSTOS DE CALIDAD
DESARROLLADOR : Ing. Elvis García
===============================================================
}
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,
reporte_tipo TINYINT,
titulo_col1 STRING
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuarios USING clave
CALL ipprrp035()
END MAIN
FUNCTION ipprrp035()
OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21
CLEAR SCREEN
OPEN FORM ipfmrp035 FROM "ipfmrp035"
DISPLAY FORM ipfmrp035
INPUT BY NAME fecha1, fecha2, reporte_tipo
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
AFTER INPUT
LET idx = 1
IF reporte_tipo = 0 THEN
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'
ELSE
LET query =
"SELECT
ISNULL(a.titulodepartamento, 'NO TIENE'),
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.titulodepartamento
ORDER BY a.origen, a.titulodepartamento;
"
LET titulo_col1 = 'DEPARTAMENTOS'
END IF
DECLARE buscar CURSOR FROM query
FOREACH buscar INTO inv[idx].*
LET idx = idx + 1;
END FOREACH
IF idx > 1 THEN
LET r_filename = "ipprrp035.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)
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)
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)
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 prod_costoCalidad, total_costoCalidad, costoCalidad DECIMAL(18,2)
DEFINE container, titulo_columna1 STRING
DEFINE fecha1, fecha2, fecha_actual DATE
FORMAT
FIRST PAGE HEADER
LET fecha_actual = CURRENT
PRINTX fecha1, fecha2, fecha_actual,titulo_columna1
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)
LET prod_costoCalidad = ((prod_mov44 + prod_mov12 + prod_mov13)
/ prod_general_fact) * 100
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
LET costoCalidad = ((x.mov12 + x.mov13 + x.mov44) / x.total_fact) * 100
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)
LET total_costoCalidad = ((total_mov44 + total_mov12 + total_mov13)
/ total_general_fact) * 100
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