Skip to Content
avatar image
Former Member

Bloqueo de Movimiento x Almacen

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

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

3 Answers

  • Best Answer
    avatar image
    Former Member
    Feb 24, 2015 at 07:12 PM

    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

    Add comment
    10|10000 characters needed characters exceeded

  • Feb 24, 2015 at 04:35 PM

    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.

    Add comment
    10|10000 characters needed characters exceeded

    • 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"

  • Feb 24, 2015 at 08:31 AM

    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

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member

      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