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;
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.
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.
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.
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.
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.