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.