Relatório Dinâmico

De FuturaWiki
Edição feita às 15h27min de 14 de fevereiro de 2024 por Brucog (Discussão | contribs)

Ir para: navegação, pesquisa

Introdução

O Relatório Dinâmico foi desenvolvido com a finalidade de facilitar o processo de desenvolvimento dos relatórios para nossos clientes.

Com esta ferramenta, o tempo de desenvolvimento será reduzido, pois os filtros serão criados dinamicamente.
Não será necessária a compilação do sistema para subir as alterações do relatório, ou seja, o processo de teste será mais rápido.
Além disso, o cliente não precisará aguardar a liberação de versão para ter a disponibilidade do relatório.

Tela de Cadastro

A tela de manutenção do Relatório Dinâmico encontra-se no Gerenciador Interno.
Caminho: Desenvolvimento > Relatórios Dinâmicos > Relatório Dinâmico

Aba Principal

Campos da aba Principal

Descrição dos principais campos desta aba:

  • Status: Define se o relatório irá aparecer no sistema do cliente.
  • Padrão: Se estiver como Sim, o relatório será enviado automaticamente para o cliente quando for executada uma atualização.
  • Versão mínima: Campo para indicar a versão mínima que a base do cliente precisa estar para receber o relatório.
  • Descrição: Título da tela do relatório.
  • Cliente: Cliente que solicitou o relatório.
  • Relatório: Campo para indicar o layout. Ao gravar o relatório, caso este campo estiver em branco, o sistema perguntará se o usuário deseja incluir um novo layout. Confirmando esta mensagem, o sistema exibirá uma tela onde será desenvolvido o layout.
  • Menu: Caminho do relatório que será exibido no menu da tela principal do cliente. Para incluir as opções, é necessário clicar com o botão direito. Se já houver um menu com o mesmo caminho indicado neste campo, será exibida uma mensagem de erro para o cliente.


Descrição dos campos do módulo (permissões):

  • Modulo: Campo não editável, gerado automaticamente com base no ID do cliente e no nome do relatório. Este campo é o nome do modulo que será cadastrado na base do cliente, portanto não poderá conter mais de um modulo com o mesmo nome.
  • Descrição: Nome da permissão que aparecerá na tela de Permissões de Usuário no sistema do cliente.
  • Tipo, Grupo e SubGrupo: Campos para indicar o caminho da permissão. Somente o campo SubGrupo é editável.
  • Sistema: Sistema em que o cliente poderá acessar o relatório. Caso o sistema indicado for Futura Server, o relatório também ficará disponível para os sistemas Gourmet Server e Futura Farmacia Server.


Aba Filtros

Campos da aba Filtros

Descrição dos campos desta aba:

  • Descrição: Nome do campo que aparecerá na tela de filtros.
  • Filtro Manual: A opção Sim será utilizada para filtros que necessitam passar algum valor por parâmetro. Ex: Empresa, Status de Pedido, Período, etc...

A opção Não será utilizada para filtros que não precisam passar valor por parâmetro, como por exemplo, um filtro para trazer somente produtos com estoque positivo.

  • Tipo de Dado: Campo para indicar o tipo de dado do filtro. Ficará habilitado somente se o Filtro Manual for Sim.
    • Lookup: Utilizado para indicar um registro da base de dados. Ex: Cliente, Fornecedor, Tipo de Pedido, etc...
    • Lookup Lista: Semelhante ao Lookup, porém, é possível indicar mais de um registro neste campo.
    • Data: Filtro para indicar uma data.
    • Data Período: Filtro para indicar um período de data.
    • Data Período Composta: Neste filtro, os campos de data serão exibidas em um ComboBox, e será possível filtrar por um período do campo selecionado. A descrição do campo e o tipo do filtro deverão ser preenchidas no campo Tipo Enumerado.
