Registra noprrp003 (Herramientas de Empleados) y corrige bugs

Se agrega noprrp003 al proyecto usando nofmrp003.4fd, reutilizando
FUNCIONESREPORT y libgre.42x ya configurados para noprrp002.

Se corrige bug donde el combo "Departamento=TODOS" (valor NULL)
generaba via CONSTRUCT la condicion "e.departamento is null" en vez
de no filtrar, excluyendo a todos los empleados con departamento
asignado (confirmado con debug logging: solo empleados sin
departamento pasaban el filtro). Se agrega neutraliza_depto_null()
para neutralizar esa condicion especifica tras el CONSTRUCT.

Se corrige fila vacia sobrante al final del reporte (el FOREACH deja
un elemento extra en el arreglo dinamico; se agrega
inv.deleteElement(idx), igual que en noprrp002).

Probado con empleado especifico, todos los empleados y filtro por
departamento, verificado contra BD (94 registros totales, 12 para
CONTABILIDAD).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Abel López
2026-09-28 12:09:57 -04:00
co-authored by Claude Sonnet 5
parent c7442a777b
commit 0641c6b2be
2 changed files with 30 additions and 2 deletions
+6
View File
@@ -488,6 +488,7 @@
<File filePath="nodir/nofmcs004.4fd"/>
<File filePath="nodir/nofmcs006.4fd"/>
<File filePath="nodir/nofmrp002.4fd"/>
<File filePath="nodir/nofmrp003.4fd"/>
</Library>
<Library binaryName="FUNCIONES_NO" id="-306412216" label="FUNCIONES_NO">
<File filePath="nodir/noprgb000.4gl"/>
@@ -561,6 +562,11 @@
<File filePath="nodir/noprrp002.4gl"/>
<File filePath="bin/noprrp002.4rp"/>
</Application>
<Application binaryName="noprrp003" dependencies="-1026233879,-764824792,-306412216,-335228674,-1423229125" externalDependencies="libgre.42x" id="-700000077" label="noprrp003">
<Configuration commandLineArguments="alopez Lopez2023" id="-700000078" label="Configuration"/>
<File filePath="nodir/noprrp003.4gl"/>
<File filePath="bin/noprrp003.4rp"/>
</Application>
</Group>
<Group id="1667448785" label="PRODUCTOS TERMINADOS">
<Library binaryName="FORMULARIOS_IP" dependencies="-1026233879" id="-1826025351" label="FORMULARIOS_IP">
+24 -2
View File
@@ -57,6 +57,12 @@ FUNCTION noprrp003()
RETURN
END IF
-- El combo "departamento" usa NULL como valor para "TODOS", pero
-- CONSTRUCT traduce eso a "e.departamento is null", que excluye
-- (en vez de incluir) a los empleados con departamento asignado.
-- Se neutraliza esa condicion para que "TODOS" no filtre nada.
CALL neutraliza_depto_null(criterio) RETURNING criterio
LET query =
"SELECT a.num_emp, ",
" RTRIM(e.nom1_emp)+' '+RTRIM(ISNULL(e.apell1_emp,'')), ",
@@ -84,6 +90,7 @@ FUNCTION noprrp003()
FOREACH cur_rep INTO inv[idx].*
LET idx = idx + 1
END FOREACH
CALL inv.deleteElement(idx) -- descarta la fila vacia que deja el FOREACH
IF idx > 1 THEN
LET r_filename = "noprrp003.4rp"
@@ -143,5 +150,20 @@ REPORT rep_herr(x)
ON EVERY ROW
PRINTX x.fecha, x.codigo, x.descripcion, x.documento, x.cantidad
END REPORT
END REPORT
FUNCTION neutraliza_depto_null(criterio)
DEFINE criterio STRING
DEFINE patron STRING
DEFINE pos INT
LET patron = "e.departamento is null"
LET pos = criterio.getIndexOf(patron, 1)
IF pos > 0 THEN
LET criterio = criterio.subString(1, pos - 1), "1=1",
criterio.subString(pos + patron.getLength(), criterio.getLength())
END IF
RETURN criterio
END FUNCTION