none
Dias atuais com função de dias uteis RRS feed

  • Pergunta

  • Ola pessoal

    Preciso de uma ajuda se for possivel:

    Eu tenho uma função que calcula os dias uteis, preciso fazer um select que pega uma data de uma tabela e calcula alguns dias anteriores baseado na função de dias uteis, eu tentei fazer o comando mas esta dando erro:

    Declare      @DTLimite     SmallDateTime

    set @DtLimite = dbo.fn_DiaUtil

    set dateformat dmy

    select tblwrirecepcao.PK_Recepcao, tblwrirecepcao.DtRecep, tblWRIRecepcaoBloqueio.DataBloqueio,

    (tblwrititulos.DtDevolucaoLimite = ((DtLimite, -3)) As Limite

    from tblwrirecepcao

    inner join tblWRIRecepcaoBloqueio on tblWRIRecepcaoBloqueio.FK_tblWRIRecepcaoRecepcao = tblwrirecepcao.PK_Recepcao

    inner join tblwrititulos on tblwrititulos.FK_tblWRIRecepcaoRecepcao = tblwrirecepcao.PK_Recepcao

    where tblWRIRecepcaoBloqueio.DataBloqueio = '02/07/2018'


    Eu preciso que o campo DTDevolucaolimite calcule menos 3 dias, porem tem que ser em dias uteis

    terça-feira, 3 de julho de 2018 20:19

Respostas

Todas as Respostas

  • Deleted
    terça-feira, 3 de julho de 2018 22:12
  • Deleted
    terça-feira, 3 de julho de 2018 23:31
  • /****** Object:  UserDefinedFunction [dbo].[fn_DiaUtil]    Script Date: 04/07/2018 10:35:42 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    /****** Object:  User Defined Function dbo.fn_DiaUtil    Script Date: 27/10/2015 10:06:59 ******/

    /****** Object:  User Defined Function dbo.fn_DiaUtil    Script Date: 9/9/2015 23:09:08 ******/

    /****** Object:  User Defined Function dbo.fn_DiaUtil    Script Date: 20/8/2015 10:57:36 ******/

    /****** Object:  User Defined Function dbo.fn_DiaUtil    Script Date: 11/5/2015 11:55:03 ******/

    /****** Object:  User Defined Function dbo.fn_DiaUtil    Script Date: 27/11/2014 20:04:49 ******/
    ALTER Function [dbo].[fn_DiaUtil]
    (
    @Data SmallDateTime,
    @NumeroDeDias int
    )
    Returns SmalldateTime
    Begin

    Set @Data = DateAdd(Day, @NumeroDeDias, @Data)
    If ( @NumeroDeDias <> 0 )
    Begin
    If ( @NumeroDeDias < 0 )
    Set @NumeroDeDias = -1
    Else Set @NumeroDeDias = 1
    End

    Declare @FF int
    Set @FF = 0

    While (@FF = 0)
    Begin
    Select @FF = dbo.fn_VerificaDiaUtil(@Data)
    If (@FF = 0)
    Begin
    If (@NumeroDeDias = 0)
    Set @Data = (Select DateAdd(Day, 1, @Data) )
    Else
    Set @Data = (Select DateAdd(Day, @NumeroDeDias, @Data) )
    End
    End
    Return @Data
    End





    quarta-feira, 4 de julho de 2018 13:36
  • Deleted
    quarta-feira, 4 de julho de 2018 15:17
  • Jose Muito obrigado pela ajuda, 

    Um ultimo detalhe se possivel, vou precisar montar uma procedure a partir do codigo abaixo,
    precisei tambem inserir em uma tabela, porem a cada vez que rodo a procedure, o comando
    duplica os dados, tem alguma forma de inserir apenas o que nao existe?

    declare @DF tinyint;

    set @DF= @@datefirst;

    set datefirst 7;

     

     

    -- Dados -- 

                 Insert Cartorio_cheque_libera(

                 Protocolo,

                 Data_Bloqueio,

                 Registro_Devolucao,

                 Numero_Cheque,

                 Limite_Liberacao

                               )

    --

    SELECT distinct Rec.PK_Recepcao,  RecB.DataBloqueio,

           Tit.DtDevolucaoLimite as Registro_Devolucao, tblWRICaixaAutenticacao.NumeroCheque,

             

                     case datepart(dw, dateadd(day, -8, Tit.DtDevolucaoLimite))

               when 1 then dateadd(day, -10, Tit.DtDevolucaoLimite)       -- domingo

               when 7 then  dateadd(day, -8, Tit.DtDevolucaoLimite)  -- sábado

                else dateadd(day, -8, Tit.DtDevolucaoLimite)

                       

                        end as Limite_Liberacao

     

      from tblwrirecepcao as Rec

           inner join tblWRIRecepcaoBloqueio as RecB on RecB.FK_tblWRIRecepcaoRecepcao = Rec.PK_Recepcao

           inner join tblwrititulos as Tit on Tit.FK_tblWRIRecepcaoRecepcao = Rec.PK_Recepcao

              inner join tblWRICaixaAutenticacao on tblWRICaixaAutenticacao.NumeroDocumento = rec.PK_Recepcao

     

     

      where DataLiberacao is null

      and tblWRICaixaAutenticacao.FK_tblWRICaixaFormaPagto_Id=2

     order by Limite_Liberacao asc

     

    --restaura datefirst

    set datefirst @DF

    quarta-feira, 4 de julho de 2018 15:56
  • Deleted
    quarta-feira, 4 de julho de 2018 17:47
  • o campo Rec.PK_Recepcao
    quarta-feira, 4 de julho de 2018 17:57
  • Deleted
    • Marcado como Resposta Tiago_Aurelio quarta-feira, 4 de julho de 2018 19:04
    quarta-feira, 4 de julho de 2018 18:07