Páginas filhas
  • TOTVS Construção Gestão de Imóveis - Shopping - Relatórios - Relatório Dinâmico

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Introdução

...

O relatório dinâmico visa de forma transparente e simples, permitir que sejam inseridos componentes que irão compor a saída do relatório, isto é, seu resultado final apresentado. Desta forma, temos uma interface que pode ser confeccionada e customizada em poucos passos, trazendo um dinamismo e maior rapidez na execução dos relatórios do sistema.  Dessa forma podem ser passados parâmetros de seleção por contratos, subunidades, cliente/fornecedor, entre outros.

Como utilizar

...

O relatório dinâmico deve ser acessado em Shopping / Relatórios / Relatório Dinâmico. Este menu possui permissão, então o usuário deve ter a sua respectiva permissão habilitada para utilizá-lo.

É importante frisar que toda a modificação resultante na tela do relatório dinâmico deve ser primeiro realizada nos relatórios que irão fornecer os parâmetros para a exibição da tela. Abaixo vamos mostrar como realizar essa alteração.

Existem duas opções de tipo de retorno de componentes:

  • Multi Record: Quando há a necessidade que em determinado parâmetro seja selecionado vários registros. Identificado pela inicial MRE_. Quando temos o parâmetro Multirecord, ele irá interagir com consultas SQL IN ou FILTER como exemplifica a tabela abaixo.
  • Lookup: Quando há a seleção somente de um registro em determinado componente. Identificado pela inicial LKP_

As tabelas disponíveis para passagem de parâmetros para execução do relatório dinâmico são as seguintes:


Tipos de Parâmetros

Multi Record (MRE_)
Utilizado quando é necessário selecionar mais de um registro em um mesmo parâmetro.
Esse tipo de parâmetro é identificado pelo prefixo MRE_ e deve ser aplicado em consultas SQL que utilizem operadores como IN ou FILTER, conforme exemplificado na Tabela abaixo.

Lookup (LKP_)
Utilizado quando é permitida a seleção de apenas um único registro no componente.
É identificado pelo prefixo LKP_ e possui uma regra específica de uso: ao criar o relatório, o parâmetro deve ser nomeado com o prefixo LKP_, e a sentença SQL deve utilizar o parâmetro conforme o padrão definido para cada Tabela, conforme listado abaixo.


Tabela Definição de Campos

Tabela


DescriçãoParâmetro MULTIRECORD (IN)Parâmetro MULTIRECORD (FILTER)Parâmetro LOOKUP 
Parâmetro no RelatórioParâmetro na Consulta SQL

FCFO

Cliente / Fornecedor
TabelaParâmetro Multirecord INParâmetro Multirecord FilterParâmetro Lookup 
XCOMPRADOR MRE_ XCOMPRADOR_INMRE_ XCOMPRADOR_FILTERLKP_ XCOMPRADOR

XCLIENTE

MRE_XCLIENTE_INMRE_XCLIENTE_FILTERLKP_XCLIENTEXLOCADOR:CODCOLCFO :CODCFO

XALGCONTRATOADMPROPRIETARIO

Locador do Contrato de AdministraçãoMRE_XLOCADOR_INMRE_XLOCADOR_FILTERLKP_XLOCADORXLOCATARIO:CODCOLCFOPROP :CODCFOPROP

XALGCONTRATOLOCLOCATARIO

Locatário do contrato de locaçãoMRE_XLOCATARIO_INMRE_XLOCATARIOFILTERLKP_XLOCATARIO:CODCOLCFOLOCATARIO :CODCFOLOCATARIO

FLAN

Lançamentos XIDLANMRE_ XIDLANIDLAN_INMRE_XIDLANIDLAN_FILTERLKP_ XIDLANIDLAN:CODCOLLAN :IDLAN

XALGIMOVEL

ImóvelXIMOVELMRE_XIMOVEL_INMRE_XIMOVEL_FILTERLKP_XIMOVEL:CODCOLIMOVEL :CODIMOVEL

XCONTRATOLOC

Contrato de LocaçãoMRE_XCONTRATOLOC_INMRE_XCONTRATOLOC_FILTERLKP_XCONTRATOLOC:CODCOLCONTLOC :CODCONTLOC

XEMPREENDIMENTO

