cancel
Showing results for 
Search instead for 
Did you mean: 

Stored Procedur para evitar backorders

Former Member
0 Kudos

Buenas tardes a todos

El cliente necesita, por su política comercial, que no se generen backorders cuando se crean los pedidos, por lo que me han solicitado crear un procedimiento que detenga la generación del pedido e indique el artículo. Se debe considerar que la Cantidad solicitada no sea mayor que la Cantidad en Inventario (On Hand) menos la Cantidad Comprometida (In Commitment). En los foros de SAP he encontrado la siguiente consulta:

IF @object_type='17' AND (@transaction_type='A' or @transaction_type='U')

BEGIN

declare @backorder varchar(100)

set @backorder = (select T0.itemcode from rdr1 T0 inner join oitw T1 on T0.ItemCode = T1.ItemCode where

T0.Quantity > (T1.OnHand - T1.IsCommited) and T0.docentry = @list_of_cols_val_tab_del )

if(@backorder is not null)

begin

set @error = 1

set @error_message = 'El Articulo ' + @backorder + ' excede la cantidad en Existencia'

END

END

Sin embargo, la consulta me detiene el proceso cuando trato de solicitar un artículo cuya disponibilidad es de 1, y en ocasiones detiene el proceso aun y cuando la cantidad es mayor.

Agradezco la ayuda que me puedan dar en este caso, ya que para poder elaborar las ordenes de ventas en estos casos debo proceder a suspender el SP.

Gracias por su colaboración

Carlos Ramirez

Accepted Solutions (1)

Accepted Solutions (1)

former_member203638
Active Contributor
0 Kudos

Hola Carlos, Intenta con la Sentencia Top 1,

IF @object_type='17' AND (@transaction_type='A' or @transaction_type='U')

BEGIN

declare @backorder varchar(100)

set @backorder = (select Top 1 T0.itemcode from rdr1 T0 inner join oitw T1 on T0.ItemCode = T1.ItemCode

                  where T0.Quantity > (T1.OnHand - T1.IsCommited) and T0.docentry = @list_of_cols_val_tab_del )

if(@backorder is not null)

begin

set @error = 1

set @error_message = 'El Articulo ' + @backorder + ' excede la cantidad en Existencia'

END

END

Si no te funciona intenta asi:

IF @transaction_type IN ('A','U') AND @object_type = '17' -- orden de venta

Begin

Declare @count11 as INT

Declare @item11 as nvarchar (100)

Set @count11 =  (SELECT count(*) FROM rdr1 T0 inner join oitw t1 on t0.itemcode=t1.itemcode  where T0.Quantity > (T1.OnHand - T1.IsCommited) and T0.docentry =@list_of_cols_val_tab_del)

Set @item11 = (SELECT TOP 1 T0.ItemCode FROM rdr1 T0 inner join oitw t1 on t0.itemcode=t1.itemcode

               where T0.Quantity > (T1.OnHand - T1.IsCommited) and T0.docentry =@list_of_cols_val_tab_del)

If @count11 >=1

begin

Set @error = 141

Set @error_message = 'El Articulo '+@item11+' excede la cantidad en Existencia'

end

End

Saludos

Alessandro.

Former Member
0 Kudos

Gracias por la respuesta, ha sido de bastante ayuda.

Sin embargo, pude resolver a través de un Campo de Usuario donde coloqué una Búsqueda formateada para calcular la Cantidad Disponible y comparar en la consulta directamente contra este campo.

Muchas gracias nuevamente por la colaboración.

Saludos

Carlos

Answers (0)