Skip to content

Exemplo query alias

Saulo Martins edited this page Jul 4, 2026 · 1 revision

Exemplo - Preenchimento com Query/Alias

O método Alias2Tab preenche a planilha diretamente a partir de um alias (tabela posicionada ou query), buscando automaticamente as definições dos campos na SX3 (descrição, picture, combo).

Exemplo 1 - Básico (query + formato tabela do Excel)

#include "totvs.ch"
User Function ytst6()
	Local oExcel
	Local cAlias
	Local oTabela
	oExcel := custom.excel.Xlsx():New()
	oExcel:ADDPlan(cNome="SB1",cCor="1F497D") //Adiciona nova planilha

	cAlias := MpSysOpenQuery("SELECT * FROM "+RetSqlName("SB1")+" WHERE D_E_L_E_T_=' '")

	oTabela := oExcel:AddTabela("Tabela2") //Cria a tabela formatada
	oTabela:Alias2Tab(cAlias=cAlias,lSx3=.T.)  //lSx3=.T. buscar definições dos campos na SX3
	(cAlias)->(DbCloseArea())

	oTabela:AddTotal(xColuna="Codigo",xValor=0,cFunction="COUNTA") //Função COUNTA (Contar Valores)
	oTabela:AddTotais() //Adiciona a linha de totais
	oTabela:Finish()    //Fecha a edição da tabela

	oExcel:Save(GetTempPath())
	oExcel:OpenApp()
	oExcel:Close()
Return

Exemplo 2 - Tabela posicionada com subtotais e formatação de linhas

Local jCab, oRegraLinha
Local oExcel    := custom.excel.Xlsx():New(cNomeFile="TstYExcel",cTipo="A")
Local oPosMoeda := oExcel:NewStyle():SetnumFmt(44)
Local nPosCor3  := oExcel:CorPreenc("FF4F81BD")
Local nPosFont3 := oExcel:AddFont(nTamanho=11,xCorRGB="FFFFFFFF",cNome="Calibri",cfamily="2")
Local oPosCAB   := oExcel:NewStyle():SetFont(nPosFont3):Setfill(nPosCor3)
Local oEstilo1  := oExcel:NewStyle():Setborder(oExcel:Borda("ALL"))
Local oSubTotal := oExcel:NewStyle(oEstilo1):Setfill(nPosCor3):SetFont(nPosFont3)
Local aOnlyFieds:= {"B1_COD","B1_DESC","B1_TIPO","B1_GRUPO","B1_UM","B1_LOCPAD","B1_PICM","B1_PRV1"}

oExcel:ADDPlan(cNome="SB1",cCor="E26B0A")
SB1->(DBSetOrder(4)) //B1_FILIAL, B1_GRUPO, B1_COD
SB1->(DbGoTop())
oExcel:Pos(1,1):SetValue("Cadastro de produtos")

//Definir detalhe dos campos manualmente
jCab := jSonObject():New()
oExcel:NewFldTab(jCab=jCab,cCampo="B1_PRV1")
jCab["B1_PRV1"]["style"]  := oPosMoeda //Campo moeda
oExcel:NewFldTab(jCab=jCab,cCampo="B1_GRUPO")
jCab["B1_GRUPO"]["ordem"] := 1         //Alterar ordem para 1
oExcel:NewFldTab(jCab=jCab,cCampo="NEWCAMPO",cDescricao="Registro",nTamanho=10,cPicture="9",cTipo="N",cDados="Recno()",lNewCampo=.T.) //Campo novo

//Criar subtotal por grupo
oExcel:DefSubTotal(cChave="B1_GRUPO",lSubTotal=.T.,lTotalGeral=.T.,lAgrupar=.T.,nNivel=2)
oExcel:AddSubTotal(cCampo="B1_GRUPO",cFuncao="last") //Último conteúdo
oExcel:AddSubTotal(cCampo="B1_PRV1",cFuncao="9")     //Somar
oExcel:AddSubTotal(cCampo="B1_PICM",cFuncao="1")     //Média

//Regra para formatação das linhas de subtotal
oRegraLinha := oExcel:NewRuleLine({|| oExcel:cSubTotalTp })
oRegraLinha:AddRegra(cRegra="S",oStyle=oSubTotal,lPrincipal=.F.) //S = SubTotal
oRegraLinha:AddRegra(cRegra="T",oStyle=oSubTotal,lPrincipal=.F.) //T = Total Geral

oExcel:Alias2Tab(cAlias="SB1",oStyle=oPosCAB,lSx3=.T.,jCab=jCab,lExibirCab=.T.,aOnlyFieds=aOnlyFieds,xRegraStyle=oRegraLinha,oStyleLinha=oEstilo1)

oExcel:Save(GetTempPath())
oExcel:OpenApp()
oExcel:Close()

Métodos relacionados

Método Descrição
Alias2Tab Preenche o Excel baseado no alias
NewFldTab Altera definição de campos ou cria novo campo
DefSubTotal Cria subtotal e agrupamento
NewRuleLine Regra de formatação de linhas
AddTabela Formato tabela do Excel

Clone this wiki locally