Función para calcular la fecha de vencimiento de una factura

imagen principal Fecha de publicación: 02/11/2014

Esta función nos calcula la fecha de de vencimiento de una factura según estos parámetros:

Fecha de Factura: Fecha de emisión de la factura

Vencimiento en días: Son el plazo de días desde la emisión de la factura en los cuales podremos cobrar la factura.

Días de pago: Los posibles días en los cuales podramos cobrar la factura. Se pueden introducir 3 posibles días de pago pero sólo uno es obligatorio.

Public Function Fecha_Vencimiento(Fecha_Inicio As Date, Días As Integer, Pago1 As Integer, Optional Pago2 As Integer, Optional Pago3 As Integer) As Date
    Dim d As Integer, m As Integer, y As Integer, i As Integer, n As Date, Aux() As Integer, pos As Integer, ultimo As Integer
    If Días <= 0 Then
        n = Fecha_Inicio
    Else
        n = Fecha_Inicio + Días
        If Pago1 = 0 Then
        
        Else
            i = 1
            ReDim Aux(i) As Integer
            Aux(i - 1) = Pago1
            If Pago2 > 0 Then
                i = i + 1
                ReDim Preserve Aux(i) As Integer
                Aux(i - 1) = Pago2
            End If
            If Pago3 > 0 Then
                i = i + 1
                ReDim Preserve Aux(i) As Integer
                Aux(i - 1) = Pago3
            End If
            d = Day(n)
            For i = 0 To UBound(Aux) - 1
                If d <= Aux(i) Then
                    pos = Aux(i)
                    Exit For
                End If
            Next i
            If pos <> 0 Then
                m = Month(n)
                y = Year(n)
                n = CDate(pos & "/" & m & "/" & y)
            Else
                m = Month(n)
                y = Year(n)
                If m = 12 Then
                    m = 1
                    y = y + 1
                Else
                    m = m + 1
                End If
                ultimo = Devolver_Ultimo_Dia_Mes(m, y)
                If Aux(0) > ultimo Then
                    Aux(0) = ultimo
                End If
                n = CDate(Aux(0) & "/" & m & "/" & y)
            End If
        End If
    End If
    Fecha_Vencimiento = n
End Function

Private Function Devolver_Ultimo_Dia_Mes(Mes As Integer, Año As Integer) As Integer
    Select Case Mes
        Case 4, 6, 9, 11
            Devolver_Ultimo_Dia_Mes = 30
        Case 2
            If Año Mod 100 = 0 Then
                Devolver_Ultimo_Dia_Mes = 28
            ElseIf Año Mod 4 = 0 Then
                Devolver_Ultimo_Dia_Mes = 29
            Else
                Devolver_Ultimo_Dia_Mes = 28
            End If
        Case Else
            Devolver_Ultimo_Dia_Mes = 31
    End Select
End Function

Ejemplo

Fecha de factura: 1/10/14
Vencimiento en días: 30 días
Días de pago: día 7, día 10 o día 15

Dim fvencimiento as Date
fvencimiento=Fecha_Vencimiento(cdate("1/10/2014"),30,7,10,15)

Si te gusta este artículo compártelo en las redes sociales

Comentarios

No se han publicado comentarios

Publicar un comentario

Introduzca un comentario

Nombre:
Comentario:
Introduce los números
de la imagen de arriba
Introducir

Si te gusta o te es útil esta página puedes hacer una donación para permitir su mantenimiento