WIP: Agregar noprmt008 (Generacion de Nomina) - en diagnostico

- Registrar noprmt008 en mbsERP.4pw junto con sus 3 formularios
  (nofmmt008.4fd, nofmmt108.per, nofmmt208.per)
- Corregir bug en nofmmt008.4fd: el checkbox opt3 tenia colName="opt2"
  duplicado por error de copiar/pegar, causando "Field (opt3) not
  found in form"
- Quitar CONVERT(CHAR(10),...,103) en 5 SELECTs que alimentaban
  variables DATE (mismo patron de bug ya visto en noprmt003):
  causaba "-1205 Invalid month in date" de forma intermitente
- Agregar funcion debuglog() (escribe a archivo en FGLSPOOL) para
  diagnosticar por que la generacion terminaba sin insertar ningun
  registro; diagnostico aun en curso

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Abel López
2026-09-10 17:02:39 -04:00
co-authored by Claude Sonnet 5
parent 888a36553e
commit 9ac3f70a13
3 changed files with 30 additions and 7 deletions
+7
View File
@@ -473,6 +473,9 @@
<File filePath="nodir/nofmmt003.4fd"/>
<File filePath="nodir/nofmmt001.4fd"/>
<File filePath="nodir/nofmmt007.4fd"/>
<File filePath="nodir/nofmmt008.4fd"/>
<File filePath="nodir/nofmmt108.per"/>
<File filePath="nodir/nofmmt208.per"/>
</Library>
<Library binaryName="FUNCIONES_NO" id="-306412216" label="FUNCIONES_NO">
<File filePath="nodir/noprgb000.4gl"/>
@@ -495,6 +498,10 @@
<Configuration commandLineArguments="alopez Lopez2023" id="-700000050" label="Configuration"/>
<File filePath="nodir/noprmt007.4gl"/>
</Application>
<Application binaryName="noprmt008" dependencies="-1026233879,-764824792,-306412216,-335228674" environment="dir:FGLSPOOL=$(ProjectDir)/spool" id="-700000053" label="noprmt008">
<Configuration commandLineArguments="alopez Lopez2023" id="-700000054" label="Configuration"/>
<File filePath="nodir/noprmt008.4gl"/>
</Application>
</Group>
<Group id="1667448785" label="PRODUCTOS TERMINADOS">
<Library binaryName="FORMULARIOS_IP" id="-1826025351" label="FORMULARIOS_IP"/>
+2 -2
View File
@@ -15,7 +15,7 @@
<RecordField colName="regalia" defaultValue="N" fieldIdRef="1" name="regalia" sqlTabName="formonly" uid="{8a3eb67b-817a-4db8-97d3-f11a1f0b5f00}"/>
<RecordField colName="vacaciones" defaultValue="N" fieldIdRef="2" name="vacaciones" sqlTabName="formonly" uid="{aa45dc73-0663-4bd4-a34f-c6a63d81825c}"/>
<RecordField colName="opt2" defaultValue="N" fieldIdRef="3" name="opt2" sqlTabName="formonly" uid="{8aa4f853-fa6a-48ac-aad1-da963b52a53a}"/>
<RecordField colName="opt2" defaultValue="N" fieldIdRef="11" name="opt3" sqlTabName="formonly" uid="{d9951275-bdf0-4217-9dfd-b2661834496b}"/>
<RecordField colName="opt3" defaultValue="N" fieldIdRef="11" name="opt3" sqlTabName="formonly" uid="{d9951275-bdf0-4217-9dfd-b2661834496b}"/>
</Record>
<Form gridHeight="13" gridWidth="82" name="nofmmt008" style="basic" text="GENERACION NOMINAS">
<Grid gridHeight="13" gridWidth="82" name="grid1" posX="0" posY="0">
@@ -49,7 +49,7 @@
<Label gridHeight="1" gridWidth="20" name="label11" posX="43" posY="2" text="NOMINA BONIFICACION"/>
<CheckBox colName="opt2" defaultValue="N" fieldId="3" gridHeight="1" gridWidth="14" name="opt2" notNull="true" posX="64" posY="2" required="true" sqlTabName="formonly" tabIndex="11" valueChecked="S" valueUnchecked="N" widget="CheckBox"/>
<Label gridHeight="1" gridWidth="20" name="label12" posX="43" posY="3" text="NOMINA BONIFICACION DESACTIVADOS"/>
<CheckBox colName="opt2" defaultValue="N" fieldId="11" gridHeight="1" gridWidth="14" name="opt3" notNull="true" posX="64" posY="3" required="true" sqlTabName="formonly" tabIndex="-1" valueChecked="S" valueUnchecked="N" widget="CheckBox"/>
<CheckBox colName="opt3" defaultValue="N" fieldId="11" gridHeight="1" gridWidth="14" name="opt3" notNull="true" posX="64" posY="3" required="true" sqlTabName="formonly" tabIndex="12" valueChecked="S" valueUnchecked="N" widget="CheckBox"/>
</Group>
</Grid>
</Form>
+21 -5
View File
@@ -158,6 +158,7 @@ DEFINE movi_emp DYNAMIC ARRAY OF RECORD
valor LIKE notb00007.valor,
departamento INT
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
@@ -169,6 +170,15 @@ 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
@@ -200,7 +210,7 @@ FUNCTION noprmt008()
# Busqueda del periodo comprendido de la nomina
LET selec =
"SELECT CONVERT(CHAR(10),fecha_del,103) ,CONVERT(CHAR(10),fecha_al,103), h_normal,mes,ano,num_sem,estado_legal ",
"SELECT fecha_del, fecha_al, h_normal,mes,ano,num_sem,estado_legal ",
" FROM notb00010 ",
" WHERE num_nomi = '",
datos_nomi.num_nomi,
@@ -228,7 +238,7 @@ FUNCTION noprmt008()
DISPLAY BY NAME xestado_legal
LET selec =
"SELECT CONVERT(CHAR(10),MIN(a.fecha_del),103),CONVERT(CHAR(10),MAX(a.fecha_al),103) ",
"SELECT MIN(a.fecha_del), MAX(a.fecha_al) ",
" FROM notb00010 a ",
" WHERE a.ano ='",
p_ano,
@@ -246,7 +256,7 @@ FUNCTION noprmt008()
# Busca el mes inicial del periodo
LET selec =
"SELECT CONVERT(CHAR(10),MIN(a.fecha_Del),103) ",
"SELECT MIN(a.fecha_Del) ",
"FROM notb00010 a ",
"WHERE a.ano = '",
p_ano,
@@ -316,7 +326,7 @@ FUNCTION noprmt008()
LET ultima_semana_mes = NULL
LET fecha_ult = NULL
LET SELEC =
"SELECT CONVERT(CHAR(10),MAX(a.fecha_al),103) ",
"SELECT MAX(a.fecha_al) ",
" FROM notb00010 a ",
" WHERE a.tipo_emp = ? AND ",
" a.mes = ? AND ",
@@ -350,7 +360,7 @@ FUNCTION noprmt008()
END IF
IF ultima_semana_mes = "S" THEN
SELECT CONVERT(CHAR(10), MIN(fecha_del), 103)
SELECT MIN(fecha_del)
INTO fecha_ini_mes
FROM notb00010
WHERE tipo_emp = datos_nomi.tipo_emp
@@ -369,6 +379,7 @@ 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
@@ -376,24 +387,29 @@ 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