Olá pessoal…
Hoje vou mostrar uma rotina desenvolvida que retorna .T. ou .F. se o usuário tem acesso a uma filial.
Primeiramente quero agradecer ao Gabriel Cisneiro por ter ajudado na criação da lógica da rotina. Ela 3 parâmetros, o código do usuário (por exemplo, 000001), o código do Grupo de Empresas (por exemplo, 01) e o código da filial (por exemplo, 0101).
Abaixo o código fonte desenvolvido:
//Bibliotecas
#Include "Protheus.ch"
/*/{Protheus.doc} zUsrFil
Função que valida se o usuário tem acesso a filial
@author Atilio
@since 20/01/2017
@version undefined
@type function
@param cCodUsr, characters, Código do usuário pesquisado (por default, vem o código do usuário logado)
@param cCodEmp, characters, Código da empresa / grupo de empresas (por default, vem o código da empresa / grupo atual)
@param cCodFil, characters, Código da filial (por default, vem o código da filial atual)
@example u_zUsrFil("000001", "01", "02")
u_zUsrFil("000001", "01", "0201")
@obs Função desenvolvida com ajuda de Gabriel Cisneiro
/*/
User Function zUsrFil(cCodUsr, cCodEmp, cCodFil)
Local lRet := .F.
Local aUsuarios := AllUsers()
Local aUsrAux := {}
Local nLinEnc := 0
Local nPosFil := 0
Default cCodUsr := RetCodUsr()
Default cCodEmp := cEmpAnt
Default cCodFil := cFilAnt
//Encontra o usuário
nLinEnc:= aScan(aUsuarios, {|x| x[1][1] == cCodUsr })
//Caso encontre o usuário
If nLinEnc > 0
aUsrAux := aClone(aUsuarios[nLinEnc][2][6])
//Agora procura pela empresa + filial nos acessos
nPosFil := aScan(aUsrAux, {|x| x == cCodEmp + cCodFil })
//Se encontrou a filial ou tem acesso a todas, o retorno será verdadeiro
If nPosFil > 0 .Or. "@" $ aUsrAux[1]
lRet := .T.
EndIf
EndIf
Return lRet
Bom pessoal, por hoje é só.
Abraços e até a próxima.
