cancel
Showing results for 
Search instead for 
Did you mean: 

Validar transferencias entre almacences

marco_ramirez
Active Contributor
0 Kudos

Estimados/Estimadas

Trato de validar las transferencias de stocks entre almacenes y quisiera me dieran una ayuda pues no logro resolver el tema.

El punto es poder validar que las transferencias se hagan a almacenes específicos siendo así:

Almacén origen          Almacén destino

         11                              21

        12                              22

        13                              23

        14                              24

        15                              25

         17                              27

si el usuario selecciona otro almacén destino de cualquiera de los almacenes origen que no lo deje pasar.

Agradezco toda ayuda

Saludos

Marco

Accepted Solutions (1)

Accepted Solutions (1)

rjovel
Active Participant
0 Kudos

Hola que tal, tu método esta malo, tienes que usar un cursor para que analice linea por linea, ya que como lo estas haciendo te tiene que dar error que no pueden haber múltiples variables para un subquery.

si te esperas puedo subir una muestra de como debería de ser.

saludos.

rjovel
Active Participant
0 Kudos

------BLOQUEO ALMACENES

IF @transaction_type in ('A') and (@object_type='67')

 

begin

          DECLARE curTransf CURSOR

                    /* origen de donde tomara los datos el cursor */

                    FOR Select T1.ItemCode,T0.Filler,T1.WhsCode From OWTR T0 INNER JOIN WTR1 T1 ON T0.DocEntry = T1.DocEntry Where T0.DocEntry = @list_of_cols_val_tab_del

          DECLARE @ItemCode as varchar(20)

          DECLARE @WhsOrigen as nvarchar(8)

          DECLARE @WhsDestino as nvarchar(8)

 

          OPEN curTransf

          set @error=0

          FETCH NEXT FROM curTransf INTO @ItemCode,@WhsOrigen,@WhsDestino

          WHILE @@Fetch_Status=0 AND @error=0

          BEGIN

 

                    select @error=

                    case

                    when @WhsOrigen=11 AND @WhsDestino<>21 then 1

                    when @WhsOrigen=12 AND @WhsDestino<>22 then 2

                    when @WhsOrigen=13 AND @WhsDestino<>23 then 3

                    when @WhsOrigen=14 AND @WhsDestino<>24 then 4

                    when @WhsOrigen=15 AND @WhsDestino<>25 then 5

                    when @WhsOrigen=17 AND @WhsDestino<>27 then 6

 

                    else 0

                    end,

                    @error_message=

                    case

                    WHEN @error=1 THEN N'Almacen Origen 11 Solo Transfiere a Almacen Destino 21 Revise Articulo: ' + @ItemCode

                    WHEN @error=2 THEN N'Almacen Origen 12 Solo Transfiere a Almacen Destino 22 Revise Articulo: ' + @ItemCode

                    WHEN @error=3 THEN N'Almacen Origen 13 Solo Transfiere a Almacen Destino 23 Revise Articulo: ' + @ItemCode

                    WHEN @error=4 THEN N'Almacen Origen 14 Solo Transfiere a Almacen Destino 24 Revise Articulo: ' + @ItemCode

                    WHEN @error=5 THEN N'Almacen Origen 15 Solo Transfiere a Almacen Destino 25 Revise Articulo: ' + @ItemCode

                    WHEN @error=6 THEN N'Almacen Origen 17 Solo Transfiere a Almacen Destino 27 Revise Articulo: ' + @ItemCode

                    end

                    FETCH NEXT FROM curTransf INTO @ItemCode,@WhsOrigen,@WhsDestino

          END

 

          CLOSE curTransf

          DEALLOCATE curTransf

End

ATT. RJOVEL.

Answers (2)

Answers (2)

marco_ramirez
Active Contributor
0 Kudos

Gracias a todos!

Former Member
0 Kudos

¿Que versión de sap tienes?

Lo pregunto ya que dependiendo la versión te permitirá que el almacen origen esté en la línea, y de eso dependerá la validacion

marco_ramirez
Active Contributor
0 Kudos

2007 SP01 PL06

Gracias

marco_ramirez
Active Contributor
0 Kudos

Hice este intento pero me genera un error y no distingo cual pueda ser

IF @Object_type = '67' and @transaction_type in ('A','U')  

and (SELECT COUNT(*) FROM OWTR WHERE DocEntry = @list_of_cols_val_tab_del and Series = 65) = 1 

Begin 

-- 

Declare @Origen as nvarchar

Declare @Destino as nvarchar

Set @Origen=(Select T0.Filler From OWTR INNER JOIN WTR1 T1 ON T0.DocEntry = T1.DocEntry Where T0.DocEntry = @list_of_cols_val_tab_del)

