Commit Graph
22 Commits
Author SHA1 Message Date
Abel LópezandClaude Sonnet 5.5 61818beb31 Registra noprrp045 (Formulario Ministerio de Trabajo)
- Registra nofmrp045.per y la aplicacion noprrp045 en mbsERP.4pw.
- Mueve noprrp045.4rp a bin/ (igual que los demas reportes).
- Diseno: el gris/negrita de columnas aplica solo a filas mensuales
  (A/M/C); las secciones 4-8 se ven planas. Declara x.tipo como
  input-variable.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-07 12:54:04 -04:00
Abel LópezandClaude Sonnet 5 80bd203be6 Registra noprrp015 (Prestamos Cooperativa) con reporte moderno
Se agrega noprrp015 al proyecto usando nofmrp015.per.

A diferencia de noprrp009 (donde se opto por salida de archivo de
texto), aqui se reescribio REPORT prestamo de PRINT COLUMN clasico a
PRINTX, y se creo nodir/../bin/noprrp015.4rp (diseno Report Writer
2.0) para soportar pantalla/PDF/Excel, igual que noprrp002/003/039/
043/044. configureOutput() en msgrp000.4gl sigue siendo un stub NULL
(ver noprrp009), asi que se usa fgl_report_loadCurrentSettings +
fgl_report_selectDevice/selectPreview/commitCurrentSettings
directamente.

Se corrige tambien el mismo problema de signo oculto en los montos
(mascaras sin caracter de signo) que se encontro en noprrp009.

Probado con empleado especifico y con varios empleados del mismo
movimiento, verificado contra BD (valor, interes y balance).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 17:02:41 -04:00
Abel LópezandClaude Sonnet 5 8ac18135e5 Registra noprrp009 (Movimientos de Empleados) y corrige varios bugs
Se agrega noprrp009 al proyecto usando nofmrp009.per.

Se corrige conversion CONVERT(CHAR,fecha,103) hacia variables DATE en
3 consultas (mismo patron de error -1205 "Invalid month in date" visto
en otros programas).

Se corrige salida del reporte: REPORT list_cooper usa el estilo
clasico PRINT COLUMN (no PRINTX/.4rp), incompatible con el motor de
reportes moderno (fgl_report_*); configureOutput() en msgrp000.4gl es
un stub que siempre retorna NULL para este caso (documentado en su
propio comentario). Se cambia a escribir un archivo de texto plano en
FGLSPOOL, igual que noprrp038.

Se corrige comparacion de fechas como texto (CONVERT a CHAR en formato
dd/mm/yyyy comparado alfabeticamente) en el modo "Vacaciones Pagadas",
que fallaba al usar un rango de fechas que cruza meses/anos distintos;
se cambia a comparacion real de fechas (>= y < dia_siguiente).

Se corrige formato de fecha faltante en los campos de rango de fecha
del formulario (.per), causando "Invalid month in date" al capturar
un dia mayor a 12 como mes.

Se corrige perdida del valor de fecha final en el encabezado del modo
"Vacaciones Pagadas" (el campo se reutilizaba en el record de fetch y
se sobreescribia con un valor en blanco); se guarda en una variable
separada antes del ciclo.

Se corrige formato de impresion de montos y totales sin signo
(mascaras "#,###,###.##" sin caracter de signo), que ocultaba
silenciosamente los valores negativos mostrandolos como positivos.

Probado en ambos modos (por nomina/movimiento, y por vacaciones
pagadas con rango de fechas cruzando meses), verificado contra BD.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-01 12:53:49 -04:00
Abel LópezandClaude Sonnet 5 a7431ef94a Registra noprrp043 (Informe Registro Entrada/Salidas) y corrige bugs
Se agrega noprrp043 al proyecto usando nofmrp043.4fd, reutilizando
FUNCIONESREPORT y libgre.42x.

Se corrige validacion residual de otro programa: comprobaba
"fecha_inicial IS NULL" (variable nunca asignada aqui) y hacia
NEXT FIELD fecha_inicial, campo que no existe en este formulario
(solo existen xfecha1/xfecha2). Esto hacia que el boton "Imprimir"
fallara siempre con "Field not found". Se elimina esa validacion,
ya que la validacion real de xfecha1 esta justo despues.

Se corrige rango de fechas: WHERE checktime BETWEEN fecha1 AND fecha2
(sin hora) excluye registros del ultimo dia con hora posterior a
medianoche. Se cambia a >= fecha1 AND < fecha2+1.

