A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

TReport.

Apresentações semelhantes


Apresentação em tema: "TReport."— Transcrição da apresentação:

1 TReport

2 Índice Seção 1 Estrutura do TReport 3 Seção 2 Considerações 4
Seção 3 Componentes 7 Seção 4 Embedded Sql 17

3 Estrutura do TReport

4 Considerações Antes de desenvolver Não utilizar as propriedades
Imprima o relatório do R3 e analise o resultado para definir as seções que serão utilizadas no novo relatório. Não utilizar as propriedades Utilizar os métodos documentados para acessar as propriedades, já que algumas precisam ser processadas antes de retornar seu conteúdo (como o método GetValue() do TRFunction, que precisa calcular o conteúdo da propriedade uValue para retornar valor médio). Relatórios para o Top Tentar utilizar uma única query para a seção pai e todas suas filhas (utilizando o método SetParentQuery() do TRSection). Evitar as querys dinâmicas (%report_param: % no Embedded Sql). Utilizar GetNextAlias() para retornar o alias temporário da query. Querys criadas utilizando o comando Begin Report Query ou o método BeginQuery() do TRSection serão fechadas pelo TReport no final da impressão.

5 Considerações Report.ch Begin Report Query e End Report Query
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” Begin Report Query e End Report Query Pode ser utilizado mesmo em querys que não utilizam %report_param: %, no lugar dos método BeginQuery() e EndQuery() do TRSection. Não precisa de include no fonte, já esta no sigawin.ch. Qualquer otimização do comando não será refletida se estiver utilizando os métodos mencionados acima.

6 Considerações 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

7 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.

8 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.

9 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.

10 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})

11 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.

12 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).

13 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 posicionamento da coluna é considerado. Show(): retorna a impressão da célula.

14 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})

15 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

16 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"

17 Embedded Sql Utilizando SetParentQuery() e Print() do TRSection
A seção filha utiliza a query do pai. Para cada seção filha, utilizar o método SetParentFilter() para efetuar o relacionamento com a seção pai: SetParentFilter(<bloco com expressão do relacionamento>, <bloco com expressão 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})

18 Embedded Sql Utilizando query dinâmica (%report_param:%)
Não é necessário utilizar o método SetParentFilter. Para cada linha da query da seção pai, é executada a query dinâmica da seção 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)

19 Embedded Sql Utilizando conteúdos variáveis na query
Sempre utilizar % no começo e no fim do conteúdo. 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

20 Embedded Sql Utilizando parâmetros (SX1) tipo Range
Informar no campo “X1_CNT01” o nome do campo que será utilizado no range. Sempre utilizar as funções MakeSqlExpr(<parâmetro>) e MakeAdvplExpr(<parâmetro>). A expressão convertida é adicionada à query pelo comando End Report Query ou pelo método 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)

21


Carregar ppt "TReport."

Apresentações semelhantes


Anúncios Google