12335 - Abrangência de usuário em pesquisa de campo de tela de entrada de relatório
Problema: Ao buscar informações através da tela de pesquisa de registro de campo de entrada de relatório, caso o campo em questão não tenha nenhuma abrangência aplicada sobre ele, porém tenha campos da mesma tabela que fazem relacionamento com outro campo que tenha abrangência, o sistema não irá aplicar a abrangência para a busca de registros.
Exemplo:
- Tabela de usuário USU_TESTE com os seguintes campos:
- USU_NUMLOC (campo chave da tabela com relacionamento com o campo R016ORN.NUMLOC - Local)
- USU_QUALQUER
- Na tela de entrada do relatório existe o campo USU_TESTE.USU_QUALQUER
- Usuário X tem abrangência de Local 1.01. (Esta abrangência é aplicada sobre o campo NUMLOC de todas as tabelas nativas do sistema).
- Ao abrir a tela de pesquisa de registro do campo USU_QUALQUER na tela de entrada do relatório são listados todos os registros, mesmo aqueles com NUMLOC (Local) que não fazem parte da abrangência do usuário.
Isto ocorre porque o sistema só aplica a abrangência sobre registros da tabela que tem ligação com campo de abrangência, caso haja na tela de entrada o campo que faz parte da ligação.
No exemplo acima a abrangência só seria aplicada caso existisse o campo USU_TESTE.USU_NUMLOC na tela de entrada do relatório e com a opção Abrangência = 'Sim', ou seja, o campo que faz ligação com o campo que contém abrangência deve fazer parte da tela de entrada do relatório.
Quando ocorre / onde se aplica: Modelos de Relatórios - Recursos > Implementações > Gerador Relatórios. Esta situação se aplica quando há campos de tabela de usuário na tela de entrada.
Solução: Solução 12335: Neste caso pode-se criar uma regra associada ao processo 146 - Antes Emitir Relatório, para retornar a abrangência do usuário e em seguida aplicar a abrangência ao campo de usuário da tabela que contém o campo na tela de entrada. Desta forma a abrangência é respeitada.
Isto ocorre porque o sistema só aplica a abrangência em tela de pesquisa caso haja abrangência aplicada DIRETAMENTE ao campo da tabela.
Segue exemplo de regra para tratar a situação descrita acima:
/* ------------------- INÍCIO DA REGRA ------------------- */
Se (NomModRel = nome_do_relatorio)
Inicio
Definir alfa aAbrLoc;
RetornaAbrUsu(RH, 1, CodUSu, 0, 1, NUMLOC, aAbrLoc);
CarregaAbrUsu(USU_NUMLOC, 1, S, aAbrLoc);
Fim;
/* ------------------- FIM DA REGRA -------------------- */
Exemplo:
- Tabela de usuário USU_TESTE com os seguintes campos:
- USU_NUMLOC (campo chave da tabela com relacionamento com o campo R016ORN.NUMLOC - Local)
- USU_QUALQUER
- Na tela de entrada do relatório existe o campo USU_TESTE.USU_QUALQUER
- Usuário X tem abrangência de Local 1.01. (Esta abrangência é aplicada sobre o campo NUMLOC de todas as tabelas nativas do sistema).
- Ao abrir a tela de pesquisa de registro do campo USU_QUALQUER na tela de entrada do relatório são listados todos os registros, mesmo aqueles com NUMLOC (Local) que não fazem parte da abrangência do usuário.
Isto ocorre porque o sistema só aplica a abrangência sobre registros da tabela que tem ligação com campo de abrangência, caso haja na tela de entrada o campo que faz parte da ligação.
No exemplo acima a abrangência só seria aplicada caso existisse o campo USU_TESTE.USU_NUMLOC na tela de entrada do relatório e com a opção Abrangência = 'Sim', ou seja, o campo que faz ligação com o campo que contém abrangência deve fazer parte da tela de entrada do relatório.
Quando ocorre / onde se aplica: Modelos de Relatórios - Recursos > Implementações > Gerador Relatórios. Esta situação se aplica quando há campos de tabela de usuário na tela de entrada.
Solução: Solução 12335: Neste caso pode-se criar uma regra associada ao processo 146 - Antes Emitir Relatório, para retornar a abrangência do usuário e em seguida aplicar a abrangência ao campo de usuário da tabela que contém o campo na tela de entrada. Desta forma a abrangência é respeitada.
Isto ocorre porque o sistema só aplica a abrangência em tela de pesquisa caso haja abrangência aplicada DIRETAMENTE ao campo da tabela.
Segue exemplo de regra para tratar a situação descrita acima:
/* ------------------- INÍCIO DA REGRA ------------------- */
Se (NomModRel = nome_do_relatorio)
Inicio
Definir alfa aAbrLoc;
RetornaAbrUsu(RH, 1, CodUSu, 0, 1, NUMLOC, aAbrLoc);
CarregaAbrUsu(USU_NUMLOC, 1, S, aAbrLoc);
Fim;
/* ------------------- FIM DA REGRA -------------------- */