EmpreendimentoMRE_XEMPREENDIMENTO_INMRE_XEMPREENDIMENTO_FILTERLKP_XEMPREENDIMENTO:COD_PESS_EMPR

XUNIDADE

UnidadesMRE_XUNIDADE_INMRE_XUNIDADE_FILTERLKP_XUNIDADE:COD_PESS_EMPR :NUM_UNID

XSUBUNIDADE

SubunidadesMRE_XSUBUNIDADE_INMRE_XSUBUNIDADE_FILTERLKP_XSUBUNIDADE:COD_PESS_EMPR :NUM_UNID :NUM_SUB_UNID

XCONDITEMCOBR

Item de CobrançaMRE_XCONDITEMCOBR_INMRE_XCONDITEMCOBR_FILTERLKP_XCONDITEMCOBR:CODITEMCOBR

FCXA

Contas/CaixaMRE_FCXA_INMRE_FCXA_FILTERLKP_FCXA:CODCOLCXA :CODCXA

GCCUSTO

Centros de CustoMRE_GCCUSTO_INMRE_GCCUSTO_FILTERLKP_GCCUSTO:CODCOLCCUSTO :CODCCUSTO

TTBORCAMENTO

Natureza Orçamentária/FinanceiraMRE_TTBORCAMENTO_INMRE_TTBORCAMENTO_FILTERLKP_TTBORCAMENTO:CODCOLNATFINANCEIRA :CODNATFINANCEIRA


Tipos de Parâmetros Compatíveis

Os tipos de parâmetros listados abaixo são compatíveis e podem ser utilizados como componentes na geração de relatórios dinâmicos.

Tipo de ParâmetroDescriçao
DecimalUtilizado para valores numéricos com casas decimais e alta precisão.
FloatUtilizado para valores numéricos decimais de ponto flutuante.
Duplo (Double)Utilizado para valores numéricos decimais com maior precisão que o Float.
DateTimeUtilizado para data e hora.
Texto (String)Utilizado para informações textuais.
Int (Inteiro)Utilizado para valores numéricos inteiros.


Exemplos de Utilização

Expandir
titleMulti Record (MRE_)

Utilize o Multi Record quando o parâmetro permitir a seleção de vários registros.

Parâmetro Inserido no Relatório:
MRE_XCONTRATOLOC_IN

Cenário:
O usuário deseja selecionar um ou mais contratos.

Exemplo de SQL:

Bloco de código
languagesql
themeDJango
firstline1
titleSelect
SELECT XALGCONTRATOLOC.CODCOLCONTLOC, XALGCONTRATOLOC.CODCONTLOC,XALGCONTRATOLOC.NUMCONTLOC, XALGCONTRATOLOC.DTVIGENCIAINICONTLOC
  FROM XALGCONTRATOLOC (NOLOCK)
 WHERE XALGCONTRATOLOC.CODCOLCONTLOC = 1
   AND XALGCONTRATOLOC.CODCONTLOC IN (SELECT [VALUE] AS PARAMETRO FROM STRING_SPLIT(:MRE_XCONTRATOLOC_IN, ','))

Atenção: o uso do operador FILTER pode impactar o desempenho, dependendo da complexidade da sentença SQL e da quantidade de registros retornados para aplicação do filtro.

Expandir
titleLookup (LKP_)

Utilize o Lookup quando o parâmetro permitir a seleção de apenas um registro.

Parâmetro Inserido no Relatório:
LKP_GCCUSTO

Cenário:
O usuário precisa filtrar por um centro de custos.

Exemplo de SQL: Na sentença SQL tem que usar os parâmetros definidos para Lookup na tabela acima na coluna "Parâmetro na Consulta SQL".

Bloco de código
languagesql
themeDJango
firstline1
titleSelect
SELECT XALGEVENTOFINANCEIRODISTRIBUIC.CODCOLEVENTFIN, XALGEVENTOFINANCEIRODISTRIBUIC.CODEVENTFIN,
       FLAN.CODCOLIGADA, FLAN.IDLAN, FLAN.VALORORIGINAL,
       FLAN.CODCCUSTO
  FROM XALGEVENTOFINANCEIRODISTRIBUIC (NOLOCK)
          JOIN FLAN (NOLOCK)
            ON FLAN.CODCOLIGADA = XALGEVENTOFINANCEIRODISTRIBUIC.CODCOLEVENTFIN
           AND FLAN.IDLAN = XALGEVENTOFINANCEIRODISTRIBUIC.IDLAN
           AND FLAN.CODCOLIGADA = :CODCOLCCUSTO  AND FLAN.CODCCUSTO = :CODCCUSTO
 WHERE XALGEVENTOFINANCEIRODISTRIBUIC.CODCOLEVENTFIN = 1
