Mudanças entre as edições de "Relatório Dinâmico"
(→Tela de Cadastro) |
(→Tela de Cadastro) |
||
(16 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
Linha 46: | Linha 46: | ||
**'''''Data Período:''''' Filtro para indicar um período de 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''. | **'''''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''. | ||
− | [[Arquivo:DataPeriodoComposta. | + | [[Arquivo:DataPeriodoComposta.PNG|miniaturadaimagem|direita|400px|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. | **'''''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. | **'''''String:''''' Utilizado para filtros em que é possível indicar letras e números. | ||
Linha 61: | Linha 62: | ||
*'''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 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. | *'''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 | ||
+ | |||
+ | <br/> | ||
+ | '''<big>Valores Iniciais</big>''' | ||
+ | <br/> | ||
+ | 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 do campo. | ||
+ | |||
+ | Para utilizar valor inicial em campo mes/ano, é necessário utilizar o índice do mes (0 a 11) no primeiro valor inicial, e o ano (integer 4 digitos ex: 2020, 2021, 2024) no segundo campo de valor inicial | ||
+ | |||
+ | '''SEMPRE SE ATENTE DE COLOCAR VALORES COMPATIVEIS COM O CAMPO UTILIZADO.''' | ||
+ | |||
<br/><br/> | <br/><br/> | ||
Linha 91: | Linha 113: | ||
AND ((:DATA_PERIODO_EMISSAO_ATIVACAO = 'N') OR (PED.DATA_EMISSAO BETWEEN :DATA_PERIODO_EMISSAO AND :DATA_PERIODO_EMISSAO_2)) | 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 ((: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)) | ||
</code> | </code> | ||
'''<big>PEDIDO_ITEM</big>''' | '''<big>PEDIDO_ITEM</big>''' |
Edição atual tal como às 15h42min de 22 de fevereiro de 2024
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
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
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.
- 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.
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 do campo.
Para utilizar valor inicial em campo mes/ano, é necessário utilizar o índice do mes (0 a 11) no primeiro valor inicial, e o ano (integer 4 digitos ex: 2020, 2021, 2024) no segundo campo de valor inicial
SEMPRE SE ATENTE 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))