cancel
Showing results for 
Search instead for 
Did you mean: 

Bloqueo de Movimiento x Almacen

Former Member
0 Kudos

ESTIMADO FORO SAP B1,

SOLICITO SU APOYO PARA BLOQUEAR TODO MOVIMIENTO DE ENTRADA POR MERCANCIAS CUANDO SE TENGA UN DETERMINADO ALMACEN X EJEMPLO EL 500.

ANEXO CODIGO, EL CUAL NO ESTA VALIDANDO EL MISMO

IF ((@transaction_type IN ('A','U')) AND (@object_type = '59'))

Begin 

if exists(

  SELECT count(*)

  FROM OIGN T0  INNER JOIN IGN1 T1 ON T0.DocEntry = T1.DocEntry

  WHERE (T1.[WhsCode] = '500' ) and T1.DocEntry = @list_of_cols_val_tab_del

  )

Set @error = 1 

Set @error_message = 'ERROR: ALMACEN 5000 NO PERMITE MOVIMIENTOS ' 

End

NO COMPRENDO QUE ESTOY REALIZANDO MAL.

GRACIAS

Accepted Solutions (1)

Accepted Solutions (1)

darwin_diaz2
Explorer
0 Kudos

Yo tengo un bloqueo similar para todos los documentos

mira haber si te sirve:

IF (@Object_type IN (13,14,16,17,18,19,20,21,22,23,59,60))

  BEGIN

  SET @DocEntry=@list_of_cols_val_tab_del

  SET @Tabla=

  CASE @object_type

  WHEN 22 THEN 'POR1'--Ordenes de Compra

  WHEN 20 THEN 'PDN1'--Entradas OP

  WHEN 18 THEN 'PCH1'--Factura Proveedores/Nota de debito de acreedores

  WHEN 59 THEN 'IGN1'--Entrada mercancias

  WHEN 14 THEN 'RIN1'--Nota de Credito de Clientes

  WHEN 16 THEN 'RDN1'--Devoluciones de ventas

  WHEN 17 THEN 'RDR1'--Orden de venta

  WHEN 23 THEN 'QUT1'--Cotizaciones

  WHEN 15 THEN 'DLN1'--Entregas de Ventas

  WHEN 13 THEN 'INV1'--Factura de clientes/Notas debito de clientes

  WHEN 60 THEN 'IGE1'--Salida de mercancias

  WHEN 21 THEN 'RPD1'--Devoluciones sobre compras

  WHEN 19 THEN 'RPC1'--Nota de credito de acreedores

  END

  SET @SQL='SET @DocType=(SELECT T0.DocType FROM O'+LEFT(@Tabla,3)+' T0 WHERE T0.DocEntry='+@DocEntry+')'

  EXEC SP_EXECUTESQL @SQL,N'@DocType varchar(1) OUTPUT', @DocType OUTPUT

  IF (ISNULL(@DocType,'N')='I')

  BEGIN

  SET @SQL=N'SET @UserCode=(SELECT T0.USER_CODE FROM OUSR T0 WHERE T0.USERID=(SELECT Top 1 T1.UserSign FROM O'+LEFT(@Tabla,3)+' T1 WHERE T1.DocEntry='+@DocEntry+'))'

  EXEC SP_EXECUTESQL @SQL,N'@UserCode nvarchar(8) OUTPUT', @UserCode OUTPUT

  SET @WhsCode=(SELECT U_WhsCode FROM [@ALMUSR] WHERE Name=@UserCode)

  IF (@WhsCode<>'TODOS')

  BEGIN

  SET @SQL='SET @LineNum=(SELECT Top 1 T0.LineNum

  FROM '+@Tabla+' T0

  WHERE '''+@WhsCode+''' NOT LIKE ''%''+T0.WhsCode+''%'')'

  SELECT @SQL

  EXEC SP_EXECUTESQL @SQL,N'@LineNum int OUTPUT', @LineNum OUTPUT

  IF (ISNULL(@LineNum,-1)<>-1)

  BEGIN

  SET @error=9999

  SET @error_message='El usuario no tiene acceso al almacen solicitado (linea:'+CONVERT(varchar,@LineNum+1)+')'

  END

  END

  END

  END

Answers (2)

Answers (2)

gerardo_mendez
Active Contributor
0 Kudos

Hola Jorge

Siguiendo su lógica de programación prueba con esto:

  IF @transaction_type IN ('A','U') AND @object_type = '59'

  Begin

  iF (

   SELECT count(T0.DocEntry)

  FROM IGN1 T0  WHERE (T0.[WhsCode] = 'PE-02' ) and T0.DocEntry = @list_of_cols_val_tab_del

   )>0

  Select @error = 1

  Select @error_message = 'ERROR: ALMACEN 5000 NO PERMITE MOVIMIENTOS '

  End

Es prácticamente el mismo código solo cambia el Count ("Count(T0.DocEntry)")

Ya lo probé y funciona perfecto. Espero te sea de ayuda. Suerte.

Former Member
0 Kudos

Gerardo,

     No me lo valida!, estoy dudando de configuracion del almacen, que conceptos de las cuentas tienen mapeadas en tu almacen??

Gracias

gerardo_mendez
Active Contributor
0 Kudos

Mmmm... Pues no se que tanto tenga que ver la configuración del almacén, en realidad lo único que estás validando en la consulta es el "código del almacén" yo me inclino más bien en el transaction, quizás la ubicación del código dentro del transaction o algo por el estilo, en realidad probé también tu código original con el que comienzas el post y también funciona, puedes checar también que no haya error al teclear el código del almacén que quieres bloquear, me refiero al que en el ejemplo mencionas como "500"

javier_facessantos
Contributor
0 Kudos

Hola Jorge

Prueba con esta:

IF @transaction_type IN ('A','U') AND @object_type = '59'

Begin

iF (

  SELECT count(1)

FROM IGN1 T0  WHERE (T0.[WhsCode] = '500' ) and T0.DocEntry = @list_of_cols_val_tab_del

  )>0

Select @error = 1

Select @error_message = 'ERROR: ALMACEN 5000 NO PERMITE MOVIMIENTOS '

End

Un saludo

Former Member
0 Kudos

Javier,

Sigue sin validarme. Solo funciona si realizo el bloqueo del almacen para cada articulo lo cual no es de ayuda. Tengo sap 8.82 PL15.

Como podria bloquear siempre ese almacen sin necesidad de realizar x item?

Gracias