Expandir
titleJuntos (Multirecord e Lookup)

Parâmetros Inseridos no Relatório:
MRE_IDLAN_IN e LKP_GCCUSTO

Cenário:
O usuário necessita filtrar os dados por um centro de custos específico e, simultaneamente, selecionar um ou mais lançamentos associados ao centro de custos informado.

Exemplo de SQL: 

Bloco de código
languagesql
themeDJango
firstline1
titleSelect
SELECT XALGEVENTOFINANCEIRODISTRIBUIC.CODCOLEVENTFIN, XALGEVENTOFINANCEIRODISTRIBUIC.CODEVENTFIN,
       FLAN.CODCOLIGADA, FLAN.IDLAN, FLAN.VALORORIGINAL,
       FLAN.CODCCUSTO
  FROM XALGEVENTOFINANCEIRODISTRIBUIC (NOLOCK)
          JOIN FLAN (NOLOCK)
            ON FLAN.CODCOLIGADA = XALGEVENTOFINANCEIRODISTRIBUIC.CODCOLEVENTFIN
           AND FLAN.IDLAN = XALGEVENTOFINANCEIRODISTRIBUIC.IDLAN
           AND FLAN.CODCOLIGADA = :CODCOLCCUSTO  AND FLAN.CODCCUSTO = :CODCCUSTO
           AND FLAN.IDLAN IN(SELECT [VALUE] AS PARAMETRO FROM STRING_SPLIT(:MRE_IDLAN_IN, ','))
WHERE XALGEVENTOFINANCEIRODISTRIBUIC.CODCOLEVENTFIN = 1


Resumo Comparativo

TipoPrefixoQuantidade de RegistrosUso no SQL
Multi RecordMRE_MúltiplosIN / FILTER
LookupLKP_Único=



Informações
titleRecomendações de configuração

É fundamental verificar sempre o tipo do parâmetro informado e garantir que ele seja compatível com o relatório dinâmico utilizado.


Como fazer (Relatório com Sentença SQL IN e Componente MultiRecord)

...

Dada as tabelas acima, eu quero que o meu relatório me permita escolher vários contratos de locação que irão fazer parte do resultado dele. Este relatório possui uma sentença SQL com uma clausula IN, então neste caso devemos proceder da seguinte maneira

...

Bloco de código
languagesql
WHERE 
-
AND
XALGCONTRATOLOC.CODCONTLOC  IN (    SELECT TO_NUMBER(COLUMN_VALUE)     FROM TABLE(split_string(:MRE_XCONTRATOLOC_IN, ','))  )

Como fazer (Relatório com Sentença SQL FILTER e Componente MultiRecord)

...

Para esse relatório dinâmico ser criado, deve existir o parâmetro MRE_XCONTRATOLOC_FILTER no relatório como mostra a imagem abaixo:

...

O resultado da exibição no relatório dinâmico será o mesmo da exibição quando temos um componente IN, entretanto o resultado da consulta SQL do relatório será filtrada de acordo com os contratos selecionados. Não é necessário utilizar a função split.

Como fazer (Relatório com Componente Lookup)

...

Neste exemplo, eu quero que o meu relatório me permita escolher somente um contrato de locação que irão fazer parte do resultado dele através de uma lookup. Então neste caso devemos proceder da seguinte maneira.

Para isso então estou dizendo que deve existir o parâmetro LKP_XCONTRATOLOC no relatório como mostra a imagem abaixo:

Image Added

Na consulta SQL deste relatório, devemos também passar na cláusula WHERE o parâmetro em questão:

...

Informações

Importante

  • Caso seja utilizado algum componente cujo tipo de parâmetro é Multirecord e Filter, os campos devem obrigatoriamente estar na consulta SQL do relatório. Caso não estejam, não será possível gerar o filtro de forma adequada. O sistema irá emitir uma mensagem de alerta nestes casos.
  • Para evitar problemas de compatibilidade do relatório dinâmico e as consultas é imprescindível que o relatório e a consulta sejam confeccionados na mesma Coligada.