Pular para o conteúdo principal

Postagem em destaque

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️

🚀 Oferecendo Serviços Remotos de Desenvolvedor AdvPL e Mais 🖥️ Olá pessoal, Espero que este post encontre todos vocês bem! É com grande entusiasmo que compartilho que estou expandindo meus serviços como Desenvolvedor AdvPL para novos desafios e colaborações. Com mais de duas décadas de experiência sólida, minha jornada profissional tem sido enriquecedora, com a oportunidade de participar de projetos empolgantes ao longo dos anos. Agora, estou ansioso para trazer minha experiência e habilidades para novas equipes e projetos, trabalhando de forma remota. Minha expertise abrange não apenas AdvPL, mas também outras tecnologias-chave, incluindo JS, SQL, Infraestrutura e Otimização de Processos. Acredito que essa combinação de conhecimentos me permite oferecer soluções abrangentes e eficazes para uma variedade de necessidades de desenvolvimento. Acredito que a tecnologia tem o poder de transformar negócios e impulsionar o sucesso, e estou comprometido em ajudar meus clientes a alcançar seu

Protheus :: Desvendando o sigapss.spf

Atendendo a uma reivindicação antiga, começarei a postar neste blog algumas dicas à respeito dos segredos do Protheus. E o primeiro artigo não poderia ser outro, senão sobre o misterioso sigapss.spf ( o arquivo de senhas do protheus ).

O sigapss.spf é a tabela que armazena os usuários do protheus e suas configurações. Não é um a tabela comum e, em função dessa característica, não pode ser aberta com a função dbUseArea(). Ela é um ctree SuperFile e, para que seja possível manipula-la ( incluir, excluir, alterar ou pesquisar registros ) faz-se necessário utilizar funções específicas para esse fim.

As funções a serem utilizadas são:

Internal Functions (Funcões da API ):

SPF_CanOpen(cSPFFile)->0||-1
SPF_Close(cSPFFile)
SPF_CopyTo(cSPFSource,cSPFTarget)
SPF_Delete(cSPFFile,nSPFRec)
SPF_GetFields(cSPFFile,SPFRec,@SPFId,@cSPFName,@cSPFPwd,@SPFDet)->0||-1
SPF_GoTop(cPswFile,nSPFOrder)
SPF_Insert(cSPFFile,cSPFId,cSPFuser,cSPFPassword,cSpFDet)
SPF_RecCount(cSPFFile,nSPFOrder)
SPF_Seek(cSPFFile,cSPFKeySeek,nSPFOrder) -> nSPFRec
SPF_Skip(cSPFFile,nSPFSkip,nSPFOrder)
SPF_Update(cSPFFile,@nSPFRec,cSPFId,cSPFName,cSPFPwd,cSPFDet)


Advpl Functions (Funções em ADVPL ):

PswEncript(cStrEncrypt,nType) -> cStrEncrypt || cStrDecrypt
Str2Array(cSPFDet,lEncrypt) -> aSPFDet
Array2Str(aSPFDet,lEncrypt) -> cSPFDet
PswOrder(nPswOrder)
PswSeek(cPswKey) -> lFound
PswRet(nType) -> aPswDet
PswRecno() -> nPswRecno
AllGroups() -> aPswGroups
AllUsers() -> aPswUsers
PswUsrGrp(cPswUserId,cPswGroupId) -> lPswUserInPswGroup


dentre outras...

Nosso primeiro exemplo será a inclusão de um novo usuário herdando as características de um usuário pré-existente. Então o primeiro passo é incluir um usuário no siga usando o módulo SIGACFG ( configurador ). Faz-se necessário, para que esse exemplo funcione, que o arquivo de senhas (sigapss.spf) esteja criado e pelo menos um usuário ( que não o Administrador ) esteja cadastrado. É altamente recomendado que todas as características do novo usuário sejam preenchidas, isso facilitará identificar cada uma delas dentro do Array com as configurações do usuário que iremos manipular.

Obs.: Utilizaremos o Protheus 10.2

Então mãos à obra.

Incluindo um usuário no Protheus:

No módulo SIGACFG acesse a opção conforme figura abaixo:

Programa: CFGX021 - Menu:SIGACFG.XNU
Opção do Menu: &Ambiente->&Usuário->Senhas->Senhas de Usuario


Inclua o usuário base. No nosso exemplo: Usuario.000001:


Defina as "Restrições" do usuário:

Defina as "Outras Informações" do usuário:


Defina o "Vínculo Funcional" do usuário:

Defina o "Grupo" do usuário:

Defina as "Empresas/Filiais" e os "Módulos" aos quais o usuário terá acesso:

Defina as "Restrições de Acesso" e os "Acessos":


Defina as "Preferências de Impressão":

E assim por diante. Quanto mais detalhes forem configurados para o Usuário base, mais detalhes poderemos identificar e Manipular no sigapss.spf.

Nesse exemplo, iremos utilizar como base as características do Usuario.000001 que, no nosso caso, por ser o primeiro usuário cadastrado, também possuirá o ID 000001. Incluiremos os usuários seqüencialmente e alteraremos algumas das características.

Agora vamos ao código:

Utilizaremos a IDE do Protheus para desenvolve-lo:


Definindo constantes com o Mapeamento
das Informações do usuário
(clique na imagem para ampliá-la)


Inserindo um novo usuário no sigapss.spf
(clique na imagem para ampliá-la)

Função para Obter um usuário válido
(clique na imagem para ampliá-la)

Para executar e depurar o programa utilize a IDE do Protheus conforme imagem abaixo:


Detalhes das informações do usuário retornado do sigapss.spf:

Para obter o código de exemplo completo clique aqui