Probado con empleado 5001, rango 14/10/2024-16/10/2024, verificado
contra BD (2 registros de entrada, fecha/hora correctas).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-30 10:58:35 -04:00
Abel LópezandClaude Sonnet 5 aeab10ce0d Registra noprrp039 (Reporte Empleados) y corrige bugs de SQL y fecha
Se agrega noprrp039 al proyecto usando nofmrp039.4fd, reutilizando
FUNCIONESREPORT y libgre.42x.

Se corrige "AND  and" duplicado (typo) en las 3 consultas dinamicas
del bloque tipoEmpleados=9 (TODOS los empleados), que producia un
error de sintaxis SQL y bloqueaba completamente esa opcion.

Se corrige CONVERT(CHAR,fech_efec,103) hacia variable DATE en las 5
consultas del programa, mismo patron de error -1205 "Invalid month
in date" ya visto en otros programas.

Se crea PROYECTO/bin/IMAGENES/EMPLEADOS (con .gitkeep), carpeta
faltante donde el programa exporta las fotos de empleados
(foto_empleado.writeFile); sin ella el reporte fallaba con error
-8087 al procesar cualquier empleado con foto guardada.

Probado con empleado especifico y con "TODOS" (activos+inactivos con
foto), verificado contra BD sobre departamento 1000.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 13:11:32 -04:00
Abel LópezandClaude Sonnet 5 0641c6b2be 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>
2026-09-28 12:09:57 -04:00
Abel LópezandClaude Sonnet 5 c7442a777b Corrige ancho insuficiente del campo Numero de Nomina en noprrp002
El campo num_nomi en nofmrp002.4fd solo permitia 6 caracteres, pero
existen numeros de nomina de 8 digitos en notb00010 (periodos
codificados como fecha, ej. 27032021). Se amplia a 9 caracteres.

Probado reporte con nomina 2118/Q (14 empleados en notb00008, de los
cuales 12 pertenecen realmente al periodo segun el rango de fechas;
los otros 2 son registros historicos de 2008/2015 con el mismo
numero de nomina por coincidencia de datos antiguos, correctamente
excluidos por el filtro de fecha del reporte).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 10:48:04 -04:00
Abel LópezandClaude Sonnet 5 7e2f99b50e Registra noprrp002 (Nomina de Pago) y corrige bugs de reporte PDF
Se agrega noprrp002 al proyecto usando nofmrp002.4fd, mas
vesalidaimpresora.4gl (selectOutput2) en la libreria compartida
FUNCIONESREPORT, y externalDependencies libgre.42x para el motor de
reportes.

Se corrige databaseName="marmotech" invalido en nofmrp002.4fd (schema
no registrado en el proyecto) por "smarmotech".

Se corrige bug de tipo de dato: r_output estaba declarado SMALLINT en
noprrp002.4gl, pero selectOutput2() devuelve un STRING ("PDF","SVG",
"XLSX"). Ese desajuste impedia que fgl_report_selectDevice recibiera
el dispositivo correcto, asi que elegir PDF no generaba un PDF real.
Se cambia r_output a STRING.

Probado reporte agrupado de nomina (vista previa en pantalla y
exportacion a PDF real), verificado contra BD sobre empleado 110,
periodo 2320/Q.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 10:09:33 -04:00
Abel LópezandClaude Sonnet 5 c296da0151 Registra noprcs004 (Consulta Acumulado por Empleado)
Se agrega noprcs004 al proyecto usando nofmcs004.4fd. Se agrega
addir/adfunciones.4gl al Application ya que el programa llama a
calcula_salarios() definida ahi (no en noprrp037.4gl, que tiene una
funcion del mismo nombre pero con firma incompatible/uso de
variables de otro programa).

Se corrige conversion CONVERT(CHAR,fech_efec,103) hacia variable DATE
en la consulta principal, mismo patron de error -1205 "Invalid month
in date" ya visto en otros programas.

Probada consulta principal (datos del empleado, fecha de entrada,
salario promedio diario) y Ver (acumulado por movimiento), verificado
contra BD sobre empleado 110.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-26 09:45:52 -04:00
Abel LópezandClaude Sonnet 5 750b9a6bcf Registra noprmt025 (Parametros ISR) y corrige tres bugs bloqueantes
Se agrega noprmt025 al proyecto usando nofmmt025.4fd (tiene los
campos monto_ars/monto_afp que faltan en el .per).

Se corrigen tres bugs que impedian usar el programa:
1. nopcmf023(): CONVERT(varchar,fecha,101) hacia variable DATE,
   mismo patron de error -1205 "Invalid month in date" ya visto en
   otros programas.
