Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Resolvendo o Desafio "Palindrome Number" do LeetCode com XBase e TLPP

_Créditos das imagens: ChatGPT_ ### LeetCode :: **Resolvendo o Desafio "Palindrome Number" do LeetCode com XBase e TLPP** No mundo da programação, os desafios do LeetCode são uma excelente maneira de aprimorar nossas habilidades de codificação. Um desses é o desafio [**Palindrome Number** (Número Palíndromo)](https://leetcode.com/problems/palindrome-number/description/). Neste artigo, vamos explorar como resolvemos esse desafio utilizando XBase e TLPP (linguagens que possuem um poderoso conjunto de ferramentas para o desenvolvimento de soluções rápidas e eficientes). #### Descrição do Desafio O problema **Palindrome Number** exige que verifiquemos se um número inteiro é um palíndromo. Ou seja, o número deve ser lido da mesma forma de trás para frente como é lido da frente para trás. Exemplos de números palíndromos incluem: 121, 12321, etc. Já números como 123, 10, e -121 não são palíndromos, pois sua leitura invertida não é igual ao número original. A ideia é criar uma f...

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. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. ..eai? A Totvs impos um limite e venceu?


    ..acho que nao!

    ResponderExcluir
  14. 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
  15. 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
  16. 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
  17. Estou com a versão 10

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

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

    ResponderExcluir
  20. 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
  21. 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
  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,

    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
  24. 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
  25. Pessoal, alguem conseguiu resolver o sigapss.spf no protheus 11?

    att

    Celso Martins

    ResponderExcluir
  26. 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
  27. 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
  28. 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
  29. Estou precisando descriptografar o arquivo sigapss.spf para replicar para outras bases automaticamente alguém já fez isso

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

    ResponderExcluir
  31. 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
  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
  33. Boa tarde.
    Voces teriam o esquema para mandar na qual consigo alterar informacoes de usuarios por lote??

    obrigado!!

    abs

    ResponderExcluir
  34. 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