From 7638c1046ba07e98759d003a20ff0e3d58c85e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20L=C3=B3pez?= Date: Tue, 15 Sep 2026 12:16:53 -0400 Subject: [PATCH] Corregir noprmt008 (Generacion de Nomina): checkbox no aplicaba su valor por defecto El checkbox "GENERO NOMINA ACTIVOS" (opt1) y los demas checkboxes de la pantalla inicial no entregaban su defaultValue a la variable si el usuario no los tocaba explicitamente, quedando en "N". Como el codigo hace "IF opt1 != 'S' THEN RETURN" sin ningun mensaje, el programa generaba 0 registros y se cerraba en silencio pareciendo exitoso. Se inicializan opt1/opt2/opt3/regalia/vacaciones explicitamente antes del INPUT BY NAME para que coincidan con los defaults del formulario, sin depender de esa interaccion. Se retiro tambien la funcion debuglog() (y su entrada FGLSPOOL) usada solo para diagnosticar este problema. Verificado generando la nomina 2701/Q completa: 4798 registros para 628 empleados, con calculo correcto de sueldo quincenal (50% primera quincena) y descuentos de TSS/ARS. Co-Authored-By: Claude Sonnet 5 --- PROYECTO/mbsERP.4pw | 2 +- PROYECTO/nodir/noprmt008.4gl | 24 +++++++++--------------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index ed0aa14..d6af3f9 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -498,7 +498,7 @@ - + diff --git a/PROYECTO/nodir/noprmt008.4gl b/PROYECTO/nodir/noprmt008.4gl index 4696290..4c9b092 100644 --- a/PROYECTO/nodir/noprmt008.4gl +++ b/PROYECTO/nodir/noprmt008.4gl @@ -170,15 +170,6 @@ MAIN CALL noprmt008() END MAIN -FUNCTION debuglog(txt) - DEFINE txt STRING - DEFINE ch base.Channel - LET ch = base.Channel.create() - CALL ch.openFile(FGL_GETENV("FGLSPOOL") || "/noprmt008_debug.log", "a") - CALL ch.writeLine(txt) - CALL ch.close() -END FUNCTION - FUNCTION noprmt008() #CLEAR SCREEN @@ -193,6 +184,15 @@ FUNCTION noprmt008() # Seccion de captura de informacion general de la generacion de # la nomina LET int_flag = FALSE + -- El checkbox de la forma no siempre entrega su defaultValue a la + -- variable si el usuario no lo toca explicitamente; se inicializan + -- aqui para que coincidan con los defaults del formulario + -- (opt1=S, resto=N) y no dependan de esa interaccion. + LET opt1 = "S" + LET opt2 = "N" + LET opt3 = "N" + LET regalia = "N" + LET vacaciones = "N" INPUT BY NAME datos_nomi.*, opt1, opt2, opt3, regalia, vacaciones AFTER FIELD num_nomi IF datos_nomi.num_nomi IS NULL THEN @@ -379,7 +379,6 @@ FUNCTION noprmt008() AFTER INPUT IF int_flag THEN - CALL debuglog("AFTER INPUT: int_flag true, saliendo") LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE @@ -387,29 +386,24 @@ FUNCTION noprmt008() END IF EXIT INPUT END INPUT - CALL debuglog("Paso INPUT BY NAME ok") # Preparacion para busqueda por rango de departamento y rango de ficha del # empleado CONSTRUCT BY NAME criterio ON a.departamento, a.num_emp IF int_flag THEN - CALL debuglog("CONSTRUCT: int_flag true, saliendo") LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF - CALL debuglog("Paso CONSTRUCT ok, criterio=[" || criterio CLIPPED || "]") #CLEAR SCREEN # PROMPT #"ESTA SEGURO DE GENERAR DE NUEVO LA NOMINA (S/N) " FOR CHAR opt1 LET opt1 = upshift(opt1) IF opt1 != "S" THEN - CALL debuglog("opt1<>S, saliendo. opt1=[" || opt1 CLIPPED || "]") RETURN END IF - CALL debuglog("Paso opt1 check ok") #PROMPT #"ESTA NOMINA ES DE REGALIA (S/N) " FOR CHAR regalia