From 61195adc7510b0a67daf8cec22911f5e6a4af703 Mon Sep 17 00:00:00 2001 From: Jhonny Soto Date: Tue, 15 Sep 2026 12:14:15 -0400 Subject: [PATCH] JSOTO Arreglo programa ipprmt005, quitando la conexion IFMX --- PROYECTO/ipdir/RUBIOBONDY.txt | 24 ----- PROYECTO/ipdir/ipfmmt005.per | 2 +- PROYECTO/ipdir/ipprgb000.4gl | 2 +- PROYECTO/ipdir/ipprmt005.4gl | 33 +++---- PROYECTO/ipdir/ipprmt005_trg_exterior.sql | 105 ++++++++++++++++++++++ PROYECTO/ipdir/rubio220513.txt | 33 ------- PROYECTO/mbsERP.4pw | 3 +- 7 files changed, 119 insertions(+), 83 deletions(-) delete mode 100644 PROYECTO/ipdir/RUBIOBONDY.txt create mode 100644 PROYECTO/ipdir/ipprmt005_trg_exterior.sql delete mode 100644 PROYECTO/ipdir/rubio220513.txt diff --git a/PROYECTO/ipdir/RUBIOBONDY.txt b/PROYECTO/ipdir/RUBIOBONDY.txt deleted file mode 100644 index 2998725..0000000 --- a/PROYECTO/ipdir/RUBIOBONDY.txt +++ /dev/null @@ -1,24 +0,0 @@ -WANDY TIENE 2 SALIDAS 1 CARRERAS -JOSE HERNANDEZ 13 ENTRADA DE 14 PONCHES -STRABURG 2-0 FRENTE A SFO -CAIN HA GANADO LOS - -LE VA MA FRENTE ATLANTA. -LE VA BIEN A MINESOTA. -PHIL HUGES 13 CARRERAS -KLUBER - -TAMPA 8-1 CON - -STL - ATL 77 - PIRATAS 77 -CINCINATA 77 - LAA - PHILS -KC -LAD -DET - SFO -COLORADO - diff --git a/PROYECTO/ipdir/ipfmmt005.per b/PROYECTO/ipdir/ipfmmt005.per index 3d9a9a1..c35fc76 100644 --- a/PROYECTO/ipdir/ipfmmt005.per +++ b/PROYECTO/ipdir/ipfmmt005.per @@ -1,4 +1,4 @@ -database marmotech +database smarmotech screen size 24 by 80 { Codigo del movimiento [f0] Material[f002 ] diff --git a/PROYECTO/ipdir/ipprgb000.4gl b/PROYECTO/ipdir/ipprgb000.4gl index 34a8d37..418405e 100644 --- a/PROYECTO/ipdir/ipprgb000.4gl +++ b/PROYECTO/ipdir/ipprgb000.4gl @@ -248,7 +248,7 @@ END RECORD DEFINE balance DECIMAL(12,5) DEFINE cod_mov_ant LIKE iptb00006.cod_mov DEFINE existe_comp,suplidor1,doc_existe,actual,mat_prima CHAR (1000) - DEFINE opt1,opt4,opt,existe,ya ,opera1,cambio CHAR(3) + DEFINE opt1,opt4,opt,ya ,opera1,cambio CHAR(3) DEFINE medida CHAR (3) DEFINE fila smallint DEFINE m_articulos RECORD LIKE iptb00002.* diff --git a/PROYECTO/ipdir/ipprmt005.4gl b/PROYECTO/ipdir/ipprmt005.4gl index 0c987ef..7a7d25f 100644 --- a/PROYECTO/ipdir/ipprmt005.4gl +++ b/PROYECTO/ipdir/ipprmt005.4gl @@ -16,8 +16,10 @@ MAIN CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" AS "MSSQL" USER usuarios USING clave - CONNECT TO "marmotech" AS "IFMX" USER usuarios USING clave - + -- Migracion Genero 6.0: se elimina la conexion IFMX (EXTERIOR). + -- La replicacion de iptb00020 a exterior.dbo.iptb00020 ahora la hace + -- un trigger en marmotech.dbo.iptb00020 (ver ipprmt005_trg_exterior.sql). + CALL ipprmt005() END MAIN @@ -81,11 +83,8 @@ FUNCTION ippcad012() VALUES (p_iptb20.cod_n,p_iptb20.producto,usuarios,getdate(),p_iptb20.comentario,p_iptb20.genera_orden,p_iptb20.instalacion) INSERT INTO iptb00035 (cod_n,cod_cat) VALUES (p_iptb20.cod_n,p_iptb20.cod_cat) - COMMIT WORK - SET CONNECTION "IFMX" - INSERT INTO iptb00020 (cod_n,producto,us_crea,fech_crea,instalacion) VALUES - (p_iptb20.cod_n,p_iptb20.producto,usuarios,getdate(),p_iptb20.instalacion) - + COMMIT WORK + -- La replica a EXTERIOR la realiza el trigger en iptb00020. LET numero_msg = 1 CALL msg(numero_msg) END FUNCTION @@ -230,16 +229,9 @@ SET CONNECTION "MSSQL" WHERE cod_n = p_iptb20.cod_n DELETE FROM iptb00035 WHERE cod_n = p_iptb20.cod_n INSERT INTO iptb00035 (cod_cat,cod_n) VALUES (p_iptb20.cod_cat,p_iptb20.cod_n) - COMMIT WORK - SET CONNECTION "IFMX" - UPDATE iptb00020 SET producto = p_iptb20.producto, - us_mod = usuarios, - fech_mod = getdate(), - instalacion = p_iptb20.instalacion - WHERE cod_n = p_iptb20.cod_n - - SET CONNECTION "MSSQL" - LET numero_msg = 13 + COMMIT WORK + -- La replica a EXTERIOR la realiza el trigger en iptb00020. + LET numero_msg = 13 CALL msg(numero_msg) EXIT INPUT @@ -257,12 +249,7 @@ END INPUT fech_mod = GETDATE() WHERE cod_n = p_iptb20.cod_n - SET CONNECTION "IFMX" - UPDATE iptb00020 SET status_t = "E", - us_mod = usuarios - - WHERE cod_n = p_iptb20.cod_n - + -- La replica del "borrado logico" a EXTERIOR la realiza el trigger. LET numero_msg = 39 CALL msg(numero_msg) ELSE diff --git a/PROYECTO/ipdir/ipprmt005_trg_exterior.sql b/PROYECTO/ipdir/ipprmt005_trg_exterior.sql new file mode 100644 index 0000000..bd26cd2 --- /dev/null +++ b/PROYECTO/ipdir/ipprmt005_trg_exterior.sql @@ -0,0 +1,105 @@ +/* ===================================================================== + TRIGGER DE REPLICACION iptb00020 (Grupos / Clases) + marmotech.dbo.iptb00020 ---> exterior.dbo.iptb00020 + + Motivo: + Migracion a Genero 6.0. El programa ipprmt005 abria una segunda + conexion "IFMX" (= base EXTERIOR en la misma instancia SQL Server) + para replicar manualmente cada INSERT/UPDATE de iptb00020. + Con Genero 6.0 + ODBC Driver 18 ese segundo CONNECT falla con + el error -6366 ("Changed database context to 'marmotech'"). + + Se elimino del fuente ipprmt005.4gl toda la logica "SET CONNECTION IFMX" + y esa replicacion la asume ahora este trigger, del lado del servidor. + + Cobertura: + - ipprmt005.4gl es el UNICO programa del ERP que escribe iptb00020 + (los demas solo la consultan), asi que el trigger reemplaza por + completo la replicacion sin riesgo de escrituras duplicadas. + + Comportamiento (identico al del programa original): + - INSERT -> crea la fila en EXTERIOR. + - UPDATE -> sincroniza la fila en EXTERIOR (cubre tanto "Modificar" + como el "borrado logico" status_t='E'). + - Cross-database directo (misma instancia, sin linked server). + - NO se maneja DELETE fisico: el ERP nunca borra fisicamente esta + tabla, solo marca status_t = 'E'. + + Ambiente: probar primero en DESARROLLO (.40.9) antes de PRODUCCION (.40.8). + ===================================================================== */ + +/* --------------------------------------------------------------------- + PASO 0 (VERIFICACION - correr ANTES de crear el trigger) + Confirmar las columnas reales de EXTERIOR.dbo.iptb00020. + El esquema local (.sch) de ipdir esta viejo y NO lista 'instalacion', + pero el programa 3.20 si la escribia, por lo que deberia existir. + Si en el resultado NO aparece 'instalacion', elimine del trigger las + dos referencias a e.instalacion / i.instalacion antes de crearlo. + --------------------------------------------------------------------- */ +-- SELECT c.name AS columna, t.name AS tipo, c.max_length, c.is_nullable +-- FROM exterior.sys.columns c +-- JOIN exterior.sys.types t ON t.user_type_id = c.user_type_id +-- WHERE c.object_id = OBJECT_ID('exterior.dbo.iptb00020') +-- ORDER BY c.column_id; +GO + +USE marmotech; +GO + +IF OBJECT_ID('dbo.trg_iptb00020_repl_exterior', 'TR') IS NOT NULL + DROP TRIGGER dbo.trg_iptb00020_repl_exterior; +GO + +CREATE TRIGGER dbo.trg_iptb00020_repl_exterior +ON dbo.iptb00020 +AFTER INSERT, UPDATE +AS +BEGIN + SET NOCOUNT ON; + + IF NOT EXISTS (SELECT 1 FROM inserted) + RETURN; + + /* 1) Actualizar en EXTERIOR las filas que ya existen (por cod_n). */ + UPDATE e + SET e.producto = i.producto, + e.status_t = i.status_t, + e.us_crea = i.us_crea, + e.fech_crea = i.fech_crea, + e.us_mod = i.us_mod, + e.fech_mod = i.fech_mod, + e.instalacion = i.instalacion + FROM exterior.dbo.iptb00020 e + INNER JOIN inserted i ON e.cod_n = i.cod_n; + + /* 2) Insertar en EXTERIOR las filas que aun no existen. */ + INSERT INTO exterior.dbo.iptb00020 + (cod_n, producto, status_t, us_crea, fech_crea, us_mod, fech_mod, instalacion) + SELECT i.cod_n, i.producto, i.status_t, i.us_crea, i.fech_crea, i.us_mod, i.fech_mod, i.instalacion + FROM inserted i + WHERE NOT EXISTS (SELECT 1 + FROM exterior.dbo.iptb00020 e + WHERE e.cod_n = i.cod_n); +END; +GO + +/* --------------------------------------------------------------------- + ROLLBACK (si hiciera falta revertir): + USE marmotech; + DROP TRIGGER dbo.trg_iptb00020_repl_exterior; + + PRUEBA rapida (en DESARROLLO): + -- alta + INSERT INTO marmotech.dbo.iptb00020 (cod_n,producto,us_crea,fech_crea,instalacion) + VALUES (999999,'PRUEBA TRG', SUSER_SNAME(), GETDATE(), 1); + SELECT * FROM exterior.dbo.iptb00020 WHERE cod_n = 999999; -- debe aparecer + -- modificacion + UPDATE marmotech.dbo.iptb00020 SET producto='PRUEBA TRG MOD' WHERE cod_n=999999; + SELECT producto FROM exterior.dbo.iptb00020 WHERE cod_n = 999999; -- debe reflejar + -- borrado logico + UPDATE marmotech.dbo.iptb00020 SET status_t='E' WHERE cod_n=999999; + SELECT status_t FROM exterior.dbo.iptb00020 WHERE cod_n = 999999; -- debe ser 'E' + -- limpieza + DELETE FROM marmotech.dbo.iptb00020 WHERE cod_n=999999; + DELETE FROM exterior.dbo.iptb00020 WHERE cod_n=999999; + --------------------------------------------------------------------- */ diff --git a/PROYECTO/ipdir/rubio220513.txt b/PROYECTO/ipdir/rubio220513.txt deleted file mode 100644 index 7eba626..0000000 --- a/PROYECTO/ipdir/rubio220513.txt +++ /dev/null @@ -1,33 +0,0 @@ -RUBIO BLOND - -okland 5 victorias -tampa bien los miercoles en toronto 7 de ultimos 8 -Mine le va mal en interligas -atl le ha ganado 5 como favoritos -cinci le va bien en la ruta. Va Harvey. - -LAD frente a derechos han perdido 10 de los untimos 14 -Ariz ha perdido los ultimos juegos en la runta con los zurdos. - -Sfo 10 - -LAAD 75 -PHILIS 74 -STL 73 -PIT 72 -KC 71 -BOS 65 -NYY 62 -DET 61 - - -MNE -SEATLE -WASH - -WILLY PEREALTA 2 LOSS -HARVEY LANZANDO EN SU PATIO ES PELIGROSO -DE LA ROSA TIENE 7-4 FRENTE ARIZ -SMARTIZA 4-0 FRENTE A LOS PIT - - diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 75baef8..989a0e3 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -506,6 +506,7 @@ + @@ -564,7 +565,7 @@ - +