Categorias

Criando seu primeiro relatório com TReport

Antes de criar o nosso primeiro relatório, vamos fazer uma prévia sobre o que é o TReport.

Ele é uma classe de impressão que substitui as funções SetPrint, SetDefault, RptStatus e Cabec.

A classe TReport permite que o usuário personalize as informações que serão apresentadas no relatório, alterando fonte (tipo, tamanho, etc.), cor, tipo de linhas, cabeçalho, rodapé, etc.

Estrutura do componente TReport: o relatório (TReport) contém uma ou mais seções (TRSection);

Uma seção (TRSection) pode conter uma ou mais seções; a seção (TRSection) contém células pré-definidas e células selecionadas pelo usuário; a seção (TRSection) também contém as quebras (TRBreak) para impressão de totalizadores (TRFunction);

Os totalizadores são incluídos pela seção que automaticamente inclui no relatório (TReport).

Agora vamos ao que interessa: criar seu primeiro relatório com TReport.

#include "rwmake.ch"
#include "protheus.ch"
#define DMPAPER_A4 9
User Function REST003()
	local oReport
	local cPerg := PadR('REST003',10)
 
	oReport := reportDef()
	oReport:printDialog()
Return
 
static function reportDef()
	local oReport
	Local oSection1
	Local oSection2
	local cTitulo := '[REST003] - Impressão de Produtos'
 
	oReport := TReport():New('REST003', cTitulo, , {|oReport| PrintReport(oReport)},"Este relatorio ira imprimir a relacao de produtos.")
	oReport:SetPortrait()
	oReport:SetTotalInLine(.F.)
	oReport:ShowHeader()
 
	oSection1 := TRSection():New(oReport,"Filial",{"QRY"})
	oSection1:SetTotalInLine(.F.)
 
	TRCell():New(oSection1, "B1_FILIAL"	, "QRY", 'FILIAL'	,PesqPict('SB1',"B1_FILIAL"),TamSX3("B1_FILIAL")[1]+1,/*lPixel*/,/*{|| code-block de impressao }*/)
	TRCell():new(oSection1, "B1_CODMES"	, "QRY", 'COD.MES'	,PesqPict('SB1',"B1_CODMES"),TamSX3("B1_CODMES")[1]+1,/*lPixel*/,/*{|| code-block de impressao }*/)
	TRCell():new(oSection1, "B1_SUFIXO"	, "QRY", 'SUFIXO'	,PesqPict('SB1',"B1_SUFIXO"),TamSX3("B1_SUFIXO")[1]+1,/*lPixel*/,/*{|| code-block de impressao }*/)
	TRCell():new(oSection1, "B1_COD"	, "QRY", 'COD.INT'	,PesqPict('SB1',"B1_COD")	,TamSX3("B1_COD")[1]+1,/*lPixel*/,/*{|| code-block de impressao }*/)
	TRCell():new(oSection1, "B1_REFFAB"	, "QRY", 'REF.FAB'	,PesqPict('SB1',"B1_REFFAB"),TamSX3("B1_REFFAB")[1]+1,/*lPixel*/,/*{|| code-block de impressao }*/)
	TRCell():new(oSection1, "B1_DESC"	, "QRY", 'DESCRIÇÃO',PesqPict('SB1',"B1_DESC")	,TamSX3("B1_DESC")[1]+1,/*lPixel*/,/*{|| code-block de impressao }*/)
	TRCell():new(oSection1, "Z5_ABREV"	, "QRY", 'ABREVI'	,PesqPict('SZ5',"Z5_ABREV")	,TamSX3("Z5_ABREV")[1]+1,/*lPixel*/,/*{|| code-block de impressao }*/)
	TRCell():new(oSection1, "B1_TIPO"	, "QRY", 'TIPO'  	,PesqPict('SB1',"B1_TIPO")	,TamSX3("B1_TIPO")[1]+1,/*lPixel*/,/*{|| code-block de impressao }*/)
	TRCell():new(oSection1, "BM_DESC"	, "QRY", 'GRUPO'	,PesqPict('SBM',"BM_DESC")	,TamSX3("BM_DESC")[1]+1,/*lPixel*/,/*{|| code-block de impressao }*/)
	TRCell():new(oSection1, "VE1_DESMAR", "QRY", 'MARCA'	,PesqPict('VE1',"VE1_DESMAR"),TamSX3("VE1_DESMAR")[1]+1,/*lPixel*/,/*{|| code-block de impressao }*/)
 
	oBreak := TRBreak():New(oSection1,oSection1:Cell("B1_FILIAL"),,.F.)
 
	TRFunction():New(oSection1:Cell("B1_FILIAL"),"TOTAL FILIAL","COUNT",oBreak,,"@E 999999",,.F.,.F.)
 
	TRFunction():New(oSection1:Cell("B1_FILIAL"),"TOTAL GERAL" ,"COUNT",,,"@E 999999",,.F.,.T.)	
 
return (oReport)
 
Static Function PrintReport(oReport)
	Local oSection1 := oReport:Section(1)
	oSection1:Init()
	oSection1:SetHeaderSection(.T.)
 
	DbSelectArea('QRY')
	dbGoTop()
	oReport:SetMeter(QRY->(RecCount()))
	While QRY->(!Eof())
		If oReport:Cancel()
			Exit
		EndIf
 
		oReport:IncMeter()
 
		oSection1:Cell("B1_FILIAL"):SetValue(QRY->B1_FILIAL)
		oSection1:Cell("B1_FILIAL"):SetAlign("CENTER")
 
		oSection1:Cell("B1_CODMES"):SetValue(QRY->B1_CODMES)
		oSection1:Cell("B1_CODMES"):SetAlign("CENTER")
 
		oSection1:Cell("B1_SUFIXO"):SetValue(QRY->B1_SUFIXO)
		oSection1:Cell("B1_SUFIXO"):SetAlign("CENTER")
 
		oSection1:Cell("B1_COD"):SetValue(QRY->B1_COD)
		oSection1:Cell("B1_COD"):SetAlign("CENTER")
 
		oSection1:Cell("B1_REFFAB"):SetValue(QRY->B1_REFFAB)
		oSection1:Cell("B1_REFFAB"):SetAlign("LEFT")
 
		oSection1:Cell("B1_DESC"):SetValue(QRY->B1_DESC)
		oSection1:Cell("B1_DESC"):SetAlign("LEFT")
 
		oSection1:Cell("Z5_ABREV"):SetValue(Posicione("SZ5",1,xFilial("SZ5")+QRY->B1_GRUFAM,"Z5_ABREV"))
		oSection1:Cell("Z5_ABREV"):SetAlign("LEFT")
 
		oSection1:Cell("B1_TIPO"):SetValue(QRY->B1_TIPO)
		oSection1:Cell("B1_TIPO"):SetAlign("LEFT")
 
		oSection1:Cell("BM_DESC"):SetValue(Posicione("SBM",1,xFilial("SBM")+QRY->B1_GRUPO,"BM_DESC"))
		oSection1:Cell("BM_DESC"):SetAlign("LEFT")
 
		oSection1:Cell("VE1_DESMAR"):SetValue(Posicione("VE1",2,xFilial("VE1")+QRY->B1_ABREVI,"VE1_DESMAR"))
		oSection1:Cell("VE1_DESMAR"):SetAlign("LEFT")
 
		oSection1:PrintLine()
 
		dbSelectArea("QRY")
		QRY->(dbSkip())
	EndDo
	oSection1:Finish()
Return