Você está na página 1de 21

TReport

ndice

Seo 1 Estrutura do TReport

Seo 2 Consideraes

Seo 3 Componentes

Seo 4 Embedded Sql

17

Estrutura do TReport

Consideraes
Antes de desenvolver

Imprima o relatrio do R3 e analise o resultado para definir as sees que sero


utilizadas no novo relatrio.

No utilizar as propriedades

Utilizar os mtodos documentados para acessar as propriedades, j que


algumas precisam ser processadas antes de retornar seu contedo (como o
mtodo GetValue() do TRFunction, que precisa calcular o contedo da
propriedade uValue para retornar valor mdio).

Relatrios para o Top

Tentar utilizar uma nica query para a seo pai e todas suas filhas (utilizando
o mtodo SetParentQuery() do TRSection).
Evitar as querys dinmicas (%report_param: % no Embedded Sql).
Utilizar GetNextAlias() para retornar o alias temporrio da query.
Querys criadas utilizando o comando Begin Report Query ou o mtodo
BeginQuery() do TRSection sero fechadas pelo TReport no final da impresso.

Consideraes
Report.ch
Disponvel no projeto mp8\include do Protheus Versions.
Facilita a criao dos objetos.
Exemplo:
DEFINE REPORT oReport NAME "MYREPORT" TITLE "Pedidos de Venda" PARAMETER
"REPORT" ACTION {|oReport| PrintReport(oReport)} DESCRIPTION Teste
TOTAL TEXT Total

Begin Report Query e End Report Query


Pode ser utilizado mesmo em querys que no utilizam
%report_param: %, no lugar dos mtodo BeginQuery() e
EndQuery() do TRSection.
No precisa de include no fonte, j esta no sigawin.ch.
Qualquer otimizao do comando no ser refletida se estiver
utilizando os mtodos mencionados acima.

Consideraes
Exemplos:

Os exemplos foram criados com a seguinte


estrutura:
1) SA1 - Cadastro de Clientes
1.2) SC5 - Pedidos de Venda
1.2.1) SC6 - Itens do Pedido

Componentes

TReport

PageBreak(): indica se houve quebra de pgina.

PageHeight(): altura da pgina configurada pelo usurio.

PageWidth(): largura da pgina configurada pelo usurio.

SetTitle(<titulo>): troca o ttulo do relatrio.

SetTotalText(<texto>): troca o texto impresso antes dos totalizadores gerais do relatrio.

SetTotalInLine(.F.): troca impresso dos totalizadores gerais em linha para coluna.

SkipLine(<linhas>): pula linha na impresso.

ThinLine(): imprime linha fina.

FatLine(): imprime linha grossa.

PrintText(<texto>,<linha>,<coluna>): imprime texto nas coordenadas informadas.


Caso a linha no seja informada, ser utilizada a linha atual, incrementando uma linha aps a
impresso do texto.
Caso a coluna no seja informada, ser utilizada a coluna atual, incrementado a coluna de
impresso utilizando o tamanho do texto informado.

Componentes

TRSection

SetTitle(<titulo>): troca o ttulo da seo.

Hide(): inibe a impresso do cabealho (PrintHeader()) e das linhas (PrintLine()) da seo,


porm imprime os totalizadores.

Show(): retorna a impresso do cabealho e das linhas da seo.

Disable(): desabilita o processamento e impresso da seo, inclusive dos totalizadores.

Enable(): habilita a impresso da seo.

SetTotalText(): troca o texto impresso antes dos totalizadores da seo.

SetTotalInLine(.F.): troca impresso dos totalizadores da seo em linha para coluna.

SetHeaderPage(): indica que o cabealho da seo ser impresso no topo da pgina.

SetHeaderSection(): indica se cabealho da seo ser impresso (padro).

SetHeaderBreak(): indica se cabealho da seo ser impresso em cada quebra (padro).

SetPageBreak(): indica quebra de pgina no final da seo.

GetOrder(): retorna ordem selecionada pelo usurio.

Componentes

TRSection

PrintLine(): imprime uma linha no relatrio baseado na configurao das clulas da seo.
Antes de imprimir, o mtodo PrintLine() executa as clulas de posicionamento (TRPosition), calcula
os contedos das clulas, avalia as quebras (TRBreak) e incrementa os totalizadores (TRFunction).

PrintHeader(): imprime o cabealho da seo baseado na configurao das clulas.

Cell(<nome>): retorna o objeto TRCell referente ao nome informado.

SetReadOnly(): desabilita a edio da seo pelo usurio.

SetLineCondition(<condicao>): utilizado para informar bloco de cdigo com condio


para impresso da linha pelo mtodo Print(), tanto para query como para tabela.

SetFilter(<filtro>,<chave de ndice>): cria filtro ou IndRegua para a tabela quando no


utilizar query.

SetParentQuery(): indica utilizao da query da seo pai para impresso pelo mtodo
Print().
Exemplo: Embedded Sql - Utilizando SetParentQuery() e Print() do TRSection.

