Postagem em destaque
- Gerar link
- Outros aplicativos
BlackTDN :: FINC040 : Filtrando a mBrowse
Perguntaram-me: é possível filtrar uma mBrowse que “não suporta personalização de filtro”. Ex.: a mBrowse do programa FINC040?
Respondi: Tudo é possível, depende do quanto esteja disposto a pagar (rs). Mas, sim, é possível desde que entenda o funcionamento do sistema.
Disse-lhe: Se a mBrowse não aceita filtro, mas a rotina permite um “desvio” utilize o “desvio” para implementar a sua própria mBrowse com filtro.
Ex.:
//--------------------------------------------------------------------------------------------------------
#include "totvs.ch"
//--------------------------------------------------------------------------------------------------------
/*
Programa:uFinc040x
Função:U_Finc040x
Autor:Marinaldo de Jesus (http://blacktdn.com.br)
Data:11/08/2016
Descrição: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)
endif
return
//--------------------------------------------------------------------------------------------------------
/*
Programa:uFinc040x
Função:U_FC040FIL
Autor:Marinaldo de Jesus (http://blacktdn.com.br)
Data:11/08/2016
Descrição:PE executado antes da chamada da mBrowse padrão.
Uso:Implementação do PE FC040FIL para mBrowse com FiltroImplementação 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
endif
return
//--------------------------------------------------------------------------------------------------------
E com essa solução perco a funcionalidade padrão? Não. Manterá toda a compatibilidade do código antes da chamada do PE e posterior a ela. Único inconveniente é ter que incluir a opção no Menu.
E tem como contornar esse inconveniente? Sim. Mas não garanto o “salto” de BREAK (rs). No modelo acima, o “salto” de BREAK está controlado. Já no exemplo abaixo…. talvez vá para o “limbo”
Ex.:
//--------------------------------------------------------------------------------------------------------
#include "totvs.ch"
//--------------------------------------------------------------------------------------------------------
/*
Programa:uFinc040x
Função:U_FC040FIL
Autor:Marinaldo de Jesus (http://blacktdn.com.br)
Data:11/08/2016
Descrição:PE executado antes da chamada da mBrowse padrão.
Uso:Implementação 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)
break
return
//--------------------------------------------------------------------------------------------------------
E porque isso funciona? Aí é uma outra história…
[]s
иαldσ dj
#pirateandoConhecimentoComVocê
- Gerar link
- Outros aplicativos
Comentários
Postagens mais visitadas
BlackTDN :: RLeg ~ Desvendando a Função ParamBox
- Gerar link
- Outros aplicativos
Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login
- Gerar link
- Outros aplicativos
Legal. Resolvi o meu problema com poucos passos.
ResponderExcluirMuito obrigada.