cancel
Showing results for 
Search instead for 
Did you mean: 

Validación de Acceso de Usuario por almacén no se ejecuta

0 Kudos
262

Buenas tardes estimados;

De antemano agradezco la colaboración que brindan, les comento mi problema hace poco actualizamos a la versión 9.1 de Busines One, y este procedimiento de validación de almacén no me funciona al momento de ejecutar algún documento de los indicados en el procedimiento el usuario lo puede efectuar y no toma en cuenta la restrincion.

Agradece su ayuda y guia.

USE [TEST_4]

GO

/****** Object:  StoredProcedure [dbo].[INF_ValidarAlmacenUsuario]    Script Date: 16/8/2016 2:27:48 p. m. ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Description:   <Validación de Acceso de Usuario por almacén>

-- =============================================

ALTER PROCEDURE [dbo].[INF_ValidarAlmacenUsuario]

   @DocEntry nvarchar(255),@ObjType nvarchar(20),@error int output,@error_message nvarchar(200) output

AS

BEGIN

   declare @sql nvarchar(255)

   declare @Tabla nvarchar(4)

   declare @result int

   set @Tabla =(case @ObjType

             when '13' then 'INV1'

             when '14' then 'RIN1'

             when '15' then 'DLN1'

             when '16' then 'RDN1'

             when '17' then 'RDR1'

             when '18' then 'PCH1'

             when '19' then 'RPC1'

             when '20' then 'PDN1'

             when '21' then 'RPD1'

             when '22' then 'POR1'

             when '23' then 'QUT1'

             when '59' then 'IGN1'

             when '67' then 'WTR1'

             when '540000006' then 'PQT1'

             else null end)

   if not (@Tabla is null)

   begin

      declare @Usersign int

      set @sql='set @usersign=(select T0.Usersign from O'+left(@Tabla,3)+' T0 where T0.DocEntry='+@DocEntry+')'     

      exec sp_executesql @sql,N'@Usersign int output',@Usersign output

      declare @Acceso nvarchar(100)=isnull((select U_WhsCode

                                   from OUSR T0 inner join [@ALMUSR] T1 on T0.USER_CODE=T1.Name

                                   where T0.INTERNAL_K =@UserSign),'TODOS')                                                                                                                         

      if @Acceso<>'TODOS'

      begin                 

         if @Tabla='WTR1'

         begin

            set @sql='set @result=(select top 1 1 from OWTR T0 where T0.DocEntry='+@DocEntry+' and not('''+@Acceso+''' like ''%''+T0.Filler+''%''))'

               set @error_message='El usuario no tiene acceso al almacen Origen'

         end

         else

         begin

            set @sql='set @result=(select top 1 T0.VisOrder+1 from ['+@Tabla+'] T0 where T0.DocEntry='+@DocEntry+' and not('''+@Acceso+''' like ''%''+T0.WhsCode+''%''))'

               set @error_message='El usuario no tiene acceso al almacen solicitado (Linea:'+convert(nvarchar,isnull(@result,''))+')'

         end

         exec sp_executesql @sql,N'@result int output',@result output

        

         if isnull(@result,0)>0        

            set @error=9991        

      end

   end

END

View Entire Topic
Former Member
0 Kudos

Puede que el detalle este en como estas buscando al usuario que esta haciendo la operación

con esto puedes definir la variable del usuario en tu TN

(Select top 1 UserCode from USR5 where SessionID=@@spid order by Date desc,Time desc)

Saludos

0 Kudos

Buenos días Leonardo Lazcano;

Disculpa pero en que sesión deberia de colocar la instrucción que me indicas.

Saludos,