Componentes
TRSection
SetRelation(<bloco com expresso para relacionamento inicial>,
<alias>, <ordem>, <posiciona ): indica condio de relacionamento
inicial da seo filha em relao a seo pai quando no utilizado
query.
Utilizado junto ao mtodo SetParentFilter().

<bloco com expresso para relacionamento inicial>: bloco de cdigo que


retorna o valor da chave estrangeira utilizado pelos outros parmetros
para posicionar a tabela da seo filha em relao a sua seo pai.
Exemplo (exemplo7.prw):
oReport:Section(1):Section(1):SetRelation({|| xFilial("SC5") +
SA1->A1_COD},"SC5",3,.T.)
oReport:Section(1):Section(1):SetParentFilter({|cParam| SC5->C5_CLIENTE ==
cParam},{|| SA1->A1_COD})

10

Componentes
TRSection
SetParentFilter(<bloco com expresso do relacionamento>,
<bloco com valor para o relacionamento do primeiro
parmetro>): indica condio de relacionamento da seo filha
em relao a sua seo pai.
Pode ser utilizada com query ou com uma tabela (filtrada ou com
IndRegua).
<bloco com expresso de relacionamento>: condio de
relacionamento da seo filha em relao sua seo pai, utilizado
na impresso pelo mtodo Print().
<bloco com expresso para o relacionamento do 1 parmetro>:
bloco de cdigo que retorna o valor da chave estrangeira para
validar o relacionamento entre a seo filha e sua seo pai.
Exemplo: Embedded Sql - Utilizando SetParentQuery() e Print() do
TRSection.

11

Componentes
TRSection
Print(): imprime a query ou a tabela principal da seo.
Antes de imprimir a query/tabela, o mtodo Print() executa o 2
parmetro informado no mtodo SetParentFilter(), guardando o
contedo para utilizar no 1 parmetro do mesmo mtodo, para
controle do relacionamento entre a seo pai e suas filhas.
Se no utilizar query e for utilizado o mtodo SetRelation(), avalia
condio de relacionamento inicial.
Se a seo utiliza query dinminica, o mtodo Print()avalia a query
e cria o alias temporrio a ser utilizado.
Para cada linha:
Executa o 1 parmetro do mtodo SetParentFilter(), validando o
relacionamento das sees.
Se foi utilizado o mtodo SetLineCondition(), executa as clulas de
posicionamento (TRPosition) e na seqncia avalia a condio
informada.
Imprime a linha (PrintLine()) e imprime as sees se filhas (se houver).

12

Componentes
TRCell
GetFieldInfo(<campo>): carrega informaes do campo do SX3
na clula, quando o nome no for de um campo padro.
Disable(): desabilita a impresso da clula.
O contedo da clula continua sendo avaliado, inclusive
atualizando os totalizadores.
O posicionamento da coluna no considerado.

Enable(): habilita a impresso da clula.


Hide(): inibe a impresso da clula.
O contedo da clula continua sendo avaliado, inclusive
atualizando os totalizadores.
O posicionamento da coluna considerado.

Show(): retorna a impresso da clula.

13

Componentes
TRPosition
Posiciona tabelas secundrias da seo.
Nos casos de query, tentar fazer o posicionamento no WHERE.
Pode ser utilizando sem alias, somente com o bloco de cdigo
no qual possvel fazer qualquer processamento para
posicionar a tabela.
Utilizando o mtodo Print(), o TRPosition pode ser usado para
posicionar uma tabela para a avaliao do LineCondition.
Exemplo (exemplo7.prw):
TRPosition():New(oReport:Section(1):Section(1):Section(1):,"SB1",1,{||
xFilial("SB1")+SC6->C6_PRODUTO})
oReport:Section(1):Section(1):Section(1):SetLineCondition({|| SB1->B1_GRUPO >=
MV_PAR02 .and. SB1->B1_GRUPO <= MV_PAR03})

14

Componentes
TRBreak
A quebra avaliada pelo mtodo PrintLine() do TRSection.
A regra pode ser uma clula de qualquer seo ou um bloco de
cdigo, no qual pode ser efetuado qualquer processamento
para validar a quebra.
Imprime os totalizadores vinculados a quebra.
Os totalizadores so impressos em coluna na posio da clula
que a que se referem.
SetTotalInLine(): troca impresso dos totalizadores da quebra
em linha.
Exemplo (exemplo6.prw):
DEFINE BREAK oBreak OF oSA1 WHEN oSA1:Cell("A1_VEND")
DEFINE FUNCTION FROM oSA1:Cell("A1_COD") FUNCTION COUNT BREAK oBreak
DEFINE FUNCTION FROM oSA1:Cell("A1_MCOMPRA") FUNCTION SUM BREAK oBreak

15