Set @Destino=(Select T1.WhsCode From OWTR T0 INNER JOIN WTR1 T1 ON T0.DocEntry = T1.DocEntry Where T0.DocEntry = @list_of_cols_val_tab_del)

Case

When @Origen = '11' and @Destino <> '21' Then

   select @error = 6701

   select @error_message = 'Seleccione el almacén 21'

End

Msg 156, Level 15, State 1, Procedure SBO_SP_TransactionNotification, Line 392

Sintaxis incorrecta cerca de la palabra clave 'Case'.

Former Member
0 Kudos

Yo una vez tuve un problema con un transaction y era por las comitas que le ponía a los números, si quieres intenalo sin comitas así:

  1. IF @Object_type = 67 and @transaction_type in ('A','U')    
  2. and (SELECT COUNT(*) FROM OWTR WHERE DocEntry = @list_of_cols_val_tab_del and Series = 65) = 1   
  3. Begin   
  4. --   
  5. Declare @Origen as nvarchar 
  6. Declare @Destino as nvarchar 
  7.  
  8.  
  9. Set @Origen=(Select T0.Filler From OWTR INNER JOIN WTR1 T1 ON T0.DocEntry = T1.DocEntry Where T0.DocEntry = @list_of_cols_val_tab_del) 
  10. Set @Destino=(Select T1.WhsCode From OWTR T0 INNER JOIN WTR1 T1 ON T0.DocEntry = T1.DocEntry Where T0.DocEntry = @list_of_cols_val_tab_del) 
  11.  
  12.  
  13. Case 
  14. When @Origen = 11 and @Destino <> 21 Then 
  15.    select @error = 6701 
  16.    select @error_message = 'Seleccione el almacén 21' 
  17. End 
former_member203638
Active Contributor
0 Kudos

Marco, entiendo que asi no te va a validar cada linea, Intenta así:

IF (@object_type='67')and @transaction_type in ('A','U')

begin

    Declare @origen nvarchar (10) --Almacen origen

    Declare @destino nvarchar(10)  -- Almacenes Destinos

    Declare @LineaTraslado nvarchar(10) --Linea

    Set @LineaTraslado=1

    Declare cDestino cursor for

    Select WhsCode from WTR1 where Docentry = @list_of_cols_val_tab_del

open cDestino

FETCH NEXT FROM cDestino

INTO @Destino

     WHILE @@FETCH_STATUS = 0

          begin

               IF(Select Filler From OWTR Where Docentry=@list_of_cols_val_tab_del)='11' and @Destino<>21

               Begin

                 Select @error = 2

               Select @error_message = 'Seleccione almacen 21 En la Linea '+@LineaTraslado+''

               End                  

                 set @lineaTraslado=@lineaTraslado+1

                 FETCH NEXT FROM cDestino

                 INTO @Destino

               End       

Close cDestino

Deallocate cDestino

End

Deben haber varias maneras para hacerlo, checate si te va esta para tu version de sap.

Saludos.

Alessandro.

Message was edited by: Alessandro Lopez Santinelli

marco_ramirez
Active Contributor
0 Kudos

Gracias Antonio, no funcionó

marco_ramirez
Active Contributor
0 Kudos

Igualmente no aplico Alessandro, gracias

Sigo en busca de la solución

Saludos

former_member203638
Active Contributor
0 Kudos

Que te marca?

Former Member
0 Kudos

Marco, yo colocaría un campo de usuario en el Wharehouse con el destino correcto. (dado que es 1 a 1)

y luego en TN haría la validación sobre el total de lineas, si existe una linea que no cumpla que arroje error.

IF @Object_type = '67' and @transaction_type in ('A','U')    

Begin

     Declare @WhsTarget AS VARCHAR(8)

     SELECT @WhsTarget=U_WhsTarget FROM OWTR T0 INNER JOIN OWHS T1 ON T0.Filler=T1.WhsCode WHERE T0.DocEntry = @list_of_cols_val_tab_del 

     Declare @WhsErr AS Int, @MinLine AS Int

     SELECT @WhsErr= COUNT(T0.*), @MinLine=MIN(T0.LineId) FROM WTR1 T0 WHERE T0.DocEntry=@list_of_cols_val_tab_del AND NOT(T0.WhsCode=@WhsTarget)

     

     IF @WhsErr>0

     BEGIN

          Select @error = 1

          Select @error_message = 'Seleccione almacen de destino correcto en Linea ' + CAST(@MinLine as VARCHAR(10))

     END

End 

Luego puedes ir complejizando esta consulta una vez te resulte.

Si hay algun error de sintaxis avisame, porque la escribi directo desde el foro, ya que estoy sin SQL en estos momentos.

slds.

JEL

marco_ramirez
Active Contributor
0 Kudos

Pues no marca nada 😞