ADM001 — Cadastro de Usuários (enriquecimento)
Menu: Sistema > Administração > Cadastro de Usuários
Objetivo
O módulo ADM001 (Cadastro de Usuários) permite ao administrador do sistema criar, editar, inativar e excluir as contas de acesso ao JunsoftERP. Para cada usuário, define-se login, senha, pessoa vinculada, empresa padrão, empresas liberadas (com permissões de Faturamento/Estoque/Financeiro), locais de armazenagem permitidos, tabelas de preço disponíveis e, opcionalmente, tipos de conta financeira restritos. A partir daqui também se acessa, por atalhos, outras telas de configuração do usuário (Controle de Acesso a Programas, Contas de E-mail, Vendedores, Autorizador, Duplicações, Parâmetros de Usuário e Atalho de Módulos).
Fluxo principal
- Abrir Sistema > Administração > Cadastro de Usuários. A tela carrega a lista de usuários e localiza automaticamente o usuário da sessão atual (ou o primeiro registro). (Aba Usuário) —
source/ADM001/UfrmADM001.pas:242-249 (iniciar) - Clicar em 'Novo' para incluir um usuário; o foco vai para o campo Login (código do usuário). (Aba Usuário) —
source/ADM001/UfrmADM001.pas:254-267 (TfrmADM001.ANovoExecute) - Preencher Login, Nome e Senha; opcionalmente vincular a Pessoa (F9 busca), Conta de E-mail, Grupo Alçada e demais parâmetros (backup, exportação, fechar visualizador etc.). (Aba Usuário) —
source/ADM001/UfrmADM001.pas:594-621 (TfrmADM001.editCD_EMPRPADRAOExit) - Informar a Empresa Padrão; ao sair do campo, o sistema grava o usuário e cria automaticamente o vínculo dele com essa empresa (Faturamento/Estoque/Financeiro = S). (Aba Usuário) —
source/ADM001/UfrmADM001.pas:578-668 (TfrmADM001.editCD_EMPRPADRAOExit) - Ir à aba 'Usuário x Empresa' para liberar/restringir outras empresas e módulos (Faturamento, Estoque, Financeiro) por empresa. (Aba Usuário x Empresa) —
source/ADM001/UdmADM001.pas:246-252 (TdmADM001.tabUSUARIOEMPRESAAfterInsert) - Ir à aba 'Locais de Armazenagem' para vincular os locais que o usuário pode movimentar. (Aba Locais de Armazenagem) —
source/ADM001/UdmADM001.pas:266-301 (TdmADM001.tabLOCALUSUARIOBeforePost) - Se o parâmetro PARMFINANC.ST_RESTRICAOTIPOCONTA estiver ativo, ir à aba 'Tipos de Conta Restritos' e informar os tipos de conta que o usuário não pode movimentar. (Aba Tipos de Conta Restritos) —
source/ADM001/UfrmADM001.pas:235-240 (iniciar) - Ir à aba 'Tabelas de Preço' para liberar as tabelas de preço que o usuário pode consultar/usar. (Aba Tabelas de Preço) —
source/ADM001/UdmADM001.pas:412-442 (TdmADM001.tabUSUARIOTABPRECOBeforePost) - Clicar em 'Salvar' para gravar todas as abas alteradas; o sistema confirma com a mensagem I-0047. (Barra de ferramentas) —
source/ADM001/UfrmADM001.pas:283-297 (TfrmADM001.ASalvarExecute)
Campos obrigatórios
| Campo | Condição | Mensagem | Fonte |
|---|---|---|---|
| CD_USUARIO, NM_USUARIO, SN_USUARIO (Login, Nome, Senha) | Ao tentar definir a Empresa Padrão do usuário (saída do campo Empresa Padrão) sem ter preenchido Login, Nome ou Senha | É necessário informar o Login! / É necessário informar o Nome! / É necessário informar a Senha! | source/ADM001/UfrmADM001.pas:594-621 (TfrmADM001.editCD_EMPRPADRAOExit) |
| Empresa (aba Usuário) | Ao gravar o registro da aba Usuário x Empresa (grid de empresas liberadas) | É obrigatório informar a Empresa! | source/ADM001/UdmADM001.pas:165-176 (TdmADM001.tabUSUARIOEMPRESABeforePost) |
| Local de Armazenagem e Tipo de Local (aba Locais de Armazenagem) | Ao gravar uma linha do grid de locais de armazenagem do usuário | Informe o Local de Armazenagem! / Informe o Tipo Local de Armazenagem! | source/ADM001/UdmADM001.pas:266-281 (TdmADM001.tabLOCALUSUARIOBeforePost) |
| Tipo de Conta (aba Tipos de Conta Restritos) | Ao gravar uma linha do grid de tipos de conta restritos (aba só aparece se PARMFINANC.ST_RESTRICAOTIPOCONTA = S) | O Tipo de Conta deve ser informado! | source/ADM001/UdmADM001.pas:357-365 (TdmADM001.tabTIPOCONTARESTRITABeforePost) |
| Tabela de Preço (aba Tabelas de Preço) | Ao gravar uma linha do grid de tabelas de preço liberadas para o usuário | Informe a Tabela de Preço! | source/ADM001/UdmADM001.pas:412-421 (TdmADM001.tabUSUARIOTABPRECOBeforePost) |
| Campos com Required=True na tabela USUARIO (genérico) | Sempre que o campo tiver a propriedade Required do banco e não fizer parte da chave, ao salvar a aba Usuário | O Campo "<rótulo>" deve ser Informado! (validação genérica, não é um código de catálogo do módulo) | source/ADM001/UdmADM001.pas:155-158 (TdmADM001.tabUSUARIOBeforePost) |
Mensagens: causa e ação
C-0045
Causa: O analista/administrador clicou em 'Excluir' com um usuário selecionado.
Ação: Confirmar se realmente deseja excluir o usuário; se o usuário tiver empresas liberadas cadastradas, a exclusão será bloqueada em seguida (ver mensagem 'O usuário possui Empresas Liberadas Cadastradas').
Fonte: source/ADM001/UfrmADM001.pas:301-328 (TfrmADM001.AExcluirExecute)
C-0048
Causa: O usuário tentou fechar a tela (ou trocar de programa) com alterações pendentes em alguma aba (inclusão ou edição não salva).
Ação: Responder Sim para salvar automaticamente antes de fechar, ou Não para descartar as alterações.
Fonte: source/ADM001/UfrmADM001.pas:383-393 (TfrmADM001.FormClose)
I-0046
Causa: A exclusão do usuário foi concluída (após confirmar C-0045 e passar pela verificação de empresas liberadas).
Ação: Nenhuma ação necessária; é apenas a confirmação de sucesso.
Fonte: source/ADM001/UfrmADM001.pas:322-326 (TfrmADM001.AExcluirExecute)
I-0047
Causa: Todas as abas com dados em inclusão/edição foram gravadas com sucesso ao clicar em Salvar.
Ação: Nenhuma ação necessária; é apenas a confirmação de sucesso.
Fonte: source/ADM001/UfrmADM001.pas:283-297 (TfrmADM001.ASalvarExecute)
W-0017
Causa: O usuário logado clicou no botão de atalho para 'Controle de Acesso a Programas' (ADM004), mas o programa ADM004 não está liberado no menu dele.
Ação: Solicitar ao administrador que libere o acesso ao programa ADM004 no cadastro de perfil/menu do usuário.
Fonte: source/ADM001/UfrmADM001.pas:746-763 (TfrmADM001.btnADM004Click)
W-0457
Causa: O usuário logado clicou no atalho para o cadastro de Pessoas (TFA001), mas não tem esse programa liberado no menu.
Ação: Solicitar ao administrador que libere o acesso ao programa TFA001.
Fonte: source/ADM001/UfrmADM001.pas:714-728 (TfrmADM001.btnTFA001Click)
W-1659
Causa: Clique no atalho para 'Contas de E-mail' (ADM021) sem esse programa liberado no menu do usuário.
Ação: Solicitar liberação de acesso ao programa ADM021.
Fonte: source/ADM001/UfrmADM001.pas:730-744 (TfrmADM001.btnADM021Click)
W-1660
Causa: Clique no atalho para 'Atalho de Módulos' (ADM005) sem esse programa liberado no menu do usuário.
Ação: Solicitar liberação de acesso ao programa ADM005.
Fonte: source/ADM001/UfrmADM001.pas:765-782 (TfrmADM001.btnADM005Click)
W-1661
Causa: Clique no atalho para 'Parâmetros de Usuários' (ADM012) sem esse programa liberado no menu do usuário (ou sem Empresa Padrão informada, que é validado antes).
Ação: Solicitar liberação de acesso ao programa ADM012 e garantir que a Empresa Padrão do usuário esteja preenchida.
Fonte: source/ADM001/UfrmADM001.pas:784-806 (TfrmADM001.btnADM012Click)
W-1662
Causa: Clique no atalho para 'Duplicações' (ADM013) sem esse programa liberado no menu do usuário.
Ação: Solicitar liberação de acesso ao programa ADM013.
Fonte: source/ADM001/UfrmADM001.pas:808-825 (TfrmADM001.btnADM013Click)
W-1663
Causa: Clique no atalho para 'Cadastro de Autorizador' (TFA008) sem esse programa liberado no menu do usuário.
Ação: Solicitar liberação de acesso ao programa TFA008.
Fonte: source/ADM001/UfrmADM001.pas:827-844 (TfrmADM001.btnTFA008Click)
W-1664
Causa: Clique no atalho para 'Vendedores' (TFA007) sem esse programa liberado no menu do usuário.
Ação: Solicitar liberação de acesso ao programa TFA007.
Fonte: source/ADM001/UfrmADM001.pas:864-881 (TfrmADM001.btnTFA007Click)
A Tabela de Preço já está Associado para o Usuário!
Causa: Tentativa de incluir na aba Tabelas de Preço uma tabela de preço que já está vinculada a esse usuário.
Ação: Não repetir a inclusão; verificar o grid de tabelas de preço do usuário, a tabela já está lá.
Fonte: source/ADM001/UdmADM001.pas:424-436 (TdmADM001.tabUSUARIOTABPRECOBeforePost)
Conta de E-mail não Cadastrada. Verifique [ADM021]!
Causa: O código informado no campo Conta de E-mail não existe na tabela CONTASEMAIL.
Ação: Cadastrar a conta em Sistema > Contas de E-mail (ADM021) ou usar F9 para buscar um código válido.
Fonte: source/ADM001/UdmADM001.pas:334-355 (TdmADM001.tabUSUARIOCD_CONTAEMAILValidate)
Empresa não cadastrada! [ADM002]
Causa: O código de empresa informado (na Empresa Padrão do usuário ou na aba Usuário x Empresa) não existe na tabela EMPRESA.
Ação: Informar um código de empresa válido, cadastrado em Sistema > Empresas (ADM002), ou usar F9 para buscar.
Fonte: source/ADM001/UdmADM001.pas:200-217 (TdmADM001.tabUSUARIOCD_EMPRPADRAOValidate), source/ADM001/UdmADM001.pas:219-234 (TdmADM001.tabUSUARIOEMPRESACD_EMPRESAValidate)
Esta pessoa está desativada! [TFA001]
Causa: A pessoa vinculada ao usuário (campo Pessoa) está com status inativo (ST_ATIVA = 'N') no cadastro de Pessoas.
Ação: Reativar a pessoa no cadastro de Pessoas (TFA001) ou selecionar outra pessoa ativa.
Fonte: source/ADM001/UdmADM001.pas:183-198 (TdmADM001.tabUSUARIOCD_PESSOAValidate)
Grupo Alçada não Cadastrado! Verifique [ADM025].
Causa: O código informado no campo Grupo Alçada não existe na tabela GRUPOUSUARIO.
Ação: Informar um código válido de grupo de alçada, cadastrado em ADM025, ou usar F9 para buscar.
Fonte: source/ADM001/UdmADM001.pas:486-508 (TdmADM001.tabUSUARIOCD_GRUPOALCADAValidate)
Informe a Tabela de Preço!
Causa: Tentativa de gravar uma linha na aba Tabelas de Preço sem informar o código da tabela.
Ação: Preencher o campo Tabela de Preço (ou usar F9 para buscar) antes de gravar a linha.
Fonte: source/ADM001/UdmADM001.pas:412-421 (TdmADM001.tabUSUARIOTABPRECOBeforePost)
Informe o Local de Armazenagem!
Causa: Tentativa de gravar uma linha na aba Locais de Armazenagem sem informar o Local.
Ação: Preencher o campo Local (ou usar F9 para buscar) antes de gravar.
Fonte: source/ADM001/UdmADM001.pas:271-275 (TdmADM001.tabLOCALUSUARIOBeforePost)
Informe o Tipo Local de Armazenagem!
Causa: Tentativa de gravar uma linha na aba Locais de Armazenagem sem informar o Tipo de Local.
Ação: Preencher o campo Tipo de Local antes de gravar.
Fonte: source/ADM001/UdmADM001.pas:276-280 (TdmADM001.tabLOCALUSUARIOBeforePost)
Não foi possível realizar a gravação de Usuário! %s
Causa: Ocorreu uma exceção ao tentar gravar automaticamente o usuário/empresa padrão ao sair do campo Empresa Padrão — geralmente porque Login, Nome ou Senha ainda não foram informados.
Ação: Verificar se Login, Nome e Senha do usuário estão preenchidos e tentar novamente informar a Empresa Padrão.
Fonte: source/ADM001/UfrmADM001.pas:594-674 (TfrmADM001.editCD_EMPRPADRAOExit)
O Local de Armazenagem já está Associado para o Usuário!
Causa: Tentativa de incluir um local de armazenagem que já está vinculado a esse usuário (mesmo par tipo local + local).
Ação: Não repetir a inclusão; conferir no grid de locais o vínculo já existente.
Fonte: source/ADM001/UdmADM001.pas:282-294 (TdmADM001.tabLOCALUSUARIOBeforePost)
O Tabela de Preço já informada! Verifique.
Causa: Ao digitar/selecionar o código da tabela de preço no campo do grid, o sistema já detecta que esse código está associado a este usuário.
Ação: Escolher outra tabela de preço ou verificar a lista já cadastrada.
Fonte: source/ADM001/UdmADM001.pas:444-461 (TdmADM001.tabUSUARIOTABPRECOCD_TABPRECOValidate)
O Tipo de Conta deve ser informado!
Causa: Tentativa de gravar uma linha na aba Tipos de Conta Restritos sem informar o tipo de conta.
Ação: Preencher o campo Tipo de Conta (F9 para buscar) antes de gravar.
Fonte: source/ADM001/UdmADM001.pas:357-361 (TdmADM001.tabTIPOCONTARESTRITABeforePost)
O Tipo de Conta já informada! Verifique.
Causa: O tipo de conta informado já está cadastrado como restrito para esse mesmo usuário.
Ação: Não repetir a inclusão; o tipo de conta já consta na lista de restrições do usuário.
Fonte: source/ADM001/UdmADM001.pas:373-383 (TdmADM001.tabTIPOCONTARESTRITACD_TIPOCONTAValidate)
O Tipo de Conta não está Cadastrado! [TFC005]
Causa: O código de tipo de conta informado não existe na tabela TIPOCONTA.
Ação: Informar um código de tipo de conta válido, cadastrado em TFC005.
Fonte: source/ADM001/UdmADM001.pas:386-390 (TdmADM001.tabTIPOCONTARESTRITACD_TIPOCONTAValidate)
O usuário possui Empresas Liberadas Cadastradas. Verifique!
Causa: Tentativa de excluir um usuário que ainda tem uma ou mais empresas vinculadas na tabela USUARIOEMPRESA.
Ação: Remover todos os vínculos na aba 'Usuário x Empresa' antes de excluir o usuário.
Fonte: source/ADM001/UfrmADM001.pas:309-320 (TfrmADM001.AExcluirExecute)
Pessoa não cadastrada! [TFA001]
Causa: O código informado no campo Pessoa não existe na tabela PESSOA.
Ação: Cadastrar a pessoa em TFA001 ou informar um código válido (F9 para buscar).
Fonte: source/ADM001/UdmADM001.pas:189-193 (TdmADM001.tabUSUARIOCD_PESSOAValidate)
É obrigatório informar a Empresa!
Causa: Duas situações no código geram essa mesma mensagem: (1) gravar uma linha da aba Usuário x Empresa sem informar a empresa; (2) abrir o atalho de Parâmetros de Usuário (ADM012) sem a Empresa Padrão do usuário preenchida.
Ação: Preencher o campo Empresa na aba Usuário x Empresa, ou preencher a Empresa Padrão na aba Usuário antes de acessar Parâmetros de Usuário.
Fonte: source/ADM001/UdmADM001.pas:165-176 (TdmADM001.tabUSUARIOEMPRESABeforePost), source/ADM001/UfrmADM001.pas:789-791 (TfrmADM001.btnADM012Click)
Regras de negócio
ADM001.R001(verregras/ADM001/ADM001.R001.md)ADM001.R002(verregras/ADM001/ADM001.R002.md)ADM001.R003(verregras/ADM001/ADM001.R003.md)ADM001.R004(verregras/ADM001/ADM001.R004.md)ADM001.R005(verregras/ADM001/ADM001.R005.md)ADM001.R006(verregras/ADM001/ADM001.R006.md)ADM001.R007(verregras/ADM001/ADM001.R007.md)ADM001.R008(verregras/ADM001/ADM001.R008.md)ADM001.R009(verregras/ADM001/ADM001.R009.md)ADM001.R010(verregras/ADM001/ADM001.R010.md)ADM001.R011(verregras/ADM001/ADM001.R011.md)ADM001.R012(verregras/ADM001/ADM001.R012.md)ADM001.R013(verregras/ADM001/ADM001.R013.md)ADM001.R014(verregras/ADM001/ADM001.R014.md)ADM001.R015(verregras/ADM001/ADM001.R015.md)ADM001.R016(verregras/ADM001/ADM001.R016.md)ADM001.R017(verregras/ADM001/ADM001.R017.md)ADM001.R018(verregras/ADM001/ADM001.R018.md)ADM001.R019(verregras/ADM001/ADM001.R019.md)ADM001.R020(verregras/ADM001/ADM001.R020.md)ADM001.R021(verregras/ADM001/ADM001.R021.md)
Perguntas frequentes
P: Por que ao tentar excluir um usuário aparece a mensagem 'O usuário possui Empresas Liberadas Cadastradas. Verifique!'?
R: O sistema não permite excluir um usuário que ainda tenha empresas vinculadas na aba Usuário x Empresa. É preciso ir na aba 'Usuário x Empresa' e remover todas as empresas liberadas para esse usuário antes de excluí-lo.
Fonte: source/ADM001/UfrmADM001.pas:301-327 (TfrmADM001.AExcluirExecute)
P: A tela deu a mensagem 'A Tabela de Preço já está Associado para o Usuário!', o que fazer?
R: O usuário está tentando incluir na aba 'Tabelas de Preço' uma tabela que já consta na lista dele. Não é necessário adicionar novamente; verifique no grid se a tabela já aparece.
Fonte: source/ADM001/UdmADM001.pas:412-442 (TdmADM001.tabUSUARIOTABPRECOBeforePost)
P: Por que não consigo ver a aba 'Tipos de Conta Restritos' no cadastro de usuário?
R: Essa aba só aparece quando o parâmetro financeiro PARMFINANC.ST_RESTRICAOTIPOCONTA está configurado como 'S' para a empresa da sessão. Se o parâmetro estiver 'N' (ou vazio), a aba fica oculta. Peça ao administrador para ajustar o parâmetro em Parâmetros Financeiros, se a restrição de tipo de conta for necessária.
Fonte: source/ADM001/UfrmADM001.pas:235-240 (iniciar)
P: Recebi 'O usuário não possui acesso a tela de cadastro de Pessoas [TFA001]!' ao clicar no botão de Pessoa dentro do cadastro de usuário. O que significa?
R: O botão de atalho para o cadastro de Pessoas (TFA001) verifica se esse programa está liberado no menu do usuário logado. Se não estiver, a mensagem W-0457 aparece. É preciso liberar o acesso ao programa TFA001 para o usuário no cadastro de acesso a programas.
Fonte: source/ADM001/UfrmADM001.pas:714-728 (TfrmADM001.btnTFA001Click)
P: Ao clicar nos botões de atalho (Vendedores, Parâmetros de Usuário, Duplicações, Autorizador etc.) o sistema salva o cadastro automaticamente. Isso é esperado?
R: Sim, é comportamento intencional: antes de abrir as telas de atalho (ADM005, ADM012, ADM013, TFA007, TFA008), o botão chama 'Salvar' do próprio ADM001 para garantir que o usuário já esteja gravado (essas telas dependem do CD_USUARIO existir).
Fonte: source/ADM001/UfrmADM001.pas:784-844 (TfrmADM001.btnADM012Click)
P: Deu a mensagem 'É obrigatório informar a Empresa!' ao abrir o cadastro de Parâmetros de Usuário (ADM012) pelo atalho. Por quê?
R: O atalho para Parâmetros de Usuário (ADM012) exige que o usuário tenha uma Empresa Padrão definida na aba Usuário antes de abrir essa tela. Preencha o campo 'Empresa Padrão' no cadastro do usuário e tente novamente.
Fonte: source/ADM001/UfrmADM001.pas:789-791 (TfrmADM001.btnADM012Click)
P: Cadastrei um novo usuário e uma empresa apareceu sozinha na aba Usuário x Empresa. É um bug?
R: Não, é intencional: ao sair do campo Empresa Padrão em um usuário novo, o sistema grava automaticamente o usuário e cria/associa o vínculo dele com essa empresa na aba Usuário x Empresa, já com Faturamento, Estoque e Financeiro marcados como 'S'.
Fonte: source/ADM001/UfrmADM001.pas:624-668 (TfrmADM001.editCD_EMPRPADRAOExit)
P: Deu a mensagem 'Esta pessoa está desativada! [TFA001]' ao vincular uma pessoa ao usuário. O que fazer?
R: O código da pessoa informado no campo 'Pessoa' está com status inativo no cadastro de Pessoas (TFA001). É preciso reativar a pessoa em TFA001 ou escolher outra pessoa ativa para vincular ao usuário.
Fonte: source/ADM001/UdmADM001.pas:183-198 (TdmADM001.tabUSUARIOCD_PESSOAValidate)
P: Não consigo apagar/alterar o Login (CD_USUARIO) de um usuário já existente. Por quê?
R: O código do usuário é a chave do cadastro; ao navegar para um registro existente (fora da inclusão), o campo chave fica bloqueado para edição. Para trocar o login é necessário excluir e recriar o usuário (respeitando as demais regras de exclusão).
Fonte: source/ADM001/UdmADM001.pas:160-163 (TdmADM001.tabUSUARIOAfterScroll)
Dúvidas em aberto (o código não responde)
- Quais campos da tabela USUARIO estão marcados como Required (NOT NULL) no banco Firebird além de CD_USUARIO, NM_USUARIO e SN_USUARIO? — A obrigatoriedade genérica depende da metadata do FDQuery/banco (CamposObrigatorios em source/PacManager/src/Utilitarios/Utilitarios.pas:2515-2538); sem o schema/DDL da tabela USUARIO não é possível listar todos os campos obrigatórios.
- Como o sistema valida a senha do usuário (tamanho mínimo, complexidade, hash) e onde essa regra está implementada? — O código lido de ADM001 apenas verifica se SN_USUARIO está preenchido (UfrmADM001.pas:612-616); não há rotina de validação de força de senha nos arquivos lidos.
- O que a coluna DT_EXPSENHA (expiração de senha) faz de fato — bloqueia login após a data? Onde essa regra é aplicada? — ADM001 apenas exibe/edita o campo (UdmADM001.pas linha 32/UfrmADM001.dfm), não há lógica de expiração nos arquivos do módulo.
- Quais letras/valores são aceitos em PARMFINANC.ST_RESTRICAOTIPOCONTA além de 'S'? — O código só compara com 'S' para exibir a aba de Tipos de Conta Restritos (UfrmADM001.pas:236-240); não há definição do parâmetro nos arquivos lidos.
- Por que a checagem de duplicidade de Tipo de Conta Restrito é feita duas vezes (BeforePost e no Validate do campo)? Existe alguma diferença de comportamento entre elas? — UdmADM001.pas linhas 367-396 e a query de duplicidade dentro do Validate podem ser redundantes com a regra do BeforePost; não ficou claro se há um caso em que só uma delas dispara.