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:

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

TabelaParâmetro Multirecord INParâmetro Multirecord FilterParâmetro Lookup INParâmetro Lookup Filter
XCOMPRADOR MRE_ XCOMPRADOR_INMRE_ XCOMPRADOR_FILTERLKP_ XCOMPRADOR_INLKP_ XCOMPRADOR_FILTER

XCLIENTE

MRE_ XCLIENTE_INMRE_ XCLIENTE_FILTERLKP_ XCLIENTE_INLKP_ XCLIENTE_FILTER

XLOCADOR

MRE_ XLOCADOR_INMRE_ XLOCADOR_FILTERLKP_XLOCADOR_INLKP_ XLOCADOR_FILTER

XLOCATARIO

MRE_ XLOCATARIO_INMRE_ XLOCATARIOFILTERLKP_ XLOCATARIO_INLKP_XLOCATARIO_FILTER

XIDLAN

MRE_ XIDLAN_INMRE_XIDLAN_FILTERLKP_ XIDLAN_INLKP_ XIDLAN_FILTER

XIMOVEL

MRE_ XIMOVEL_INMRE_ XIMOVEL_FILTERLKP_ XIMOVEL_INLKP_XIMOVEL_FILTER

XCONTRATOLOC

MRE_ XCONTRATOLOC_INMRE_ XCONTRATOLOC_FILTERLKP_XCONTRATOLOC_INLKP_ XCONTRATOLOC_FILTER

XEMPREENDIMENTO

MRE_ XEMPREENDIMENTO_INMRE_ XEMPREENDIMENTO_FILTERLKP_ XEMPREENDIMENTO_INLKP_ XEMPREENDIMENTO_FILTER

XUNIDADE

MRE_ XUNIDADE_INMRE_ XUNIDADE_FILTERLKP_ XUNIDADE_INLKP_ XUNIDADE_FILTER

XSUBUNIDADE

MRE_ XSUBUNIDADE_INMRE_ XSUBUNIDADE_FILTERLKP_ XSUBUNIDADE_INLKP_ XSUBUNIDADE_FILTER

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


Dada as tabelas acima, eu quero que o meu relatório me permita escolher os 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

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

Na minha cláusula WHERE eu preciso utilizar sempre a função string_split. dessa forma, passamos os parâmetros como abaixo:


WHERE 
-
IN
(SELECT value AS parametro FROM STRING_SPLIT(:MRE_XCONTRATOLOC_IN, ','))


Para entender mais sobre essa função, consulte a página abaixo:


Central de Atendimento - Consultas com IN




Surgiu a necessidade no cliente VIPASA de uma tela que contenha vários filtros:


A proposta desta demanda está em evolução.

Os componentes são desenhados automaticamente na tela, de acordo com os parâmetros definidos no relatório.
O objetivo, neste momento, é testar apenas os parâmetros visuais — ainda não há o repasse desses parâmetros para a execução do relatório.

Inicialmente, foram criados alguns parâmetros específicos, mas é possível que outros surjam ao longo do desenvolvimento. Os parâmetros definidos até o momento são:
DateTime
Texto
*Int *( até foi implementando para não aceitar texto)
*Lookup *( definir o nome do parametro para que seja exibido o lookup)
*LookupMultiRecord *( definir o nome do parametro para que seja exibido o Lookup multiplo record)

Definir para lookup:
MRE_XCONTRATOLOC, deverá apresentar o lookup multiplo na tela de contrato de locação. ( precisa ser "MRE_XCONTRATOLOC")




Criação de novos parametros, que podem ser utilizado no relatório dinâmico,pois antes não estava implementado
1-Criação de parametro decimal
2-Criação de parametro Float / Duplo
3-Aplicação do parametro :MRE_XCONTRATOLOC_IN :
Aplicação do MultiRecord, nessa versão sofreu modificações, deve ser utilizado como "IN" na sentença SQL. que por sua vez,
segue essa documentação,como premissa,
ou seja a sentença sql devera esta da seguinte forma:
....
WHERE
(SELECT value AS parametro FROM STRING_SPLIT(:MRE_XCONTRATOLOC_IN, ','))

4-Aplicação do lookup:
Lookup tem em sua maioria 2 valores como chave, e para que seja passado esse valores para a sentença sql, ela deverá conter o valor definido exemplo:
SELECT * FROM XALGCONTRATOLOC
WHERE CODCONTLOC =:CODCONTLOC AND CODCOLCONTLOC=:CODCOLCONTLOC
Caso existe o parametro LKP_XCONTRATOLOC definido no relatório, não será necessário criar o parametro no relatório, pois internamente é verificado se a setença
tem o parametro que compoem a chave primaria, no caso CODCOLCONTLOC, sendo assim é aplicado a o valor do lookup automaticamente.
(sempre é necessário definir o parametro na sentença sql, para ser aplicado autmaticamente, caso contrario, será aplicado apenas o CODCONTLOC)

5- Aplicação de filter, criação apenas do parametro de relatório, onde é aplicado no resultado do relatório ao filtro.
MRE_XCONTRATOLOC_FILTER.

6-criado validação, para que quando o usuário definir algum _filter, os campos precisam estar na sentença sql, caso contrato não tem filtro,
dessa forma, será exibido mensagem de erro. ( só exibe caso o usuário informe os valores no multi record)

O relatório não pode ser gerado porque a sentença SQL não contém os campos [] definidos no filtro [MRE_XIDLAN_FILTER], informado como parâmetro.

O relatório possui o parâmetro definido [

{0}

], porém ele não está presente na sentença SQL.