Comentários

  1. Boa tarde Naldo.

    Excelente Post... há tempos venho pensando em escrever um blog sobre Tecnologia Protheus.

    Um Abraço,


    Hélio Costa
    Infra/Materiais

    ResponderExcluir
  2. Muito bom!!!! Fantastico consegui descobrir a senha de todo mundo.

    ResponderExcluir
  3. Ola Naldo,
    Tenho uma dúvida apartir desta sua diga seria possivel criar um algoritimo que mudasse a senha do usuario automaticamente.
    Exemplo:
    Toda 00:00hs ele mudaria a senha de um determinado usuario baseado-se no logaritimo simples(data * 2) só um exemplo.
    Obrigado.

    Alex Seabra

    ResponderExcluir
  4. É possível descobrir a senha do admin com isso tudo ?

    ResponderExcluir
  5. Naldo,

    Já testou isso na versão 11 do Protheus? pois acredito que mudaram o arquivo de senhas, e não consegui utilizá-lo na versão 11.

    Vc tem algum que funcione para 11?

    Obrigado,

    Marcos

    ResponderExcluir
  6. Houve atualização no arquivo ou nas funções, após atualização do p10 no momento do update ou insert, esta dando um erro: invalid protected call in file: ctreefair\cpp

    Alguem ja viu esse erro?

    ResponderExcluir
  7. Recentemente, ao fazer a atualização do meu ambiente, comecei a receber esta mesma mensagem ao chamar a função SPF_GETFIELDS().
    Para contornar isto apenas mudei a minha função de User Function para Static Function, pois aparentemente foi inserida alguma trava para a chamadas destas funções de API via User Function.


    Att.,


    Tiago Bandeira Brasiliano

    ResponderExcluir
  8. Naldo, boa tarde.
    Acredito que na versão 10 a função "Str2array" está retornando um array diferente do que era quando você criou o fonte acima.

    Você tem uma atualização do retorno da str2array ??

    Abraços,

    Gilberto

    ResponderExcluir
  9. Parece que várias funções relativas ao .SPF foram alteradas pela TOTVs e pararam de funcionar no Protheus 11.

    Muito bom o blog. Sempre passo por aqui. Outro muito interessante: http://microsigadvpl.blogspot.com

    ResponderExcluir
  10. Naldo,

    Estou utilizando a função PswEncript(variavel, 1) e a mesma não está retornado a senha decriptando a senha. Você tem idéia do que pode está acontecendo?.

    Muito obrigado,
    Manoel

    ResponderExcluir
  11. Manoel,

    A Totvs/Microsiga alterou o comportamento das funções de manipulação do "SuperFile" de senhas. Então, as dicas apresentadas neste "post", se estiver com uma versão atualizada do Protheus, não irão funcionar.

    É uma pena, a Totvs/Microsiga, ao invés de impor bloqueio deveria criar facilitadores para automatizar o processo de inclusão, bloqueio e/ou exclusão de usuários no protheus. Qualquer bom sistema tem isso. Conseguimos fazer isso fácilmente no Linux, em qualquer aplicação do Windows (inclusive no próprio SO) nos SGBDs, etc. Mas, infelizmente, tem algumas pessoas com pensamentos retrógrados... Querem proteger o sistema de quem/de que? (rs).

    []s
    иαldσ dj

    ResponderExcluir
  12. Naldo, desculpe reviver o post mas estou com algumas duvidas qnto as senhas do protheus.
    Voce acha que eh possivel ou conhece alguma funcao para alterar senha de usuario?

    Obrigado :)

    ResponderExcluir
  13. Ferne$,

    O que posso te responder....

    Se hoje fosse: terça-feira, 25 de novembro de 2008 eu diria que sim, mas, após essa data várias mudanças foram feitas no protheus.

    Preciso pesquisar.

    Ótimo seria se a totvs já tivesse implementado a função UsrChgPwd(cUserId,cNewPwd).

    []s
    иαldσ dj

    ResponderExcluir
  14. ..eai? A Totvs impos um limite e venceu?


    ..acho que nao!

    ResponderExcluir
  15. Naldo. Boa tarde. Tudo bem? Estou criando uma rotina para alteração de usuários.
    Estou mudando os usuários cadastrados na empresa 01 e filial 01 para empresa 03 e filial 03.

    Ao finalizar a rotina ele corrompe o arquivo, não deixando abrir os detalhes dos usuários.

    Poderia passar um exemplo?

    Abraços,

    ResponderExcluir
  16. Anônimo,

    Observe a data do post: terça-feira, 25 de novembro de 2008

    de lá pra cá muitas coisas foram alteradas e várias restrições adicionadas na manipulação do sigapss.spf.

    Sugestão: Entre em contato com o suporte da totvs.

    []s

    ResponderExcluir
  17. Naldo.
    Obrigado por responder. Solicitei apoio junto a Totvs e a mesma não tem nenhuma documentação. Não sugere manipular o arquivo.

    Ainda assim acredito que é possível. Porem como você disse. Muita coisa mudou. Preciso descobrir o que.
    Para tratar o problema acima.

    Anônimo(Anderson)

    Abraços,

    ResponderExcluir
  18. Estou com a versão 10

    ResponderExcluir
  19. Naldo, conforme o Tiago Ribeiro comentou,
    se jogar tudo pra dentro de uma Static Function está funcionando tudo perfeitamente...

    ResponderExcluir
  20. Rsrs, Tiago Bandeira, não Ribeiro...

    ResponderExcluir
  21. Naldo boa tarde!

    Aproveitando o tópico, sabe dizer se existe um procedimento para migrar os dados contidos em um sigapss antigo para um criado em branco?
    Só pra voce entender, existem uma funcioalidade no portal do rh que só funciona quando deleto o arquivo sigapss e deixo o sistema criar em branco, ou seja, se eu quiser utilizar terei que recadastrar todas as senhas na mão no novo arquivo, o que é praticamente inviável devido a quantidade.

    Se souber de algum procedimento por favor me fale.

    abraços

    ResponderExcluir
  22. Bom dia,

    Utilizei o exemplo acima no Protheus 10 e funcionou. Porém, ao utilizar o mesmo exemplo no Protheus 11, não funcionou, para ser mais exato, o problema ocorre na função spf_seek que só retorna -1. Será que a Totvs descontinuou esta função no Protheus 11?

    Atenciosamente,
    Flavio Valentin

    ResponderExcluir
  23. Bom dia,

    Utilizei o exemplo acima no Protheus 10 e funcionou. Porém, ao utilizar o mesmo exemplo no Protheus 11, não funcionou, para ser mais exato, o problema ocorre na função spf_seek que só retorna -1. Será que a Totvs descontinuou esta função no Protheus 11?

    Atenciosamente,
    Flavio Valentin

    ResponderExcluir
  24. Bom dia,

    ainda nao ha uma descriçao para utilizar a funçao allusers() e saver qual é o dado de cada posiçao do array?

    Muito obrigado.

    Atenciosamente,


    Sergio

    ResponderExcluir
  25. Bom dia,

    ainda nao ha uma descriçao para utilizar a funçao allusers() na versao Protheus11 e saver qual é o dado de cada posiçao do array?

    Muito obrigado.

    Atenciosamente,


    Sergio

    ResponderExcluir
  26. Pessoal, alguem conseguiu resolver o sigapss.spf no protheus 11?

    att

    Celso Martins

    ResponderExcluir
  27. No Configurador do Protheus 11 é possivel configurar uma validação de senhas, quando o usuario for trocar a senha de acesso ao Protheus. Em Regras de Senhas -> Regras de Preenchimento. Lá é possivel configurar o tamanho da senha, se é obrigatório ter numeros e letras, etc. (rotina CFGA500).
    Gostaria de usar essa mesma validação para acesso ao RH On Line, ou seja, quando o funcionário for alterar a senha de acesso, a rotina deve criticar a senha digitada, baseada na Regra de Senhas do Configurador.
    Naldo, isso é possivel ?

    ResponderExcluir
    Respostas
    1. Grande "pequeno" amigo Isamu. O "RH OnLine" permite várias personalizações, inclusive no que diz respeito a validações de senhas. Será que a rotina CFGA500 está disponível para uso que não seja apenas pena CFGA500, se sim, a resposta é: Sim é possível. Caso contrário, mesmo que CFGA500 não esteja disponível para uso "externo" a forma de validação e configuração de senha no RH OnLine é passível de validação e de acordo com customização do "usuário". Isso foi previsto para toda e qualquer rotina do RH OnLine.

      PS.: A não ser que os novos implementadores e mantenedores das "rotinas/programas" do RH OnLine tenham modificado o conceito, é fácil customizar, alterar e manter, ao gosto do cliente.

      Att.:
      иαldσ dj

      Excluir
  28. Boa tarde Naldo!

    Sabe se é possivel varrer todos os usuários em um laço para realizar a alteração de um campo?

    No caso seria o e-mail do usuario está em branco e necessitarmos adicionar todos, como os usuarios são iguais ao e-mail era so realizar esse update concatenando com @email

    Agradeço desde já.

    ResponderExcluir
  29. Vlw pelo post Naldo, ficou claríssimo!

    Também mantenho um BLOG sobre o Protheus e sei como é difícil manter uma frequencia de posts com essa correria que temos no nosso dia a dia. Parabéns e obrigado!

    Até mais Naldo!
    www.userfunction.com.br

    ResponderExcluir
  30. Estou precisando descriptografar o arquivo sigapss.spf para replicar para outras bases automaticamente alguém já fez isso

    ResponderExcluir
  31. Gostaria de descriptografar o arquivo sigapss.spf para replicar para outras bases de dados, alguém já fez isso

    ResponderExcluir
  32. Boa tarde,

    Estou precisando crear um relatório com todas as informações do usuario. Incluindo os privilegios que ele possua (privilegios, nao acessos).

    Alguém conhece alguma função que retornar os privilegios e os usuarios associadas a ela?

    Obrigado
    Felipe

    ResponderExcluir
    Respostas
    1. Boa tarde, Existe um relatório chamado APCFG40, onde ele lista esses privilégios de um usuário específico, mas não se uma função (que é infelizmente o que eu precisava também), mas não encontrei esse fonte para poder customizar, e a TOTVS não libera ele (mesmo sendo um relatório). Para liberar esse fonte no ações relacionadas do Cadastro de usuários no configurador, tem que habilitar o parametro MV_CFGREL3 e marca-lo como ".T."

      Excluir
  33. Boa tarde,

    Estou precisando crear um relatório com todas as informações do usuario. Incluindo os privilegios que ele possua (privilegios, nao acessos).

    Alguém conhece alguma função que retornar os privilegios e os usuarios associadas a ela?

    Obrigado
    Felipe

    ResponderExcluir
  34. Boa tarde.
    Voces teriam o esquema para mandar na qual consigo alterar informacoes de usuarios por lote??

    obrigado!!

    abs

    ResponderExcluir
  35. Boa tarde, como faço para alterar o id de acesso do usuário?
    Exemplo criei o usuario como o nome joao.nascimento
    para acessar o totvs eu coloco o id joao.nascimento e a senha

    Quero alterar este id de usuário para acessar o totvs somente como joao
    Teria como me auxiliar neste procedimento?

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