Exemplo de configuração do filtro Data Periodo Composta
    • Data Mês/Ano: Neste tipo de filtro, serão indicados o mês e o ano de um período. Os meses serão listados em um ComboBox, e o ano será indicado manualmente. No SQL, o primeiro parâmetro será referente ao mês, e o segundo será ao ano.
    • Integer: Utilizado para filtros em que é possível indicar somente números.
    • String: Utilizado para filtros em que é possível indicar letras e números.
    • Enumerado: Neste tipo de dado, as opções do filtro serão exibidas em um Combo Box. A descrição e o valor das opções deverão ser preenchidas no campo Tipo Enumerado.
    • Sim/Não: Exibirá um Combo Box com as opções Sim e Não.
  • Tipo Lookup: Ficará habilitado somente quando o Tipo de Dado for Lookup ou Lookup Lista. Neste campo será informado o tipo de registro que o usuário irá indicar no filtro.

Obs 1: Se for necessário a inclusão de um novo tipo neste campo, favor não esquecer de incluir a tela de consulta na Unit uTOtr_RelatorioDinamicoUtils.

Exemplo de filtro Enumerado

Obs 2: A classe TPF_Consulta está em uma Unit específica (bPF_ConsultaRelatorioDinamico), utilizada somente para o relatório dinâmico. Qualquer alteração feita na Unit do Genérico, a mesma deverá ser feita nesta Unit.

  • Posição: Posição em que o filtro será exibido na tela. Há uma validação para não permitir indicar uma posição duplicada.
  • Tipo Enumerado: Ficará habilitado somente quando o filtro de dado for Enumerado. No campo Valor, podemos indicar números, letras e palavras. Para a opção Todos, devemos indicar o valor -1 (ver imagem).
  • Parâmetro de Filtro: Campo para indicar o parâmetro do filtro que será utilizado no SQL. Este campo ficará habilitado somente quando o campo Filtro Manual estiver como Sim.
  • Parâmetro de Filtro (2): Campo para indicar o segundo parâmetro do filtro. Até o momento, é utilizado apenas para filtros de Data Período.
  • Parâmetro de Ativação: Campo para indicar o parâmetro de ativação. Mais detalhes deste campo estão logo abaixo.
  • Valor Inicial: Campo para indicar o valor padrão para o campo ao abrir a tela
  • Valor Inicial 2: Campo para indicar o valor padrão para o campo 2 ao abrir a tela


Valores Iniciais
Existem alguns atalhos de texto para os valores iniciais que podem ser utilizados, são eles:

  • [DATA]: Retorna data atual, e pode ser usado juntamente com operador + e -. Exemplo: [DATA]-30 (retornará a data atual - 30 dias)
  • [EMPRESA]: Retorna ID da empresa padrão
  • [USUARIO]: Retorna ID do usuário logado
  • [VENDEDOR]: Retorna ID do vendedor logado
  • [CLIENTE]: Retorna ID do cliente padrão.

Para utilizar valor inicial em campos Lookup Lista, os valores deverão ser separados por virgula. Exemplo: 25,201,301

Para utilizar valor inicial em combobox, é necessário utilizar o índice, sempre lembrando que o primeiro indice se inicia no 0.

SEMPRE SE ATENDE DE COLOCAR VALORES COMPATIVEIS COM O CAMPO UTILIZADO.



SQL / Parâmetros

No código SQL, deveremos incluir os Parâmetros e os Parâmetros de Ativação.
O Parâmetro de Ativação é utilizado para não quebrar o SQL quando algum parâmetro possuir valor Null.
As condições no Where devem seguir o seguinte padrão: AND ((:PARAMETRO_ATIVACAO = 'N') OR (:PARAMETRO_VALOR = CAMPO))
O Parâmetro de Ativação deverá ser comparado com 'N', e a condição do parâmetro do valor deverá ser com OR.

Para melhor entendimento, segue um exemplo de SQL utilizando todos os tipos de filtros possíveis:

