on 02-27-2015 6:43 PM
Buenas tardes comunidad,
Solicito de su apoyo para ver si me pueden ayudar con un TN que permita evitar el registro de una o varias facturas a una Orden de Compra en la que el monto total de las facturas supere al monto total de su ODC de origen.
Buenos días
Prueba lo siguiente
if @object_type='18' and @transaction_type in ('A','U')
begin
declare
@InvQty numeric(19,6)
,@PurQry numeric(19,6)
set @InvQty=isnull((select sum(T0.Quantity) from PCH1 T0 where T0.DocEntry=@list_of_cols_val_tab_del),0)
set @PurQry=isnull((select sum (Qty)
from(
select isnull(sum(T0.Quantity),0) [Qty]
from POR1 T0
where T0.DocEntry in (select distinct A.BaseEntry from PCH1 A where A.DocEntry=@list_of_cols_val_tab_del and A.BaseType='22')
union
select isnull(sum(T0.Quantity),0)
from POR1 T0
where T0.DocEntry in (select distinct A.BaseEntry from PDN1 A where A.BaseType='22' and A.DocEntry in (select distinct B.BaseEntry from PCH1 B where B.DocEntry=@list_of_cols_val_tab_del and B.BaseType='20'))
)A),0)
if @PurQry>@InvQty
begin
set @error='123'
set @error_message ='La cantidad facturada es mayor a la suma de los pedidos'
end
end
Saludos
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Buenos días Felipe,
gracias por tu apoyo.
lo probé y me funciona al 50%, es decir, cuando la relación es una factura por orden de compra me muestra la alerta.
pero cuando son facturas parciales, por menor cantidad, no me lee la suma de cantidades y, por ejemplo, si la orden es por 5 articulos y le registro una primera factura por 4 articulos la registro sin problema, pero al registrarle una segunda factura, que en teoria es 1 articulo, y lo cambio por 2 o mas, igualmente me permite el registro y esto es lo que se quiere evitar.
no se si me explico con claridad
Hola, tienes razón, no tomé en consideración que podría ser parcial.
Pruebalo con este cambio
if @object_type='18' and @transaction_type in ('A','U')
begin
declare
@InvQty numeric(19,6)
,@PurQry numeric(19,6)
set @InvQty=isnull((select sum(T0.Quantity) from PCH1 T0 where T0.DocEntry=@list_of_cols_val_tab_del),0)
set @PurQry=isnull((select sum (Qty)
from(
select isnull(sum(T0.OpenQty),0) [Qty]
from POR1 T0
where T0.DocEntry in (select distinct A.BaseEntry from PCH1 A where A.DocEntry=@list_of_cols_val_tab_del and A.BaseType='22')
union
select isnull(sum(T0.OpenQty),0)
from POR1 T0
where T0.DocEntry in (select distinct A.BaseEntry from PDN1 A where A.BaseType='22' and A.DocEntry in (select distinct B.BaseEntry from PCH1 B where B.DocEntry=@list_of_cols_val_tab_del and B.BaseType='20'))
)A),0)
if @PurQry>@InvQty
begin
set @error='123'
set @error_message ='La cantidad facturada es mayor a la suma de los pedidos'
end
end
Atte.
Buenas Felipe,
He estado realizado las pruebas y continua permitiendo la creación de facturas con cantidades mayores al de la Orden de compra de origen.
Invertí el signo de if @PurQry>@InvQty ya que la cantidad variable es la de la factura y me arroja la alerta siempre, asi la cantidad sea mayor o menor.
OK, depurando el error me di cuenta que SAP actualiza la base de datos antes de que pase por el Transaction y pueda consultarla, por lo que el OpenQty no es el mismo y no me sirve como parámetro de consulta (esto sucede desde una versión en adelante pero no recuerdo cual).
He testeado este otro código y me ha funcionado para totales y parciales.
if @object_type='18' and @transaction_type in ('A','U')
begin
declare
@InvQty numeric(19,6)
,@PurQry numeric(19,6)
set @InvQty=isnull((select sum(T0.Quantity) from PCH1 T0 where T0.BaseType='22' and T0.BaseEntry in (select distinct A.BaseEntry from PCH1 A where A.DocEntry=@list_of_cols_val_tab_del and A.BaseType='22')),0)
set @PurQry=isnull((select sum(T0.Quantity) from POR1 T0 where T0.DocEntry in (select distinct A.BaseEntry from PCH1 A where A.DocEntry=@list_of_cols_val_tab_del and A.BaseType='22')),0)
if (@PurQry-@InvQty)<0
begin
set @error='123'
set @error_message ='La cantidad facturada es mayor a la suma de los pedidos | '+ cast(@PurQry as varchar(30)) + ' | ' +cast(@InvQty as varchar(30))
end
end
Saludos
buen día Felipe,
realicé las pruebas y funcionó a la perfección.
me tomé la libertad de hacer el mismo TN pero en vez de Quantity, coloqué Price para tambien evitar que los pedidos que hagan clase 'Servicio' no les puedan registrar facturas en las que alteren su precio por uno mayor.
gracias por el apoyo, voy a marcar tu post como correcto
cualquier comentario al respecto estamos a la orden
Buenas
Para eso deberías añadir una nueva variable
@CrdQty numeric(19,6)
Setearla con este código
set @CrdQty=isnull((select sum(T0.Quantity) from RPC1 T0 where T0.DocEntry in (select distinct A.TrgetEntry from PCH1 A where A.TargetType='19' and A.BaseType='22' and A.BaseEntry in (select distinct B.BaseEntry from PCH1 B where B.DocEntry=@list_of_cols_val_tab_del and B.BaseType='22'))),0)
y por ultimo, en la comparación, sumar las NC
if (@PurQry-@InvQty+@CrdQty)<0
Saludos
User | Count |
---|---|
97 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.