You are on page 1of 11

04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

Products
Products Industries
Industries Support
Support Training
Training Community
Community Developer
Developer Partner
Partner

About
About

 
Home / Community / Blogs + Actions

Criando filtros customizados para consultas


no gerente de consultas
January 16, 2016 | 497 Views |

DIEGO LOTHER
more by this author

SAP Business One

formated search | sap busines one | sapb1 | sql

share
0 share tweet share

Follow RSS

Olá pessoal, essa semana passei por uma situação em que era necessário
criar uma consulta com critérios de seleção customizados, e ao chegar no
resultado final, acreditei que seria interessante compartilhar este artificio.

Bom vamos ao nosso cenário fictício:

https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 1/11
04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

Supomos que temos a necessidade de criar filtros para a seguinte


consulta(chamarei de Consulta Situação Nota Fiscal):

SELECT
Chave,
[Número do Documento],
[Código do PN],
Status,
[Data de Lançamento],
[Data de vencimento],
[Data do Documento]
FROM
(SELECT
DocEntry AS 'Chave',
DocNum AS 'Número do Documento',
CardCode AS 'Código do PN',
CASE
WHEN CANCELED = 'Y' THEN
'Cancelada'
WHEN DocStatus = 'C' THEN
'Fechada'
WHEN DocStatus = 'O' THEN
'Aberta'
END AS Status,
DocDate AS 'Data de Lançamento',
DocDueDate AS 'Data de vencimento',
TaxDate AS 'Data do Documento'
FROM OINV) AS
T0

Para esta consulta criaremos 4 filtros que são:

1. Tipo de data que deve ser filtrado: Data de pagamento, Data de vencimento
ou data de emissão.

2. Data Inicial

3. Data Final

4. Status do documento: Aberto, Fechado, Cancelado e Todos.

No entanto, de maneira tradicional, não é possível colocar nos critérios de


seleção, o rotulo que você deseja em cada filtro. Também não é possível
ter um combo com opções customizadas. Essa situação pode ser resolvida
com a criação de uma UDT(Tabela de usuário) do tipo “sem objeto”.

Vamos a resolução:

https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 2/11
04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

Criarei uma tabela chamada Filtros.

Com a tabela criada, vamos a criação dos campos:

Os filtros Data Inicial e Data Final terão apenas uma nova descrição. Então
criarei dois campos um com o titulo DtIni e com a descrição “Data
Inicial”(estará na imagem abaixo) e outro com o titulo DtFim e com a
descrição “Data Final”, ambos do tipo Data/Hora, com estrutura do tipo
Data.

Agora vamos aos filtros onde é necessário um combo. Criaremos da


mesma forma como apresentada acima, porém esses dois filtros serão do
tipo alfanúmerico. O artificio para esses filtros é a adição de valores
válidos. Dessa forma poderemos usar eles no combo da tela de critérios de
seleção.

Na criação dos valores válidos, usarei no campo valor e no campo


descrição a mesma informação.

https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 3/11
04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

Agora com nossas opções de filtros criadas, iremos chama-lá a partir do


gerador de consulta da seguinte forma:

SELECT * FROM [@FILTROS] T0 WHERE T0.[U_TipoData] = '[%0]' AND


T0.[U_DtIni] >= '[%1]' AND T0.[U_DtFim] <= '[%2]' AND T0.[U_Status] =

Na instrução acima, estou apenas chamando os filtros , não estou


aplicando eles na minha consulta ainda. O comando acima pode ser
https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 4/11
04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

entendido como:

%0 = Apareça em tela um filtro relacionado ao campo TipoData da tabela


@Filtros com o texto “Igual a”.

%1 = Apareça em tela um filtro relacionado ao campo DtIni da tabela


@Filtros com o texto “Maior ou igual”.

%2 = Apareça em tela um filtro relacionado ao campo DtFim da tabela


@Filtros com o texto “Menor ou igual”.

%3 = Apareça em tela um filtro relacionado ao campo Status da tabela


@Filtros com o texto “Igual a”.

A linha acima será executada como consulta, mas não retornará nada, pois
a tabela está vazia. Mesmo que retornasse algo, para esse nosso cenário,
o retorno não importa.

Agora vamos ler esses filtros para variáveis, para que possamos usar nas
nossas consultas.

DECLARE @TipoData AS NVARCHAR(20)


DECLARE @DtIni AS DATETIME
DECLARE @DtFim AS DATETIME
DECLARE @Status AS NVARCHAR(10)
/* SELECT FROM [@FILTROS] T0 WHERE */ SET @TipoData /* T0.[U_TipoData
SET @DtIni /* T0.[U_DtIni] >= */ = '[%1]' /* AND */ SET @DtFim /* T0.
AND */ SET @Status /* T0.[U_Status] = */ = '[%3]'

Com esta alteração estamos fazendo a mesma coisa descrita acima,


porém agora, estamos também pegando o valor obtido no filtro e colocando
esse valor nas nossas variáveis. Nesse momento basta apenas alterar
nossa consulta para utilizar as variáveis obtida. Dessa forma nosso
resultado final ficará:

https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 5/11
04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

DECLARE @TipoData AS NVARCHAR(20)