PEDIDO

 SELECT PED.ID
 FROM PEDIDO PED
 INNER JOIN CADASTRO CAD ON (CAD.ID = PED.FK_CADASTRO)
 INNER JOIN TIPO_PEDIDO TPPED ON (TPPED.ID = PED.FK_TIPO_PEDIDO)
 LEFT  JOIN SYS_USUARIO USU ON (USU.ID = PED.FK_USUARIO_PED)
 LEFT  JOIN CADASTRO VEND ON (VEND.ID = PED.FK_VENDEDOR)
 LEFT  JOIN CADASTRO_GRUPO CAGR ON ( CAGR.ID = CAD.FK_CADASTRO_GRUPO)
 LEFT  JOIN NOTA_FISCAL NF ON (NF.FK_PEDIDO = PED.ID AND NF.MODELO_DOC_FISCAL IN (0,24))
 WHERE (TPPED.TIPO = 0)
   AND ((:LOOKUP_EMPRESA_ATIVACAO = 'N') OR (:LOOKUP_EMPRESA = PED.FK_EMPRESA))
   AND ((:LOOKUP_LISTA_CLIENTES_ATIVACAO = 'N') OR (PED.FK_CADASTRO IN (SELECT RESULT FROM SP_GET_CONJUNTO_INTEIRO(:LOOKUP_LISTA_CLIENTES))))          
   AND ((:ENUMERADO_STATUS_ATIVACAO = 'N') OR (:ENUMERADO_STATUS = PED.STATUS))
   AND ((:DATA_EMISSAO_ATIVACAO = 'N') OR (:DATA_EMISSAO = PED.DATA_EMISSAO))
   AND ((:DATA_PERIODO_EMISSAO_ATIVACAO = 'N') OR (PED.DATA_EMISSAO BETWEEN :DATA_PERIODO_EMISSAO AND :DATA_PERIODO_EMISSAO_2))
   AND ((:INTEGER_NRO_PEDIDO_ATIVACAO = 'N') OR (:INTEGER_NRO_PEDIDO = PED.NRO_PEDIDO))
   AND ( 
       ((:DATA_ATIVACAO = '1') AND (PED.DATA_EMISSAO       between :DATA_INICIAL AND :DATA_FINAL)) OR
       ((:DATA_ATIVACAO = '2') AND (PED.DATA_PREVISAO      between :DATA_INICIAL AND :DATA_FINAL)) OR
       ((:DATA_ATIVACAO = '3') AND (PED.DATA_SAIDA_ENTRADA between :DATA_INICIAL AND :DATA_FINAL))
       )
   AND ((EXTRACT(MONTH FROM PED.DATA_EMISSAO) = :DATA_MES) AND (EXTRACT(YEAR FROM PED.DATA_EMISSAO) = :DATA_ANO))

PEDIDO_ITEM

 SELECT IT.ID,
 FROM PEDIDO_ITEM IT
 INNER JOIN PEDIDO PED ON (PED.ID = IT.FK_PEDIDO)
 INNER JOIN PRODUTO PR ON (PR.ID = IT.FK_PRODUTO)
 LEFT  JOIN PRODUTO_UNIDADE UN ON (UN.ID = PR.FK_PRODUTO_UNIDADE)
 LEFT  JOIN CLASSIFICACAO_FISCAL CF ON (PR.FK_CLASSIFICACAO_FISCAL = CF.ID)
 WHERE ((:FILTRO_NAO_MANUAL_ESTOQUE_ATIVACAO = 'N') OR ((SELECT SALDO FROM SP_GET_PRODUTO_SALDO(PED.FK_EMPRESA, PR.ID)) > 0)) --Filtro manual: NÃO    
   AND ((:SIM_NAO_UTILIZA_BALANCA_ATIVACAO = 'N') OR (:SIM_NAO_UTILIZA_BALANCA = UN.UTILIZA_BALANCA))   
   AND ((:STRING_CLASS_FISCAL_ATIVACAO = 'N') OR (:STRING_CLASS_FISCAL = CF.CLASSIFICACAO))