Escolar Documentos
Profissional Documentos
Cultura Documentos
Apresentacao - Treport 1
Apresentacao - Treport 1
1
Índice
Seção 2 Considerações 4
Seção 3 Componentes 7
2
Estrutura do TReport
3
Considerações
• Antes de desenvolver
– Imprima o relatório do R3 e analise o resultado para definir as seções que serão
utilizadas no novo relatório.
4
Considerações
• Report.ch
– Disponível no projeto mp8\include do Protheus Versions.
– Facilita a criação dos objetos.
– Exemplo:
DEFINE REPORT oReport NAME "MYREPORT" TITLE "Pedidos de Venda" PARAMETER
"REPORT" ACTION {|oReport| PrintReport(oReport)} DESCRIPTION “Teste”
TOTAL TEXT “Total”
5
Considerações
• Exemplos:
– Os exemplos foram criados com a seguinte
estrutura:
6
Componentes
• TReport
– PageBreak(): indica se houve quebra de página.
– PageHeight(): altura da página configurada pelo usuário.
– PageWidth(): largura da página configurada pelo usuário.
– SetTitle(<titulo>): troca o título do relatório.
– SetTotalText(<texto>): troca o texto impresso antes dos totalizadores gerais do relatório.
– SetTotalInLine(.F.): troca impressão dos totalizadores gerais em linha para coluna.
– SkipLine(<linhas>): pula linha na impressão.
– ThinLine(): imprime linha fina.
– FatLine(): imprime linha grossa.
– PrintText(<texto>,<linha>,<coluna>): imprime texto nas coordenadas informadas.
• Caso a linha não seja informada, será utilizada a linha atual, incrementando uma linha após a
impressão do texto.
• Caso a coluna não seja informada, será utilizada a coluna atual, incrementado a coluna de
impressão utilizando o tamanho do texto informado.
7
Componentes
• TRSection
– SetTitle(<titulo>): troca o título da seção.
– Hide(): inibe a impressão do cabeçalho (PrintHeader()) e das linhas (PrintLine()) da seção,
porém imprime os totalizadores.
– Show(): retorna a impressão do cabeçalho e das linhas da seção.
– Disable(): desabilita o processamento e impressão da seção, inclusive dos totalizadores.
– Enable(): habilita a impressão da seção.
– SetTotalText(): troca o texto impresso antes dos totalizadores da seção.
– SetTotalInLine(.F.): troca impressão dos totalizadores da seção em linha para coluna.
– SetHeaderPage(): indica que o cabeçalho da seção será impresso no topo da página.
– SetHeaderSection(): indica se cabeçalho da seção será impresso (padrão).
– SetHeaderBreak(): indica se cabeçalho da seção será impresso em cada quebra (padrão).
– SetPageBreak(): indica quebra de página no final da seção.
– GetOrder(): retorna ordem selecionada pelo usuário.
8
Componentes
• TRSection
– PrintLine(): imprime uma linha no relatório baseado na configuração das células da seção.
• Antes de imprimir, o método PrintLine() executa as células de posicionamento (TRPosition), calcula
os conteúdos das células, avalia as quebras (TRBreak) e incrementa os totalizadores (TRFunction).
– PrintHeader(): imprime o cabeçalho da seção baseado na configuração das células.
– Cell(<nome>): retorna o objeto TRCell referente ao nome informado.
– SetReadOnly(): desabilita a edição da seção pelo usuário.
– SetLineCondition(<condicao>): utilizado para informar bloco de código com condição
para impressão da linha pelo método Print(), tanto para query como para tabela.
– SetFilter(<filtro>,<chave de índice>): cria filtro ou IndRegua para a tabela quando não
utilizar query.
– SetParentQuery(): indica utilização da query da seção pai para impressão pelo método
Print().
• Exemplo: Embedded Sql - Utilizando SetParentQuery() e Print() do TRSection.
9
Componentes
• TRSection
– SetRelation(<bloco com expressão para relacionamento inicial>,
<alias>, <ordem>, <posiciona ): indica condição de relacionamento
inicial da seção filha em relação a seção pai quando não utilizado
query.
• Utilizado junto ao método SetParentFilter().
• <bloco com expressão para relacionamento inicial>: bloco de código que
retorna o valor da chave estrangeira utilizado pelos outros parâmetros
para posicionar a tabela da seção filha em relação a sua seção 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 expressão do relacionamento>,
<bloco com valor para o relacionamento do primeiro
parâmetro>): indica condição de relacionamento da seção filha
em relação a sua seção pai.
• Pode ser utilizada com query ou com uma tabela (filtrada ou com
IndRegua).
• <bloco com expressão de relacionamento>: condição de
relacionamento da seção filha em relação sua seção pai, utilizado
na impressão pelo método Print().
• <bloco com expressão para o relacionamento do 1º parâmetro>:
bloco de código que retorna o valor da chave estrangeira para
validar o relacionamento entre a seção filha e sua seção pai.
• Exemplo: Embedded Sql - Utilizando SetParentQuery() e Print() do
TRSection.
11
Componentes
• TRSection
– Print(): imprime a query ou a tabela principal da seção.
• Antes de imprimir a query/tabela, o método Print() executa o 2º
parâmetro informado no método SetParentFilter(), guardando o
conteúdo para utilizar no 1º parâmetro do mesmo método, para
controle do relacionamento entre a seção pai e suas filhas.
• Se não utilizar query e for utilizado o método SetRelation(), avalia
condição de relacionamento inicial.
• Se a seção utiliza query dinâminica, o método Print()avalia a query
e cria o alias temporário a ser utilizado.
• Para cada linha:
– Executa o 1º parâmetro do método SetParentFilter(), validando o
relacionamento das seções.
– Se foi utilizado o método SetLineCondition(), executa as células de
posicionamento (TRPosition) e na seqüência avalia a condição
informada.
– Imprime a linha (PrintLine()) e imprime as seções se filhas (se houver).
12
Componentes
• TRCell
– GetFieldInfo(<campo>): carrega informações do campo do SX3
na célula, quando o nome não for de um campo padrão.
– Disable(): desabilita a impressão da célula.
• O conteúdo da célula continua sendo avaliado, inclusive
atualizando os totalizadores.
• O posicionamento da coluna não é considerado.
– Enable(): habilita a impressão da célula.
– Hide(): inibe a impressão da célula.
• O conteúdo da célula continua sendo avaliado, inclusive
atualizando os totalizadores.
• O posicionamento da coluna é considerado.
– Show(): retorna a impressão da célula.
13
Componentes
• TRPosition
– Posiciona tabelas secundárias da seção.
– Nos casos de query, tentar fazer o posicionamento no WHERE.
– Pode ser utilizando sem alias, somente com o bloco de código
no qual é possível fazer qualquer processamento para
posicionar a tabela.
– Utilizando o método Print(), o TRPosition pode ser usado para
posicionar uma tabela para a avaliação 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 método PrintLine() do TRSection.
– A regra pode ser uma célula de qualquer seção ou um bloco de
código, no qual pode ser efetuado qualquer processamento
para validar a quebra.
– Imprime os totalizadores vinculados a quebra.
– Os totalizadores são impressos em coluna na posição da célula
que a que se referem.
– SetTotalInLine(): troca impressão 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 método PrintLine() do TRSection.
– Uma célula pode ter mais de um totalizador.
– Acumula valores para a quebra, seção, página e relatório, baseado no
tipo de totalizador (COUNT, SUM, MAX, MIN, AVERAGE).
– Totaliza a célula informada como referência, que também é utilizada
para posicionamento no caso de impressão colunada.
– É possivel utilizar um bloco de código para totalizar, porém ainda é
necessário informar uma célula como referência.
– É possivel fazer refêrencia a célula de uma seção e imprimir seu
totalizador em outra seção.
– Pode ser utilizado como conteúdo de uma célula de uma seção,
inibindo sua impressão no final da seção a que pertence e no final do
relatório, utilizando os métodos GetValue(), SectionValue() ou
ReportValue().
– Exemplo (exemplo1.prw):
DEFINE FUNCTION FROM oSC5:Cell("C5_NUM") OF oSA1 FUNCTION COUNT TITLE "Pedidos"
16
Embedded Sql
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
18
Embedded Sql
cSql := "%"+cSql+"%“
19
Embedded Sql
oReport:Section(1):EndQuery(mv_par01)
20
21