Boa noite pessoal.
Eu estava agora a pouco escrevendo uma procedure para um software em desenvolvimento que calculava a data de vencimento de reclamações dos clientes.
Se você trabalha com gestão financeira, sabe o quanto é importante ter um sistema que calcule as datas de vencimento corretamente. Imagine a frustração de um cliente ao receber uma cobrança com uma data incorreta ou que caia em um feriado, por exemplo.
Para evitar esse tipo de problema, é possível criar uma função em SQL que faça esse cálculo levando em conta dias úteis e feriados. Neste artigo, vamos mostrar passo a passo como criar essa função.
Primeiro, vamos definir os parâmetros que a função vai receber. São eles:
- @dataAtual: a data atual, representada pelo tipo smalldatetime;
- @quantidadeDias: a quantidade de dias a serem adicionados à data atual para se obter a data de vencimento, representada pelo tipo int;
- @diasUteis: um parâmetro do tipo bit que indica se a opção de considerar apenas dias úteis está ativada ou não.
Com esses parâmetros definidos, podemos começar a criar a função. Vamos nomeá-la de “getVencimento”. Segue function comentada para facilitar o entendimento.
CREATE FUNCTION getVencimento (@dataAtual smalldatetime, @quantidadeDias int, @diasUteis bit)
RETURNS smalldatetime
AS
BEGIN
-- Inicia a variável @diasAdicionais como zero e a variável @vencimento como a data atual somada à quantidade de dias informada.
DECLARE @diasAdicionais int = 0
DECLARE @vencimento smalldatetime = DATEADD(day, @quantidadeDias, @dataAtual)
IF @diasUteis = 1 -- Verifica se a opção de dias úteis está ativa
BEGIN
WHILE @diasAdicionais < @quantidadeDias -- Loop para adicionar dias úteis à data de vencimento
BEGIN
SET @vencimento = DATEADD(day, 1, @vencimento) -- Adiciona um dia à data de vencimento
IF DATENAME(weekday, @vencimento) NOT IN ('Saturday', 'Sunday') -- Verifica se o dia adicionado não é sábado ou domingo
BEGIN
IF NOT EXISTS (SELECT * FROM FERIADOS WHERE Data = @vencimento) -- Verifica se o dia adicionado não é um feriado cadastrado na tabela FERIADOS
BEGIN
SET @diasAdicionais = @diasAdicionais + 1 -- Incrementa a variável @diasAdicionais
END
END
END
END
IF @diasUteis = 0 -- Verifica se a opção de dias úteis está desativada
BEGIN
WHILE @diasAdicionais < @quantidadeDias -- Loop para adicionar dias corridos à data de vencimento
BEGIN
SET @vencimento = DATEADD(day, 1, @vencimento) -- Adiciona um dia à data de vencimento
SET @diasAdicionais = @diasAdicionais + 1 -- Incrementa a variável @diasAdicionais
END
END
WHILE EXISTS (SELECT * FROM FERIADOS WHERE Data = @vencimento) -- Loop para verificar se a data de vencimento cai em um feriado cadastrado na tabela FERIADOS
BEGIN
SET @vencimento = DATEADD(day, 1, @vencimento) -- Adiciona um dia à data de vencimento
END
RETURN @vencimento -- Retorna a data de vencimento final
END
Agora, me diz ai, foi util para você ?
Se sim, deixe um comentário. Ajuda muito a incentivar nosso trabalho. E vamos codar!