No artigo de hoje, vamos demonstrar em como criar uma pergunta logo ao abrir um browse para filtrar as informações.
Para fazermos esse procedimento, o primeiro passo é na criação do nosso FWmBrowse, nós acionarmos uma função para montar o filtro, que chamamos de fMontaFilt. Ela irá abrir uma tela de parâmetros, então logo ao abrir a rotina, será exibido uma tela similar a abaixo:
Se a tela for cancelada, nenhum filtro será aplicado. Porém, se a tela for confirmada, será aberto o browse com o filtro aplicado:
Abaixo o código fonte de exemplo:
//Bibliotecas
#Include "Totvs.ch"
#Include "FWMVCDef.ch"
//Variveis Estaticas
Static cTitulo := "Artistas"
Static cAliasMVC := "ZD1"
/*/{Protheus.doc} User Function zMVC01
Cadastro de Artistas
@author Daniel Atilio
@since 21/01/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
User Function zMVC01()
Local aArea := GetArea()
Local oBrowse
Private aRotina := {}
//Definicao do menu
aRotina := MenuDef()
//Instanciando o browse
oBrowse := FWMBrowse():New()
oBrowse:SetAlias(cAliasMVC)
oBrowse:SetDescription(cTitulo)
oBrowse:DisableDetails()
//Filtrando o browse
cFiltro := fMontaFilt()
If ! Empty(cFiltro)
oBrowse:SetFilterDefault(cFiltro)
EndIf
//Ativa a Browse
oBrowse:Activate()
RestArea(aArea)
Return Nil
/*/{Protheus.doc} MenuDef
Menu de opcoes na funcao zMVC01
@author Daniel Atilio
@since 21/01/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function MenuDef()
Local aRotina := {}
//Adicionando opcoes do menu
ADD OPTION aRotina TITLE "Visualizar" ACTION "VIEWDEF.zMVC01" OPERATION 1 ACCESS 0
ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.zMVC01" OPERATION 3 ACCESS 0
ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.zMVC01" OPERATION 4 ACCESS 0
ADD OPTION aRotina TITLE "Excluir" ACTION "VIEWDEF.zMVC01" OPERATION 5 ACCESS 0
Return aRotina
User Function z01Menu()
Return MenuDef()
/*/{Protheus.doc} ModelDef
Modelo de dados na funcao zMVC01
@author Daniel Atilio
@since 21/01/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function ModelDef()
Local oStruct := FWFormStruct(1, cAliasMVC)
Local oModel
Local bPre := Nil
Local bPos := Nil
Local bCommit := Nil
Local bCancel := Nil
//oStruct:SetProperty('ZD1_DTFORM', MODEL_FIELD_INIT, FwBuildFeature(STRUCT_FEATURE_INIPAD, 'Date()'))
oStruct:SetProperty('ZD1_DTFORM', MODEL_FIELD_INIT, FwBuildFeature(STRUCT_FEATURE_INIPAD, 'dDataBase'))
//oStruct:SetProperty('ZD1_DTFORM', MODEL_FIELD_INIT, FwBuildFeature(STRUCT_FEATURE_INIPAD, 'sToD("20221101")'))
//Cria o modelo de dados para cadastro
oModel := MPFormModel():New("zMVC01M", bPre, bPos, bCommit, bCancel)
oModel:AddFields("ZD1MASTER", /*cOwner*/, oStruct)
oModel:SetDescription("Modelo de dados - " + cTitulo)
oModel:GetModel("ZD1MASTER"):SetDescription( "Dados de - " + cTitulo)
oModel:SetPrimaryKey({})
Return oModel
User Function z01Model()
Return ModelDef()
/*/{Protheus.doc} ViewDef
Visualizacao de dados na funcao zMVC01
@author Daniel Atilio
@since 21/01/2022
@version 1.0
@type function
@obs Codigo gerado automaticamente pelo Autumn Code Maker
@see http://autumncodemaker.com
/*/
Static Function ViewDef()
Local oModel := FWLoadModel("zMVC01")
Local oStruct := FWFormStruct(2, cAliasMVC)
Local oView
//Cria a visualizacao do cadastro
oView := FWFormView():New()
oView:SetModel(oModel)
oView:AddField("VIEW_ZD1", oStruct, "ZD1MASTER")
oView:CreateHorizontalBox("TELA" , 100 )
oView:SetOwnerView("VIEW_ZD1", "TELA")
Return oView
/*/{Protheus.doc} fMontaFilt
Função que abre a tela de parâmetros para montagem de filtro no browse
@author Atilio
@since 07/02/2023
@version 1.0
/*/
Static Function fMontaFilt()
Local aArea := FWGetArea()
Local cFiltro := ""
Local aPergs := {}
Local cCodDe := Space(TamSX3('ZD1_CODIGO')[01])
Local cCodAt := StrTran(cCodDe, ' ', 'Z')
Local dDataDe := FirstDate(MonthSub(Date(), 1))
Local dDataAte := Date()
//Adiciona os parâmetros que serão exibidos
aAdd(aPergs, {1, "Código De", cCodDe, "", ".T.", "", ".T.", 60, .F.})
aAdd(aPergs, {1, "Código Até", cCodAt, "", ".T.", "", ".T.", 60, .T.})
aAdd(aPergs, {1, "Data De", dDataDe, "", ".T.", "", ".T.", 80, .T.})
aAdd(aPergs, {1, "Data Até", dDataAte, "", ".T.", "", ".T.", 80, .T.})
//Se a pergunta for confirmada
If ParamBox(aPergs, "Informe os parâmetros", , , , , , , , , .F., .F.)
//Filtro da Código De
If ! Empty(MV_PAR01)
cFiltro += "ZD1->ZD1_CODIGO >= '" + MV_PAR01 + "'"
EndIf
//Filtro do Código Até
If ! Empty(MV_PAR02)
If ! Empty(cFiltro)
cFiltro += " .And. "
EndIf
cFiltro += "ZD1->ZD1_CODIGO <= '" + MV_PAR02 + "'"
EndIf
//Filtro da Data De
If ! Empty(MV_PAR03)
If ! Empty(cFiltro)
cFiltro += " .And. "
EndIf
cFiltro += "ZD1->ZD1_DTFORM >= sToD('" + dToS(MV_PAR03) + "')"
EndIf
//Filtro da Data Até
If ! Empty(MV_PAR04)
If ! Empty(cFiltro)
cFiltro += " .And. "
EndIf
cFiltro += "ZD1->ZD1_DTFORM <= sToD('" + dToS(MV_PAR04) + "')"
EndIf
EndIf
FWRestArea(aArea)
Return cFiltro
Bom pessoal, por hoje é só.
Abraços e até a próxima.

