Algumas maneiras de Filtrar os registros a serem apresentados na mBrowse
Opção 1: Usando a Função FilBrowse() para filtrar os registros antes da apresentação da mBrowse
/*/
Exemplo 1 ) Usando a Funcao FilBrowse()
/*/
User Function MbrFEx1()
Local aIndex := {}
Local cFiltro := "RA_SEXO == 'F'" //Expressao do Filtro
Private aRotina := {;
{ "Pesquisar" , "PesqBrw" , 0 , 1 },;
{ "Visualizar" , "AxVisual" , 0 , 2 },;
{ "Incluir" , "AxInclui" , 0 , 3 },;
{ "Alterar" , "AxAltera" , 0 , 4 },;
{ "Excluir" , "AxDeleta" , 0 , 5 };
}
Private bFiltraBrw := { || FilBrowse( "SRA" , @aIndex , @cFiltro ) } //Determina a Expressao do Filtro
Private cCadastro := "Exemplo de Filtro da mBrowse usando FilBrowse"
Eval( bFiltraBrw ) //Efetiva o Filtro antes da Chamada a mBrowse
mBrowse( 6 , 1 , 22 , 75 , "SRA" )
EndFilBrw( "SRA" , @aIndex ) //Finaliza o Filtro
Return( NIL )
|
Opção 2: Usando os parametros cTopFun e cBotFun da mBrowse(). Essa opção depende de um índice com o campo a ser delimitado
/*/
Exemplo 2 ) Usando os parametros cTopFun e cBotFun
( Depende da Existencia de um Indice com a Expressao de Filtro e que este seja o Indice Selecionado )
/*/
User Function MbrFEx2()
Local cTopFun := "U_TOPFUN()"
Local cBotFun := "U_BOTFUN()"
Private aRotina := {;
{ "Pesquisar" , "PesqBrw" , 0 , 1 },;
{ "Visualizar" , "AxVisual" , 0 , 2 },;
{ "Incluir" , "AxInclui" , 0 , 3 },;
{ "Alterar" , "AxAltera" , 0 , 4 },;
{ "Excluir" , "AxDeleta" , 0 , 5 };
}
Private cCadastro := "Exemplo de Filtro da mBrowse Usando os parametros cTopFun e cBotFun"
IndRegua("SRA",CriaTrab(NIL,.F.),"DTOS(SRA->RA_NASC)",NIL,NIL,NIL,.T.)
mBrowse( 6 , 1 , 22 , 75 , "SRA" , NIL , NIL , NIL , NIL , NIL , NIL , @cTopFun , @cBotFun )
Return( NIL )
User Function TopFun()
Return( '19701512' )
User Function BotFun()
Return( '19801512' )
|
Opção 2: Usando o parametro cExprFilTop da mBrowse(). Essa opção depende que o Rdd Contralor seja o TOPCONN e deve ser passado como uma expressão SQL válida.
/*/
3 ) Usando o parametros cExprFilTop
/*/
User Function MbrFEx3()
Local cExprFilTop := "RA_SEXO='F' AND RA_NASC >= '19701512' AND RA_NASC <= '19861512'"
Private aRotina := {;
{ "Pesquisar" , "PesqBrw" , 0 , 1 },;
{ "Visualizar" , "AxVisual" , 0 , 2 },;
{ "Incluir" , "AxInclui" , 0 , 3 },;
{ "Alterar" , "AxAltera" , 0 , 4 },;
{ "Excluir" , "AxDeleta" , 0 , 5 };
}
Private cCadastro := "Exemplo de Filtro da mBrowse Usando o parametro cExprFilTop"
MBrowse( 6 , 1 , 22 , 75 , "SRA" , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , cExprFilTop )
Return( NIL )
|
/*/ 3 ) Usando o parametros cExprFilTop com Ligação Externa. A expressão em SQL não pode conter caracteres especiais (por exemplo Chr(13)+Chr(10)) e devemos tomar cuidado com a quantidade de espaços entre as instruções da expressão. /*/
/*/
4 ) Usando o parametro cExprFilTop com ligacao externa
/*/
User Function MbrFEx4()
Local cExprFilTop := "RA_SEXO='F' AND RA_NASC >= '19701512' AND RA_NASC <= '19861512'"
Private aRotina := {;
{ "Pesquisar" , "PesqBrw" , 0 , 1 },;
{ "Visualizar" , "AxVisual" , 0 , 2 },;
{ "Incluir" , "AxInclui" , 0 , 3 },;
{ "Alterar" , "AxAltera" , 0 , 4 },;
{ "Excluir" , "AxDeleta" , 0 , 5 };
}
Private cCadastro := "Exemplo de Filtro da mBrowse Usando o parametro cExprFilTop com Ligação Externa"
IF ( "ORACLE" $ Upper( TcGetDb() ) )
cExprFilTop += " AND RA_FILIAL||RA_MAT IN (SELECT RB_FILIAL||RB_MAT FROM "
cExprFilTop += RetSqlName( "SRB" )
cExprFilTop += " WHERE RB_FILIAL = RA_FILIAL AND RB_MAT = RA_MAT AND RB_SEXO = 'M')"
Else
cExprFilTop += " AND RA_FILIAL+RA_MAT IN (SELECT RB_FILIAL+RB_MAT FROM "
cExprFilTop += RetSqlName( "SRB" )
cExprFilTop += " WHERE RB_FILIAL = RA_FILIAL AND RB_MAT = RA_MAT AND RB_SEXO = 'M')"
EndIF
mBrowse( 6 , 1 , 22 , 75 , "SRA" , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , NIL , cExprFilTop )
Return( NIL )
|
Para obter o código fonte dos exemplos clique
aqui.
[]s
иαldσ dj
Naldo, so tenho uma duvida.
ResponderExcluirEu fiz um filtro no MBrowse utilizando o parametro cExprFilTop. Ao usuario executar uma rotina do MBrowse, o registro deveria sumir da mesma pois durante a execucao o registro é alterado e nao fara mais parte do filtro. Mas ao voltar para o MBrowse, ele fica posicionado no registro e só sumira se o usuario der um Page UP e Page Down. Existe alguma função ou comando que eu posso executar para fazer um Refresh no MBrowse ?
Rubinho,
ResponderExcluirConsulte o "Post" Protheus :: Filtrando a mBrowse de acordo com a Legenda de Cores: http://naldodjblogs.blogspot.com/2011/04/protheus-opcoes-de-filtro-na-mbrowse.html?showComment=1305895864530#c7650227477403018303
e observe o seguinte:
oObjBrow := GetObjBrow() //Obtém o ultimo Objeto Browse
oObjBrow:ResetLen()
oObjBrow:GoTop()
oObjBrow:Refresh()
[]s
иαldσ dj
Problema,
ResponderExcluirtenho um modelo2 onde somente os campos do cabeçalho sao exibidos na mbrowse, porém...
devido a existencia de itens os registros aparecem duplicados na mbrowse.
Questao,
como retirar?
Identifique um campo que torne o registro único e aplique um filtro na mBrowse baseado nele. Procure usar o filtro @.
ResponderExcluir[]s
иαldσ dj
Naldo bom dia.
ResponderExcluirExiste uma forma ou comando que me traga o filtro ativo na mbrowse? Pra ser mais especifico preciso incluir no arotina do FINA750 uma opção de tela que some todos os titulos que estao abertos na mbrowse e pra isso preciso saber do filtro ativo na tela.
Vicente, dbFilter() retorna o Filtro Corrente. Experimente utilizá-la passando a tabela por referência de Alias: Ex.: (cAlias)->( dbFilter() ) -> cFilter. Onde: cAlias conterá o Alias() da Tabela que deseja obter o filtro corrente. Se dbFilter() não solucionar seu problema teremos que analisar o filtro aplicado à tabela de forma a identificar a melhor forma de obtê-lo.
ExcluirBom testei aqui e nao solucionou...rs. A tabela é a SE2, E a rotina FINA750. Preciso achar o filtro se possivel for no ponto de entrada F750BROW, depois de clicar na minha função.
ExcluirMuito obrigado pela ajuda.
Naldo, o dbfilter nao solucionou...a tabela eh a SE2, no funçoes contas a pagar... ponto de entrada F750BROW.
ExcluirOK Vicente, vou verificar...
ExcluirNaldo blz cara é o Luiz, cara seguinte tenho uma mbrowse e preciso dar um refresh nela porém o meu problema é o arotina com as opções do menu do browse, gostaria de dar um refresh neste menu, tipo tenho um menu que filtra e tem a opção meus chamados, porém qdo eu clicar em meus chamados quero que a opção mude par todos os chamados, para o cara poder clicar e voltar, e assim sucessivamente, mesmo alteração o arotina ele não altera no browse, teria uma solução ?
ResponderExcluirAbraços.
Você terá que obter o objeto do menu em questão e dar um "Refresh" nele. Poderá fazer isso seguindo o Post:
ExcluirProtheus :: ADVPL : The Container : Presents Pandora's box
Read more: http://www.blacktdn.com.br/2011/06/protheus-advpl-container-presents.html#ixzz2U3HmADlA
ou
BlackTDN :: Customizando a interface de Login no Protheus e by You
Read more: http://www.blacktdn.com.br/2012/09/blacktdn-customizando-interface-de.html#ixzz2U3I9Q955
Naldo,
ResponderExcluirExiste alguma forma de fazer o filtro após carregar o mbrowse, criando uma opção nas ações relacionadas que ative esse filtro?
Obrigado!
Existe sim. Nos "templates" disponibilizados no GitHub tem exemplo de como fazer isso.
Excluir[]s
иαldσ dj
Verifique no fonte NDJLib001.prg
ExcluirFuncao: BrwFiltLeg
Utilizo a função FilBrowse() antes da chamado do mbrowe. Ok, ele faz o filtro correto, mas ao clicar no botão Pesquisar do browser o filtro é desfeito. Alguém sabe o que pode causar isso?
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluirBoa noite Naldo,
ResponderExcluirOs campos que vem no filtro concatenados precisam ser um índice criado na tabela?
"AND RA_FILIAL+RA_MAT IN"
Estou fazendo com outra tabela que é coligada somente por um campo e não está funcionando.
Com o seu exemplo funciona perfeitamente.
Luiz, como elaborou a expressão??
ExcluirPoxa, muito Top o post.
ResponderExcluirAjudou a esclarecer tudo, muito simples de usar. Obrigado por compartilhar.
abraço.
Perfeito!
ResponderExcluirDesenvolvi toda uma lógica, montando o filtro dinamicamente.
A aplicação funcionou.
Foi muito útil, e poupou um tempão de desenvolvimento.
Muito obrigada.
Ola Naldo,
ResponderExcluirEstou batendo a cabeça para entender essa informação da TOTVS referente ao filtro da MBrowse depois da versão 11 - não entendi se caberia algum das suas sugestões acima.
Pelo o que entendi, depois da versão 11 os filtros normais não funcionam em algumas Mbrowse que aplicam o filtro na rotina via FilBrowse.
http://tdn.totvs.com/pages/releaseview.action?pageId=225266956
gambiarra da porra...
ResponderExcluir