Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

KUROL3

Data Procurar o Proximo dia útil

Recommended Posts

Olá bom estou com uma duvida de lógica acredito que seja simples porem já torrei uns neuronios aqui e não consegui!

 

é o Seguinte tenho 2 tabelas

 

1 de boletos (id, data_vencimento, valor) /*obs a data_vencimento esta como datetime */

2 de feriados (id, data, nome_feriado) /*obs a data esta como datetime */

 

Bom gostaria de fazer um select simples para não cobrar juros dos boletos que vence nos feriado e o usuário paga no proximo dia útil:

 

O próximo dia útil da data de vencimento não pode ter juros.

 

Aguardo

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

ae tiozinho, aqui tem um link que vai te dar umas dicas http://forum.imasters.com.br/index.php?/topic/333883-resolvido%26nbsp%3Bultimo-dia-do-mes/page__fromsearch__1, e dentro desse link tb. tem um monte de links com muita matéria, com czt vai te ajudar

boa sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

usei esta função e retorna o dia útil corretamente, so que...::: imagina a situação o boleto vence

no sabado 23/10/2010 a função jogará na segunda 25/10/2010 e se tem um feriado na terça 26/10/2010 e o

cliente não pagou desde sabado o boleto pego na terça estará com vencimento pra quarta.. sem juros.. sendo

que não poderia... por isso eu disse somente o primeiro dia útil do vencimento do boleto.

 

 

Declare @teste Int 
Declare @DtInicio Datetime 


set @DtInicio = @PDtInicio
set @teste = 0


--loop para encontrar o dia útil
while @teste=0 
begin


if DatePart(WeekDay, @DtInicio) Not In (7,1) 
/*muito importante o uso do floor para eliminar a hora da data, dê uma olhada no artigo
sobre este hack*/
and not exists(select cast(floor(cast(KF.data as float)) as datetime) 
from kurole_data_feriados KF where cast(floor(cast(KF.data as float)) as datetime)=cast(floor(cast(@DtInicio as float)) as datetime)) 
begin


set @teste = 1


end
else
select @DtInicio=DateAdd(day,1,@DtInicio)


end
RETURN @DtInicio

Vlw pela ajuda

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

vai ter que ter uma tabela com os feriados nacionais e regionais para saber. Fiz isso em um sistema de BI.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa tabela ja tem... esta na função kurole_data_feriados.... mas leia de novo o que eu escrevi....

 

usei esta função e retorna o dia útil corretamente, so que...::: imagina a situação o boleto vence

no sabado 23/10/2010 a função jogará na segunda 25/10/2010 e se tem um feriado na terça 26/10/2010 e o

cliente não pagou desde sabado o boleto pego na terça estará com vencimento pra quarta.. sem juros.. sendo

que não poderia... por isso eu disse somente o primeiro dia útil do vencimento do boleto.

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa tabela ja tem... esta na função kurole_data_feriados.... mas leia de novo o que eu escrevi....

 

usei esta função e retorna o dia útil corretamente, so que...::: imagina a situação o boleto vence

no sabado 23/10/2010 a função jogará na segunda 25/10/2010 e se tem um feriado na terça 26/10/2010 e o

cliente não pagou desde sabado o boleto pego na terça estará com vencimento pra quarta.. sem juros.. sendo

que não poderia... por isso eu disse somente o primeiro dia útil do vencimento do boleto.

Marco

 

1 de boletos (id, data_vencimento, valor) /*obs a data_vencimento esta como datetime */

2 de feriados (id, data, nome_feriado) /*obs a data esta como datetime */

Me desculpe, mas não me atentei ao detalhe do primeiro post. Imagem Postada

Vou tentar simular em um ambiente de teste que tenho.

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um.. não me ajudou ... veja o improviso que fiz.... funcionow....

mas gostaria de uma coisa mais inteligente...

o que fiz torna 1 para cobrar juros 0 não cobra juros...

lembrando que sera cobrado juros somente a partir do primeiro dia útil do vencimento...

marco

 

Declare @dataehora datetime = getdate();
Declare @resposta Int;

SET @venc_contrato = cast(@venc_contrato as date)

