Você está na página 1de 11

TReport

ndice

Seo 1 Estrutura do TReport Seo 2 Consideraes Seo 3 Componentes Seo 4 Embedded Sql

3 4 7 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

10

21

11

Você também pode gostar