on 06-10-2013 9:21 PM
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
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
------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.
Gracias a todos!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
¿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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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'.
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í:
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, 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
User | Count |
---|---|
91 | |
10 | |
10 | |
6 | |
5 | |
5 | |
5 | |
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.