Stored procedure y Trigger en hana studio

Buen día compañeros del foro quisiera su ayuda de ustedes expertos en el tema:
Estoy realizando en hana studio un SP y un trigger que trabajaran juntos.
El SP que en teoría solo actualiza un campo de S a P:

CREATE PROCEDURE Status_SswitchonP 
(
	in obj_id int,
	in dockey int,
	in docnum int,
	in ItemCode nvarchar (200)
)
AS

--if(obj_id = 17)
begin
	UPDATE OITW SET "Estatus"='P' WHERE "ItemCode"=ItemCode;

end;

Trigger:

Create trigger Update_SonP
AFTER INSERT, UPDATE, DELETE ON OITW
REFERENCING NEW ROW AS newrow OLD ROW AS oldrow
FOR EACH ROW
BEGIN
	IF(:newrow "WhsCode"='T'
	CALL "Status_SswitchonP"();
	END IF;
END;

No se como mandar el parámetro al stored procedure, la otra es que tengo un query para ahorrarme esto pero creo que no esta funcionando porque se me esta pasando algún movimiento de SAP que afecta el inventario y no me cambia el estado de S a P, este query lo tengo en el SBO_SP_PostTransactionNotice

IF :transaction_type IN ('A','U','D','C') AND :object_type IN ('17','59','67','16') THEN
	UPDATE OITW
	SET "Estatus"='P'		
	WHERE 	
	"Estatus"='S' AND
	"WhsCode" = 'T' and "ItemCode" =:list_of_cols_val_tab_del;
END IF;

Ok, primera.- No necesitas crear triggers…para eso existen el TN y PTN.

Ahora , si me explicas en que “evento” y “objeto” se debe disparar, puedo ayudarte.

4 Me gusta

Gracias @juliancab pues tienen que ser todos los tipos de objetos que afecten el inventario en aumento o disminución de este, se supone que tengo ahí todos:
Traspaso o traslado
entrada de mercancía
oferta de venta
devolución.
No se si me falta alguno pero según yo no.

Table Table description Primary Key Object Type
ORDN Returns DocEntry 16
ORDR Sales Order DocEntry 17
OIGN Goods Receipt DocEntry 59
OWTR Inventory Transfer DocEntry 67

Te faltan :

salidas de inventario.

Entregas.

Recuento.

1 me gusta

Para ello si lo que necesitas es bloquear para no hacer movimientos utiliza el TN.
Si lo que deseas es solo dar seguimiento puedes hacer uso el PTN…

TN: Dispara alarmas antes que sucedan las cosas
PTN: dispara alarmas despues de realizado una accción

Saludos

Gracias a los dos
Ya agregue los Tipo de Objetos restantes al PTN

IF :transaction_type IN ('A','U','D','C') AND :object_type IN ('17','59','67','16','60','20','1470000065') THEN

Espero unos días a ver como me funciona y les digo si fue la solución.

1 me gusta

Ingrese mi consulta en el PTN y no me da resultados que podria ser?

IF :transaction_type IN ('A','U','D','C') AND :object_type IN ('17','59','67','16','60','20','1470000065') THEN
	UPDATE OITW
	SET "Estatus"='P',
		"SIC_Estatus"='NO'		
	WHERE 
		"Estatus"='S' AND
	"WhsCode" = 'PT' and "ItemCode" =:list_of_cols_val_tab_del;
END IF;

No cambia el estado cuando se agrega un nuevo documento o se cancela. :woozy_face:

Estas haciendo un UPDATE de un campo que no es UDF?

Eso es técnicamente incorrecto. Perderías la garantia de la DB.

2 Me gusta

Es correcto lo que mencionas, los UPDATE en los TN y PTN solo son validos en campos UDF.

1 me gusta

en la tabla OITW, no veo que exista el campo “Estatus” ni “SIC_Estatus”, prueba hacer tu update para un solo Item, si te funciona, ya lo podras adaptar para ponerlo en el PTN. Revisa la estructura de tu tabla, si son campos creados por ti. “U_Estatus” y “U_SIC_Estatus” podrian ser los nombres de los campos que necesitas.

No entiendo bien para que usas ese update, pero espero haberte ayudado.

1 me gusta

Hola @kriptonniano, revisando tú POS te puedo decir que en efecto lo que te han indicado es correcto, Los update no se pueden realizar a los campos estándar de SAP, menos al campo status de un documento, para realizar esto lo mejor que puedes hacer es el desarrollo de un Addon en donde uses el evento ITEM_PRESSED en cada uno de los documentos y este dispare el cambio de estado.
por otro lado si estas actualizando un campo de usuario con un Update, pero estas en la version de HANA 2, estos ya no se pueden realizar de la misma forma que en HANA 1 o SQL, para esto ahora deber usar la funcion MERGE INTO USING UPDATE, te dejare un ejemplo para que lo puedas ajustar a tú necesidad:

IF object_type =‘202’ and (:transaction_type = ‘A’ or :transaction_type = ‘U’) THEN

MERGE INTO OWOR T1
USING (SELECT T0.“DocEntry”,SUM(T0.“PlannedQty” * T1.“AvgPrice”) “Costo”
FROM WOR1 T0
INNER JOIN OITW T1 ON T0.“ItemCode” = T1.“ItemCode”
WHERE T0.“DocEntry” = list_of_cols_val_tab_del GROUP BY T0.“DocEntry”) T2
ON T1.“DocEntry” = T2.“DocEntry”
WHEN MATCHED THEN
UPDATE SET T1.“U_PIC_Costo_MP” = T2.“Costo”;

                        error := 1;    
                        error_message := 'Actualizado MP';

END IF;

Igualmente, ten muy presente la diferencia que indico @juliancab con respeto a los TN y los PTN, tambien observo que en tus consultas tienes campos de usuario pero no antepones la U_
recuerda que los campos de usuario siempre deben ir un la U_ ejemplo: U_Estatus.

1 me gusta

¿en qué quedo todo esto @kriptonniano ?

1 me gusta

Gracias a todos por su respuestas, todos tienen razon, no puedo hacer update en el campo Estatus, pero hablaba de un campo personalizado, Y si tal vez se me pasaron algunos objetos por eso no se actualizaba, como el que comentan de recuento, pero mejor se llego a otra solución: se desarrollo un Add-On, pero igual saturaba mucho SAP B1, asi que se tomo mejor desarrollar una API para consultar la disponibilidad.
Gracias a todos por su ayuda y sugerencias.

2 Me gusta