cancel
Showing results for 
Search instead for 
Did you mean: 

TRANSACTION PARA EVITAR REGISTRO DE FACTURAS CON MONTO MAYOR AL DE LA ODC ORIGEN

Former Member
0 Kudos

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.

Accepted Solutions (1)

Accepted Solutions (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

Former Member
0 Kudos

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

felipe_loyolarodriguez
Active Contributor
0 Kudos

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.

Former Member
0 Kudos

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.

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

Former Member
0 Kudos

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

Former Member
0 Kudos

Como estas Felipe,

una ultima ayuda al respecto.

quisiera nuevamente tu apoyo para agregarle a este TN lo referente a que si una factura tuvo una nota de credito para anularla, no me acumule los montos, sino que reste NC con Factura y permita el registro de una nueva factura a esa ODC

felipe_loyolarodriguez
Active Contributor
0 Kudos

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

Former Member
0 Kudos

gracias Felipe

tremenda ayuda.

Answers (0)