Procedimientos Almacenados en SAP Business One – Parte 4
linked-in

Federico Cortese

Fecha de publicación: 5 Feb, 2024

Procedimientos Almacenados en SAP Business One – Parte 4

Post-Transaction Notification (PTN)

Este procedimiento almacenado es ejecutado por SAP B1 luego de cada transacción de alta, baja, modificación, cancelación o cierre de un registro o una operación.

Dentro de este procedimiento podremos incluir sentencias SQL para realizar diferentes acciones que se ejecutaran posteriormente a la transacción ocurrida.

Las posibilidades de acciones no son muchas, solamente se utiliza en casos específicos y adaptándose a las reglas de seguridad de SAP (No se puede realizar INSERTS o UPDATES a tablas o campos del sistema), algunos ejemplos claros de la utilización del PTN:

• Realizar un update en un campo de usuarios luego de que termina una transacción.
• Realizar un Insert a una tabla de usuarios luego de finalizada una transacción.

El PTN utiliza los mismos parámetros y las mismas variables que el TN.

El procedimiento PTN estándar de SAP Business ONE es el siguiente:

store proceduras - Post Transaction

PTN – Ejemplos

Ejemplo 1: Actualiza un campo de usuarios de los asientos luego de registrar una factura de proveedores.

IF ((:object_type = ’18’) AND (:transaction_type = ‘A’)) THEN

–obtengo el Nro de asiento.

SELECT (SELECT «TransId» FROM OPCH WHERE «DocEntry» = :list_of_cols_val_tab_deL) INTO TransId FROM DUMMY;

SELECT (SELECT «Number» FROM OJDT WHERE «TransId» = :TransId and «CreatedBy» = :list_of_cols_val_tab_deL Order By «Number» desc) INTO Number FROM DUMMY;

–obtengo y guardo en una variable el campo a insertar en el asiento.

SELECT (SELECT «CardCode» FROM OPCH WHERE «DocEntry» = :list_of_cols_val_tab_deL) INTO BPCode FROM DUMMY;

–Hago el UPDATE

UPDATE T0 SET T0.»U_BPCode» = :BPCode FROM JDT1 T0 INNER JOIN OJDT T1 ON T0.»TransId» = T1.»TransId» WHERE T1.»Number» = :Number and T0.»Account» IN (SELECT TX.»AcctCode» FROM OACT TX WHERE TX.»U_CardType» <> ‘NP’);

END IF;

 

• Ejemplo 2: Inserta el código y nombre de un Interlocutor Comercial en una tabla de usuario luego de crearlo.

IF ((:object_type = ‘2’) AND (:transaction_type = ‘A’)) THEN

–obtengo los datos del cliente.

SELECT (SELECT «CardCode» FROM OCRD WHERE «CardCode» = :list_of_cols_val_tab_deL) INTO CardCode FROM DUMMY;

SELECT (SELECT «CardName» FROM OCRD WHERE «CardCode» = :list_of_cols_val_tab_deL) INTO CardName FROM DUMMY;

–obtengo el ultimo código de la tabla +1

SELECT (SELECT MAX(«Code»)+1 FROM «@NIN_OBJ_AUTO») INTO Code FROM DUMMY;

–Hago el INSERT

INSERT INTO «@NIN_OBJ_AUTO» («Code»,»Name»,»U_CardCode», «U_CardName») VALUES (:Code,:CardName,:CardCode,:CardName);

END IF;

Curso SQL desde cero básico para SAP Business One - SQL / HANA

Accede al curso en Udemy…

Sintaxis de consultas - SAP Business One

Aprende las particularidades de como escribir query’s en SAP B1. Sintaxis de consultas en SAP Business One.