Como usar a FWTableAtt | Ti Responde 0255

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação