Ayuda SAP

TN - Validar modificacion documento preliminar

Buenas tardes, Que tal.
Estoy realizando un proceso de aprobación para órdenes de venta cuando el %desc por linea supera el 10%, y queria saber si existe una forma de comparar el valor del descuento en la OV preliminar (Aprobada) con el valor que el usuario ingrese al tratar de crear esa OV. Es decir, si el valor a ingresar supera el valor de descuento aprobado vuelva a pasar por el proceso de aprobacion pero si es inferior a lo aprobado que se permita crear el documento.

Estuve probando con este query pero no logre que funcione

IF @object_type = '17' 
	IF EXISTS (SELECT * FROM ODRF WHERE DocEntry=(SELECT draftKey FROM ORDR WHERE DocEntry=@list_of_cols_val_tab_del)) 
	BEGIN
		DECLARE @LINEA INT,
				@ITEMC VARCHAR(50),
				@DESC NUMERIC(19,6)
		DECLARE CursorDesc CURSOR  FOR 
			SELECT t0.LineNum, T0.ItemCode, T0.DiscPrcnt FROM RDR1 T0
				WHERE T0.DocEntry = @list_of_cols_val_tab_del 
				ORDER BY T0.LineNum
		OPEN CursorDesc
		FETCH NEXT FROM CursorDesc INTO  @LINEA, @ITEMC, @DESC
		WHILE @@FETCH_STATUS = 0  
		BEGIN  
			IF EXISTS (SELECT * FROM DRF1 T1 INNER JOIN ORDR T2 ON T1.DocEntry=T2.draftKey
			 			WHERE  T2.DocEntry = @list_of_cols_val_tab_del 
						AND T1.DiscPrcnt > @DESC
				)
				SET @ERROR= 17
				SET @ERROR_MESSAGE = N' TN-17 - % de Descuento difiere del documento aprobado"'
				FETCH NEXT FROM CursorDesc  INTO @LINEA, @ITEMC, @DESC
				
		END
		CLOSE CursorDesc
		DEALLOCATE CursorDesc
	END

Lei que el campo ORDR.DraftKey relaciona ambos documentos pero eso seria una vez que la OV ya es creada, pero mientras siga siendo preliminar como podría validar?.

Si me pueden dar ideas, algo para orientarme ya seria de ayuda. Gracias
Saludos.

Hola, me parece que lo que debes de modificar es la manera como se dispara tu autorizacion, si la personalizas no pedira autorizacion cuando sea menor…

Hola @jrobredo, en realidad eso es lo que nos pidio el cliente. Si el documento es aprobado que permita modificar solamente cuando el valor ingresado sea menor a lo que se aprobo. Caso contrario que bloquee.

Actualmente me funciona el siguiente query. Cuando tiene borrador, compara linea por linea el descuento de la OV contra el descuento del borrador relacionado

IF @transaction_type in('A', 'U')
BEGIN
	IF EXISTS (SELECT * FROM ODRF WHERE DocEntry=(SELECT draftKey FROM ORDR WHERE DocEntry=@list_of_cols_val_tab_del)
							WHERE T0.DocEntry=@list_of_cols_val_tab_del)
							AND U_Nro = (SELECT T0.U_Nro FROM ORDR T0 WHERE T0.DocEntry=@list_of_cols_val_tab_del)
							 		
							  ) 
		BEGIN
		DECLARE @LINEA INT,
				@ITEMC VARCHAR(50),
				@DESC NUMERIC(19,6),
				@DESC_PRELIMINAR NUMERIC(19,6)
				
		DECLARE CursorDesc CURSOR  FOR 
									SELECT t0.LineNum, T0.ItemCode, ABS(T0.DiscPrcnt) FROM RDR1 T0  --- ABS >> valor absoluto del campo
									WHERE T0.DocEntry = @list_of_cols_val_tab_del 
									ORDER BY T0.LineNum
		OPEN CursorDesc
		FETCH NEXT FROM CursorDesc INTO  @LINEA, @ITEMC, @DESC
		WHILE @@FETCH_STATUS = 0  
		BEGIN  
		

			SET @DESC_PRELIMINAR = (SELECT ABS(T1.DiscPrcnt) FROM DRF1 T1 INNER JOIN ORDR T2 ON T1.DocEntry=T2.draftKey  
								WHERE  T2.DocEntry = @list_of_cols_val_tab_del 
								AND T1.LineNum=@LINEA)
			IF EXISTS (SELECT * FROM DRF1 T1 INNER JOIN ORDR T2 ON T1.DocEntry=T2.draftKey
								WHERE  T2.DocEntry = @list_of_cols_val_tab_del 
								AND @DESC > @DESC_PRELIMINAR          

								)

				SET @ERROR= 17
				SET @ERROR_MESSAGE = N' TN-17 - % de Descuento difiere del documento aprobado"'

				FETCH NEXT FROM CursorDesc  INTO @LINEA, @ITEMC, @DESC
			
		END
		CLOSE CursorDesc
		DEALLOCATE CursorDesc
		END
END

El inconveniente es que si se agregan mas lineas a la OV ya aprobada, y el descuento supera el max establecido, ya no pasa por autorizacion. .

Tendrías que usar una autorización que se dispare de manera personalizada por un SP, en el podras validar si tiene mas lineas, y disparar las veces que desees la autorizacion.