TReport.

Slides:



Advertisements
Apresentações semelhantes
Criando aplicações WEB
Advertisements

Object Query Language - OQL
HTML - HiperText Markup Language Tecnologia para Web
Banco de Dados Prof. Antonio.
SQL Avançado Continuação
Banco de Dados SQL Stored Procedures
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados I 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
Visões Marilde Santos.
Operadores Especiais da SQL
Introdução à Engenharia da Computação
Material III-Bimestre Wagner Santos C. de Jesus
Instrutor: Nilo Menezes
Links Rollover image Tabelas
Introdução a JDBC Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação Distribuída.
Alertas de Segurança e Vigilância
Portal 2.0 Como utilizar Data: 03/03/2011.
Banco de dados Profª Kelly Medeiros.
Nota fiscal eletrônica de serviço
Query Tuning Lílian Simão Oliveira.
Comandos de SQL Excel VBA II.
Regras da ABNT Associação Brasileira de Normas Técnicas
Aula R Prof. Naércio Filho Técnico em Informática
Cronograma Formato do Comando SELECT – 1ª Seção Uso de Funções (DATE_FORMAT, DAY, MONTH, NOW, CONCAT, FORMAT, COUNT, AVG, MAX, MIN e FORMAT) AS DISTINCT.
Conheça o PDV Apresenta as principais ferramentas e
IGC do Brasil BT-1306: Como gerar seus relatórios especiais no ELF.net.
Design Patterns / Acesso ao banco de dados (java.sql)
Primeira aula de PL/SQL Parte II
Especialização em Tecnologia da Informação
III – O Modelo OR Estudo de Caso, modelo Oracle 10g.
Banco de Dados 4P/SI – 2010/02 Prof. Carlos Alberto Seixas.
Desenvolvendo um script SQL
Treinamento sobre SQL.
Treinamento GED Fusion ECM Suite
Curso Técnico em Mineração
Como Configurar a Impressora Argox (Sem DLL ) no SisMoura
Treinamento Fusion Relatórios Fusion ECM Suite
CONTROLE DE FUNCIONÁRIOS.
Guia de Treinamento Fusion ECM Suite - Relatórios.
Treinamento SQL Server
SQL Server Comando PIVOT.
Linguagem SQL Prof. Juliano.
Fórmula Visual RM.
MENU ARQUIVO Comando Imprimir Imprimi o documento atual # Impressora
SACADO Instalação Cadastramento inicial Parâmetros Início Fim Acesso ao sistema Responsáveis Grupos de sacados Sacados Títulos Relatórios Relatório de.
Introdução à Programação
Folha de cálculo – Microsoft Excel
Daniel Paulo Introdução Neste capítulo trataremos a relação entre tabelas e FILEGROUPS, bem como a alocação interna de dados.
Aula 09: Comando SELECT: Ligações entre tabelas e Subconsultas
Daniel Paulo SQL Módulo I Daniel Paulo
Daniel Paulo SQL Módulo I Daniel Paulo
VBA – Visual Basic para Aplicativos
UCSal – Tecnologia em Análise e Desenvolvimento de Sistemas
UCSal – Bacharelado em Informática
Folha de Cálculo Excel.
Fórmula Visual RM.
Tela de pesquisa de candidatos por vaga(WEB). Acesso através de usuário e senha utilizado já no controle de funcionários.
Linguagem de definição de dados - SQL
Programação para Web I AULA 2 BANCO DE DADOS.
Banco de Dados Introdução à Linguagem SQL – Junção Manipulação com 3 Tabelas ou + em relacionamentos n/1 Esta aula é baseada em material produzido pelo.
FOLHA DE CÁLCULO Encontros de Sabedoria 2015 António Ferreira.
APRESENTAÇÃO PORTAL CITI CONTA CORRENTE
Banco de Dados -Aprendendo conceitos -Usando o SQL Conf para:
ASP.NET Passo a Passo Criando um CRUD Conteúdo do Capítulo 1. Acessar bancos de dados SQL Server 2. Utilizar o GridView 3. Utilizar o DetailView 4. Implementar.
José Antônio da Cunha IFRN Administração de Banco de Dados.
Banco de Dados do Moodle Inscrição no Grupo do Curso pelo Comando SQL/PHP Atualização do Plugin Badiu Grade Curricular Lino Vaz Moniz
Programação para Internet Aula 12 SQL (Comandos de Consulta ao BD)
José Antônio da Cunha 2/6/2016 José Antônio - CEFET-RN 1 Disciplina: Banco de Dados.
Banco de Dados Marcio Ferreira da Silva. PHP e Banco de Dados Uma das facilidades do PHP é na utilização dos bancos de dados. O MySQL é um banco de dados.
Cursores 9/6/2016CEFET-RN1 José Antônio da Cunha George Azevedo da Silva.
Tarefa Autor: Skyup Informática. Atividade – Tarefa O módulo atividade tarefa tem como principio básico a interação professor-aluno. Os alunos podem apresentar.
Transcrição da apresentação:

TReport

Í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

Estrutura do TReport

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.

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.

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

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.

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.

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.

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

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.

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

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.

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

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

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"

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

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)

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

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)