otrodir/selectoutput_simple.4gl definia FUNCTION selectOutput(), mismo nombre que otrodir/vesalidaimpresora.4gl (ya usado por Abel en noprcs006, ipprrp002, ipprrp003, ipprrp039, ipprrp044). Al mezclar ambos commits, cualquier programa que dependiera de FUNCIONESREPORT mas la libreria de Abel rompia por simbolo duplicado. Se renombra la funcion (y se actualizan sus 4 unicos llamados: ipprrp005, ipprrp009, ipprrp035, ipprrp036) sin tocar vesalidaimpresora.4gl, para no afectar los programas que Abel ya tiene funcionando con esa version. Recompilados y verificados los 4 programas tras el cambio. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
287 lines
10 KiB
Plaintext
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 selectOutputSimple() 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
|
|
|
|
|