SetarFiltroSql
Define um filtro sql, personalizado pelo cliente, em tabelas do sistema ou de usuário.
Sintaxe: Funcao SetarFiltroSql(Alfa aTabela, Alfa aCampo, Alfa aFiltro);
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
aTabela | Alfa | Nome da tabela onde o filtro será definido. |
aCampo | Alfa | Nome do campo da tabela onde o filtro será definido. |
aFiltro | Alfa | Filtro sql que deverá ser definido no campo, ou vazio ("") para limpar o filtro do campo. |

@ Para definir um filtro onde somente podem ser vistos clientes que tenham definição
para a empresa ativa @
Definir Alfa vAlfCodEmp;
Definir Alfa vFiltro;
IntParaAlfa(CodEmp, vAlfCodEmp);
vFiltro = "SELECT CODCLI FROM E085HCL WHERE CODEMP = " + vAlfCodEmp;
SetarFiltroSql("E085CAD", "CodCli", vFiltro);
@ Para limpar o filtro da tabela de cliente, campo código @
SetarFiltroSql("E085CAD", "CodCli", "");

@ Para definir um filtro onde retorne somente derivações de produtos ativas@
SetarFiltroSql("E075DER","SITDER","'A'");

Definir Alfa alfAux;
Definir Alfa msgAux;
Definir Alfa ENTER;
CaracterParaAlfa(13, ENTER);
IntParaAlfa(CodUsu, alfAux);
msgAux = "Usuário: " + alfAux + " (" + NomUsu + ")" + ENTER;
IntParaAlfa(CodEmp, alfAux);
msgAux = msgAux + "Empresa: " + alfAux + " (" + Empresa + ")" + ENTER;
IntParaAlfa(CodFil, alfAux);
msgAux = msgAux + "Filial: " + alfAux + " (" + Filial + ")";
msgAux = msgAux + "[&OK]";
Mensagem(retorna, msgAux);
***********************************************************
Exemplo de Regra para utilização do SetarFiltroSql:
@ Para definir um filtro onde somente podem ser vistos clientes que tenham definição para a empresa ativa @
Definir Alfa vAlfCodEmp;
Definir Alfa vFiltro;
IntParaAlfa(CodEmp, vAlfCodEmp);
vFiltro = "SELECT CODCLI FROM E085HCL WHERE CODEMP = " + vAlfCodEmp;
SetarFiltroSql("E085CLI", "CodCli", vFiltro);
@ Para limpar o filtro da tabela de cliente, campo código @
SetarFiltroSql("E085CLI", "CodCli", "");
************************************************************
@ Para definir um filtro onde retorne somente derivações de produtos ativas@
SetarFiltroSql("E075DER","SITDER","'A'");
Importante
Caso haja a necessidade de realizar o tratamento de filtros de uma tabela, porém a tabela que está criando o registro é a outra, é preciso considerar as duas tabelas na regra. Considerando o exemplo do cadastro do cliente, tela F085CAD e tabela E085CLI, onde a intenção é filtrar os dados baseado em informações das definições do cliente (tabela E085HCL), a regra deve tratar a busca dos dados em ambas as tabelas, conforme o exemplo de regra que segue abaixo, onde é filtrado os clientes que possuem um determinado representante vinculado.
VFILTRO = "SELECT CODCLI FROM E085HCL WHERE E085HCL.CODREP = 4 UNION SELECT CODCLI FROM E085CLI WHERE NOT EXISTS "+ "(SELECT 1 FROM E085HCL WHERE E085CLI.CODCLI = E085HCL.CODCLI )";
SETARFILTROSQL("E085CLI", "CODCLI", VFILTRO);
Observações:
- Esta função somente pode ser chamada através do identificador de regras GER/000SELEF01.
- O filtro deve ser um select completo, que retorne somente um campo, do mesmo tipo do campo informado em aCampo ou pode-se setar o filtro diretamente.
-
na tabela passando o campo e qual situação que ele deve estar.
- Uma vez que o filtro é definido em um campo, somente nas seguintes situações ele é
removido:
- Ao limpar o filtro explicitamente;
- Ao definir um novo filtro no mesmo campo;
- No logon de usuários ao sistema;
- No fechamento da instância do Gestão Empresarial | ERP.
- Para cada campo, de cada tabela, somente é possível definir um filtro de usuário. Ao definir um segundo filtro o primeiro é eliminado.
- Nem todas as telas têm suporte a estes filtros, caso for necessário que uma tela tenha suporte a um determinado filtro é necessário criar uma tarefa para implementação do suporte (criar uma tarefa por tela).
- Quando filtro é definido num determinado campo, não há garantias de que registros de
outras tabelas também considerem o filtro, sendo o ideal que se sete o filtro também
para aquela tabela.
Exemplo: Se for definido um filtro em que o fornecedor X não seja visível, não há garantias de que não seja possível visualizar as observações cadastradas para esse fornecedor X; - Após atribuir filtro em um campo, tal filtro pode causar a inviabilidade de se cadastrar novos registros na tabela, logo é sugerido que não sejam atribuídos filtros para usuários que cadastram informações.
- Quando a função de programador "SetarFiltroSql" for utilizada, somente será possível realizar uma troca de empresa/filial saindo do ERP e logando na empresa/filial desejada, pois os filtros indicados na função de programador não são limpos quando a troca de empresa/filial ocorre através do menu do ERP.