From 4b2d63007b968192e5a6ed5e8e2d17688bdf64d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20L=C3=B3pez?= Date: Wed, 7 Oct 2026 12:53:51 -0400 Subject: [PATCH 01/16] Proyecto: mover librerias y programas del grupo NOMINA a RECURSOS HUMANOS Solo cambia la ubicacion en mbsERP.4pw (ids, dependencias y fuentes sin cambios). El grupo NOMINA queda vacio. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/mbsERP.4pw | 266 ++++++++++++++++++++++---------------------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 2eaded1..193be8b 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -470,139 +470,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -882,6 +749,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 61818beb315f0b5de784fc7d76e5de2bb4dc5228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20L=C3=B3pez?= Date: Wed, 7 Oct 2026 12:54:04 -0400 Subject: [PATCH 02/16] 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 --- PROYECTO/{nodir => bin}/noprrp045.4rp | 25 +++++++++++++------------ PROYECTO/mbsERP.4pw | 6 ++++++ 2 files changed, 19 insertions(+), 12 deletions(-) rename PROYECTO/{nodir => bin}/noprrp045.4rp (80%) diff --git a/PROYECTO/nodir/noprrp045.4rp b/PROYECTO/bin/noprrp045.4rp similarity index 80% rename from PROYECTO/nodir/noprrp045.4rp rename to PROYECTO/bin/noprrp045.4rp index 4012cae..35f0481 100644 --- a/PROYECTO/nodir/noprrp045.4rp +++ b/PROYECTO/bin/noprrp045.4rp @@ -61,6 +61,7 @@ + @@ -68,73 +69,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 193be8b..0e40bf5 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -776,6 +776,7 @@ + @@ -882,6 +883,11 @@ + + + + + From ad1a97dd9a6c0455dcb766865bcf39125ffcaa01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20L=C3=B3pez?= Date: Wed, 7 Oct 2026 13:06:20 -0400 Subject: [PATCH 03/16] noprrp045: corrige expresiones del diseno (.4rp) Quita espacios dentro de las expresiones RTL de bgColor/fontBold, que el parser rechazaba al cargar el reporte. Datos verificados contra la BD (monto y cantidad por mes y sexo, ano 2025). Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/bin/noprrp045.4rp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/PROYECTO/bin/noprrp045.4rp b/PROYECTO/bin/noprrp045.4rp index 35f0481..2884ea3 100644 --- a/PROYECTO/bin/noprrp045.4rp +++ b/PROYECTO/bin/noprrp045.4rp @@ -69,73 +69,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + From 79a4a4530c48fce34c4733f14276a6efba0aae36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20L=C3=B3pez?= Date: Thu, 8 Oct 2026 16:48:11 -0400 Subject: [PATCH 04/16] Proyecto: reorganiza grupos de RECURSOS HUMANOS - Programas y librerias de nomina (FORMULARIOS_NO, FUNCIONES_NO y las aplicaciones noprmt/noprcs/noprrp) pasan al subgrupo NOMINA. - FORMULARIOS_AD y FUNCIONES_AD pasan al subgrupo ADMINISTRACION PERSONAL. Solo cambia la ubicacion en mbsERP.4pw; ids, dependencias y fuentes sin cambios. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/mbsERP.4pw | 292 ++++++++++++++++++++++---------------------- 1 file changed, 147 insertions(+), 145 deletions(-) diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 483f089..195dc66 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -747,151 +747,153 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From d805fa31640f8544fad1ece6e86bbb4b244ea6d5 Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Wed, 14 Oct 2026 17:00:45 -0400 Subject: [PATCH 05/16] Corrige ipprrp047 (Operacion por Movimiento Detallado y Valorizado) - Registra ipfmrp047.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw (resuelve msgrp000 y seleccionarSalida) - busca_departamento() definida localmente (igual que ipprrp035/036) - seleccionarsalida() -> selectOutputSimple() - Rescata ipprrp047.4rp del respaldo PROYECTOS/bin (ipdir/ y bin/) - Titulo de ventana corregido Verificado en pantalla: 01/05/2026 a hoy, 113+ paginas agrupadas por movimiento y departamento con totales. PDF y Excel no probados. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/bin/ipprrp047.4rp | 146 +++++++++++++++++++++++++++++++++++ PROYECTO/ipdir/ipprrp047.4gl | 20 ++++- PROYECTO/ipdir/ipprrp047.4rp | 146 +++++++++++++++++++++++++++++++++++ PROYECTO/mbsERP.4pw | 3 +- 4 files changed, 312 insertions(+), 3 deletions(-) create mode 100644 PROYECTO/bin/ipprrp047.4rp create mode 100644 PROYECTO/ipdir/ipprrp047.4rp diff --git a/PROYECTO/bin/ipprrp047.4rp b/PROYECTO/bin/ipprrp047.4rp new file mode 100644 index 0000000..cca4f05 --- /dev/null +++ b/PROYECTO/bin/ipprrp047.4rp @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/ipdir/ipprrp047.4gl b/PROYECTO/ipdir/ipprrp047.4gl index 218cc4f..3344b7a 100644 --- a/PROYECTO/ipdir/ipprrp047.4gl +++ b/PROYECTO/ipdir/ipprrp047.4gl @@ -78,6 +78,7 @@ FUNCTION ipprrp047() OPEN FORM ipfmrp047 FROM "ipfmrp047" DISPLAY FORM ipfmrp047 + CALL ui.Window.getCurrent().setText("Transacciones de Inventario") DISPLAY "ipprrp047" AT 4,3 DISPLAY "Operacion Por Movimiento Detallado y Valorizado" AT 6,18 @@ -200,7 +201,7 @@ END IF IF fgl_report_loadCurrentSettings(r_filename) THEN LET preview=1 - CALL seleccionarsalida() RETURNING r_output -- load the .4rp file + CALL selectOutputSimple() RETURNING r_output -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes @@ -504,5 +505,20 @@ FORMAT END REPORT +FUNCTION busca_departamento() + DEFINE + pdepartamento ui.combobox, + kdepartamento SMALLINT, + kdescripcion CHAR(30) - + LET pdepartamento = ui.combobox.forname("formonly.departamento") + CALL pdepartamento.clear() + DECLARE pagar CURSOR FOR + SELECT departamento, nom_dpto + FROM adtb00001 + WHERE status_t IS NULL + ORDER BY nom_dpto + FOREACH pagar INTO kdepartamento, kdescripcion + CALL pdepartamento.additem(kdepartamento, kdescripcion) + END FOREACH +END FUNCTION diff --git a/PROYECTO/ipdir/ipprrp047.4rp b/PROYECTO/ipdir/ipprrp047.4rp new file mode 100644 index 0000000..cca4f05 --- /dev/null +++ b/PROYECTO/ipdir/ipprrp047.4rp @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 5aeff57..62efaab 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -781,9 +781,10 @@ - + + From 43f9d16e627d8690724067dd5e77d014836ccb88 Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Thu, 15 Oct 2026 12:51:54 -0400 Subject: [PATCH 06/16] Corrige ipprrp048 (Transacciones de Inventario por Departamento) - Registra ipfmrp048.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw (resuelve msgrp000 y seleccionarSalida) - busca_departamento() definida localmente (igual que ipprrp035/036/047) - seleccionarsalida() -> selectOutputSimple() - Rescata ipprrp048.4rp del respaldo PROYECTOS/bin (ipdir/ y bin/) - Titulo de ventana corregido Verificado: 01/08/2026 a hoy, movimiento 30, 4 paginas en pantalla y PDF. Excel no probado. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/bin/ipprrp048.4rp | 93 ++++++++++++++++++++++++++++++++++++ PROYECTO/ipdir/IPPRRP048.4gl | 20 +++++++- PROYECTO/ipdir/ipprrp048.4rp | 93 ++++++++++++++++++++++++++++++++++++ PROYECTO/mbsERP.4pw | 3 +- 4 files changed, 206 insertions(+), 3 deletions(-) create mode 100644 PROYECTO/bin/ipprrp048.4rp create mode 100644 PROYECTO/ipdir/ipprrp048.4rp diff --git a/PROYECTO/bin/ipprrp048.4rp b/PROYECTO/bin/ipprrp048.4rp new file mode 100644 index 0000000..09a0137 --- /dev/null +++ b/PROYECTO/bin/ipprrp048.4rp @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/ipdir/IPPRRP048.4gl b/PROYECTO/ipdir/IPPRRP048.4gl index 3defc37..c337d1e 100644 --- a/PROYECTO/ipdir/IPPRRP048.4gl +++ b/PROYECTO/ipdir/IPPRRP048.4gl @@ -75,6 +75,7 @@ FUNCTION ipprrp048() OPEN FORM ipfmrp048 FROM "ipfmrp048" DISPLAY FORM ipfmrp048 + CALL ui.Window.getCurrent().setText("Transacciones de Inventario por Departamento") DISPLAY "ipprrp048" AT 4,3 DISPLAY "Operacion Por Movimiento Detallado y Valorizado" AT 6,18 @@ -167,7 +168,7 @@ END INPUT IF fgl_report_loadCurrentSettings(r_filename) THEN LET preview=1 - CALL seleccionarsalida() RETURNING r_output -- load the .4rp file + CALL selectOutputSimple() RETURNING r_output -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes @@ -296,5 +297,20 @@ FORMAT PRINTX t_t_consumo,t_t_mtsAdicionales END REPORT +FUNCTION busca_departamento() + DEFINE + pdepartamento ui.combobox, + kdepartamento SMALLINT, + kdescripcion CHAR(30) - + LET pdepartamento = ui.combobox.forname("formonly.departamento") + CALL pdepartamento.clear() + DECLARE pagar CURSOR FOR + SELECT departamento, nom_dpto + FROM adtb00001 + WHERE status_t IS NULL + ORDER BY nom_dpto + FOREACH pagar INTO kdepartamento, kdescripcion + CALL pdepartamento.additem(kdepartamento, kdescripcion) + END FOREACH +END FUNCTION diff --git a/PROYECTO/ipdir/ipprrp048.4rp b/PROYECTO/ipdir/ipprrp048.4rp new file mode 100644 index 0000000..09a0137 --- /dev/null +++ b/PROYECTO/ipdir/ipprrp048.4rp @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 62efaab..5efbe4e 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -786,9 +786,10 @@ - + + From 47942191eee1b0a6dc6de741a55ad70036a461b3 Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Thu, 15 Oct 2026 13:04:06 -0400 Subject: [PATCH 07/16] Corrige ipprrp051 (Transacciones de Inventario con ubicacion) - Registra ipfmrp051.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw (resuelve msgrp000 y seleccionarSalida) - busca_departamento() definida localmente (igual que ipprrp047/048) - seleccionarsalida() -> selectOutputSimple() - Rescata ipprrp051.4rp del respaldo PROYECTOS/bin (ipdir/ y bin/) - Titulo de ventana corregido Verificado: 01/08/2026 a hoy, movimiento 30, 8 paginas en pantalla y PDF. Excel no probado. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/bin/ipprrp051.4rp | 118 +++++++++++++++++++++++++++++++++++ PROYECTO/ipdir/ipprrp051.4gl | 22 ++++++- PROYECTO/ipdir/ipprrp051.4rp | 118 +++++++++++++++++++++++++++++++++++ PROYECTO/mbsERP.4pw | 3 +- 4 files changed, 258 insertions(+), 3 deletions(-) create mode 100644 PROYECTO/bin/ipprrp051.4rp create mode 100644 PROYECTO/ipdir/ipprrp051.4rp diff --git a/PROYECTO/bin/ipprrp051.4rp b/PROYECTO/bin/ipprrp051.4rp new file mode 100644 index 0000000..f2da80f --- /dev/null +++ b/PROYECTO/bin/ipprrp051.4rp @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/ipdir/ipprrp051.4gl b/PROYECTO/ipdir/ipprrp051.4gl index e010a38..0996f0a 100644 --- a/PROYECTO/ipdir/ipprrp051.4gl +++ b/PROYECTO/ipdir/ipprrp051.4gl @@ -87,6 +87,7 @@ FUNCTION ipprrp051() OPEN FORM ipfmrp051 FROM "ipfmrp051" DISPLAY FORM ipfmrp051 + CALL ui.Window.getCurrent().setText("Transacciones de Inventario") DISPLAY "ipprrp051" AT 4, 3 DISPLAY "Operacion Por Movimiento Detallado y Valorizado" AT 6, 18 @@ -186,8 +187,7 @@ FUNCTION ipprrp051() IF fgl_report_loadCurrentSettings(r_filename) THEN LET preview = 1 - CALL seleccionarsalida() - RETURNING r_output -- load the .4rp file + CALL selectOutputSimple() RETURNING r_output -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = @@ -381,3 +381,21 @@ REPORT opera(x, y) LET t_t_mtsAdicionales = SUM(x.mtsAdicionales) PRINTX t_t_consumo, t_t_mtsAdicionales END REPORT + +FUNCTION busca_departamento() + DEFINE + pdepartamento ui.combobox, + kdepartamento SMALLINT, + kdescripcion CHAR(30) + + LET pdepartamento = ui.combobox.forname("formonly.departamento") + CALL pdepartamento.clear() + DECLARE pagar CURSOR FOR + SELECT departamento, nom_dpto + FROM adtb00001 + WHERE status_t IS NULL + ORDER BY nom_dpto + FOREACH pagar INTO kdepartamento, kdescripcion + CALL pdepartamento.additem(kdepartamento, kdescripcion) + END FOREACH +END FUNCTION diff --git a/PROYECTO/ipdir/ipprrp051.4rp b/PROYECTO/ipdir/ipprrp051.4rp new file mode 100644 index 0000000..f2da80f --- /dev/null +++ b/PROYECTO/ipdir/ipprrp051.4rp @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 5efbe4e..71bad44 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -791,9 +791,10 @@ - + + From fc2fa7acac7b4f135bce7c2a494862b8d1b3355c Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Thu, 15 Oct 2026 13:16:11 -0400 Subject: [PATCH 08/16] Corrige ipprrp054 (Revision de Conduces con y sin Archivo) - Registra ipfmrp054.4fd y la dependencia FUNCIONESREPORT en mbsERP.4pw - seleccionarsalida() -> selectOutputSimple() - Rescata ipprrp054.4rp del respaldo PROYECTOS/bin (ipdir/ y bin/) - El reporte arrancaba aunque la consulta no devolviera filas y el motor fallaba (Failed to find value for the look ahead input-variables); ahora START REPORT se ejecuta con la primera fila y, si no hay datos, muestra "NO EXISTEN REGISTROS" - Titulo de ventana corregido Verificado: 05/01/2026 a 10/15/2026 genera 100 paginas en pantalla y PDF. Nota: las fechas de este formulario se capturan en formato mm/dd/yyyy (campo Edit sin selector), comportamiento original del programa. Excel no probado. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/bin/ipprrp054.4rp | 65 ++++++++++++++++++++++++++++++++++++ PROYECTO/ipdir/ipprrp054.4gl | 48 +++++++++++++++----------- PROYECTO/ipdir/ipprrp054.4rp | 65 ++++++++++++++++++++++++++++++++++++ PROYECTO/mbsERP.4pw | 3 +- 4 files changed, 160 insertions(+), 21 deletions(-) create mode 100644 PROYECTO/bin/ipprrp054.4rp create mode 100644 PROYECTO/ipdir/ipprrp054.4rp diff --git a/PROYECTO/bin/ipprrp054.4rp b/PROYECTO/bin/ipprrp054.4rp new file mode 100644 index 0000000..ef90162 --- /dev/null +++ b/PROYECTO/bin/ipprrp054.4rp @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/ipdir/ipprrp054.4gl b/PROYECTO/ipdir/ipprrp054.4gl index 815c8ce..c29bc7e 100644 --- a/PROYECTO/ipdir/ipprrp054.4gl +++ b/PROYECTO/ipdir/ipprrp054.4gl @@ -34,6 +34,7 @@ FUNCTION ipprrp054() OPEN FORM ipfmrp054 FROM "ipfmrp054" DISPLAY FORM ipfmrp054 + CALL ui.Window.getCurrent().setText("Conduces con y sin Archivo") INPUT BY NAME fecha1,fecha2 BEFORE INPUT AFTER INPUT @@ -50,27 +51,34 @@ FUNCTION ipprrp054() LET r_filename = "ipprrp054.4rp" - CALL seleccionarsalida() RETURNING r_output - iF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file - - - LET preview=1 - CALL fgl_report_selectDevice(r_output) -- changing default - CALL fgl_report_selectPreview(preview) -- changing default - - LET handler = fgl_report_commitCurrentSettings() -- commit changes - ELSE - EXIT PROGRAM - END IF - START REPORT prt_co TO XML HANDLER HANDLER - PREPARE comando FROM selec - DECLARE busca CURSOR FOR comando - OPEN busca USING fecha1,fecha2 + PREPARE comando FROM selec + DECLARE busca CURSOR FOR comando + OPEN busca USING fecha1,fecha2 + LET idx = 0 + + FOREACH busca INTO co.* + IF idx = 0 THEN + CALL selectOutputSimple() RETURNING r_output + IF fgl_report_loadCurrentSettings(r_filename) THEN + LET preview = 1 + CALL fgl_report_selectDevice(r_output) + CALL fgl_report_selectPreview(preview) + LET handler = fgl_report_commitCurrentSettings() + ELSE + EXIT PROGRAM + END IF + START REPORT prt_co TO XML HANDLER HANDLER + LET idx = 1 + END IF + OUTPUT TO REPORT prt_co(co.*) + END FOREACH + + IF idx = 1 THEN + FINISH REPORT prt_co + ELSE + CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS", "INFO") + END IF - FOREACH busca INTO co.* - OUTPUT TO REPORT prt_co(co.*) - END FOREACH - FINISH REPORT prt_co END INPUT END FUNCTION diff --git a/PROYECTO/ipdir/ipprrp054.4rp b/PROYECTO/ipdir/ipprrp054.4rp new file mode 100644 index 0000000..ef90162 --- /dev/null +++ b/PROYECTO/ipdir/ipprrp054.4rp @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 71bad44..0994025 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -796,9 +796,10 @@ - + + From 7d5a853351e5cb63ad466b11850804916c920b50 Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Thu, 15 Oct 2026 15:49:06 -0400 Subject: [PATCH 09/16] Corrige ctprrp004 (Reporte Produccion Diaria) - Titulo de ventana corregido (mostraba "screen") - START REPORT se ejecuta con la primera fila; si la consulta no devuelve datos avisa "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS" en vez de generar un reporte en blanco Verificado con 01/01/2024 a 12/31/2024: detallado 166 paginas en pantalla, resumen 57 paginas en PDF. En la BD de pruebas (.40.250) cttb00003 no tiene produccion posterior a agosto de 2025, por eso rangos de 2026 salen vacios. Excel no probado. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/ctdir/ctprrp004.4gl | 43 ++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/PROYECTO/ctdir/ctprrp004.4gl b/PROYECTO/ctdir/ctprrp004.4gl index d0a0539..f21fdce 100644 --- a/PROYECTO/ctdir/ctprrp004.4gl +++ b/PROYECTO/ctdir/ctprrp004.4gl @@ -20,6 +20,7 @@ DEFINE HANDLER om.SaxDocumentHandler, -- return value from fgl_report_commitCurr DEFINE selec5 STRING DEFINE anos CHAR(4) DEFINE jdx INTEGER +DEFINE hay_filas SMALLINT DEFINE fecha_inicio, fecha_corte, fecha1 DATE, reporte_tipo INT MAIN @@ -52,6 +53,7 @@ FUNCTION ctprrp004() OPEN FORM ctfmrp004 FROM "ctfmrp004" DISPLAY FORM ctfmrp004 + CALL ui.Window.getCurrent().setText("Reporte Produccion Diaria") CONSTRUCT criterio ON c.departamento, c.cod_prod FROM departamento, cod_prod @@ -166,35 +168,42 @@ FUNCTION ctprrp004() LET r_filename = 'ctprrp004.4rp' - IF fgl_report_loadCurrentSettings(r_filename) THEN - LET preview=1 - CALL selectoutput() RETURNING r_output - CALL fgl_report_selectDevice(r_output) -- changing default - CALL fgl_report_selectPreview(preview) -- changing default - LET handler = fgl_report_commitCurrentSettings() -- commit changes - END IF - - START REPORT reporte_detallado TO XML HANDLER HANDLER - LET fecha_actual = CURRENT YEAR TO FRACTION DISPLAY selec5 - + PREPARE comando4 FROM selec5 DECLARE busca4 CURSOR FOR comando4 - + LET hay_filas = FALSE + FOREACH busca4 INTO prod_dia.* - IF reporte_tipo <> 1 THEN + IF NOT hay_filas THEN + IF fgl_report_loadCurrentSettings(r_filename) THEN + LET preview=1 + CALL selectoutput() RETURNING r_output + CALL fgl_report_selectDevice(r_output) + CALL fgl_report_selectPreview(preview) + LET handler = fgl_report_commitCurrentSettings() + END IF + START REPORT reporte_detallado TO XML HANDLER HANDLER + LET hay_filas = TRUE + END IF + + IF reporte_tipo <> 1 THEN LET prod_dia.num_doc = 0 - LET prod_dia.fecha = CURRENT - END IF - + LET prod_dia.fecha = CURRENT + END IF + OUTPUT TO REPORT reporte_detallado( prod_dia.*, fecha_inicio, fecha_corte, fecha_actual) END FOREACH - FINISH REPORT reporte_detallado + IF hay_filas THEN + FINISH REPORT reporte_detallado + ELSE + CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS", "INFO") + END IF IF abortar_reporte THEN RETURN From ea88c93da327b2a4329a617aa6e83f37bde5e9e7 Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Thu, 15 Oct 2026 16:07:11 -0400 Subject: [PATCH 10/16] Corrige ctprrp014 (Reporte Produccion Mensual) - Titulo de ventana corregido - START REPORT se ejecuta con la primera fila; si la consulta no devuelve datos avisa "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS" en vez de generar un reporte en blanco Verificado con ano 2024 (la BD de pruebas no tiene produccion posterior a agosto de 2025): 1 pagina con 9 semielaborados por mes y total, en pantalla, PDF y Excel. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/ctdir/ctprrp014.4gl | 44 ++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/PROYECTO/ctdir/ctprrp014.4gl b/PROYECTO/ctdir/ctprrp014.4gl index 4ff80f7..6dae2c3 100644 --- a/PROYECTO/ctdir/ctprrp014.4gl +++ b/PROYECTO/ctdir/ctprrp014.4gl @@ -20,6 +20,8 @@ DEFINE HANDLER om.SaxDocumentHandler, -- return value from fgl_report_commitCurr DEFINE selec5 STRING DEFINE anos STRING +DEFINE hay_filas SMALLINT + MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios @@ -55,6 +57,7 @@ FUNCTION ctprrp004() OPEN FORM ctfmrp004 FROM "ctfmrp014" DISPLAY FORM ctfmrp004 + CALL ui.Window.getCurrent().setText("Reporte Produccion Mensual") CONSTRUCT criterio ON c.cod_prod FROM cod_prod @@ -128,33 +131,40 @@ FUNCTION ctprrp004() LET r_filename = 'ctprrp014.4rp' - IF fgl_report_loadCurrentSettings(r_filename) THEN - LET preview=1 - CALL selectoutput() RETURNING r_output - CALL fgl_report_selectDevice(r_output) -- changing default - CALL fgl_report_selectPreview(preview) -- changing default - LET handler = fgl_report_commitCurrentSettings() -- commit changes - END IF - - START REPORT reporte_mensual TO XML HANDLER HANDLER - LET fecha_actual = CURRENT YEAR TO FRACTION DISPLAY selec5 - + PREPARE comando4 FROM selec5 DECLARE busca4 CURSOR FOR comando4 - + LET hay_filas = FALSE + FOREACH busca4 INTO prod_dia.* - - IF prod_dia.semielaborado IS NULL THEN + + IF NOT hay_filas THEN + IF fgl_report_loadCurrentSettings(r_filename) THEN + LET preview=1 + CALL selectoutput() RETURNING r_output + CALL fgl_report_selectDevice(r_output) + CALL fgl_report_selectPreview(preview) + LET handler = fgl_report_commitCurrentSettings() + END IF + START REPORT reporte_mensual TO XML HANDLER HANDLER + LET hay_filas = TRUE + END IF + + IF prod_dia.semielaborado IS NULL THEN LET abortar_reporte = TRUE; - END IF - + END IF + OUTPUT TO REPORT reporte_mensual(prod_dia.*, anos, fecha_actual); END FOREACH - FINISH REPORT reporte_mensual + IF hay_filas THEN + FINISH REPORT reporte_mensual + ELSE + CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS", "INFO") + END IF IF abortar_reporte THEN RETURN From 5dcc4adf2c5f6c47d3f838055032da5b1d9b5f3c Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Fri, 16 Oct 2026 10:15:59 -0400 Subject: [PATCH 11/16] Corrige compilacion de lqprrp004 y prprmt011 (modulos LIQUIDACION y PRODUCCION) lqprrp004: - El .4gl tenia saltos de linea CR (Mac antiguo): en Genero 6 el comentario '######' de la linea 2 se tragaba todo el programa (modulo de 181 bytes, "main not defined"). Convertido a CRLF (el diff grande es solo eso). - numero_ent se usaba en REPORT entrada271 sin definirse (solo existia en edprrp0271); definida y asignada = 27 como en la funcion hermana. - Agrega dependencia FUNCIONESREPORT. prprmt011 / prprmt021: - primpresion.impresion(pnumoc) chocaba con impresion(...) de 5 parametros de FUNCIONESREPORT (veprrp049_1.4gl). Renombrada a impresion_oc y su unico llamador (prprmt021) actualizado. prprmt011 recibe FUNCIONESREPORT. Verificado con gsmake: lqprrp004, lqprmt002, ipprmt005, prprmt011 y prprmt021 compilan y enlazan. lqprrp004 consulta datos de 03/2024 pero el reporte no se genera: bin/lqprrp004.4rp es un archivo binario (no XML) y no existe version XML en el repo. Pendiente que Johnny lo entregue. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/PRDIR/primpresion.4gl | 2 +- PROYECTO/PRDIR/prprmt021.4gl | 2 +- PROYECTO/lqdir/lqprrp004.4gl | 823 ++++++++++++++++++++++++++++++++- PROYECTO/mbsERP.4pw | 4 +- 4 files changed, 825 insertions(+), 6 deletions(-) diff --git a/PROYECTO/PRDIR/primpresion.4gl b/PROYECTO/PRDIR/primpresion.4gl index 9ad2f1c..2873a33 100644 --- a/PROYECTO/PRDIR/primpresion.4gl +++ b/PROYECTO/PRDIR/primpresion.4gl @@ -11,7 +11,7 @@ END RECORD, nombre_cia STRING -FUNCTION impresion(pnumoc) +FUNCTION impresion_oc(pnumoc) DEFINE pnumoc,I INT DECLARE busca_orden CURSOR FOR diff --git a/PROYECTO/PRDIR/prprmt021.4gl b/PROYECTO/PRDIR/prprmt021.4gl index e5a8451..ea54e9d 100644 --- a/PROYECTO/PRDIR/prprmt021.4gl +++ b/PROYECTO/PRDIR/prprmt021.4gl @@ -177,7 +177,7 @@ END RECORD " ORDEN ECOMMERCE ",orden_externa USING "&&&&&&&" INPUT ARRAY detalle FROM sdetalle.* ATTRIBUTE(WITHOUT DEFAULTS) ON ACTION impresion ATTRIBUTE(TEXT="Orden",IMAGE="printer") - CALL impresion(pnum_oc) + CALL impresion_oc(pnum_oc) ON ACTION etiqueta ATTRIBUTE(TEXT="Label",IMAGE="fa-tag") LET datos.celular = orden.celular LET datos.cliente = orden.nombre_envio diff --git a/PROYECTO/lqdir/lqprrp004.4gl b/PROYECTO/lqdir/lqprrp004.4gl index a58d13b..3f997eb 100644 --- a/PROYECTO/lqdir/lqprrp004.4gl +++ b/PROYECTO/lqdir/lqprrp004.4gl @@ -1,2 +1,821 @@ -{============================================================================== PROGRAMA : LQPRRP004 SISTEMA : Sistema de Liquidacion Materiales Objetivo : Liquidacion Mercancia Compras Exterior Prod. Terminados PROGRAMADOR : Juan F. Soto FECHA : Mayo 13, 1994 MODIFICADO : VALENTIN RODRIGUEZ FECHA : MAYO, 2019 ==============================================================================} -GLOBALS "lqprgb000.4gl" ###### Variables para busqueda de rango de fecha DEFINE elije,imp,afecta,tipo_inventario CHAR(1) DEFINE p_ano,m_mes SMALLINT DEFINE fecha1, fecha2 DATE , p_fecha CHAR(10) DEFINE entra CHAR(25) DEFINE t_costst DECIMAL(12,2) DEFINE detalla CHAR(30) DEFINE orden CHAR(10) DEFINE t_variacion DECIMAL(12,2) DEFINE debe, haber DECIMAL(12,2), idz INT ###### Variables que la almacenan la informacion enviada al reporte DEFINE diario1 RECORD cuenta_no LIKE cgtb00001.cuenta_no, debito DECIMAL(18,2) END RECORD DEFINE i SMALLINT DEFINE fecha_inicial,fecha_final DATE DEFINE primera,imp_entrada CHAR(1) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_compania.* FROM companias a CALL lqprrp004() END MAIN FUNCTION lqprrp004() DEFINE busca_datos RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descripcion CHAR(30), unidad CHAR(3), cod_sp SMALLINT, cod_sp_sec SMALLINT, proveedor CHAR(7), num_doc INTEGER, num_oc INTEGER, tipo CHAR(2), cantidad DECIMAL(12,5), precio DECIMAL(12,5), flete DECIMAL(12,5), imp_colect DECIMAL(12,5), imp_aduana DECIMAL(12,5), tasa DECIMAL(8,2), cost_std LIKE intb00013.costo_st END RECORD LET int_flag = FALSE OPTIONS FORM LINE 8 OPEN FORM lqfmrp004 FROM "lqfmrp004" DISPLAY FORM lqfmrp004 DISPLAY "lqprrp004" AT 4,3 DISPLAY "Liquidacion Mercancia pt" AT 6,28 LET tipo_papel = 2 CALL msgrp000(tipo_papel) CONSTRUCT criterio ON c.num_oc,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec FROM num_oc,cod_n,cod_grupo,cod_tipo,cod_sec AFTER CONSTRUCT IF INT_FLAG THEN CALL msg(2) LET INT_FLAG = FALSE EXIT PROGRAM END IF EXIT CONSTRUCT END CONSTRUCT INPUT BY NAME tipo_inventario, p_ano,m_mes,elije,imp_entrada,imp AFTER FIELD m_mes SELECT fecha_inicio, fecha_corte INTO fecha_inicial,fecha_final FROM prdtable where mes = m_mes AND ano = p_ano DISPLAY BY NAME fecha_inicial,fecha_final LET p_fechas = fecha_final using "ddmmyyyy" CALL prd(p_fechas,usuarios) RETURNING bandera IF bandera = 1 THEN LET bandera = 0 # NEXT FIELD p_ano END IF AFTER INPUT EXIT INPUT END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET chstd = FGL_WINQUESTION("PREGUNTA","Actualiza Costos STD?","yes","Yes|no","question",0) LET chstd = UPSHIFT(chstd) LET primera = "S" IF tipo_inventario = '2' THEN LET selec = "SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ", " a.unidad_med,b.cod_sp,b.cod_sp_sec,b.nom_sp,c.rep_entrada,c.num_oc, ", " c.tipo,c.cantidad_oc,c.cantidad_oc*c.fob,c.costo_flete,c.impuesto,c.otros_g,d.prima_us ", "FROM iptb00002 a,cotb00001 b,cgtb00018 c,cgtb00017 d ", "WHERE (a.cod_n = c.cod_n and a.cod_grupo = c.cod_grupo and ", " a.cod_tipo = c.cod_tipo and a.cod_sec = c.cod_sec) AND ", " (d.fecha between '", fecha_inicial USING "MM/DD/YYYY","' and '", fecha_final USING "MM/DD/YYYY","') and ", " (c.num_oc = d.num_oc) and (c.tipo=d.tipo) and (d.cod_sp=b.cod_sp AND ", " d.cod_sp_sec = b.cod_sp_sec) and (c.rep_entrada = d.rep_entrada) and ", " (c.status_t is null) and d.liquidada='",elije,"' and c.tipo = '2' ", " AND (a.status_t IS NULL) AND (d.status_t IS NULL) and ", criterio CLIPPED, " ORDER BY c.num_oc,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec " ELSE LET selec = "SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ", " a.unidad_med,b.cod_sp,b.cod_sp_sec,b.nom_sp,c.rep_entrada,c.num_oc, ", " c.tipo,c.cantidad_oc,c.cantidad_oc*c.fob,c.costo_flete,c.impuesto,c.otros_g,d.prima_us ", "FROM intb00001 a,cotb00001 b,cgtb00018 c,cgtb00017 d ", "WHERE (a.cod_n = c.cod_n and a.cod_grupo = c.cod_grupo and ", " a.cod_tipo = c.cod_tipo and a.cod_sec = c.cod_sec) AND ", " (d.fecha between '", fecha_inicial USING "MM/dd/YYYY","' and '", fecha_final USING "MM/dd/YYYY","') and ", " (c.num_oc = d.num_oc) and (c.tipo=d.tipo) and (d.cod_sp=b.cod_sp AND ", " d.cod_sp_sec = b.cod_sp_sec) and (c.rep_entrada = d.rep_entrada) and ", " (c.status_t is null) and d.liquidada='",elije,"' and c.tipo = 1 ", " AND (a.status_t IS NULL) AND (d.status_t IS NULL) and ", criterio CLIPPED, " ORDER BY c.num_oc,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec " END IF DISPLAY selec DISPLAY "elije ",elije LET idx = 1 PREPARE comando FROM selec DECLARE busca CURSOR FOR comando INSERT INTO cttb000log1 VALUES (GETDATE(),usuarios,'lqprrp004','ELIMINO') FOREACH busca INTO busca_datos.* DISPLAY "datos ",busca_datos.cod_sp_sec," ",busca_datos.descripcion LET orden = busca_datos.num_oc USING "<<<<<<" IF busca_datos.imp_colect is null THEN LET busca_datos.imp_colect = 0 END IF IF busca_datos.imp_colect < 0 THEN LET busca_datos.imp_colect = busca_datos.imp_colect * -1 END IF IF busca_datos.imp_aduana is null THEN LET busca_datos.imp_aduana = 0 END IF IF busca_datos.imp_aduana < 0 THEN LET busca_datos.imp_aduana = busca_datos.imp_aduana * -1 END IF # Busca el costos standard LET busca_datos.cost_std = 0 IF tipo_inventario = '2' THEN SELECT AVG(a.material+a.labor+a.gastos) INTO busca_datos.cost_std FROM iptb00004 a WHERE a.ventas = "1" and a.ano = year(fecha_inicial) and a.cod_n = busca_datos.cod_n and a.cod_grupo = busca_datos.cod_grupo and a.cod_tipo = busca_datos.cod_tipo and a.cod_sec = busca_datos.cod_sec and a.status_t is NULL ELSE SELECT AVG(a.costo_st) INTO busca_datos.cost_std FROM intb00013 a WHERE a.ano = year(fecha_inicial) and a.cod_n = busca_datos.cod_n and a.cod_grupo = busca_datos.cod_grupo and a.cod_tipo = busca_datos.cod_tipo and a.cod_sec = busca_datos.cod_sec and a.status_t is NULL END IF IF STATUS = NOTFOUND THEN LET busca_datos.cost_std = 0 END IF IF busca_datos.cost_std is null THEN LET busca_datos.cost_std = 0 END IF IF chstd = "yes" THEN DELETE FROM cttb00013 WHERE (fecha_lq = fecha_final AND tipo_lq = elije AND tipo_orden = 2 AND num_oc = busca_datos.num_oc) END IF IF imp="S" THEN LET r_filename ="lqprrp004.4rp" IF idx = 1 THEN IF fgl_report_loadCurrentSettings(r_filename) THEN LET preview=1 CALL seleccionarsalida() RETURNING r_output -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default # CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1) LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF LET idx = 2 START REPORT liquida1 TO XML HANDLER HANDLER END IF DISPLAY "DATOS " OUTPUT TO REPORT liquida1(busca_datos.*) END IF END FOREACH IF imp = "S" THEN IF idx > 1 THEN FINISH REPORT liquida1 END IF END IF IF imp_entrada = "S" THEN CALL edprrp0271() END IF END FUNCTION REPORT liquida1(x) DEFINE x RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, descripcion CHAR(30), unidad CHAR(3), cod_sp SMALLINT, cod_sp_sec SMALLINT, proveedor CHAR(7), num_doc INTEGER, num_oc INTEGER, tipo CHAR(2), cantidad DECIMAL(12,5), precio DECIMAL(12,5), flete DECIMAL(12,5), imp_colect DECIMAL(12,5), imp_aduana DECIMAL(12,5), tasa DECIMAL(8,2), cost_std LIKE intb00013.costo_st END RECORD DEFINE valor DECIMAL(12,2) DEFINE variacion,precio_std,fob,c_f,seguro,cost_pl, t_fob,t_flete,t_seguro,t_cf,t_impcol,t_impaduana,t_dollar, t_costopl,t_recibida,t_precio,o_variacion DECIMAL(12,2) DEFINE no_reg SMALLINT DEFINE total_cf,t_costo, costo_unit DECIMAL(12,2), o_impaduana,o_impcolect,o_dollar,o_cf DECIMAL(12,2) DEFINE ot_fob, ot_flete, ot_cf, ot_seguro, ot_impcol, ot_impaduana, ot_dollar, ot_costopl, ot_costo, ot_precio, ot_costst, ot_variacion DECIMAL(12,2) ## DEFINICION DE LAS VARIABLES DE IMPRESION DEFINE hora CHAR(5) DEFINE fechaActual, orden_tipo CHAR(12) DEFINE codigo CHAR(25) DEFINE codigos_sp, tituloFecha CHAR(25) DEFINE material,titulo STRING {OUTPUT ## DEFINICION DE LOS MARGENES DE IMPRESION TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 3 PAGE LENGTH 150} FORMAT PAGE HEADER LET hora = TIME LET fechaActual = today using "dd/mm/yy" IF tipo_inventario = '2' THEN LET titulo = 'Liquidacion Mercancias Productos Terminados' ELSE LET titulo = 'Liquidacion Mercancias Materia Prima' END IF IF primera = "S" THEN LET t_fob = 0 LET t_flete = 0 LET t_seguro = 0 LET t_cf = 0 LET t_impcol = 0 LET t_impaduana = 0 LET t_dollar = 0 LET t_costopl = 0 LET t_recibida = 0 LET t_costo = 0 LET t_precio = 0 LET t_costst = 0 LET t_variacion = 0 LET o_variacion = 0 LET primera = "N" LET idz = 1 END IF BEFORE GROUP OF x.num_oc IF total_cf is null THEN LET total_cf = 0 END IF LET ot_fob =0 LET ot_flete =0 LET ot_cf =0 LET ot_seguro =0 LET ot_impcol =0 LET ot_impaduana =0 LET ot_dollar =0 LET ot_costopl =0 LET ot_costo =0 LET ot_precio =0 LET ot_costst =0 LET ot_variacion =0 LET tituloFecha = "Del ",fecha_inicial USING "dd/mm/yy"," Al ", fecha_final USING "dd/mm/yy" ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS PRINTX p_compania.nombre, hora,tituloFecha, fechaActual,fecha_inicial USING "dd/mm/yy", fecha_final USING "dd/mm/yy",titulo ON EVERY ROW LET seguro = 0 LET codigo = x.cod_n using "&&&&&","-",x.cod_grupo using "&&&&&","-", x.cod_tipo using "&&&&&","-",x.cod_sec using "&&&&&" LET codigos_sp = x.cod_sp using "&&","-",x.cod_sp_sec using "&&&&" LET orden_tipo = x.num_oc using "&&&&&","-",x.tipo SELECT CONVERT(CHAR(10),MIN(a.fecha),101) INTO p_fecha FROM iptb00006 a WHERE a.num_doc = x.num_doc and cod_mov in (10) AND status_t IS NULL LET fob = x.precio LET c_f = fob + x.flete LET valor = c_f * x.tasa IF elije = "L" THEN LET seguro = 0 END IF IF no_reg > 1 THEN LET x.imp_aduana = (x.imp_aduana / total_cf) * c_f LET x.imp_colect = (x.imp_colect / total_cf) * c_f END IF LET cost_pl = seguro + c_f + x.imp_colect + x.imp_aduana + valor LET costo_unit = cost_pl / x.cantidad LET precio_std = x.cantidad * x.cost_std LET variacion = cost_pl - precio_std LET material = "(",codigo,")","-",x.descripcion CLIPPED PRINTX material, codigos_sp,x.proveedor, orden_tipo, fob, x.flete, c_f, seguro, x.imp_colect, x.imp_aduana, valor, cost_pl, x.cantidad, costo_unit, x.cost_std, precio_std, variacion IF tipo_inventario = '2' THEN IF chstd = "YES" THEN SELECT UNIQUE a.cod_n FROM iptb00004 a WHERE a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec AND a.ano = p_ano and a.mes_ini = 1 AND a.mes_fin = 12 IF STATUS = NOTFOUND THEN INSERT INTO iptb00004 (ventas,mes_ini,mes_fin,ano,cod_n,cod_grupo,cod_tipo,cod_Sec,material,labor,gastos,us_crea,fech_crea) VALUES ('1','01','12',p_ano,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec,costo_unit,0,0,SUSER_SNAME(),GETDATE()) END IF END IF ELSE IF chstd = "YES" THEN SELECT UNIQUE a.cod_n FROM intb00013 a WHERE a.cod_n = x.cod_n AND a.cod_grupo = x.cod_grupo AND a.cod_tipo = x.cod_tipo AND a.cod_sec = x.cod_sec AND a.ano = p_ano AND a.mes_ini = 1 AND a.mes_fin = 12 IF STATUS = NOTFOUND THEN INSERT INTO intb00013 VALUES ('01','12',p_ano,x.cod_n,x.cod_grupo,x.cod_tipo, x.cod_sec,costo_unit,null,SUSER_SNAME(),GETDATE(),null, NULL) END IF END IF END IF INSERT INTO cttb00013 (fecha_lq,fecha,tipo_lq,num_oc,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,costo_lq,status_t,us_crea,fech_crea,tipo_orden) VALUES (fecha_final,p_fecha,elije,x.num_oc,x.cod_n,x.cod_grupo,x.cod_tipo, x.cod_sec,x.cantidad,costo_unit,null,usuarios,GETDATE(),x.tipo) INSERT INTO cttb000log2 (fecha_lq,fecha,tipo_lq,num_oc,cod_n,cod_grupo,cod_tipo,cod_sec) VALUES (fecha_final,p_fecha,elije,x.num_oc,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec) # Acumulacion de totales IF o_impaduana is null THEN LET o_impaduana = 0 END IF IF o_variacion is null THEN LET o_variacion = 0 END IF IF o_impcolect is null THEN LET o_impcolect = 0 END IF IF o_dollar is null THEN LET o_dollar = 0 END IF IF o_cf is null THEN LET o_cf = 0 END IF LET t_fob = t_fob + fob LET t_flete = t_flete + x.flete LET t_seguro = t_seguro + seguro LET t_cf = t_cf + c_f LET t_impcol = t_impcol + x.imp_colect LET t_impaduana = t_impaduana + x.imp_aduana LET t_dollar = t_dollar + valor LET t_costopl = t_costopl + cost_pl LET t_costo = t_costo + costo_unit LET t_precio = t_precio + x.cost_std LET t_costst = t_costst + precio_std LET t_variacion = t_variacion + variacion LET o_variacion = o_variacion + cost_pl LET o_impaduana = o_impaduana + x.imp_aduana + seguro LET o_impcolect = o_impcolect + x.imp_colect LET o_dollar = o_dollar + valor LET o_cf = o_cf + c_f LET ot_fob = ot_fob + fob LET ot_flete = ot_flete + x.flete LET ot_cf = ot_cf + c_f LET ot_seguro = ot_seguro + seguro LET ot_impcol = ot_impcol + x.imp_colect LET ot_impaduana = ot_impaduana + x.imp_aduana LET ot_dollar = ot_dollar + valor LET ot_costopl = ot_costopl + cost_pl LET ot_costo = ot_costo + costo_unit LET ot_precio = ot_precio + x.cost_std LET ot_costst = ot_costst + precio_std LET ot_variacion = ot_variacion + variacion AFTER GROUP OF x.num_oc # Validacion del arreglo para imprimir la entrada 27 IF imp_entrada = "S" THEN LET entrada27[idz].cuenta_no = "1161" LET entrada27[idz].cod_aux = x.cod_sp LET entrada27[idz].cod_sec = x.cod_sp_sec LET entrada27[idz].num_doc = x.num_oc LET entrada27[idz].valor = o_impaduana LET o_impaduana = 0 LET idz = idz + 1 LET entrada27[idz].cuenta_no = "1161-01" LET entrada27[idz].cod_aux = x.cod_sp LET entrada27[idz].cod_sec = x.cod_sp_sec LET entrada27[idz].num_doc = x.num_oc LET entrada27[idz].valor = o_impcolect LET o_impcolect = 0 LET idz = idz + 1 LET entrada27[idz].cuenta_no = "1161-02" LET entrada27[idz].cod_aux = x.cod_sp LET entrada27[idz].cod_sec = x.cod_sp_sec LET entrada27[idz].num_doc = x.num_oc LET entrada27[idz].valor = o_dollar LET o_dollar = 0 LET idz = idz + 1 LET entrada27[idz].cuenta_no = "1161-03" LET entrada27[idz].cod_aux = x.cod_sp LET entrada27[idz].cod_sec = x.cod_sp_sec LET entrada27[idz].num_doc = x.num_oc LET entrada27[idz].valor = o_cf LET o_cf = 0 LET idz = idz + 1 END IF PRINTX ot_fob,ot_flete,ot_cf,ot_seguro,ot_impcol,ot_impaduana, ot_dollar, ot_costopl,ot_costo, ot_precio,ot_costst,ot_variacion ON LAST ROW PRINTX t_fob, t_flete, t_cf,t_seguro,t_impcol,t_impaduana,t_dollar, t_costopl,t_costo,t_precio,t_costst,t_variacion LET o_impaduana = 0 LET o_impcolect = 0 LET o_dollar = 0 LET o_cf = 0 END REPORT {------------------------------------------------------------------------------- PROGRAMA : EDPRRP027 OBJETIVO : Listar las Entrada de Diario Productos Terminados PROGRAMADOR : Juan F. Soto FECHA REALIZACION : Mayo 20, 1994. -------------------------------------------------------------------------------} FUNCTION edprrp0271() #WHENEVER ERROR CONTINUE DEFINE longitud,u_mes,numero_ent,i SMALLINT, ch_ano CHAR(4) LET r_filename ="lqprrp004b.4rp" OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 ##### Abriendo y desplegando el formulario de captura de datos OPEN FORM edfmrp027 FROM "edfmrp027" DISPLAY FORM edfmrp027 { DISPLAY "edprrp027" AT 4,3 DISPLAY "Entrada de Diario Mat. Importada Rec." AT 6,21} { LET tipo_papel = 1 CALL msgrp000(tipo_papel)} ###### Aceptando los valores para el rango de fecha INPUT BY NAME entra,fecha1,fecha2,afecta,detalla BEFORE INPUT LET numero_ent = 27 LET fecha1 =fecha_inicial LET fecha2 =fecha_final DISPLAY BY NAME fecha1,fecha2 CALL controlNumericoED(numero_ent, fecha1, NULL) RETURNING entra DISPLAY BY NAME entra AFTER FIELD entra LET longitud = LENGTH(entra) IF longitud != 16 THEN LET numero_msg = 77 CALL msg(numero_msg) NEXT FIELD entra END IF LET existe = "N" SELECT unique a.ref FROM cgtb00004 a WHERE a.ref = entra IF STATUS != NOTFOUND THEN LET existe = "S" END IF AFTER FIELD fecha1 IF fecha1 IS NULL THEN ERROR "(16) CAMPO EN BLANCO" NEXT FIELD fecha1 END IF AFTER FIELD fecha2 IF fecha2 is null THEN ERROR "(16) CAMPO EN BLANCO" NEXT FIELD fecha2 END IF IF fecha1 > fecha2 THEN ERROR "(149) FECHA NO PUEDE SER MAYOR QUE LA ANTERIOR" NEXT FIELD fecha1 END IF ###### Selecionando en rango de fecha de la tabla de periodo para el fecha2 AFTER INPUT IF int_flag THEN ERROR "(2) OPERACION CANCELADA" LET int_flag = false RETURN END IF IF fecha2 > TODAY THEN CALL msg(57) END IF END INPUT ##### Creando la facilidad para cancelar proceso con DELETE O SUPR LET i = 1 {CALL configureoutput("XLS") RETURNING handler START REPORT entrada271 TO XML HANDLER handler} IF i = 1 THEN IF fgl_report_loadCurrentSettings(r_filename) THEN LET preview=1 CALL seleccionarsalida() RETURNING r_output -- load the .4rp file CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF LET i = 2 START REPORT entrada271 TO XML HANDLER HANDLER END IF DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) ##### Loop para enviar informacion al reporte LET diario1.debito = t_costst IF tipo_inventario = "2" THEN LET diario1.cuenta_no = "1131-02" ELSE LET diario1.cuenta_no = "1151" END IF OUTPUT TO REPORT entrada271(diario1.*,fecha1,fecha2,detalla,entra) IF i > 1 THEN FINISH REPORT entrada271 END IF END FUNCTION #### Funcion para dar salida ordenada a la informacion requerida de #### una entrada de diario de nominas local REPORT entrada271(x,fecha1,fecha2,detalle1,entrada) DEFINE x RECORD cuenta_no LIKE cgtb00001.cuenta_no, debito DECIMAL(10,2) END RECORD ### Acumula los valores de las diferentes cuentas para entrada diario de nomina DEFINE debito,credito DECIMAL(12,2) DEFINE detalle1 CHAR(30) DEFINE fecha1,fecha2 DATE #### Almacena las fecha del rango de busqueda DEFINE cod_aux_sec CHAR(6) DEFINE doce CHAR(2) DEFINE hora,referencia CHAR(5) DEFINE entrada CHAR(25), nombre_cta LIKE cgtb00001.descripcion DEFINE fechaActual CHAR(12) { OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 PAGE LENGTH 150} FORMAT PAGE HEADER LET hora = TIME LET fechaActual = today using "dd/mm/yy" ##### Selecionado la descripcion del fecha BEFORE GROUP OF x.cuenta_no PRINTX p_compania.nombre,hora,fechaActual,fecha1,fecha2,entrada,doce ON EVERY ROW SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a WHERE a.cuenta_no = x.cuenta_no IF debito is null THEN LET debito = 0 END IF PRINTX x.cuenta_no, x.debito, nombre_cta LET debito = debito + x.debito IF afecta = "S" THEN IF x.cuenta_no IS NOT NULL THEN BEGIN WORK CALL controlNumericoED(numero_ent, fecha1, usuarios) RETURNING entra DISPLAY BY NAME entra LET entrada = entra INSERT INTO cgtb00004 (fecha,tipo,ref,cuenta_no,detalle_1,debito,credito,us_crea,fech_crea) VALUES(fecha2,1,entrada,x.cuenta_no,detalle1,x.debito,0,usuarios,GETDATE()) END IF END IF ON LAST ROW IF tipo_inventario = "2" THEN SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a WHERE a.cuenta_no = "5615" LET debe = 0 LET haber = 0 LET referencia = "5615" ELSE SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a WHERE a.cuenta_no = "1152" LET debe = 0 LET haber = 0 LET referencia = "1152" END IF IF credito is null THEN LET credito = 0 END IF IF debito is null THEN LET debito = 0 END IF IF t_variacion > 0 THEN LET debito = debito + t_variacion LET debe = t_variacion IF afecta = "S" THEN IF tipo_inventario = "2" THEN INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito ,credito,us_crea,fech_crea) VALUES(fecha2,1,entrada,"5615",detalle1,t_variacion,0,usuarios,GETDATE()) ELSE INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito ,credito,us_crea,fech_crea) VALUES(fecha2,1,entrada,"1152",detalle1,t_variacion,0,usuarios,GETDATE()) END IF END IF ELSE LET t_variacion = t_variacion * -1 LET credito = credito + t_variacion LET haber = t_variacion IF afecta = "S" THEN INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito ,credito,us_crea,fech_crea) VALUES(fecha2,1,entrada,"5615",detalle1,0,t_variacion,SUSER_SNAME(),GETDATE() ) END IF END IF ###### Acumulando totales por columna PRINTX referencia, nombre_cta, debe, haber LET credito = 0 # Impresion detalle de la entrada con ordenes de compras FOR i = 1 TO idz # IF entrada27[i].cuenta_no IS NOT NULL THEN # IF entrada27[i].cod_aux is not null THEN IF entrada27[i].valor < 0 THEN LET entrada27[i].valor = entrada27[i].valor * -1 END IF LET cod_aux_sec = entrada27[i].cod_aux using "&&","-",entrada27[i].cod_sec using "&&&&" IF cod_aux_sec IS NULL THEN LET cod_aux_sec = ' ' END IF # DISPLAY "datos ",i USING "<<<"," ",entrada27[i].cod_aux using "&&","-",entrada27[i].cod_sec using "&&&&" PRINTX entrada27[i].cuenta_no, cod_aux_sec, entrada27[i].num_doc, entrada27[i].valor IF entrada27[i].valor IS NULL THEN LET entrada27[i].valor=0 END IF LET credito = credito + entrada27[i].valor IF afecta = "S" THEN IF entrada27[i].valor < 0 THEN LET entrada27[i].valor = entrada27[i].valor * -1 END IF IF entrada27[i].cuenta_no IS NOT NULL THEN INSERT INTO cgtb00004 (fecha,tipo,ref,cuenta_no,num_doc,cod_aux ,cod_sec,detalle_1,debito,credito,us_crea,fech_crea) VALUES (fecha2,1,entrada,entrada27[i].cuenta_no, entrada27[i].num_doc,entrada27[i].cod_aux, entrada27[i].cod_sec,detalle1,0, entrada27[i].valor,SUSER_SNAME(),GETDATE()) END IF END IF # END IF #END IF END FOR IF afecta = "S" THEN COMMIT WORK END IF ###### Imprime total DEBITO y total CREDITO PRINTX debito,credito,detalle1 LET debito = 0 LET credito = 0 END REPORT +{============================================================================== + PROGRAMA : LQPRRP004 + SISTEMA : Sistema de Liquidacion Materiales + Objetivo : Liquidacion Mercancia Compras Exterior Prod. Terminados + PROGRAMADOR : Juan F. Soto + FECHA : Mayo 13, 1994 + MODIFICADO : VALENTIN RODRIGUEZ + FECHA : MAYO, 2019 +==============================================================================} +GLOBALS "lqprgb000.4gl" ###### Variables para busqueda de rango de fecha +DEFINE elije,imp,afecta,tipo_inventario CHAR(1) +DEFINE p_ano,m_mes SMALLINT +DEFINE fecha1, fecha2 DATE , + p_fecha CHAR(10) +DEFINE entra CHAR(25) +DEFINE t_costst DECIMAL(12,2) +DEFINE detalla CHAR(30) +DEFINE orden CHAR(10) +DEFINE t_variacion DECIMAL(12,2) +DEFINE debe, haber DECIMAL(12,2), + idz INT + +###### Variables que la almacenan la informacion enviada al reporte +DEFINE diario1 RECORD + cuenta_no LIKE cgtb00001.cuenta_no, + debito DECIMAL(18,2) +END RECORD + +DEFINE i SMALLINT +DEFINE fecha_inicial,fecha_final DATE +DEFINE primera,imp_entrada CHAR(1) + +MAIN + DEFER INTERRUPT + CALL ARG_VAL(1) RETURNING usuarios + CALL ARG_VAL(2) RETURNING clave + CALL ARG_VAL(3) RETURNING impresor + + CONNECT to "smarmotech" USER usuarios USING clave + SELECT a.* INTO p_compania.* FROM companias a + CALL lqprrp004() +END MAIN + + FUNCTION lqprrp004() + + DEFINE busca_datos RECORD + cod_n SMALLINT, + cod_grupo SMALLINT, + cod_tipo SMALLINT, + cod_sec SMALLINT, + descripcion CHAR(30), + unidad CHAR(3), + cod_sp SMALLINT, + cod_sp_sec SMALLINT, + proveedor CHAR(7), + num_doc INTEGER, + num_oc INTEGER, + tipo CHAR(2), + cantidad DECIMAL(12,5), + precio DECIMAL(12,5), + flete DECIMAL(12,5), + imp_colect DECIMAL(12,5), + imp_aduana DECIMAL(12,5), + tasa DECIMAL(8,2), + cost_std LIKE intb00013.costo_st + END RECORD + + LET int_flag = FALSE + + OPTIONS + FORM LINE 8 + + OPEN FORM lqfmrp004 FROM "lqfmrp004" + DISPLAY FORM lqfmrp004 + DISPLAY "lqprrp004" AT 4,3 + DISPLAY "Liquidacion Mercancia pt" AT 6,28 + + LET tipo_papel = 2 + CALL msgrp000(tipo_papel) + + CONSTRUCT criterio ON c.num_oc,c.cod_n,c.cod_grupo,c.cod_tipo,c.cod_sec + FROM num_oc,cod_n,cod_grupo,cod_tipo,cod_sec + AFTER CONSTRUCT + IF INT_FLAG THEN + CALL msg(2) + LET INT_FLAG = FALSE + EXIT PROGRAM + END IF + EXIT CONSTRUCT + END CONSTRUCT + INPUT BY NAME tipo_inventario, p_ano,m_mes,elije,imp_entrada,imp + + AFTER FIELD m_mes + SELECT fecha_inicio, fecha_corte INTO fecha_inicial,fecha_final + FROM prdtable where mes = m_mes AND ano = p_ano + + DISPLAY BY NAME fecha_inicial,fecha_final + + LET p_fechas = fecha_final using "ddmmyyyy" + CALL prd(p_fechas,usuarios) RETURNING bandera + IF bandera = 1 THEN + LET bandera = 0 + # NEXT FIELD p_ano + END IF + + AFTER INPUT + EXIT INPUT + END INPUT + IF int_flag THEN + LET numero_msg = 2 + CALL msg(numero_msg) + LET int_flag = FALSE + RETURN + END IF + LET chstd = FGL_WINQUESTION("PREGUNTA","Actualiza Costos STD?","yes","Yes|no","question",0) + + LET chstd = UPSHIFT(chstd) + + + LET primera = "S" + IF tipo_inventario = '2' THEN + LET selec = + "SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ", + " a.unidad_med,b.cod_sp,b.cod_sp_sec,b.nom_sp,c.rep_entrada,c.num_oc, ", + " c.tipo,c.cantidad_oc,c.cantidad_oc*c.fob,c.costo_flete,c.impuesto,c.otros_g,d.prima_us ", + "FROM iptb00002 a,cotb00001 b,cgtb00018 c,cgtb00017 d ", + "WHERE (a.cod_n = c.cod_n and a.cod_grupo = c.cod_grupo and ", + " a.cod_tipo = c.cod_tipo and a.cod_sec = c.cod_sec) AND ", + " (d.fecha between '", fecha_inicial USING "MM/DD/YYYY","' and '", + fecha_final USING "MM/DD/YYYY","') and ", + " (c.num_oc = d.num_oc) and (c.tipo=d.tipo) and (d.cod_sp=b.cod_sp AND ", + " d.cod_sp_sec = b.cod_sp_sec) and (c.rep_entrada = d.rep_entrada) and ", + " (c.status_t is null) and d.liquidada='",elije,"' and c.tipo = '2' ", + " AND (a.status_t IS NULL) AND (d.status_t IS NULL) and ", + criterio CLIPPED, + " ORDER BY c.num_oc,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec " + ELSE + LET selec = + "SELECT DISTINCT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.descrip_esp, ", + " a.unidad_med,b.cod_sp,b.cod_sp_sec,b.nom_sp,c.rep_entrada,c.num_oc, ", + " c.tipo,c.cantidad_oc,c.cantidad_oc*c.fob,c.costo_flete,c.impuesto,c.otros_g,d.prima_us ", + "FROM intb00001 a,cotb00001 b,cgtb00018 c,cgtb00017 d ", + "WHERE (a.cod_n = c.cod_n and a.cod_grupo = c.cod_grupo and ", + " a.cod_tipo = c.cod_tipo and a.cod_sec = c.cod_sec) AND ", + " (d.fecha between '", fecha_inicial USING "MM/dd/YYYY","' and '", + fecha_final USING "MM/dd/YYYY","') and ", + " (c.num_oc = d.num_oc) and (c.tipo=d.tipo) and (d.cod_sp=b.cod_sp AND ", + " d.cod_sp_sec = b.cod_sp_sec) and (c.rep_entrada = d.rep_entrada) and ", + " (c.status_t is null) and d.liquidada='",elije,"' and c.tipo = 1 ", + " AND (a.status_t IS NULL) AND (d.status_t IS NULL) and ", + criterio CLIPPED, + " ORDER BY c.num_oc,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec " + END IF + DISPLAY selec + DISPLAY "elije ",elije + LET idx = 1 + PREPARE comando FROM selec + DECLARE busca CURSOR FOR comando + + INSERT INTO cttb000log1 VALUES (GETDATE(),usuarios,'lqprrp004','ELIMINO') + FOREACH busca INTO busca_datos.* + DISPLAY "datos ",busca_datos.cod_sp_sec," ",busca_datos.descripcion + LET orden = busca_datos.num_oc USING "<<<<<<" + + IF busca_datos.imp_colect is null THEN + LET busca_datos.imp_colect = 0 + END IF + + IF busca_datos.imp_colect < 0 THEN + LET busca_datos.imp_colect = busca_datos.imp_colect * -1 + END IF + + IF busca_datos.imp_aduana is null THEN + LET busca_datos.imp_aduana = 0 + END IF + + IF busca_datos.imp_aduana < 0 THEN + LET busca_datos.imp_aduana = busca_datos.imp_aduana * -1 + END IF + + # Busca el costos standard + LET busca_datos.cost_std = 0 + IF tipo_inventario = '2' THEN + SELECT AVG(a.material+a.labor+a.gastos) INTO busca_datos.cost_std + FROM iptb00004 a + WHERE a.ventas = "1" and + a.ano = year(fecha_inicial) and a.cod_n = busca_datos.cod_n and + a.cod_grupo = busca_datos.cod_grupo and + a.cod_tipo = busca_datos.cod_tipo and + a.cod_sec = busca_datos.cod_sec and a.status_t is NULL + ELSE + SELECT AVG(a.costo_st) INTO busca_datos.cost_std + FROM intb00013 a + WHERE a.ano = year(fecha_inicial) and a.cod_n = busca_datos.cod_n and + a.cod_grupo = busca_datos.cod_grupo and + a.cod_tipo = busca_datos.cod_tipo and + a.cod_sec = busca_datos.cod_sec and a.status_t is NULL + + END IF + IF STATUS = NOTFOUND THEN + LET busca_datos.cost_std = 0 + END IF + + IF busca_datos.cost_std is null THEN + LET busca_datos.cost_std = 0 + END IF + + IF chstd = "yes" THEN + + DELETE FROM cttb00013 WHERE (fecha_lq = fecha_final AND + tipo_lq = elije AND + tipo_orden = 2 AND + num_oc = busca_datos.num_oc) + END IF + + IF imp="S" THEN + LET r_filename ="lqprrp004.4rp" + IF idx = 1 THEN + IF fgl_report_loadCurrentSettings(r_filename) THEN + LET preview=1 + CALL seleccionarsalida() RETURNING r_output -- load the .4rp file + CALL fgl_report_selectDevice(r_output) -- changing default + CALL fgl_report_selectPreview(preview) -- changing default + # CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1) + LET handler = fgl_report_commitCurrentSettings() -- commit changes + END IF + LET idx = 2 + START REPORT liquida1 TO XML HANDLER HANDLER + END IF + DISPLAY "DATOS " + OUTPUT TO REPORT liquida1(busca_datos.*) + END IF + END FOREACH + + IF imp = "S" THEN + IF idx > 1 THEN + FINISH REPORT liquida1 + END IF + END IF + + IF imp_entrada = "S" THEN + CALL edprrp0271() + END IF +END FUNCTION + +REPORT liquida1(x) + DEFINE x RECORD + cod_n SMALLINT, + cod_grupo SMALLINT, + cod_tipo SMALLINT, + cod_sec SMALLINT, + descripcion CHAR(30), + unidad CHAR(3), + cod_sp SMALLINT, + cod_sp_sec SMALLINT, + proveedor CHAR(7), + num_doc INTEGER, + num_oc INTEGER, + tipo CHAR(2), + cantidad DECIMAL(12,5), + precio DECIMAL(12,5), + flete DECIMAL(12,5), + imp_colect DECIMAL(12,5), + imp_aduana DECIMAL(12,5), + tasa DECIMAL(8,2), + cost_std LIKE intb00013.costo_st + END RECORD + + DEFINE valor DECIMAL(12,2) + DEFINE variacion,precio_std,fob,c_f,seguro,cost_pl, + t_fob,t_flete,t_seguro,t_cf,t_impcol,t_impaduana,t_dollar, + t_costopl,t_recibida,t_precio,o_variacion + DECIMAL(12,2) + + DEFINE no_reg SMALLINT + DEFINE total_cf,t_costo, costo_unit DECIMAL(12,2), + o_impaduana,o_impcolect,o_dollar,o_cf + DECIMAL(12,2) + DEFINE ot_fob, + ot_flete, + ot_cf, + ot_seguro, + ot_impcol, + ot_impaduana, + ot_dollar, + ot_costopl, + ot_costo, + ot_precio, + ot_costst, + ot_variacion DECIMAL(12,2) + + ## DEFINICION DE LAS VARIABLES DE IMPRESION + DEFINE hora CHAR(5) + DEFINE fechaActual, orden_tipo CHAR(12) + DEFINE codigo CHAR(25) + DEFINE codigos_sp, tituloFecha CHAR(25) + DEFINE material,titulo STRING + + {OUTPUT + ## DEFINICION DE LOS MARGENES DE IMPRESION + TOP MARGIN 0 + LEFT MARGIN 0 + BOTTOM MARGIN 3 + PAGE LENGTH 150} + FORMAT + PAGE HEADER + LET hora = TIME + LET fechaActual = today using "dd/mm/yy" + IF tipo_inventario = '2' THEN + LET titulo = 'Liquidacion Mercancias Productos Terminados' + ELSE + LET titulo = 'Liquidacion Mercancias Materia Prima' + END IF + IF primera = "S" THEN + LET t_fob = 0 + LET t_flete = 0 + LET t_seguro = 0 + LET t_cf = 0 + LET t_impcol = 0 + LET t_impaduana = 0 + LET t_dollar = 0 + LET t_costopl = 0 + LET t_recibida = 0 + LET t_costo = 0 + LET t_precio = 0 + LET t_costst = 0 + LET t_variacion = 0 + LET o_variacion = 0 + LET primera = "N" + LET idz = 1 + END IF + +BEFORE GROUP OF x.num_oc + + IF total_cf is null THEN + LET total_cf = 0 + END IF + + LET ot_fob =0 + LET ot_flete =0 + LET ot_cf =0 + LET ot_seguro =0 + LET ot_impcol =0 + LET ot_impaduana =0 + LET ot_dollar =0 + LET ot_costopl =0 + LET ot_costo =0 + LET ot_precio =0 + LET ot_costst =0 + LET ot_variacion =0 + LET tituloFecha = "Del ",fecha_inicial USING "dd/mm/yy"," Al ", fecha_final USING "dd/mm/yy" + ## AQUI SE INDICA LA IMPRESION DE LOS ENCABEZADOS + PRINTX p_compania.nombre, hora,tituloFecha, fechaActual,fecha_inicial USING "dd/mm/yy", + fecha_final USING "dd/mm/yy",titulo + ON EVERY ROW + + LET seguro = 0 + LET codigo = x.cod_n using "&&&&&","-",x.cod_grupo using "&&&&&","-", + x.cod_tipo using "&&&&&","-",x.cod_sec using "&&&&&" + LET codigos_sp = x.cod_sp using "&&","-",x.cod_sp_sec using "&&&&" + LET orden_tipo = x.num_oc using "&&&&&","-",x.tipo + + SELECT CONVERT(CHAR(10),MIN(a.fecha),101) INTO p_fecha FROM iptb00006 a + WHERE a.num_doc = x.num_doc and cod_mov in (10) AND status_t IS NULL + + LET fob = x.precio + + LET c_f = fob + x.flete + LET valor = c_f * x.tasa + + IF elije = "L" THEN + LET seguro = 0 + END IF + + IF no_reg > 1 THEN + LET x.imp_aduana = (x.imp_aduana / total_cf) * c_f + LET x.imp_colect = (x.imp_colect / total_cf) * c_f + END IF + + LET cost_pl = seguro + c_f + x.imp_colect + x.imp_aduana + valor + LET costo_unit = cost_pl / x.cantidad + LET precio_std = x.cantidad * x.cost_std + LET variacion = cost_pl - precio_std + LET material = "(",codigo,")","-",x.descripcion CLIPPED + + PRINTX material, codigos_sp,x.proveedor, orden_tipo, + fob, x.flete, c_f, seguro, x.imp_colect, x.imp_aduana, + valor, cost_pl, x.cantidad, costo_unit, x.cost_std, precio_std, + variacion + + IF tipo_inventario = '2' THEN + IF chstd = "YES" THEN + SELECT UNIQUE a.cod_n FROM iptb00004 a + WHERE a.cod_n = x.cod_n AND + a.cod_grupo = x.cod_grupo AND + a.cod_tipo = x.cod_tipo AND + a.cod_sec = x.cod_sec AND + a.ano = p_ano and + a.mes_ini = 1 AND + a.mes_fin = 12 + IF STATUS = NOTFOUND THEN + INSERT INTO iptb00004 (ventas,mes_ini,mes_fin,ano,cod_n,cod_grupo,cod_tipo,cod_Sec,material,labor,gastos,us_crea,fech_crea) + VALUES ('1','01','12',p_ano,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec,costo_unit,0,0,SUSER_SNAME(),GETDATE()) + END IF + END IF + ELSE + IF chstd = "YES" THEN + SELECT UNIQUE a.cod_n FROM intb00013 a + WHERE a.cod_n = x.cod_n AND + a.cod_grupo = x.cod_grupo AND + a.cod_tipo = x.cod_tipo AND + a.cod_sec = x.cod_sec AND + a.ano = p_ano AND + a.mes_ini = 1 AND + a.mes_fin = 12 + IF STATUS = NOTFOUND THEN + INSERT INTO intb00013 VALUES ('01','12',p_ano,x.cod_n,x.cod_grupo,x.cod_tipo, + x.cod_sec,costo_unit,null,SUSER_SNAME(),GETDATE(),null, + NULL) + END IF + END IF + + END IF + + INSERT INTO cttb00013 (fecha_lq,fecha,tipo_lq,num_oc,cod_n,cod_grupo,cod_tipo,cod_sec,cantidad,costo_lq,status_t,us_crea,fech_crea,tipo_orden) + VALUES (fecha_final,p_fecha,elije,x.num_oc,x.cod_n,x.cod_grupo,x.cod_tipo, + x.cod_sec,x.cantidad,costo_unit,null,usuarios,GETDATE(),x.tipo) + + INSERT INTO cttb000log2 + (fecha_lq,fecha,tipo_lq,num_oc,cod_n,cod_grupo,cod_tipo,cod_sec) + VALUES (fecha_final,p_fecha,elije,x.num_oc,x.cod_n,x.cod_grupo,x.cod_tipo,x.cod_sec) + + # Acumulacion de totales + IF o_impaduana is null THEN + LET o_impaduana = 0 + END IF + IF o_variacion is null THEN + LET o_variacion = 0 + END IF + IF o_impcolect is null THEN + LET o_impcolect = 0 + END IF + IF o_dollar is null THEN + LET o_dollar = 0 + END IF + IF o_cf is null THEN + LET o_cf = 0 + END IF + + LET t_fob = t_fob + fob + LET t_flete = t_flete + x.flete + LET t_seguro = t_seguro + seguro + LET t_cf = t_cf + c_f + LET t_impcol = t_impcol + x.imp_colect + LET t_impaduana = t_impaduana + x.imp_aduana + LET t_dollar = t_dollar + valor + LET t_costopl = t_costopl + cost_pl + LET t_costo = t_costo + costo_unit + LET t_precio = t_precio + x.cost_std + LET t_costst = t_costst + precio_std + LET t_variacion = t_variacion + variacion + + LET o_variacion = o_variacion + cost_pl + LET o_impaduana = o_impaduana + x.imp_aduana + seguro + LET o_impcolect = o_impcolect + x.imp_colect + LET o_dollar = o_dollar + valor + LET o_cf = o_cf + c_f + + LET ot_fob = ot_fob + fob + LET ot_flete = ot_flete + x.flete + LET ot_cf = ot_cf + c_f + LET ot_seguro = ot_seguro + seguro + LET ot_impcol = ot_impcol + x.imp_colect + LET ot_impaduana = ot_impaduana + x.imp_aduana + LET ot_dollar = ot_dollar + valor + LET ot_costopl = ot_costopl + cost_pl + LET ot_costo = ot_costo + costo_unit + LET ot_precio = ot_precio + x.cost_std + LET ot_costst = ot_costst + precio_std + LET ot_variacion = ot_variacion + variacion + + AFTER GROUP OF x.num_oc + # Validacion del arreglo para imprimir la entrada 27 + + IF imp_entrada = "S" THEN + LET entrada27[idz].cuenta_no = "1161" + LET entrada27[idz].cod_aux = x.cod_sp + LET entrada27[idz].cod_sec = x.cod_sp_sec + LET entrada27[idz].num_doc = x.num_oc + LET entrada27[idz].valor = o_impaduana + LET o_impaduana = 0 + LET idz = idz + 1 + + LET entrada27[idz].cuenta_no = "1161-01" + LET entrada27[idz].cod_aux = x.cod_sp + LET entrada27[idz].cod_sec = x.cod_sp_sec + LET entrada27[idz].num_doc = x.num_oc + LET entrada27[idz].valor = o_impcolect + LET o_impcolect = 0 + LET idz = idz + 1 + + LET entrada27[idz].cuenta_no = "1161-02" + LET entrada27[idz].cod_aux = x.cod_sp + LET entrada27[idz].cod_sec = x.cod_sp_sec + LET entrada27[idz].num_doc = x.num_oc + LET entrada27[idz].valor = o_dollar + LET o_dollar = 0 + LET idz = idz + 1 + + LET entrada27[idz].cuenta_no = "1161-03" + LET entrada27[idz].cod_aux = x.cod_sp + LET entrada27[idz].cod_sec = x.cod_sp_sec + LET entrada27[idz].num_doc = x.num_oc + LET entrada27[idz].valor = o_cf + LET o_cf = 0 + LET idz = idz + 1 + + END IF + + PRINTX ot_fob,ot_flete,ot_cf,ot_seguro,ot_impcol,ot_impaduana, ot_dollar, + ot_costopl,ot_costo, ot_precio,ot_costst,ot_variacion + + ON LAST ROW + + PRINTX t_fob, t_flete, t_cf,t_seguro,t_impcol,t_impaduana,t_dollar, + t_costopl,t_costo,t_precio,t_costst,t_variacion + + LET o_impaduana = 0 + LET o_impcolect = 0 + LET o_dollar = 0 + LET o_cf = 0 + END REPORT + +{------------------------------------------------------------------------------- +PROGRAMA : EDPRRP027 +OBJETIVO : Listar las Entrada de Diario Productos Terminados +PROGRAMADOR : Juan F. Soto +FECHA REALIZACION : Mayo 20, 1994. +-------------------------------------------------------------------------------} + +FUNCTION edprrp0271() + + #WHENEVER ERROR CONTINUE + DEFINE longitud,u_mes,numero_ent,i SMALLINT, + ch_ano CHAR(4) + LET r_filename ="lqprrp004b.4rp" + + OPTIONS + FORM LINE 8, + ERROR LINE 23, + COMMENT LINE 21 + + ##### Abriendo y desplegando el formulario de captura de datos + OPEN FORM edfmrp027 FROM "edfmrp027" + DISPLAY FORM edfmrp027 + + { DISPLAY "edprrp027" AT 4,3 + DISPLAY "Entrada de Diario Mat. Importada Rec." AT 6,21} + + { LET tipo_papel = 1 + CALL msgrp000(tipo_papel)} + + ###### Aceptando los valores para el rango de fecha + + INPUT BY NAME entra,fecha1,fecha2,afecta,detalla + BEFORE INPUT + LET numero_ent = 27 + LET fecha1 =fecha_inicial + LET fecha2 =fecha_final + DISPLAY BY NAME fecha1,fecha2 + + CALL controlNumericoED(numero_ent, fecha1, NULL) RETURNING entra + DISPLAY BY NAME entra + + AFTER FIELD entra + LET longitud = LENGTH(entra) + IF longitud != 16 THEN + LET numero_msg = 77 + CALL msg(numero_msg) + NEXT FIELD entra + END IF + LET existe = "N" + SELECT unique a.ref FROM cgtb00004 a WHERE a.ref = entra + + IF STATUS != NOTFOUND THEN + LET existe = "S" + END IF + + AFTER FIELD fecha1 + IF fecha1 IS NULL THEN + ERROR "(16) CAMPO EN BLANCO" + NEXT FIELD fecha1 + END IF + + AFTER FIELD fecha2 + IF fecha2 is null THEN + ERROR "(16) CAMPO EN BLANCO" + NEXT FIELD fecha2 + END IF + + IF fecha1 > fecha2 THEN + ERROR "(149) FECHA NO PUEDE SER MAYOR QUE LA ANTERIOR" + NEXT FIELD fecha1 + END IF + + ###### Selecionando en rango de fecha de la tabla de periodo para el fecha2 + + AFTER INPUT + + IF int_flag THEN + ERROR "(2) OPERACION CANCELADA" + LET int_flag = false + RETURN + END IF + IF fecha2 > TODAY THEN + CALL msg(57) + END IF + END INPUT + ##### Creando la facilidad para cancelar proceso con DELETE O SUPR + + LET i = 1 + + {CALL configureoutput("XLS") RETURNING handler + START REPORT entrada271 TO XML HANDLER handler} + IF i = 1 THEN + + IF fgl_report_loadCurrentSettings(r_filename) THEN + + LET preview=1 + CALL seleccionarsalida() RETURNING r_output -- load the .4rp file + CALL fgl_report_selectDevice(r_output) -- changing default + CALL fgl_report_selectPreview(preview) -- changing default + LET handler = fgl_report_commitCurrentSettings() -- commit changes + + END IF + LET i = 2 + START REPORT entrada271 TO XML HANDLER HANDLER + END IF + + DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" + AT 19,14 ATTRIBUTE (REVERSE) + + ##### Loop para enviar informacion al reporte + + LET diario1.debito = t_costst + IF tipo_inventario = "2" THEN + LET diario1.cuenta_no = "1131-02" + ELSE + LET diario1.cuenta_no = "1151" + END IF + OUTPUT TO REPORT entrada271(diario1.*,fecha1,fecha2,detalla,entra) + + IF i > 1 THEN + FINISH REPORT entrada271 + END IF + END FUNCTION + +#### Funcion para dar salida ordenada a la informacion requerida de +#### una entrada de diario de nominas local + +REPORT entrada271(x,fecha1,fecha2,detalle1,entrada) + + DEFINE x RECORD + cuenta_no LIKE cgtb00001.cuenta_no, + debito DECIMAL(10,2) + END RECORD + + ### Acumula los valores de las diferentes cuentas para entrada diario de nomina + DEFINE debito,credito DECIMAL(12,2) + DEFINE detalle1 CHAR(30) + DEFINE fecha1,fecha2 DATE #### Almacena las fecha del rango de busqueda + DEFINE numero_ent SMALLINT + DEFINE cod_aux_sec CHAR(6) + DEFINE doce CHAR(2) + DEFINE hora,referencia CHAR(5) + DEFINE entrada CHAR(25), + nombre_cta LIKE cgtb00001.descripcion + DEFINE fechaActual CHAR(12) + + { OUTPUT + TOP MARGIN 0 + LEFT MARGIN 0 + BOTTOM MARGIN 2 + PAGE LENGTH 150} + + FORMAT + PAGE HEADER + LET hora = TIME + LET fechaActual = today using "dd/mm/yy" + + ##### Selecionado la descripcion del fecha + + BEFORE GROUP OF x.cuenta_no + PRINTX p_compania.nombre,hora,fechaActual,fecha1,fecha2,entrada,doce + + ON EVERY ROW + SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a + WHERE a.cuenta_no = x.cuenta_no + + IF debito is null THEN + LET debito = 0 + END IF + + PRINTX x.cuenta_no, x.debito, nombre_cta + + LET debito = debito + x.debito + + IF afecta = "S" THEN + IF x.cuenta_no IS NOT NULL THEN + BEGIN WORK + + LET numero_ent = 27 + CALL controlNumericoED(numero_ent, fecha1, usuarios) RETURNING entra + DISPLAY BY NAME entra + + LET entrada = entra + + INSERT INTO cgtb00004 + (fecha,tipo,ref,cuenta_no,detalle_1,debito,credito,us_crea,fech_crea) + VALUES(fecha2,1,entrada,x.cuenta_no,detalle1,x.debito,0,usuarios,GETDATE()) + END IF + END IF + + ON LAST ROW + IF tipo_inventario = "2" THEN + SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a + WHERE a.cuenta_no = "5615" + + LET debe = 0 + LET haber = 0 + LET referencia = "5615" + ELSE + SELECT a.descripcion INTO nombre_cta FROM cgtb00001 a + WHERE a.cuenta_no = "1152" + + LET debe = 0 + LET haber = 0 + LET referencia = "1152" + END IF + IF credito is null THEN + LET credito = 0 + END IF + IF debito is null THEN + LET debito = 0 + END IF + + IF t_variacion > 0 THEN + LET debito = debito + t_variacion + LET debe = t_variacion + IF afecta = "S" THEN + IF tipo_inventario = "2" THEN + INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito + ,credito,us_crea,fech_crea) + VALUES(fecha2,1,entrada,"5615",detalle1,t_variacion,0,usuarios,GETDATE()) + ELSE + INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito + ,credito,us_crea,fech_crea) + VALUES(fecha2,1,entrada,"1152",detalle1,t_variacion,0,usuarios,GETDATE()) + END IF + END IF + ELSE + LET t_variacion = t_variacion * -1 + LET credito = credito + t_variacion + LET haber = t_variacion + + IF afecta = "S" THEN + INSERT INTO cgtb00004(fecha,tipo,ref,cuenta_no,detalle_1,debito + ,credito,us_crea,fech_crea) + VALUES(fecha2,1,entrada,"5615",detalle1,0,t_variacion,SUSER_SNAME(),GETDATE() ) + END IF + END IF + + ###### Acumulando totales por columna + PRINTX referencia, nombre_cta, debe, haber + LET credito = 0 + # Impresion detalle de la entrada con ordenes de compras + FOR i = 1 TO idz + # IF entrada27[i].cuenta_no IS NOT NULL THEN + # IF entrada27[i].cod_aux is not null THEN + + IF entrada27[i].valor < 0 THEN + LET entrada27[i].valor = entrada27[i].valor * -1 + END IF + + LET cod_aux_sec = entrada27[i].cod_aux using "&&","-",entrada27[i].cod_sec using "&&&&" + IF cod_aux_sec IS NULL THEN + LET cod_aux_sec = ' ' + END IF + # DISPLAY "datos ",i USING "<<<"," ",entrada27[i].cod_aux using "&&","-",entrada27[i].cod_sec using "&&&&" + PRINTX entrada27[i].cuenta_no, cod_aux_sec, entrada27[i].num_doc, + entrada27[i].valor + IF entrada27[i].valor IS NULL THEN + LET entrada27[i].valor=0 + END IF + LET credito = credito + entrada27[i].valor + + IF afecta = "S" THEN + IF entrada27[i].valor < 0 THEN + LET entrada27[i].valor = entrada27[i].valor * -1 + END IF + IF entrada27[i].cuenta_no IS NOT NULL THEN + INSERT INTO cgtb00004 (fecha,tipo,ref,cuenta_no,num_doc,cod_aux + ,cod_sec,detalle_1,debito,credito,us_crea,fech_crea) + VALUES (fecha2,1,entrada,entrada27[i].cuenta_no, + entrada27[i].num_doc,entrada27[i].cod_aux, + entrada27[i].cod_sec,detalle1,0, + entrada27[i].valor,SUSER_SNAME(),GETDATE()) + END IF + END IF + # END IF + #END IF + END FOR + IF afecta = "S" THEN + COMMIT WORK + END IF + ###### Imprime total DEBITO y total CREDITO + PRINTX debito,credito,detalle1 + LET debito = 0 + LET credito = 0 +END REPORT + diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 0994025..502b77a 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -363,7 +363,7 @@ - + @@ -819,7 +819,7 @@ - + From e051b498f66ddf7e32b1ae84bf417acbeefc63f0 Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Fri, 16 Oct 2026 11:11:42 -0400 Subject: [PATCH 12/16] lqprrp004: reemplaza .4rp danado por el de produccion y avisa si no hay datos - bin/lqprrp004.4rp del repo era un archivo binario ilegible (motor de reportes: "Content is not allowed in prolog"). Se reemplaza por el XML de produccion (\192.168.40.4\MARMOTECHC$\BIN320, report name liquida1, formato 6.00). - Si la consulta no devuelve filas ahora muestra "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS" en vez de cerrarse sin avisar. Verificado: Productos Terminados, 03/2024, tipo Importacion: 2 paginas en pantalla y PDF con totales por orden. Tipo Local sin datos en el periodo. Excel no probado. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/bin/lqprrp004.4rp | Bin 23954 -> 23954 bytes PROYECTO/lqdir/lqprrp004.4gl | 2 ++ 2 files changed, 2 insertions(+) diff --git a/PROYECTO/bin/lqprrp004.4rp b/PROYECTO/bin/lqprrp004.4rp index 9ac921b73c95ce05558037c6bd0c3f542df74a41..7e69d5f07a7c8e76d700d9c6973b07d576c12059 100644 GIT binary patch literal 23954 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 literal 23954 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 1 THEN FINISH REPORT liquida1 + ELSE + CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS PARA ESTOS PARAMETROS","INFO") END IF END IF From aa7fe013c05ef0c104ae3857ac39165addff58c9 Mon Sep 17 00:00:00 2001 From: Jeilyn Peguero Date: Fri, 16 Oct 2026 11:35:04 -0400 Subject: [PATCH 13/16] lqprrp004: mensaje de 'sin datos' igual al de Genero 3.20 Con Tipo Reporte Local (sin liquidaciones con liquidada='L' en cgtb00017, ni en pruebas ni en produccion) el programa se cerraba sin avisar. En 3.20 muestra INFO "NO ENCONTRE INFORMACION CON ESOS PARAMETROS" y vuelve al menu; se replica el mismo texto. Verificado contra Genero 3.20 y 6.00.03 con Productos Terminados, 03/2024, Local. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/lqdir/lqprrp004.4gl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PROYECTO/lqdir/lqprrp004.4gl b/PROYECTO/lqdir/lqprrp004.4gl index e99ba1a..dc89e0e 100644 --- a/PROYECTO/lqdir/lqprrp004.4gl +++ b/PROYECTO/lqdir/lqprrp004.4gl @@ -236,7 +236,7 @@ END MAIN IF idx > 1 THEN FINISH REPORT liquida1 ELSE - CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS PARA ESTOS PARAMETROS","INFO") + CALL fgl_winmessage("INFO","NO ENCONTRE INFORMACION CON ESOS PARAMETROS","INFO") END IF END IF From fc5a23132d8d4e8a9fcdef4cb7151e18efbdbd78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20L=C3=B3pez?= Date: Fri, 16 Oct 2026 15:39:35 -0400 Subject: [PATCH 14/16] Registra noprrp041 (Reporte de Horas Extras) y corrige bugs - Registra nofmrp041.4fd y la aplicacion noprrp041 en el subgrupo NOMINA. - nofmrp041.4fd: el del repo no era el de este programa; se usa el de 3.20 (fecha_inicial, fecha_final, cod_sup, num_emp) con format dd/mm/yyyy. - noprrp041.4gl: el JOIN comparaba notb00028.supervisor (texto '(cod) NOMBRE') con adtb00003.num_emp -> error 245; ahora une por notb00028.num_emp. El filtro Empleado filtra b.num_emp. Fechas del SQL en yyyymmdd con fecha_final+1 (sin BETWEEN). Verificado contra la BD .250 (dic-2019: 3,552 horas / 544,076.97). Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/mbsERP.4pw | 6 ++++++ PROYECTO/nodir/nofmrp041.4fd | 22 +++++++++++++--------- PROYECTO/nodir/noprrp041.4gl | 6 +++--- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 195dc66..ed45a34 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -782,6 +782,7 @@ + @@ -893,6 +894,11 @@ + + + + + diff --git a/PROYECTO/nodir/nofmrp041.4fd b/PROYECTO/nodir/nofmrp041.4fd index 3fb25b7..da6d17d 100644 --- a/PROYECTO/nodir/nofmrp041.4fd +++ b/PROYECTO/nodir/nofmrp041.4fd @@ -1,20 +1,24 @@ - + + + + - - -
+ -
diff --git a/PROYECTO/nodir/noprrp041.4gl b/PROYECTO/nodir/noprrp041.4gl index a78fdee..071c19a 100644 --- a/PROYECTO/nodir/noprrp041.4gl +++ b/PROYECTO/nodir/noprrp041.4gl @@ -71,7 +71,7 @@ END GLOBALS END INPUT - CONSTRUCT criterio ON a.supervisor, a.num_emp + CONSTRUCT criterio ON a.num_emp, b.num_emp FROM cod_sup, num_emp ON ACTION mostrar @@ -79,9 +79,9 @@ END GLOBALS b.num_emp, b.nombre, a.fecha,b.cantidad,b.valor,b.descrip_mov,a.num_doc,b.fech_crea from notb00028 a inner join notb00029 b on a.num_doc = b.num_doc - inner join adtb00003 c on a.supervisor = c.num_emp + inner join adtb00003 c on a.num_emp = c.num_emp where " , criterio CLIPPED, " and "," - a.fecha between '", datos.fecha_inicial USING "mm/dd/yyyy" , "' and '",datos.fecha_final USING "mm/dd/yyyy","' " + a.fecha >= '", datos.fecha_inicial USING "yyyymmdd" , "' and a.fecha < '",(datos.fecha_final + 1) USING "yyyymmdd","' " DISPLAY selec PREPARE comando FROM selec DECLARE cotizaciones CURSOR FOR comando From 70c3131e9cbe4b058a1a8fe44c1adb3e5613331f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20L=C3=B3pez?= Date: Fri, 16 Oct 2026 16:47:15 -0400 Subject: [PATCH 15/16] Registra noprmt026 (Pago TSS) y migra la salida de DDE a CSV - Registra nofmmt026.4fd y la aplicacion noprmt026 (con FGLSPOOL) en el subgrupo NOMINA. - GDC 6.00 ya no incluye el modulo WINDDE (error -6331): enviaDDE() guarda las celdas en memoria y escribeCSV() genera FGLSPOOL/noprmt026__ .csv con las mismas filas/columnas de la plantilla TSS. - SQL: se quitan los CONVERT(...,103) sobre variables DATE (-1205), la comparacion de fechas como texto (101) y el date+int dentro del SQL (-206); rango con fecha_sig = fecha_final+1. FOREACH con THRU (10 cols). Verificado contra la BD .250: Normal 2026/7 = 636 filas / 33,933,711.43; Bonificacion cancelados 2026/4 = 229 filas / 1,596,887.98. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/mbsERP.4pw | 5 ++ PROYECTO/nodir/noprmt026.4gl | 118 +++++++++++++++++++++++++---------- 2 files changed, 91 insertions(+), 32 deletions(-) diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index ed45a34..0f7f98d 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -783,6 +783,7 @@ + @@ -899,6 +900,10 @@ + + + +
diff --git a/PROYECTO/nodir/noprmt026.4gl b/PROYECTO/nodir/noprmt026.4gl index 085541f..3b3df80 100644 --- a/PROYECTO/nodir/noprmt026.4gl +++ b/PROYECTO/nodir/noprmt026.4gl @@ -20,7 +20,9 @@ DEFINE rcol,arch_pc,prog STRING, d_tipos,mensaje,f_tipos,filepath,p_res,res,fila,val STRING DEFINE usuarios,clave CHAR(80), - FILE,nombre_cia STRING + FILE,nombre_cia STRING, + celdas DICTIONARY OF STRING, + maxfila,maxcol INTEGER END GLOBALS MAIN @@ -49,7 +51,7 @@ DEFINE ptss RECORD departamento INT, valor_isr DEC(12,2) END RECORD, - fecha_inicial,fecha_final DATE, + fecha_inicial,fecha_final,fecha_sig DATE, kano,kmes, cnt,numero_msg SMALLINT, cels CHAR(40), filename,sysos CHAR(200), @@ -79,7 +81,7 @@ DEFINE ptss RECORD AFTER FIELD kmes 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 ='", kano,"' AND a.mes ='", kmes, "'" PREPARE busca_fecha FROM selec @@ -98,6 +100,8 @@ DEFINE ptss RECORD END INPUT + LET fecha_sig = fecha_final + 1 -- el +1 no se puede hacer dentro del SQL (date + int) + LET periodo = kmes USING "&&",kano USING "&&&&" LET FILE = filepath @@ -144,7 +148,7 @@ DEFINE ptss RECORD CALL ui.Interface.refresh() LET selec = - " SELECT a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.tipo_documento,b.cedula,convert(char(10),b.fech_nac,103),", + " SELECT a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.tipo_documento,b.cedula,b.fech_nac,", " SUM(a.valor),b.departamento ", " FROM adtb00003 b, notb00008 a,notb00010 c,adtb00021 d ", " WHERE b.num_emp = a.num_emp AND c.mes ='",kmes,"' AND ", @@ -154,8 +158,8 @@ DEFINE ptss RECORD " a.cod_mov in (1,40,36,5,24,51,34,56) AND ", " a.num_emp = d.num_emp AND ", #" a.cod_mov in (32) AND ", - " convert(char(10), a.fecha,101) between '",fecha_inicial USING "mm/dd/yyyy", - "' and '",fecha_final using "mm/dd/yyyy","' and b.nomina = 'Q' ", + " a.fecha >= '",fecha_inicial USING "yyyymmdd", + "' and a.fecha < '",(fecha_final + 1) using "yyyymmdd","' and b.nomina = 'Q' ", " GROUP BY a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.cedula,b.fech_nac,b.departamento,a.num_emp,b.tipo_documento ", " ORDER BY b.departamento,a.num_emp " ELSE @@ -176,7 +180,7 @@ DEFINE ptss RECORD CALL ui.Interface.refresh() LET cnt = 15 LET selec = - " SELECT a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.tipo_documento,b.cedula,convert(char(10),b.fech_nac,103),", + " SELECT a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.tipo_documento,b.cedula,b.fech_nac,", " SUM(a.valor),a.departamento ", " FROM adtb00003 b, notb00008 a,notb00010 c,adtb00021 d ", " WHERE b.num_emp = a.num_emp AND b.status_t is not null and c.mes ='",kmes,"' AND ", @@ -186,8 +190,8 @@ DEFINE ptss RECORD #" a.cod_mov in (1,40,36,5,24,51,34) AND ", " a.num_emp = d.num_emp AND ", " a.cod_mov in (33) AND ", - " convert(char(10), a.fecha,101) between '",fecha_inicial USING "mm/dd/yyyy", - "' and '",fecha_final using "mm/dd/yyyy","' and b.nomina = 'Q' ", + " a.fecha >= '",fecha_inicial USING "yyyymmdd", + "' and a.fecha < '",(fecha_final + 1) using "yyyymmdd","' and b.nomina = 'Q' ", " GROUP BY a.num_emp,b.nom1_emp,b.apell1_emp,b.apell2_emp,d.sexo,b.cedula,b.fech_nac,a.departamento,a.num_emp,b.tipo_documento ", " ORDER BY a.departamento,a.num_emp " END IF @@ -197,7 +201,7 @@ DEFINE ptss RECORD LET cuenta = 0 IF tipo_reporte = 'NOR' THEN - FOREACH busca INTO ptss.* + FOREACH busca INTO ptss.ficha THRU ptss.departamento LET col = 2 LET fila = cnt @@ -240,7 +244,7 @@ DEFINE ptss RECORD LET col = 9 LET fila = cnt - LET val = ptss.fecha_n + LET val = ptss.fecha_n USING "dd/mm/yyyy" CALL enviaDDE(fila,col,val) LET col = 10 @@ -253,7 +257,7 @@ DEFINE ptss RECORD SELECT ISNULL(SUM(a.valor),0) INTO ptss.valor_isr FROM notb00008 a WHERE a.num_emp = ptss.ficha AND - a.fecha BETWEEN fecha_inicial AND fecha_final AND + a.fecha >= fecha_inicial AND a.fecha < fecha_sig AND a.clase_mov IN ("E","I") and a.cod_mov not in (32,33) LET col = 12 @@ -267,7 +271,7 @@ DEFINE ptss RECORD SELECT ISNULL(SUM(a.valor),0) INTO valor_boni FROM notb00008 a WHERE a.num_emp = ptss.ficha AND - a.fecha BETWEEN fecha_inicial AND fecha_final AND + a.fecha >= fecha_inicial AND a.fecha < fecha_sig AND a.clase_mov IN ("E","I") and a.cod_mov in (33) # VARIFICACION VACACIONES @@ -275,7 +279,7 @@ DEFINE ptss RECORD SELECT ISNULL(SUM(a.valor),0) INTO valor_vacaciones FROM notb00008 a WHERE a.num_emp = ptss.ficha AND - a.fecha BETWEEN fecha_inicial AND fecha_final AND + a.fecha >= fecha_inicial AND a.fecha < fecha_sig AND a.clase_mov IN ("E","I") and a.cod_mov in (36) IF valor_vacaciones =0 THEN @@ -305,7 +309,7 @@ DEFINE ptss RECORD SELECT SUM(a.valor) INTO valor_boni FROM notb00008 a WHERE a.num_emp = ptss.ficha AND - a.fecha BETWEEN fecha_inicial AND fecha_final AND + a.fecha >= fecha_inicial AND a.fecha < fecha_sig AND a.clase_mov IN ("E","I") and a.cod_mov in (32) @@ -333,7 +337,7 @@ DEFINE ptss RECORD ELSE #BONI CANCELADOS IF tipo_reporte = "BON1" THEN - FOREACH busca INTO ptss.* + FOREACH busca INTO ptss.ficha THRU ptss.departamento LET col = 2 LET fila = cnt @@ -368,7 +372,7 @@ DEFINE ptss RECORD LET col = 8 LET fila = cnt - LET val = ptss.fecha_n + LET val = ptss.fecha_n USING "dd/mm/yyyy" CALL enviaDDE(fila,col,val) LET col = 9 @@ -392,32 +396,82 @@ DEFINE ptss RECORD END IF - CALL fgl_winmessage("INFO","REPROTE TERMINADO","INFO") + CALL escribeCSV(tipo_reporte,periodo) RETURNING mensaje + CALL fgl_winmessage("INFO","REPORTE TERMINADO. ARCHIVO: "||mensaje,"INFO") +END FUNCTION + +-- Genero 6 (GDC 6.00) ya no incluye el modulo WINDDE: en lugar de llenar Excel +-- celda por celda, cada "celda" se guarda en memoria y al final se escribe un +-- CSV (separador ;) con las mismas filas y columnas de la plantilla de la TSS. +FUNCTION celda_key(xf,xc) + DEFINE xf,xc INTEGER + DEFINE sf,sc STRING + + LET sf = xf USING "<<<<<&" + LET sc = xc USING "<<<<<&" + RETURN sf || "," || sc END FUNCTION FUNCTION enviaDDE(xfila,xcol,xval) - DEFINE xfila,xcol,xval,xcelda STRING - - DISPLAY "enviado ",xfila," c ",xcol," v ",xval - - LET xcelda = fila_office CLIPPED,xfila CLIPPED,"C",xcol CLIPPED - DISPLAY "celda ",xcelda - LET xval=xval CLIPPED - CALL ui.Interface.frontCall("WINDDE","DDEPoke", [prog,file,xcelda,xval], [res] ); - CALL checkError(res) + DEFINE xfila,xcol INTEGER + DEFINE xval STRING + DEFINE k STRING + LET k = celda_key(xfila,xcol) + LET celdas[k] = xval CLIPPED + IF xfila > maxfila THEN LET maxfila = xfila END IF + IF xcol > maxcol THEN LET maxcol = xcol END IF END FUNCTION FUNCTION terminaDDE() - CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [res] ); - CALL checkError(res) - + CALL celdas.clear() + LET maxfila = 0 + LET maxcol = 0 END FUNCTION FUNCTION conectarDDE() - CALL ui.Interface.frontCall("WINDDE","DDEConnect", [prog,file], [res] ) - CALL checkError(res) + CALL celdas.clear() + LET maxfila = 0 + LET maxcol = 0 +END FUNCTION +-- Escribe las celdas acumuladas en FGLSPOOL/noprmt026__.csv +-- y devuelve la ruta del archivo. +FUNCTION escribeCSV(xtipo,xperiodo) + DEFINE xtipo,xperiodo STRING + DEFINE ch base.Channel + DEFINE ruta STRING + DEFINE f,c INTEGER + DEFINE lin base.StringBuffer + DEFINE k,v STRING + + LET ruta = FGL_GETENV("FGLSPOOL") + IF ruta IS NULL OR ruta.getLength() = 0 THEN LET ruta = "." END IF + LET ruta = ruta || "\\noprmt026_" || xtipo || "_" || xperiodo || ".csv" + + LET ch = base.Channel.create() + LET lin = base.StringBuffer.create() + CALL ch.openFile(ruta,"w") + FOR f = 1 TO maxfila + CALL lin.clear() + FOR c = 1 TO maxcol + LET k = celda_key(f,c) + IF celdas.contains(k) THEN + LET v = celdas[k] + IF v.getIndexOf(";",1) > 0 OR v.getIndexOf("\"",1) > 0 THEN + LET v = "\"" || v.trim() || "\"" + END IF + ELSE + LET v = "" + END IF + IF c > 1 THEN CALL lin.append(";") END IF + CALL lin.append(v) + END FOR + CALL ch.writeNoNL(lin.toString()) + CALL ch.writeNoNL("\r\n") + END FOR + CALL ch.close() + RETURN ruta END FUNCTION FUNCTION checkError(res) From b8f403c2e43585db0597eb1f5b4ef8ea4e406892 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20L=C3=B3pez?= Date: Fri, 16 Oct 2026 16:53:41 -0400 Subject: [PATCH 16/16] Proyecto: elimina el grupo NOMINA vacio de MODULOS El grupo estaba vacio (despues de MATERIA PRIMA) y no se usara; los programas de nomina viven en RECURSOS HUMANOS > NOMINA. Co-Authored-By: Claude Sonnet 5.5 --- PROYECTO/mbsERP.4pw | 2 -- 1 file changed, 2 deletions(-) diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 255663d..0062bf5 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -469,8 +469,6 @@ - -