DECLARE @DtIni AS DATETIME
DECLARE @DtFim AS DATETIME
DECLARE @Status AS NVARCHAR(10)
/* SELECT FROM [@FILTROS] T0 WHERE */ SET @TipoData /* T0.[U_TipoData
SET @DtIni /* T0.[U_DtIni] >= */ = '[%1]' /* AND */ SET @DtFim /* T0.
AND */ SET @Status /* T0.[U_Status] = */ = '[%3]'
SELECT
Chave,
[Número do Documento],
[Código do PN],
Status,
[Data de Lançamento],
[Data de vencimento],
[Data do Documento]
FROM
(SELECT
DocEntry AS 'Chave',
DocNum AS 'Número do Documento',
CardCode AS 'Código do PN',
CASE
WHEN CANCELED = 'Y' THEN
'Cancelado'
WHEN DocStatus = 'C' THEN
'Fechado'
WHEN DocStatus = 'O' THEN
'Aberto'
END AS Status,
DocDate AS 'Data de Lançamento',
DocDueDate AS 'Data de vencimento',
TaxDate AS 'Data do Documento'
FROM OINV) AS
T0
WHERE
@DtIni <=
CASE
WHEN @TipoData = 'Data de Lançamento' THEN
T0.[Data de Lançamento]
WHEN @TipoData = 'Data de vencimento' THEN
T0.[Data de vencimento]
WHEN @TipoData = 'Data do Documento' THEN
T0.[Data do Documento]
END
AND
@DtFim >=
CASE
WHEN @TipoData = 'Data de Lançamento' THEN
T0.[Data de Lançamento]
WHEN @TipoData = 'Data de vencimento' THEN
T0.[Data de vencimento]
WHEN @TipoData = 'Data do Documento' THEN
T0.[Data do Documento]
END
AND
CASE
WHEN @Status = 'Todos' THEN
''
ELSE
T0.Status
END
=
CASE
WHEN @Status = 'Todos' THEN
https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 6/11
04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

''
ELSE
@Status
END

Ao executar nossa consulta, teremos a seguinte situação:

Espero que possa ser útil.

Dúvidas e sugestões são bem vindas.

Att,

Diego Lother

Alert Moderator

10 Comments
https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 7/11
04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

You must be Logged on to comment or reply to a post.

Former Member

February 18, 2016 at 1:10 am

Muito Legal…..

Assim que puder vou Testar….

att.

Kelvin

DIEGO LOTHER Post author

February 18, 2016 at 11:30 am

Ribeiro,

Espero que ajude, obrigado pelo feedback.

Atenciosamente,

Diego Lother

Former Member

February 18, 2016 at 11:12 am

Muito boa sua dica Diego Lother !!!

Com certeza irei utilizar, pois já me deparei com várias Consultas onde estas opções
dariam uma melhor flexibilidade na entrada dos Parâmetros/Filtros.

Parabéns.

Augustus

https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 8/11
04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

DIEGO LOTHER Post author

February 18, 2016 at 11:31 am

Augustus,

Obrigado pelo feedback. Espero que ajude.

Atenciosamente,

Diego Lother

Former Member

February 18, 2016 at 11:47 am

Diego.

Testei e funcionou perfeitamente. Parabéns !!!

Abraços.

Augustus

Former Member

February 24, 2016 at 12:30 am

Olá Diego.

Parabéns pela sua publicação!!!

Excelente abordagem!!!

Já usei esta questão de definição de variáveis em um outro formato:

declare @teste nvarchar(max)

set @teste = /* t0.[CardCode] */ ‘[%0]’

SELECT * FROM OCRD T0 WHERE T0.[CardCode] = @teste

Neste cenário é possível usar um campo qualquer de uma das tabelas em select
para fazer a definição da variável e a definição da variável não exige a execução de

https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 9/11
04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

vários SELECTs.

Depois foi possível usar a variável em outras partes, inclusive em UNIONs e tudo
mais.

Se possível dê uma olhada e veja se podemos melhorar o conjunto, assim


conseguiremos otimizar consultas e tudo mais.

Abraço,

Rodrigo da Costa Feula

DIEGO LOTHER Post author

February 24, 2016 at 11:30 am

Olá Rodrigo,

Obrigado pelo feedback.

Estarei testando a sugestão proposta. Atualizarei o post assim que


possivel.

Atenciosamente,

Diego Lother

Former Member

February 25, 2016 at 1:50 pm

Oi Diego, a visualização das tabelas onde são mostrados


os códigos em SQL está comendo códigos aqui a direita.

Att,

Rodrigo da Costa Feula

Maicon Mendes Macedo

https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 10/11
04/06/2018 Criando filtros customizados para consultas no gerente de consultas | SAP Blogs

April 20, 2016 at 12:17 pm

Diego,

Ótimo post.

Obrigado por compartilhar.

Att,

Maicon Macedo

DIEGO LOTHER Post author

April 20, 2016 at 12:20 pm

Olá Maicon,

Muito obrigado pelo feedback.

Atenciosamente,

Diego Lother

Share & Follow


Privacy Terms of Use Legal Disclosure Copyright Trademark Sitemap Newsletter

https://blogs.sap.com/2016/01/16/criando-filtros-customizados-para-consultas-no-gerente-de-consultas/ 11/11

You might also like