Pragiva — Tecnologia na prática

Menus do Protheus: como incluir uma rotina customizada no módulo

Menus do Protheus: como pôr uma User Function no menu de um módulo pelo Configurador, gerar sem estragar o padrão e conferir por SQL onde ficou.

Protheus Tutorial 6 min de leitura

Assista o vídeo

Nesta página6 seções

Antes de começar

  • Acesso ao Configurador (SIGACFG) com permissão para alterar menus e usuários.
  • A User Function compilada no repositório do ambiente.

Compilar uma rotina não a coloca na tela de ninguém. Para o usuário abrir a sua User Function pelo módulo, ela precisa virar item de um menu, esse menu precisa ser gerado e o usuário precisa estar apontado para ele. São três passos diferentes, e a rotina “sumida” quase sempre parou em um deles.

O cadastro de menus é a rotina CFGX013, em Ambiente > Cadastros > Menus no Configurador. Ela trabalha sempre do mesmo jeito: parte de um menu que já existe, o menu de entrada, e gera outro, o menu de saída.

O exemplo deste artigo é o da série: pôr a rotina U_ZA1CAD, o cadastro de motoristas da tabela ZA1, num grupo Customizados do menu do Faturamento.

Onde os menus ficam no banco

Com o dicionário no banco, os menus ficam num conjunto de tabelas MPMENU_, sem sufixo de empresa: MPMENU_MENU com os menus, MPMENU_ITEM com os itens, MPMENU_FUNCTION com as funções chamadas e MPMENU_I18N com as descrições por idioma.

No ambiente que conferimos, os menus com nome de módulo, como SIGAFAT, têm cópias do menu anterior nessas tabelas, com o nome #BKP_<MENU>#<data e hora>. A cópia guarda os itens do menu anterior, e dá para consultá-la por SQL para ver o que existia antes da troca. Não conferimos se um menu com nome próprio também ganha cópia, nem um procedimento para restaurar a partir dela: o caminho seguro continua sendo gerar com nome próprio, como mostra a seção sobre o nome do menu. Veja as cópias que existem para o Faturamento:

Confira no seu ambienteSQL
SELECT M_NAME, M_MODULE
  FROM MPMENU_MENU
 WHERE D_E_L_E_T_ = ' '
   AND M_NAME LIKE '#BKP_SIGAFAT#%'
 ORDER BY M_NAME

E esta responde “em quais menus a ZA1CAD está, e com que descrição”:

Confira no seu ambienteSQL
SELECT M.M_NAME, F.F_FUNCTION, N.N_DESC
  FROM MPMENU_MENU M
  JOIN MPMENU_ITEM I
    ON I.I_ID_MENU = M.M_ID
   AND I.D_E_L_E_T_ = ' '
  JOIN MPMENU_FUNCTION F
    ON F.F_ID = I.I_ID_FUNC
   AND F.D_E_L_E_T_ = ' '
  LEFT JOIN MPMENU_I18N N
    ON N.N_PAREN_ID = I.I_ID
   AND N.N_LANG = '1'
   AND N.D_E_L_E_T_ = ' '
 WHERE M.D_E_L_E_T_ = ' '
   AND M.M_NAME NOT LIKE '#%'
   AND F.F_FUNCTION LIKE '%ZA1CAD%'

O filtro NOT LIKE '#%' tira as cópias de segurança. Sem ele, a rotina aparece também em cada backup do menu. A estrutura das tabelas MPMENU_ foi conferida num ambiente com dicionário no banco. Se a consulta falhar no seu, confira os nomes das colunas antes de concluir qualquer coisa.

Montando o menu

  1. Abra Ambiente > Cadastros > Menus. A rotina mostra os menus disponíveis. No rodapé, use Todos os menus para desmarcar todos, marque só o do Faturamento (SIGAFAT) e clique em OK.
  2. Na coluna do meio, clique em Adicionar. O sistema cria, na coluna Novo Menu, uma cópia do menu escolhido.
  3. Em Novo Menu, posicione o cursor na pasta principal que deve receber o grupo, por exemplo Atualizações. Clique em Novo Grupo e digite o nome, Customizados.
  4. Posicione no grupo e clique em Novo Item. Preencha o item e clique em OK.
  5. Clique em Gerar e, em Arquivo, informe o nome do menu. A seção seguinte explica qual nome usar.

Os campos do item

CampoO que decideExemplo
DescriçãoO nome da opção no menuMotoristas
ProgramaO programa que a opção chamaZA1CAD
StatusHabilitado mostra e deixa usar; Desabilitado mostra, mas não deixa selecionar; Inibido não mostraHabilitado
Ambiente (módulo)Em qual módulo a opção se comporta. Obrigatório: sem ele, o menu não é geradoFaturamento
TipoFunção Protheus, Relatório SIGARPM, Função de Usuário, Função Template, Relatório Crystal ou Cons. Genérica RelacionalFunção de Usuário
Rotinas do BrowseQuais opções do browse o item libera; a desmarcada mostra mensagem de impossibilidade de acesso1 a 5 marcadas
TabelasAs tabelas que a opção usaZA1

