From 8ac18135e59b5dca2087d01236720c3045992494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20L=C3=B3pez?= Date: Thu, 1 Oct 2026 12:53:49 -0400 Subject: [PATCH] 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 --- PROYECTO/mbsERP.4pw | 5 +++++ PROYECTO/nodir/nofmrp009.per | 4 ++-- PROYECTO/nodir/noprrp009.4gl | 39 ++++++++++++++++++------------------ 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 676efb0..c09d8fc 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -495,6 +495,7 @@ + @@ -592,6 +593,10 @@ + + + + diff --git a/PROYECTO/nodir/nofmrp009.per b/PROYECTO/nodir/nofmrp009.per index 4aaa887..2549286 100644 --- a/PROYECTO/nodir/nofmrp009.per +++ b/PROYECTO/nodir/nofmrp009.per @@ -22,8 +22,8 @@ end tables notb00008 ATTRIBUTES - f1 = formonly.fecha_inicial; - f2 = formonly.fecha_al; +DATEEDIT f1 = formonly.fecha_inicial type date,format = "dd/mm/yyyy"; +DATEEDIT f2 = formonly.fecha_al type date,format = "dd/mm/yyyy"; COMBOBOX s1 = formonly.vacaciones_pagadas, ITEMS=("SI","NO"),DEFAULT="NO"; f001 = notb00008.num_nomi,autonext, comments = "Digite el numero de la nomina"; diff --git a/PROYECTO/nodir/noprrp009.4gl b/PROYECTO/nodir/noprrp009.4gl index 0dfd916..2f0e0a5 100644 --- a/PROYECTO/nodir/noprrp009.4gl +++ b/PROYECTO/nodir/noprrp009.4gl @@ -17,7 +17,8 @@ GLOBALS "noprgb000.4gl" num_emp LIKE notb00008.num_emp, valor DECIMAL(12,2) END RECORD, - vacaciones_pagadas CHAR(2) + vacaciones_pagadas CHAR(2), + fecha_al_sel DATE DEFINE cooper RECORD num_emp LIKE notb00008.num_emp, @@ -93,13 +94,13 @@ FUNCTION noprrp009() NEXT FIELD tipo_emp END IF LET selec = - "SELECT CONVERT(CHAR(10),fecha_al,103) FROM notb00010 ", + "SELECT fecha_al FROM notb00010 ", " WHERE num_nomi = ",cooper.num_nomi USING "<<<<","and tipo_emp = '",cooper.tipo_emp,"'" - PREPARE busca_fecha FROM selec + PREPARE busca_fecha FROM selec EXECUTE busca_fecha INTO cooper.fecha_al LET selec = - "SELECT CONVERT(CHAR(10),MIN(fecha_del),103) FROM notb00010 ", + "SELECT MIN(fecha_del) FROM notb00010 ", " WHERE ano = ",year(cooper.fecha_al)," and tipo_emp = '",cooper.tipo_emp,"'" PREPARE busca_fecha1 FROM selec EXECUTE busca_fecha1 INTO fecha_inicial @@ -124,8 +125,9 @@ FUNCTION noprrp009() RETURN END IF EXIT INPUT - END INPUT - END IF + END INPUT + END IF + LET fecha_al_sel = cooper.fecha_al CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,imprime @@ -134,7 +136,7 @@ FUNCTION noprrp009() IF vacaciones_pagadas = "NO" THEN LET SELEC = "SELECT UNIQUE a.num_emp,b.departamento,b.nivel_emp,b.cod_puesto, ", - " b.nom1_emp,b.apell1_emp,ISNULL(a.valor*-1,0),a.num_nomi,CONVERT(CHAR(10),d.fecha_al,103), ", + " b.nom1_emp,b.apell1_emp,ISNULL(a.valor*-1,0),a.num_nomi,d.fecha_al, ", " a.tipo_emp,a.cod_mov,c.descrip_mov ", " FROM adtb00003 b,notb00008 a,notb00002 c,notb00010 d ", " WHERE a.num_emp = b.num_emp AND a.tipo_emp = b.nomina AND ", @@ -151,9 +153,8 @@ FUNCTION noprrp009() " FROM adtb00003 b,notb00008 a,notb00002 c,notb00010 d,adtb00020 e,adtb00032 f ", " WHERE a.num_emp = b.num_emp AND a.tipo_emp = b.nomina AND ", " a.cod_mov = c.cod_mov AND a.num_nomi = d.num_nomi AND ", - " CONVERT(CHAR(10),e.fecha,103) between '",fecha_inicial USING "dd/mm/yyyy" ,"' and '",cooper.fecha_al USING "dd/mm/yyyy","' ", - " and CONVERT(CHAR(10),e.fecha,103) between '",fecha_inicial USING "dd/mm/yyyy" ,"' and '",cooper.fecha_al USING "dd/mm/yyyy", - "' and a.tipo_emp = '",cooper.tipo_emp,"' and a.tipo_emp=d.tipo_emp AND ", + " e.fecha >= '",fecha_inicial USING "yyyy-mm-dd" ,"' and e.fecha < '",(cooper.fecha_al+1) USING "yyyy-mm-dd","' ", + " and a.tipo_emp = '",cooper.tipo_emp,"' and a.tipo_emp=d.tipo_emp AND ", # " a.cod_mov in (1) AND ", " b.num_emp = e.num_emp and e.cod_mto=1 and e.num_trx = f.num_trx AND ", " f.num_nomi = a.num_nomi and f.num_nomi_no IS NULL AND ", @@ -181,11 +182,9 @@ FUNCTION noprrp009() EXIT WHILE END IF IF idx = 1 THEN - CALL seleccionarsalida() RETURNING r_output - CALL configureoutput(r_output) RETURNING HANDLER - - START REPORT list_cooper TO XML HANDLER HANDLER - LET idx = 2 + LET cmd = FGL_GETENV("FGLSPOOL"),"\\noprrp009.txt" + START REPORT list_cooper TO cmd + LET idx = 2 END IF IF int_flag THEN @@ -282,7 +281,7 @@ END FUNCTION SKIP 1 LINE ## SE IMPRIME EL NUMERO DE NOMINA Y LA FECHA IF vacaciones_pagadas = "SI" THEN - PRINT COLUMN 1,fecha_inicial USING "dd/mm/yyyy", " hasta ",cooper.fecha_al USING "dd/mm/yyyy" + PRINT COLUMN 1,fecha_inicial USING "dd/mm/yyyy", " hasta ",fecha_al_sel USING "dd/mm/yyyy" ELSE PRINT COLUMN 1, "Nomina No.:", @@ -359,8 +358,8 @@ END FUNCTION COLUMN 11, x.nivel_emp using "&&","-", COLUMN 15, x.cod_puesto using "&&", COLUMN 23, x.nom1_emp clipped," ",x.apell1_emp clipped, - COLUMN 55, GROUP SUM(x.valor) using "#,###,###.##", - COLUMN 70, balance using "##,###,###.##" + COLUMN 55, GROUP SUM(x.valor) using "-#,###,###.##", + COLUMN 70, balance using "-##,###,###.##" LET noRegistros = noRegistros + 1 END IF @@ -371,7 +370,7 @@ END FUNCTION PRINT COLUMN 1, negrillas_on, COLUMN 2, "TOTAL GENERAL", COLUMN 18, negrillas_off, - COLUMN 52, GROUP SUM(x.valor) using "###,###,###.##", - COLUMN 70, total using "###,###,###.##" + COLUMN 52, GROUP SUM(x.valor) using "-###,###,###.##", + COLUMN 70, total using "-###,###,###.##" END REPORT