Função que retorna o quinto dia útil do mês

No artigo de hoje, vamos mostrar uma função que foi desenvolvida para retornar o quinto dia útil do mês.

A lógica para desenvolver a rotina foi basicamente:

  1. Receber uma data por parâmetro, por exemplo, 20/05/2021
  2. A partir disso, encontrar a primeira data do mês, por exemplo, 01/05/2021
  3. Com isso, é feito um laço de repetição, até que atinja 5, e toda vez que a data não for válida (feriado ou fim de semana), irá diminuir 1 (nesse exemplo, vai pular os dias 01/05/2021 e 02/05/2021)
  4. Por último, define a data de retorno para a função

Abaixo o código fonte desenvolvido, conforme lógica demonstrada acima:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zQuinto
Função que retorna o quinto dia útil de um mês
@type  Function
@author Atilio
@since 20/05/2021
@version version
@param dDataRef, Date, Data do mês de referência
@return dQuintoDia, Date, Data do quinto dia útil
@example
    dData := u_zQuinto(sToD("20210401"))
/*/

User Function zQuinto(dDataRef)
    Local aArea := GetArea()
    Local dQuintoDia
    Local dDataAux
    Local nDiaUtil := 1
    Default dDataRef := Date()

    //Define a data auxiliar como o primeiro dia do mês
    dDataAux := FirstDate(dDataRef)

    //Enquanto o dia útil for menor que 5
    While nDiaUtil < 5
        //Se for fim de semana ou feriado, subtrai um do contador do While
        If DataValida(dDataAux) != dDataAux
            nDiaUtil--
        EndIf

        //Incrementa um dia na data auxiliar
        dDataAux := DaySum(dDataAux, 1)
        nDiaUtil++
    EndDo

    //Define o quinto dia, conforme a data que finalizou no While
    dQuintoDia := dDataAux

    RestArea(aArea)
Return dQuintoDia

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

2 Responses

  1. LUIZ disse:

    SHOW!!! SHOW!!!

Deixe uma resposta