From a1c15d43f3e128ed91e5124c7d213a0fb58ad7cd Mon Sep 17 00:00:00 2001 From: Jhonny Soto Date: Mon, 19 Oct 2026 09:54:32 -0400 Subject: [PATCH] JSOTO acprmt001: ALTER de actb00001 y arreglos de MaintainX y lista - acprmt001_alter_actb00001.sql: crea en actb00001 las columnas cod_sp, cod_sp_sec, tipo_activo y activo_padre (NULL). Las usa la version ene-2025 del programa (integracion MaintainX) y nunca se habian creado en ninguna base. Aplicado en la .250; pendiente en produccion. - Si MaintainX falla (Adicionar/Modificar con la casilla marcada, Eliminar con id_maintainx) se cancela la operacion; antes hacia ROLLBACK y seguia grabando fuera de la transaccion (COMMIT -255). - Eliminar: parametros de ApiMaintainX en el orden de la firma (infoArray, maquinaria). - Lista: se quita la fila vacia final; getdata usa el codigo como parametro (antes "WHERE a.codigo = " sin valor daba -201) y filtra la maquina inactiva en el ON del LEFT JOIN. Co-Authored-By: Claude Opus 5.5 --- PROYECTO/acdir/acprmt001.4gl | 24 +++++++++++++++----- PROYECTO/acdir/acprmt001_alter_actb00001.sql | 17 ++++++++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 PROYECTO/acdir/acprmt001_alter_actb00001.sql diff --git a/PROYECTO/acdir/acprmt001.4gl b/PROYECTO/acdir/acprmt001.4gl index 2323b9a..66eb6b0 100644 --- a/PROYECTO/acdir/acprmt001.4gl +++ b/PROYECTO/acdir/acprmt001.4gl @@ -442,6 +442,11 @@ FUNCTION acpcad001() --Consultar Datos Activo LET i = i + 1 END FOREACH + -- el FOREACH deja un elemento vacio al final; al seleccionarlo getdata armaba + -- "WHERE a.codigo = " sin valor (-201) y el programa se caia + IF DisArray.getLength() >= i THEN + CALL DisArray.deleteElement(i) + END IF END FUNCTION @@ -470,12 +475,12 @@ FUNCTION getdata(idx INT) ,a.id_MaintainX ,a.id_codigo ,b.nombre - FROM actb00001 a left join irtb00009 b on a.id_codigo = b.codigo - WHERE a.codigo = " || DisArray[idx].codigo1 || " - AND a.status_t is null and b.status_t is null + FROM actb00001 a left join irtb00009 b on a.id_codigo = b.codigo AND b.status_t is null + WHERE a.codigo = ? + AND a.status_t is null ORDER BY a.codigo" - EXECUTE query INTO infoArray.* + EXECUTE query USING DisArray[idx].codigo1 INTO infoArray.* SELECT a.descripcion INTO des.descripcion2 @@ -568,6 +573,9 @@ FUNCTION insertData() IF infoArray.id_MaintainX IS NULL THEN ROLLBACK WORK + -- antes seguia grabando fuera de la transaccion (el COMMIT caia -255) + CALL fgl_winmessage("MaintainX", "NO SE PUDO REGISTRAR EN MAINTAINX, OPERACION CANCELADA", "stop") + RETURN END IF END IF @@ -701,6 +709,8 @@ INITIALIZE checking TO NULL IF answer IS NULL THEN ROLLBACK WORK + CALL fgl_winmessage("MaintainX", "NO SE PUDO ACTUALIZAR MAINTAINX, OPERACION CANCELADA", "stop") + RETURN END IF END IF @@ -811,11 +821,13 @@ INITIALIZE checking TO NULL END IF IF infoArray.id_MaintainX IS NOT NULL THEN - CALL ApiMaintainX('DELETE',infoArray.id_MaintainX,maquinaria.*, infoArray.*,extraCampos.*,NULL) + CALL ApiMaintainX('DELETE',infoArray.id_MaintainX,infoArray.*,maquinaria.*,extraCampos.*,NULL) -- antes maquinaria/infoArray invertidos RETURNING answer - IF answer != 1 THEN + IF answer != 1 OR answer IS NULL THEN ROLLBACK WORK + CALL fgl_winmessage("MaintainX", "NO SE PUDO ELIMINAR EN MAINTAINX, OPERACION CANCELADA", "stop") + RETURN END IF END IF diff --git a/PROYECTO/acdir/acprmt001_alter_actb00001.sql b/PROYECTO/acdir/acprmt001_alter_actb00001.sql new file mode 100644 index 0000000..79cce25 --- /dev/null +++ b/PROYECTO/acdir/acprmt001_alter_actb00001.sql @@ -0,0 +1,17 @@ +-- acprmt001 (version ene-2025, integracion MaintainX) usa 4 columnas que nunca se +-- crearon en actb00001: proveedor del activo, tipo de activo y activo padre. +-- Todas NULL: no afectan filas existentes ni a los programas que no las usan. +-- Ejecutar primero en la .250 (QA G6); en produccion (.40.8) solo cuando se apruebe. +USE marmotech; +GO +IF COL_LENGTH('dbo.actb00001','cod_sp') IS NULL + ALTER TABLE dbo.actb00001 ADD cod_sp INT NULL; -- cotb00001.cod_sp (proveedor) +IF COL_LENGTH('dbo.actb00001','cod_sp_sec') IS NULL + ALTER TABLE dbo.actb00001 ADD cod_sp_sec INT NULL; -- cotb00001.cod_sp_sec +IF COL_LENGTH('dbo.actb00001','tipo_activo') IS NULL + ALTER TABLE dbo.actb00001 ADD tipo_activo VARCHAR(30) NULL; -- CAMIONES, IT HARDWARE, MAQUINARIAS, MONTACARGAS, EDIFICIOS +IF COL_LENGTH('dbo.actb00001','activo_padre') IS NULL + ALTER TABLE dbo.actb00001 ADD activo_padre INT NULL; -- actb00001.codigo del activo padre +GO +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('dbo.actb00001') + AND name IN ('cod_sp','cod_sp_sec','tipo_activo','activo_padre');