Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
marcelvinicius
Creator III
Creator III

Carga por data se tiver o mês

Boa tarde pessoal,

Gostaria de tirar uma duvida: consigo criar uma carga de dados para um QVD somente se tiver o mês?

Para tirar a confusão:

Tenho os seguintes parâmetros:

//Busca o mês corrente

LET vrDataIni = DATE(MonthStart(AddMonths(Today())),'YYYY/MM/DD');

LET vrDataFim  = DATE(MonthEnd(AddMonths(Today())),'YYYY/MM/DD');

//Busca um mês antes do mês corrente

LET vrDataIni1  = DATE(MonthStart(AddMonths(Today(),-1)),'YYYY/MM/DD');

LET vrDataFim1  = DATE(MonthEnd(AddMonths(Today(),-1)),'YYYY/MM/DD');

//Busca dois meses antes do mês corrente

LET vrDataIni2  = DATE(MonthStart(AddMonths(Today(),-2)),'YYYY/MM/DD');

LET vrDataFim2  = DATE(MonthEnd(AddMonths(Today(),-2)),'YYYY/MM/DD');

Porém quero saber se consigo fazer esse tipo de carga somente se tiver mês para trás no ano:

Exemplo:

Janeiro de 2017 - um mês antes é Dezembro de 2016  - e eu NÃO quero buscar as informações do mês anterior, ou seja, busca nada.

Tem como fazer isso?

Fui claro?

Atenciosamente.

1 Solution

Accepted Solutions
thiago_mlg
Creator II
Creator II

Marcel, boa tarde!

Tem varias formas de fazer isso, mais supondo que você continuará sua mesma lógica, fica mais ou menos assim:

Basta você colocar uma verificação em toda variável para saber se estamos no Ano Vigênte.

Busca o mês corrente,

LET vrDataIni = DATE(MonthStart(AddMonths(Today())),'YYYY/MM/DD');

LET vrDataFim  = DATE(MonthEnd(AddMonths(Today())),'YYYY/MM/DD');

//Busca um mês antes do mês corrente apenas se o mês anterior tiver dentro do ano atual..

LET vrDataIni1 = IF(year(MonthStart(AddMonths(Today(),-1))) = year(today()), DATE(MonthStart(AddMonths(Today(),-1)),'YYYY/MM/DD'));

LET vrDataFim1  = IF(year(MonthEnd(AddMonths(Today(),-1))) = year(today()), DATE(MonthEnd(AddMonths(Today(),-1)),'YYYY/MM/DD'));

/

//Busca dois meses antes do mês corrente apenas se o dois meses anterior tiver dentro do ano atual..

LET vrDataIni2 = IF(year(MonthStart(AddMonths(Today(),-2))) = year(today()), DATE(MonthStart(AddMonths(Today(),-2)),'YYYY/MM/DD'));

LET vrDataFim1  = IF(year(MonthEnd(AddMonths(Today(),-2))) = year(today()), DATE(MonthEnd(AddMonths(Today(),-2)),'YYYY/MM/DD'));

e Assim por diante.

Qualquer dúvida à disposição.

Att,

View solution in original post

5 Replies
felipedl
Partner - Specialist III
Partner - Specialist III

Olá Marcel,

não ficou muito claro se você quer pegar os meses onde há QVDs ou se você quer fazer uma carga específica, com base em datas.

Poderia explicar melhor?

Felipe.

marcelvinicius
Creator III
Creator III
Author

Boa tarde felipedl

Carga especifica. Eu pego informações baseadas nessas datas.

Eu busco sempre 3 meses de dados no banco. Mas quero buscar os ultimos 12 meses, porém não quero montar um QVD com ano de 2016/2017, somente os meses do ano de 2017, entendeu?

Atenciosamente.

felipedl
Partner - Specialist III
Partner - Specialist III

Marcel,

É possível fazer algo parecido com isso

// Seta os valores para zero, caso eles sejam englobados em anos inferiores a 2017

let vDataIni = 0;

let vDataFim = 0;

let vDataIni2 = 0;

let vDataFim2 = 0;

let vDataIni3 = 0;

let vDataFim3 = 0;

// Verifica se o ano da data atual é 2017 ou maior

if (Year(Today())>=2017) then

let vDataIni = DATE(MonthStart((Today())),'YYYY/MM/DD');

let vDataFim = DATE(MonthEnd((Today())),'YYYY/MM/DD');

end if;

// Verifica se o ano do mês anterior é 2017 ou maior

if (Year(AddMonths(Today(),-1))>=2017) then

let vDataIni2 = DATE(MonthStart(AddMonths(Today(),-1)),'YYYY/MM/DD');

let vDataFim2 = DATE(MonthEnd(AddMonths(Today(),-1)),'YYYY/MM/DD');

end if;

// Verifica se o ano de dois meses atrás é 2017 ou maior

if (Year(AddMonths(Today(),-2))>=2017) then

let vDataIni3 = DATE(MonthStart(AddMonths(Today(),-2)),'YYYY/MM/DD');

let vDataFim3 = DATE(MonthEnd(AddMonths(Today(),-2)),'YYYY/MM/DD');

end if;

Para o caso em que algum dos meses caia em datas de 2016, o valor dos vDataIni e vDataFim ficará igual a zero.

thiago_mlg
Creator II
Creator II

Marcel, boa tarde!

Tem varias formas de fazer isso, mais supondo que você continuará sua mesma lógica, fica mais ou menos assim:

Basta você colocar uma verificação em toda variável para saber se estamos no Ano Vigênte.

Busca o mês corrente,

LET vrDataIni = DATE(MonthStart(AddMonths(Today())),'YYYY/MM/DD');

LET vrDataFim  = DATE(MonthEnd(AddMonths(Today())),'YYYY/MM/DD');

//Busca um mês antes do mês corrente apenas se o mês anterior tiver dentro do ano atual..

LET vrDataIni1 = IF(year(MonthStart(AddMonths(Today(),-1))) = year(today()), DATE(MonthStart(AddMonths(Today(),-1)),'YYYY/MM/DD'));

LET vrDataFim1  = IF(year(MonthEnd(AddMonths(Today(),-1))) = year(today()), DATE(MonthEnd(AddMonths(Today(),-1)),'YYYY/MM/DD'));

/

//Busca dois meses antes do mês corrente apenas se o dois meses anterior tiver dentro do ano atual..

LET vrDataIni2 = IF(year(MonthStart(AddMonths(Today(),-2))) = year(today()), DATE(MonthStart(AddMonths(Today(),-2)),'YYYY/MM/DD'));

LET vrDataFim1  = IF(year(MonthEnd(AddMonths(Today(),-2))) = year(today()), DATE(MonthEnd(AddMonths(Today(),-2)),'YYYY/MM/DD'));

e Assim por diante.

Qualquer dúvida à disposição.

Att,

marcelvinicius
Creator III
Creator III
Author

Bom dia pessoal.

As duas respostas serviram, mas a do amigo thiago.mlg‌ foi melhor utilizada por buscar sempre a data do sistema sem precisar setar o ano (exemplo: 2017).

Obrigado amigos.