No vídeo de hoje, vamos demonstrar em como usar a FWTableAtt para criação de gráficos em browses que usam FWmBrowse.
A dúvida de hoje, nos perguntaram, em como criar gráficos em browses de cadastro que usam a FWmBrowse.
Pensando nisso, montamos um exemplo, onde vamos demonstrar em como criar um gráfico de pizza e um de barras usando um browse com a tabela SBM.
Segue abaixo o vídeo exemplificando:
Abaixo o código fonte desenvolvido:
//Bibliotecas
#Include "Totvs.ch"
#Include "FWMVCDef.ch"
//Variveis Estaticas
Static cTitulo := "Grupo de Produtos"
Static cAliasMVC := "SBM"
/*/{Protheus.doc} User Function zVid0255
Exemplo de Browse com FWTableAtt
@author Atilio
@since 25/04/2026
@version 1.0
@type function
@see https://tdn.totvs.com/pages/releaseview.action?pageId=166821968#Gr%C3%A1ficoseVis%C3%B5esdoBrowse-_Toc382924274Criandoumgr%C3%A1ficoanexoaobrowseviac%C3%B3digo
/*/
User Function zVid0255()
Local aArea := FWGetArea()
Local cFunBkp := FunName()
Private oBrowse
Private aRotina := {}
Private oTimer
Private aTextos := {}
Private nTexto := 0
Private oTableAtt
SetFunName('zVid0255')
//Definicao do menu
aRotina := MenuDef()
//Instanciando o browse
oBrowse := FWMBrowse():New()
oBrowse:SetAlias(cAliasMVC)
oBrowse:SetDescription(cTitulo)
oBrowse:DisableDetails()
//Adiciona graficos
oTableAtt := u_zAttSBM()
oBrowse:SetAttach(.T.)
oBrowse:SetOpenChart(.T.)
oBrowse:SetViewsDefault(oTableAtt:aViews)
oBrowse:SetChartsDefault(oTableAtt:aCharts)
oBrowse:SetIDChartDefault('grafSBM')
oBrowse:SetTotalDefault('BM_GRUPO','COUNT','Total de Grupos')
//Ativa a Browse
oBrowse:Activate()
SetFunName(cFunBkp)
FWRestArea(aArea)
Return Nil
/*/{Protheus.doc} MenuDef
Menu de opcoes na funcao zVid0255
@author Atilio
@since 25/04/2026
@version 1.0
@type function
/*/
Static Function MenuDef()
Local aRotina := {}
//Adicionando opcoes do menu
ADD OPTION aRotina TITLE "Visualizar" ACTION "VIEWDEF.MATA035" OPERATION 1 ACCESS 0
ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.MATA035" OPERATION 3 ACCESS 0
ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.MATA035" OPERATION 4 ACCESS 0
ADD OPTION aRotina TITLE "Excluir" ACTION "VIEWDEF.MATA035" OPERATION 5 ACCESS 0
ADD OPTION aRotina TITLE "Copiar" ACTION "VIEWDEF.MATA035" OPERATION 9 ACCESS 0
Return aRotina
/*/{Protheus.doc} zAttSBM()
Função que monta o gráfico e views relacionadas na tela
@type user function
@author Atilio
@since 25/08/2025
/*/
User Function zAttSBM()
//Visões
Local oDsStatus := Nil
Local oDsProced := Nil
//Gráficos
Local oChartStatus := Nil
Local oChartProced := Nil
Local oTableAtt := FWTableAtt():New()
//Define que vai usar a SBM
oTableAtt:SetAlias("SBM")
//----------
// Visões
//----------
//BM_STATUS - Status
oDsStatus := FWDSView():New()
oDsStatus:SetName("Status")
oDsStatus:SetID("Status")
oDsStatus:SetOrder(1) // BM_FILIAL + BM_GRUPO
oDsStatus:SetCollumns(FWSX3Util():GetAllFields('SBM',.T.))
oDsStatus:SetPublic( .T. )
oDsStatus:AddFilter("Status", "BM_STATUS $ ' ,1,2,3,4'")
oTableAtt:AddView(oDsStatus)
//BM_PROORI
oDsProced := FWDSView():New()
oDsProced:SetName("Procedencia")
oDsProced:SetID("Procedencia")
oDsProced:SetOrder(1) // BM_FILIAL + BM_GRUPO
oDsProced:SetCollumns(FWSX3Util():GetAllFields('SBM',.T.))
oDsProced:SetPublic( .T. )
oDsProced:AddFilter("Procedencia", "BM_PROORI $ ' ,1,2'")
oTableAtt:AddView(oDsProced)
//------------
// Gráficos
//------------
//BM_STATUS - Status
oChartStatus := FWDSChart():New()
oChartStatus:SetName("Status")
oChartStatus:SetTitle("Status dos Grupos")
oChartStatus:SetID("PorStatus")
oChartStatus:SetType("PIECHART")
oChartStatus:SetSeries({ {"SBM", "BM_STATUS", "COUNT"} })
oChartStatus:SetCategory( { {"SBM", "BM_STATUS"} } )
oChartStatus:SetPublic( .T. )
oChartStatus:SetLegend( CONTROL_ALIGN_BOTTOM )
oChartStatus:SetTitleAlign( CONTROL_ALIGN_CENTER )
oTableAtt:AddChart(oChartStatus)
//BM_PROORI - Procedencia Original
oChartProced := FWDSChart():New()
oChartProced:SetName("Procedencia")
oChartProced:SetTitle("Procedencia Original")
oChartProced:SetID("PorProced")
oChartProced:SetType("BARCOMPCHART")
oChartProced:SetSeries({ {"SBM", "BM_PROORI", "COUNT"} })
oChartProced:SetCategory( { {"SBM", "BM_PROORI"} } )
oChartProced:SetPublic( .T. )
oChartProced:SetLegend( CONTROL_ALIGN_BOTTOM )
oChartProced:SetTitleAlign( CONTROL_ALIGN_CENTER )
oTableAtt:AddChart(oChartProced)
Return oTableAtt
Bom pessoal, por hoje é só.
Abraços e até a próxima.