on 02-23-2015 8:44 PM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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"
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
96 | |
10 | |
9 | |
6 | |
3 | |
3 | |
3 | |
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.