2. nopcad023(): la validacion de tipo_emp contra notb00010 usaba un
   SELECT sin INTO/cursor (singleton select), que exige exactamente
   una fila. notb00010 es la tabla de periodos de nomina (un registro
   por periodo), con cientos de filas por tipo_emp, asi que esta
   validacion fallaba siempre con error -284 "A subquery has returned
   not exactly one row", bloqueando por completo la opcion Nuevo. Se
   cambia a SELECT COUNT(*) INTO existe_tipo.
3. nofmmt025.4fd: el campo fecha (Edit widget, formonly) no tenia
   format="dd/mm/yyyy", causando que Genero interpretara la fecha
   tecleada con el formato de fecha por defecto del sistema en vez
   del formato dominicano, dando "Invalid month in date" al capturar
   un dia mayor a 12 como mes.

Probado ciclo completo: Nuevo, Buscar, Escoger y eLiminar sobre
parametro de prueba (numero_nomina=26).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 12:30:28 -04:00
Abel LópezandClaude Sonnet 5 303a722875 Registra noprmt024 (Maestra de Puestos) y corrige duplicado en Nuevo
Se agrega noprmt024 al proyecto usando nofmmt024.per.

Se corrige adpcad023(): tras un INSERT exitoso el codigo hacia NEXT
FIELD nom_puesto para permitir capturar otro puesto, pero sin limpiar
los campos del registro anterior. Combinado con el orden real de
tabulacion del formulario (nivel_sal/salario_min/salario_max quedan
antes que cod_puesto_sirla en el orden de atributos, aunque
visualmente aparecen despues), esto permitia disparar un segundo
INSERT accidental con datos incompletos/residuales del registro
previo. Se agrega CLEAR FORM y reset de los campos tras cada insercion
exitosa, igual que en los demas programas de Nuevo ya corregidos.

Probado ciclo completo: Nuevo (confirmado que ya no duplica),
Buscar, Escoger y eLiminar sobre puesto de prueba.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 11:48:21 -04:00
Abel LópezandClaude Sonnet 5 58909014ab Registra noprmt023 (Maestra de Departamentos) y corrige bug de MaintainX
Se agrega noprmt023 al proyecto usando nofmmt023.4fd. Este programa
conecta a dos bases (smarmotech y marmotech/EXTERIOR via Informix
legado) para sincronizar departamentos en ambas.

Se agrega environment FGLPROFILE al Application para que resuelva la
conexion dual via PROYECTO/config/fglprofile. Se corrige ese archivo:
dbi.database.smarmotech.source apuntaba a un DSN "marmotech250s" que
nunca se creo; se cambia al DSN real existente "marmotech18".

Se corrige eLiminar: llamaba a la API real de MaintainX (DELETE) con
solo validar que id_maintainx no fuera null, ignorando el checkbox
"Enviar a MaintainX" (apicheck). Ahora requiere ambas condiciones.

Probado ciclo completo (Adicionar, Buscar, Escoger, eLiminar,
Departamentos Relacionados) verificando sincronizacion entre
smarmotech y EXTERIOR.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-25 10:11:49 -04:00
Abel LópezandClaude Sonnet 5 31fbc9a3b9 Registra noprmt018 (Pago Prest. en Efectivo) y corrige bug de fecha
Se agrega noprmt018 al proyecto usando nofmmt018.per.

Se corrige conversion CONVERT(CHAR,fecha,103) hacia variable DATE en
nopcmf018(), mismo patron de error -1205 "Invalid month in date"
encontrado en otros programas de nomina.

Probado ciclo completo: Adicionar, Consultar-modificar/Buscar,
Escoger y eLiminar sobre empleado 4124 (cod_mov=12).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 12:44:22 -04:00
Abel LópezandClaude Sonnet 5 5baf191a88 Registra noprmt011 y corrige bugs de fecha y borrado de cuota compartida
Se agrega noprmt011 (Control Prestamos y Facturas) al proyecto usando
nofmmt011.4fd (nofmmt011.per no tenia el campo valor_cuota requerido).

Se corrige conversion CONVERT(CHAR,fecha,103) hacia variable DATE en
nopcmf011(), que causaba error -1205 "Invalid month in date" al
navegar con Siguiente/Anterior cuando el dia del mes era mayor a 12.

