Transaction notification actualización

Buen día,

Necesito hacer un Transaction en la actualización de la orden de venta y así impedir que puedan modificar la cantidad de la misma algunos usuarios. El problema es que cuando hago el transaction no tengo con qué comparar la cantidad, es decir, no puedo compararlo con otra tabla.

Por ejemplo, si bloqueo la entrega cuando la cantidad es menor que la cantidad de la orden de venta, puedo comparar RDR1 con DLN1.

En este caso el problema está en que no sé contra qué compararlo, no se si puedo buscar el valor anterior a la actualización.

Alguien me podría orientar en esto?

Saludos,

Hola @PP24
Debes comparar la informacion de la orden de venta contra la tabla de log ADOC y ADO1.

Andres Ramirez Jaramillo :colombia:

Hola,

Intenté lo que me comentas (no encontré la tabla DOC1 en HANA, imagino que será la ADO1 )

IF (object_type = ‘17’) AND (transaction_type = (‘U’))
THEN
SELECT COUNT(*) INTO FOUND
FROM ORDR T0
INNER JOIN RDR1 T1 ON T1.“DocEntry” = T0.“DocEntry”
INNER JOIN ADO1 T2 ON T1.“DocEntry” = T2.“DocEntry”
INNER JOIN ADOC T3 ON T2.“DocEntry”=T3.“DocEntry”
WHERE T0.“DocEntry” = list_of_cols_val_tab_del and T1.“Quantity”<>T2.“Quantity” AND T3.“ObjType”=‘17’;

IF FOUND >0
THEN
	error = 20099;
	error_message = 'Operación denegada';
END IF;

END IF;

Pero no funciona, es decir, me bloquea la actuailzación del documento pero cuando modifico cualquier campo, no solo la cantidad.

Prueba primero validar la consulta, es decir verifica desde el query manager los campos Cantidad de T1 y T2. Al realizar el join entre t1 y t2 debes tene en cuenta el linenum. ademas de llamar solo el ultimo registro

Hola,

El problema es que cuando se crea el pedido, la tabla ADOC, ADO1 no registra nada, solo registra cuando se producen modificaciones y yo lo que necesito es que no se modifique una vez creada.

Saludos

es correcto, pero tu TN esta bloqueando luego del evento de Update, por lo que el registro en ADOC ya debería estar presente.
Toma de ejemplo este bloqueo de cambio de empleado de venta en facturas:

IF @object_type = '13' AND @transaction_type = 'U'
Begin
Declare @Log Varchar(20)
Declare @Vendedor Varchar(20)
          
SET @Log = (SELECT T0.SlpCode FROM ADOC T0 WHERE T0.ObjType = @object_type AND T0.DocEntry = @list_of_cols_val_tab_del AND 
           T0.LogInstanc = (SELECT TOP 1 Y.LogInstanc FROM ADOC Y WHERE Y.DocEntry = @list_of_cols_val_tab_del AND Y.ObjType = @object_type
                            ORDER BY Y.LogInstanc DESC))
                                                  
SET @Vendedor = (SELECT T0.Slpcode FROM OINV T0 WHERE T0.DocEntry = @list_of_cols_val_tab_del)
     
     
     IF @Vendedor != @Log
     BEGIN
          Set @error = -00231
          Set @error_message = 'No tiene permiso de actualizar'
     END
END
3 Me gusta

Gracias!!! Así funciona