mBrowse que nao suporta personalizacao de filtro. Ex.: a mBrowse do programa FINC040? Respondi: Tudo e possivel, depende do quanto esteja disposto a pagar (rs). Mas, sim, e possivel desde que entenda o funcionamento do sistema. Disse-lhe: Se a mBrowse nao aceita filtro, mas a rotina permite um desvio utilize o desvio para implementar a sua propria mBrowse com filtro. Ex.: //--------------------------------------------------------------------------------------------------------#include "totvs.ch"//-------------------------------------------------------------------------------------------------------- /* Programa:uFinc040x Funcao:U_Finc040x Autor:Marinaldo de Jesus (http://blacktdn.com.br) Data:11/08/2016 Descricao:Implementar "Filtro de Browse" customizado para a rotina FINC040 Uso:Chamada a partir do Menu*/ //--------------------------------------------------------------------------------------------------------User Function Finc040x(nPosArotina) local cFunName if .not.(IsInCallStack("FINC040")) cFunName:=SetFunName("FINC040") begin sequence Finc040(nPosArotina) end sequence SetFunName(cFunName) endifreturn //-------------------------------------------------------------------------------------------------------- /* Programa:uFinc040x Funcao:U_FC040FIL Autor:Marinaldo de Jesus (http://blacktdn.com.br) Data:11/08/2016 Descricao:PE executado antes da chamada da mBrowse padrao. Uso:Implementacao do PE FC040FIL para mBrowse com FiltroImplementacao do PE FC040FIL*/ //--------------------------------------------------------------------------------------------------------User Function FC040FIL() local cExprFilTop local lA1XCOLLEC if (IsInCallStack("U_FINC040X")) cExprFilTop:="EXISTS" cExprFilTop+=" " cExprFilTop+="(" cExprFilTop+= "SELECT DISTINCT 1 FROM" cExprFilTop+=" " cExprFilTop+= RetSQLName("SA1") cExprFilTop+=" " cExprFilTop+= "SA1" cExprFilTop+=" " cExprFilTop+= "WHERE" cExprFilTop+=" " cExprFilTop+= "SA1.A1_COD=E1_CLIENTE" cExprFilTop+=" " cExprFilTop+= "AND" cExprFilTop+=" " cExprFilTop+= "SA1.A1_LOJA=E1_LOJA" lA1XCOLLEC:=SA1->(FieldPos("A1_XCOLLEC")>0) if (lA1XCOLLEC) cExprFilTop+=" " cExprFilTop+= "AND" cExprFilTop+=" " cExprFilTop+= "A1_XCOLLEC='"+cCodUser+"'" endif cExprFilTop+=" " cExprFilTop+= "AND" cExprFilTop+=" " cExprFilTop+= "SA1.D_E_L_E_T_=' '" cExprFilTop+=")" mBrowse(6,1,22,75,"SE1",NIL,NIL,NIL,NIL,NIL,Fa040Legenda("SE1"),NIL,NIL,NIL,NIL,NIL,NIL,NIL,cExprFilTop) break endifreturn//-------------------------------------------------------------------------------------------------------- E com essa solucao perco a funcionalidade padrao? Nao. Mantera toda a compatibilidade do codigo antes da chamada do PE e posterior a ela. Unico inconveniente e ter que incluir a opcao no Menu. E tem como contornar esse inconveniente? Sim. Mas nao garanto o salto de BREAK (rs). No modelo acima, o salto de BREAK esta controlado. Ja no exemplo abaixo.... talvez va para o limbo Ex.: //--------------------------------------------------------------------------------------------------------#include "totvs.ch"//-------------------------------------------------------------------------------------------------------- /* Programa:uFinc040x Funcao:U_FC040FIL Autor:Marinaldo de Jesus (http://blacktdn.com.br) Data:11/08/2016 Descricao:PE executado antes da chamada da mBrowse padrao. Uso:Implementacao do PE FC040FIL para mBrowse com Filtro*/ //--------------------------------------------------------------------------------------------------------User Function FC040FIL() local cExprFilTop local lA1XCOLLEC cExprFilTop:="EXISTS" cExprFilTop+=" " cExprFilTop+="(" cExprFilTop+= "SELECT DISTINCT 1 FROM" cExprFilTop+=" " cExprFilTop+= RetSQLName("SA1") cExprFilTop+=" " cExprFilTop+= "SA1" cExprFilTop+=" " cExprFilTop+= "WHERE" cExprFilTop+=" " cExprFilTop+= "SA1.A1_COD=E1_CLIENTE" cExprFilTop+=" " cExprFilTop+= "AND" cExprFilTop+=" " cExprFilTop+= "SA1.A1_LOJA=E1_LOJA" lA1XCOLLEC:=SA1->(FieldPos("A1_XCOLLEC")>0) if (lA1XCOLLEC) cExprFilTop+=" " cExprFilTop+= "AND" cExprFilTop+=" " cExprFilTop+= "A1_XCOLLEC='"+cCodUser+"'" endif cExprFilTop+=" " cExprFilTop+= "AND" cExprFilTop+=" " cExprFilTop+= "SA1.D_E_L_E_T_=' '" cExprFilTop+=")" mBrowse(6,1,22,75,"SE1",NIL,NIL,NIL,NIL,NIL,Fa040Legenda("SE1"),NIL,NIL,NIL,NIL,NIL,NIL,NIL,cExprFilTop) breakreturn//-------------------------------------------------------------------------------------------------------- E porque isso funciona? Ai e uma outra historia... []s ld dj #pirateandoConhecimentoComVoce