Se corrige eLiminar: el DELETE FROM notb00003 era incondicional y
borraba la cuota compartida del empleado+movimiento aunque quedaran
otros documentos activos en notb00011 dependiendo de ella. Ahora solo
se borra si no quedan documentos activos para ese empleado+movimiento.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 11:45:55 -04:00
Abel LópezandClaude Sonnet 5 7638c1046b 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 <noreply@anthropic.com>
2026-09-15 12:16:53 -04:00
Abel LópezandClaude Sonnet 5 9ac3f70a13 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>
2026-09-10 17:02:39 -04:00
Abel López 97ef961e13 Revert "Agregar noprmt020 al proyecto (identidad real pendiente de confirmar)"
This reverts commit 77e844390e.
2026-09-04 16:46:09 -04:00
Abel LópezandClaude Sonnet 5 77e844390e Agregar noprmt020 al proyecto (identidad real pendiente de confirmar)
- Registrar noprmt020 en mbsERP.4pw
- Agregar MAIN (faltaba, el archivo era solo funciones para ser
  llamadas desde el menu nomnmt000.4gl) y una funcion pantalla()
  local para el encabezado
- Corregir typo "database marmotech" -> "smarmotech" en nofmmt021.per

NOTA: el usuario identifico este programa como "Calcular Horas
Extras", pero tanto el contenido del .4gl como su propio menu
(nomnmt000.4gl: "19-Porc. Accidente Trabajo noprmt020") indican que
en realidad es la maestra de % de Accidente de Trabajo. Build y
compilacion verificados, prueba funcional pendiente hasta confirmar
el programa correcto para "Calcular Horas Extras" (candidatos:
noprmt030.4gl, noprmt038.4gl, o los reportes noprrp007/011/018/026/034/035).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-04 16:22:45 -04:00
Abel LópezandClaude Sonnet 5 60e392c033 Agregar noprmt001 (Codigos de Movimientos) al modulo NOMINA
- Registrar noprmt001 en mbsERP.4pw (usa cofmmt001... nofmmt001.4fd,
  el .per carece del grid smovimientos y los campos modifica/vacaciones)
- Reemplazar smarmotech.sch/.42d de nodir por la copia canonica ya
  generada en MBS/DATABASE (orden de columnas correcto, incluye
  telefonoCorporativo/numeroOficina/extension) en vez de regenerar

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-04 12:12:24 -04:00
Abel LópezandClaude Sonnet 5 ee27da0669 Agregar noprmt003 (Maestra de Empleados) al modulo NOMINA
- Registrar noprmt003 en mbsERP.4pw (FUNCIONES_NO: noprfu000.4gl,
  nocarnet.4gl; FORMULARIOS_NO: nofmmt003.4fd); reutiliza
  otrodir/departamentos.4gl ya presente en FUNCIONES
- Actualizar el diccionario de esquema smarmotech.sch: faltaban las
  columnas telefonoCorporativo/numeroOficina/extension de adtb00003
  (existen en la BD real pero no estaban en el diccionario, .42d se
  regenera solo al recompilar); propagado a todos los directorios
- Desactivar el CONNECT TO "marmotech" AS "IFMX" (Informix ya no
  existe, todo migro a SQL Server) y el INSERT duplicado hacia esa
  conexion en el alta de empleados; sin esto el programa se colgaba
  al iniciar
- Quitar CONVERT(...,103) de fechas en el SELECT/FETCH de empleados:
  se convertian a texto dd/mm/yyyy y luego se reasignaban a variables
  DATE, causando "-1205 Invalid month in date" con dias > 12
- Agregar BEFORE CONSTRUCT/END CONSTRUCT para poblar el combo de
  Departamento en la busqueda (faltaba, quedaba vacio)
- Corregir foto de empleado que no se limpiaba al navegar
  Siguiente/Anterior hacia un empleado sin foto
- nocarnet.4gl: sustituir fgl_report_* (API no disponible) por
  om.XmlWriter.createFileWriter() hacia FGLSPOOL

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-03 16:51:11 -04:00
Abel LópezandClaude Sonnet 5 b27b20d42d Agregar noprmt002 (Movimientos Fijos Emp.) al modulo NOMINA
- Registrar noprmt002 en mbsERP.4pw junto con noprgb000.4gl
  (FUNCIONES_NO), nofmmt002.per/nofmwd001.per (FORMULARIOS_NO) y
  adfmwd004.per (FORMULARIOS_AD, compartido con ADMINISTRACION)
- Copiar el diccionario de esquema smarmotech.sch a nodir/addir
  (faltaba, igual que en otros directorios ya corregidos)
- Corregir typo "database marmotech" -> "smarmotech" en nofmwd001.per

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-03 12:12:06 -04:00
jsoto 454973e269 Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md 2026-08-18 20:59:52 -04:00