BlackTDN :: RLeg ~ Desvendando a Função ParamBox

Para quem precisar desenvolver uma interface de entrada de dados, coisa rápida, e não quer ter aquele trabalhão danado que todos já sabemos, o Protheus tem uma função que ajuda muito, é uma interface semelhante a função Pergunte, porém com muito mais opção de objeto de entrada de dados, alias até colocar o scrollbox desta interface com todos os objetos em outra MsDialog ou Wizard é simples. Vejam o exemplo abaixo, boa sorte! Rleg. //---------------------------------------------------------- // Função exemplo utilizando a função ParamBox() //---------------------------------------------------------- User Function xParamBox() Local aRet := {} Local aParamBox := {} Local aCombo := {"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"} Local i := 0 Private cCadastro := "xParambox" // ---------------

Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login

Ferne$ perguntou: "...é possível abrir alguma rotina do sistema sem solicitar login ao usuário, como por exemplo a rotina MATA010..." Sim Ferne$, é possível sim. Abaixo um Exemplo para a Chamada à função MATA010 sem a necessidade de Login no sistema. #INCLUDE "PROTHEUS.CH" #INCLUDE "TBICONN.CH" /*/ Funcao: MATA010Ex Data: 30/04/2011 Autor: Marinaldo de Jesus Descricao: Executar a Funcao MATA010 diretamente sem a necessidade de LOGIN no Protheus Sintaxe: 1 ) U_MATA010Ex ( Chamada diretamente na Tela de Entrada do Sistema ) ; ou 2 ) totvsclient.exe -q -p=u_MATA010Ex -a=01;01 -c=rnp_local -e=rnp -m -l ( Chamada Via Linha de Comando ) /*/ User Function MATA010Ex( cEmpFil ) Local aEmpFil Local bWindowInit := { || __Execute( "MATA010()" , "xxxxxxxxxxxxxxxxxxxx" , "MATA010" , "SIGAFAT" , "SIGAFAT", 1 , .T. ) } Local cEmp Local cFil Local cMod Local cModName := "SIGAFAT" DEFA

BlackTDN :: Customizando a interface de Login no Protheus e by You

A publicação “ BlackTDN :: By You e sua nova tela de login ”  de nosso amigo OBona deu o que falar e, em função disso, esse que a muito não vos escreve resolveu criar uma versão onde será possível personalizar, “por completo”, a tela de login no Protheus/by You. Considerando que OBona já havia “mapeado, identificado e customizado” as imagens peguei-as emprestadas para o exemplo que se segue: O primeiro passo para a customização “total” da interface de login do Protheus/by You será implementar o “Ponto de Entrada” ChgPrDir (Diretório de impressão) . Usaremos esse PE juntamente como programa U_FindMsObject.prg (apresentado pela primeira vez em: Protheus :: ADVPL : The Container : Presents Pandora's box ). Diferente do exemplo proposto por OBona, que substitui, durante o processo de compilação, as imagens padrões do sistema (excluindo-as) por imagens customizadas (com o mesmo nome) este novo exemplo mantém, no RPO, as imagens padrões adicionando novas imagens customizadas que serã