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