SET @resposta =  
    CASE WHEN
         (
            select 
              count(*) 
            from 
              kurole_data_feriados 
            where 
              cast(kurole_data_feriados.data as date) = cast(@dataehora as date) AND 
              cast(kurole_data_feriados.data as date) = DATEADD(DAY, 0, @venc_contrato)
          ) > 0
    THEN
         0
    ELSE
      CASE WHEN   
         (
            select 
              count(*) 
            from 
              kurole_data_feriados 
            where 
              cast(kurole_data_feriados.data as date) = cast(@dataehora as date) AND 
              cast(kurole_data_feriados.data as date) = DATEADD(DAY, 1, @venc_contrato)
          ) > 0
      THEN
          0
      ELSE
        /* vamos checar se é o primeiro dia útil */
        CASE WHEN   
         (
            select 
              count(*) 
            from 
              kurole_data_feriados 
            where 
              cast(kurole_data_feriados.data as date) = cast(DATEADD(DAY, -1,@dataehora) as date) AND 
              cast(kurole_data_feriados.data as date) = DATEADD(DAY, 0, @venc_contrato)
          ) > 0
        THEN
            0
        ELSE
          CASE WHEN   
            (
              select 
                count(*) 
              from 
                kurole_data_feriados 
              where 
                cast(kurole_data_feriados.data as date) = cast(DATEADD(DAY, -2, @dataehora) as date) AND 
                cast(kurole_data_feriados.data as date) = DATEADD(DAY, 0, @venc_contrato)
            ) > 0
          THEN
            CASE WHEN   
              (
                select 
                  count(*) 
                from 
                  kurole_data_feriados 
                where 
                  cast(kurole_data_feriados.data as date) = cast(DATEADD(DAY, -1, @dataehora) as date) AND 
                  cast(kurole_data_feriados.data as date) = DATEADD(DAY, 0, @venc_contrato)
              ) > 0
            THEN
                0
            ELSE      
              CASE WHEN   
                (
                  select 
                    count(*) 
                  from 
                    kurole_data_feriados 
                  where 
                    cast(kurole_data_feriados.data as date) = cast(DATEADD(DAY, -1, @dataehora) as date) AND 
                    cast(kurole_data_feriados.data as date) = DATEADD(DAY, 1, @venc_contrato)
                ) > 0
              THEN
                  0
              ELSE
                  1
              END  
            END  
          ELSE
            CASE WHEN   
              (
                select 
                  count(*) 
                from 
                  kurole_data_feriados 
                where 
                  cast(kurole_data_feriados.data as date) = cast(DATEADD(DAY, -3, @dataehora) as date) AND 
                  cast(kurole_data_feriados.data as date) = DATEADD(DAY, 0, @venc_contrato)
              ) > 0
            THEN
                0
            ELSE
              CASE WHEN   
                (
                  select 
                    count(*) 
                  from 
                    kurole_data_feriados 
                  where 
                    cast(kurole_data_feriados.data as date) = cast(DATEADD(DAY, -4, @dataehora) as date) AND 
                    cast(kurole_data_feriados.data as date) = DATEADD(DAY, 0, @venc_contrato)
                ) > 0
              THEN
                  0
              ELSE
                  1
              END  
            END  
          END  
        END  
      END  
    END  
  return @resposta;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho q você só precisa do seguinte select

 

select count(*) as qtde
from boletos inner join kurole_data_feriados
on boletos.data_vencimento = kurole_data_feriados.data
where boletos.id = @idDoBoleto

Caso o select retorne um valor maior que 0, não cobrar juros, caso contrário, cobrar.

 

Qto aos dias da semana, compensa verificar o exemplo que nosso amigo havia passado.

 

http://forum.imasters.com.br/index.php?/topic/333883-resolvido%26nbsp%3Bultimo-dia-do-mes/page__fromsearch__1

 

Abs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao é tão simples assim....

pq tem ser o sem multa somente o o primeiro dia útil da data de vencimento ... ao passar uma semana no sabado ou domingo ou outro feriado que seja tem que ser com multa.

 

Marco

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.