TN Documento Base

Buen día, estoy realizando una validación para que una orden de compra no se realice por un monto mayor al de la solicitud de compra, pero está bloqueando documentos que deben pasar,

Les agradezco si me pueden guiar, el código que tengo es:

IF @transaction_type IN ('A', 'U') AND 
(@Object_type = '22')
begin 
if exists 
(SELECT T0.BaseEntry, SUM(T0.Linetotal + isnull(T0.LineVat,0))
 FROM POR1 T0 
INNER JOIN PRQ1 T1 ON T1.DOCENTRY = T0.BASEENTRY
WHERE 
T0.BaseType = '1470000113' AND 
T0.BaseLine = T1.LineNum and 
T0.DOCENTRY = @list_of_cols_val_tab_del
GROUP BY T0.BaseEntry
HAVING (SUM(T0.Linetotal + isnull(T0.LineVat,0)) > SUM(T1.OpenSum)))
begin
select @Error = 10, @error_message = 'Monto mayor a SC'
end
end

Slds,

Ojo, en esta sentencia estas asumiendo que todos los rows de la solicitud de compra se transforman en rows de la orden de compra para q se realice correctamente la validación

Si, por ejemplo, tienes 10 rows en solicitud de compra (c/u con valor de 10, con el total de 100), pero solo 9 pasaron a la orden de compra, entonces estarías comparando la solicitud de compra fue por 100, pero la orden de compra tiene un valor de 90. Pero los valores de los rows q comparas ahi son iguale (90)

HAVING (SUM(T0.Linetotal + isnull(T0.LineVat,0)) > SUM(T1.OpenSum)))

hola @tenguman gracias por tu comentario pero siguiendo con los números que indicas si la OC es por 90 y la SC por 100 sí permitiría la creación del documento ya que es menor al monto de SC o estoy mal?

Slds,

“POR1 T0” es la tabla de rows de la OC, “PRQ1 T1” es la tabla de los rows de la solicitud de compra.

Cuando validas, para el caso compara: T0 > T1, osea 90 > 90.

Pero a ti que te interesa? Saber si el monto de la OC es mayor que el de la SC? xq con el INNER JOIN solo estas jalando los mismos rows de ambos.

Personalmente yo haría dos consultas: primero obtener la suma de las rows del la OC, luego la suma de las rows de la SC y luego recién haría la comparación.

Lo que busco es que el monto de la OC no sea mayor que el de la SC o su saldo por eso es que uso el campo opensum.

con el INNER JOIN que colocas, solo tomas los rows de la SC que se convirtieron en rows de OC.

Esto no necesariamente te daría el monto total de la SC, sino el monto de los rows de la SC que se convirtieron en OC.

@Oscar1900 ¿en qué quedó este tema?