A documentação da TOTVS chama de Ambiente o campo em que se escolhe o módulo. Os passos da Central de Atendimento chamam o mesmo campo de Módulo. É o único que a documentação marca como indispensável para gerar o menu.

A página da TOTVS sobre criar item diz que o programa em AdvPL deve estar precedido por #. Nos menus gravados em banco que conferimos, nenhuma função aparece com #: os itens do tipo Função de Usuário estão quase sempre só com o nome, ZA1CAD, sem #, sem U_ e sem parênteses. Com o dicionário no banco, siga o que está gravado: informe só o nome e confira como ficou com a segunda consulta do início do artigo. Se o seu ambiente mostrar outra grafia nos itens que já funcionam, siga a do seu ambiente.

Para alterar um item que já existe, posicione nele, no lado direito, e use Detalhes. Faça a alteração, confirme e gere o menu de novo.

O nome do menu gerado

O nome que você digita em Arquivo, ao gerar, decide quem é afetado.

Com o nome do módulo (SIGAFAT), você sobrescreve o menu padrão do Faturamento. É assim que a TOTVS manda incluir a rotina APCFG110 no menu do Configurador: gerando como SIGACFG.

Com um nome próprio, por exemplo ZSIGAFAT, o menu novo não afeta ninguém até ser atribuído a um usuário ou a um grupo. Com o dicionário no banco, essa é a orientação da TOTVS: não mexer nos arquivos .xnu da pasta System nem alterar o menu padrão. Segundo a Central de Atendimento, alterar o menu padrão pelo Configurador nesse cenário quebra a estrutura padrão e deixa o menu desconfigurado. Monte um menu com nome próprio e vincule a quem precisa.

Entregando o menu ao usuário

  1. Em Usuário > Senhas > Usuários, clique no usuário e em Alterar.
  2. Na aba Restrições de acesso / Ambientes, localize o módulo Faturamento. Na coluna Arquivo, dê um duplo clique e troque o nome pelo do menu que você gerou.
  3. Clique em Confirmar.
  4. Para um grupo inteiro, o caminho é o mesmo em Usuário > Senhas > Grupos.

Ao incluir uma rotina no menu do Configurador, a orientação da TOTVS é sair e entrar de novo para ver a opção nova. Faça o mesmo no módulo do usuário.

Quando a rotina não aparece ou não abre

SintomaOnde olhar
O item não apareceO usuário ainda aponta para o menu antigo, não saiu e entrou de novo, ou o Status do item está Inibido
O item aparece, mas não abreStatus Desabilitado
O item aparece para todos, não só para umO menu foi gerado com o nome do módulo
O menu não é geradoFalta o módulo (Ambiente) em algum item
Erro NO_IXA mensagem diz que a função de usuário não foi compilada no repositório. O fonte não foi compilado no repositório deste ambiente. Se já foi, veja se a função está como Desabilitado no Catálogo de Personalizações (CFGA030) e volte para Habilitado
O menu novo da TOTVS não chegouCom menu no banco, copiar o .xnu para a pasta não basta: é preciso usar o botão Atualizar

O último caso merece atenção. Quando a TOTVS publica um menu novo para um módulo, o arquivo baixado vai para a pasta System. Com o dicionário no banco, entre em Ambiente > Cadastros > Menus e clique em Atualizar, no lado direito da rotina. Ela lista os arquivos de menu que estão na pasta System. Clique em Atualizar de novo e aguarde a mensagem de sucesso.

Com a rotina no menu, quem decide o que cada usuário pode fazer dentro dela são os privilégios.

Referências

  1. TDNtdn.totvs.com

    TDN — Configurando Menus (CFGX013 - SIGACFG)
  2. TDNtdn.totvs.com

    TDN — Criar Grupo ou Submenu (CFGX013 - SIGACFG)
  3. TDNtdn.totvs.com

    TDN — Criar item ou opção (CFGX013 - SIGACFG)
  4. TDNtdn.totvs.com

    TDN — Atualizar menus dos módulos
  5. Central de Atendimentocentraldeatendimento.totvs.com

    Central de Atendimento TOTVS — Personalização de Menus
  6. Central de Atendimentocentraldeatendimento.totvs.com

    Central de Atendimento TOTVS — Menus customizados com o dicionário no banco de dados
  7. Central de Atendimentocentraldeatendimento.totvs.com

    Central de Atendimento TOTVS — Rotina APCFG110
  8. Central de Atendimentocentraldeatendimento.totvs.com

    Central de Atendimento TOTVS — Atualização de menus que estão no Banco de Dados
  9. Central de Atendimentocentraldeatendimento.totvs.com

    Central de Atendimento TOTVS — Erro NO_IX Função de usuário não compilada no repositório

Continue por aqui