Componentes
TRFunction
executado pelo mtodo PrintLine() do TRSection.
Uma clula pode ter mais de um totalizador.
Acumula valores para a quebra, seo, pgina e relatrio, baseado no
tipo de totalizador (COUNT, SUM, MAX, MIN, AVERAGE).
Totaliza a clula informada como referncia, que tambm utilizada
para posicionamento no caso de impresso colunada.
possivel utilizar um bloco de cdigo para totalizar, porm ainda
necessrio informar uma clula como referncia.
possivel fazer refrencia a clula de uma seo e imprimir seu
totalizador em outra seo.
Pode ser utilizado como contedo de uma clula de uma seo,
inibindo sua impresso no final da seo a que pertence e no final do
relatrio, utilizando os mtodos GetValue(), SectionValue() ou
ReportValue().
Exemplo (exemplo1.prw):
DEFINE FUNCTION FROM oSC5:Cell("C5_NUM") OF oSA1 FUNCTION COUNT TITLE "Pedidos"

16

Embedded Sql
Utilizando SetParentQuery() e Print() do TRSection
A seo filha utiliza a query do pai.
Para cada seo filha, utilizar o mtodo SetParentFilter() para
efetuar o relacionamento com a seo pai:
SetParentFilter(<bloco com expresso do relacionamento>,
<bloco com expresso para o relacionamento do 1 parametro>)

Exemplo (exemplo1.prw):
oReport:Section(1):Section(1):SetParentQuery()
oReport:Section(1):SetParentFilter({|cParam| (cAlias)->C5_CLIENTE == cParam},
{|| (cAlias)-> A1_COD})
oReport:Section(1):Section(1):Section(1):SetParentQuery()
oReport:Section(1):Section(1):Section(1):SetParentFilter({|cParam| (cAlias)->
C6_NUM == cParam}, {|| (cAlias)->C5_NUM})

17

Embedded Sql
Utilizando query dinmica (%report_param:%)
No necessrio utilizar o mtodo SetParentFilter.
Para cada linha da query da seo pai, executada
a query dinmica da seo filha.
Exemplo (exemplo2.prw):
BEGIN REPORT QUERY oReport:Section(1):Section(1)
BeginSql alias cAlias2
SELECT C5_NUM NUM,C5_NUM,C5_TIPO,C5_VEND1
FROM %table:SC5% SC5
WHERE C5_FILIAL = %xfilial:SC5% AND SC5.%notDel% AND
C5_CLIENTE = %report_param: (cAlias1)->A1_COD%
ORDER BY C5_FILIAL,C5_NUM
EndSql
END REPORT QUERY oReport:Section(1):Section(1)

18

Embedded Sql
Utilizando contedos variveis na query
Sempre utilizar % no comeo e no fim do contedo.
Exemplo (exemplo3.prw):
If !Empty(mv_par03)
cSql += "AND B1_GRUPO <= '"+mv_par03+"'
EndIf
cSql := "%"+cSql+"%
BEGIN REPORT QUERY oReport:Section(1)
BeginSql alias cAlias
SELECT ...
FROM %table:SA1% SA1, %table:SC5% SC5, %table:SC6% SC6, %table:SB1% SB1
WHERE A1_FILIAL = %xfilial:SA1% AND SA1.%notDel% AND
C5_FILIAL = %xfilial:SC5% AND SC5.%notDel% AND C5_CLIENTE = A1_COD AND
C6_FILIAL = %xfilial:SC6% AND SC6.%notDel% AND C6_NUM = C5_NUM AND
B1_FILIAL = %xfilial:SB1% AND SB1.%notDel% AND B1_COD = C6_PRODUTO
%exp:cSql%
ORDER BY A1_FILIAL,A1_COD,C5_FILIAL,C5_NUM,C6_FILIAL,C6_ITEM
EndSql
END REPORT QUERY oReport:Section(1) PARAM mv_par01

19

Embedded Sql

Utilizando parmetros (SX1) tipo Range

Informar no campo X1_CNT01 o nome do campo que ser utilizado no range.


Sempre utilizar as funes MakeSqlExpr(<parmetro>) e MakeAdvplExpr(<parmetro>).
A expresso convertida adicionada query pelo comando End Report Query ou pelo
mtodo EndQuery() do TRSection.
Exemplo (exemplo1.prw):
MakeSqlExpr(REPORT)
BEGIN REPORT QUERY oReport:Section(1)
BeginSql alias cAlias
SELECT ...
FROM %table:SA1% SA1, %table:SC5% SC5, %table:SC6% SC6, %table:SB1% SB1
WHERE A1_FILIAL = %xfilial:SA1% AND SA1.%notDel% AND
C5_FILIAL = %xfilial:SC5% AND SC5.%notDel% AND C5_CLIENTE = A1_COD AND
C6_FILIAL = %xfilial:SC6% AND SC6.%notDel% AND C6_NUM = C5_NUM AND
B1_FILIAL = %xfilial:SB1% AND SB1.%notDel% AND B1_COD = C6_PRODUTO
ORDER BY A1_FILIAL,A1_COD,C5_FILIAL,C5_NUM,C6_FILIAL,C6_ITEM
EndSql
END REPORT QUERY oReport:Section(1) PARAM mv_par01
oReport:Section(1):EndQuery(mv_par01)

20

21

Você também pode gostar