Taller de EVM (Earn Value Management) Administración del Valor…

Taller de EVM (Earn Value Management) Administración del Valor Ganado #project #pmi #projectmanagement #gerenciadeproyectos #puj #pujc

via Tumblr http://ift.tt/1F2GqEf

Anuncios

Festivos de Colombia en Microsoft Project

Es sabido que Colombia es uno de los países que cuentan con mayor número de días no laborales, aunque también es de los que tiene las jornada laboral mas larga (48 horas semanales).

Como se puede apreciar en la tabla, con relación a la celebración hay tres tipos de festividades:

  1. Las de Fecha fija: Las cuales se celebran todos los años en la fecha base de la festividad.
  2. Las de Siguiente lunes: Las cuales se celebran el siguiente lunes con respecto a la fecha base de la festividad.
  3. Las relacionadas con la Pascua: Las cuales se celebran un cierto número de días con relación a la Pascua.

Cuando se está preparando un cronograma de proyecto se deben tener en cuenta los días festivos, los cuales se deben marcar como días no laborales. Esta labor aparte de ser dispendiosa puede generar errores de programación si se olvidan alguno de los festivos.

Para Colombia, en Microsof Project (probado en Project 2013) es posible automatizar esta tarea utilizando un código en Visual Basic que puede ser encontrado a continuación:

Sub FestivosColombia()
' Macro para colocar los festivos de Colombia
' Macro creada el 22/12/2012 por Jairo Bernal.
  Dim i As Integer, dia As Date, d As Integer, calendario As Calendar, dias As Integer
  Dim diasTexto As String, fechaFinEstimada As Date, fechaInicio As Date
  NewTasksStartOn
  OptionsViewEx ProjectSummary:=True
  OptionsViewEx DisplayOutlineNumber:=True
  ActiveProject.BaseCalendars(1).WeekDays(1).Default
  fechaInicio = ActiveProject.ProjectStart
  For i = 2 To 6
    ActiveProject.BaseCalendars(1).WeekDays(i).Shift1.Start = "08:00"
    ActiveProject.BaseCalendars(1).WeekDays(i).Shift1.Finish = "12:00"
    ActiveProject.BaseCalendars(1).WeekDays(i).Shift2.Start = "13:00"
    ActiveProject.BaseCalendars(1).WeekDays(i).Shift2.Finish = "17:00"
    ActiveProject.BaseCalendars(1).WeekDays(i).Shift3.Clear
    ActiveProject.BaseCalendars(1).WeekDays(i).Shift4.Clear
    ActiveProject.BaseCalendars(1).WeekDays(i).Shift5.Clear
  Next i
  ActiveProject.BaseCalendars(1).WeekDays(7).Default
  dias = 0
  Do While dias = 0
    On Error Resume Next
    dias = 0 + InputBox("Ingrese el estimado en días para su Proyecto", "Días del Proyecto", 0)
    On Error GoTo 0
  Loop
  fechaFinEstimada = DateAdd("d", dias, fechaInicio)
  For Each calendario In ActiveProject.BaseCalendars
    i = Year(fechaInicio)
    On Error Resume Next
    For i = i To Year(fechaFinEstimada) + 1
      ' Año Nuevo
      calendario.Exceptions.Add 1, DateSerial(i, 1, 1), DateSerial(i, 1, 1), 1, "Año Nuevo " & i
      ' Epifanía
      dia = DateSerial(i, 1, 6)
      d = (9 - Weekday(dia)) Mod 7
      dia = DateAdd("d", d, dia)
      calendario.Exceptions.Add 1, dia, dia, 1, "Epifanía " & i
      ' San José
      dia = DateSerial(i, 3, 19)
      d = (9 - Weekday(dia)) Mod 7
      dia = DateAdd("d", d, dia)
      calendario.Exceptions.Add 1, dia, dia, 1, "San José " & i
      ' Jueves y Viernes Santos
      calendario.Exceptions.Add 1, FestivoComputus(i, -3), FestivoComputus(i, -2), 1, "Jueves y Viernes Santos " & i
      ' Día del Trabajo
      calendario.Exceptions.Add 1, DateSerial(i, 5, 1), DateSerial(i, 5, 1), 1, "Día del Trabajo " & i
      ' Ascención del Señor
      calendario.Exceptions.Add 1, FestivoComputus(i, 43), FestivoComputus(i, 43), 1, "Ascención del Señor " & i
      ' Corpus Christie
      calendario.Exceptions.Add 1, FestivoComputus(i, 64), FestivoComputus(i, 64), 1, "Corpus Christie " & i
      ' Sagrado Corazón
      calendario.Exceptions.Add 1, FestivoComputus(i, 71), FestivoComputus(i, 71), 1, "Sagrado Corazón " & i
      ' San Pedro y San Pablo
      dia = DateSerial(i, 6, 29)
      d = (9 - Weekday(dia)) Mod 7
      dia = DateAdd("d", d, dia)
      calendario.Exceptions.Add 1, dia, dia, 1, "San Pedro y San Pablo " & i
      ' Grito de Independencia
      calendario.Exceptions.Add 1, DateSerial(i, 7, 20), DateSerial(i, 7, 20), 1, "Grito de Independencia " & i
      ' Batalla de Boyacá
      calendario.Exceptions.Add 1, DateSerial(i, 8, 7), DateSerial(i, 8, 7), 1, "Batalla de Boyacá " & i
      ' Asunción de la Virgen
      dia = DateSerial(i, 8, 15)
      d = (9 - Weekday(dia)) Mod 7
      dia = DateAdd("d", d, dia)
      calendario.Exceptions.Add 1, dia, dia, 1, "Asunción de la Virgen " & i
      ' Día de la Raza
      dia = DateSerial(i, 10, 12)
      d = (9 - Weekday(dia)) Mod 7
      dia = DateAdd("d", d, dia)
      calendario.Exceptions.Add 1, dia, dia, 1, "Día de la Raza " & i
      ' Todos los Santos
      dia = DateSerial(i, 11, 1)
      d = (9 - Weekday(dia)) Mod 7
      dia = DateAdd("d", d, dia)
      calendario.Exceptions.Add 1, dia, dia, 1, "Todos los Santos " & i
      ' Independencia de Cartagena
      dia = DateSerial(i, 11, 11)
      d = (9 - Weekday(dia)) Mod 7
      dia = DateAdd("d", d, dia)
      calendario.Exceptions.Add 1, dia, dia, 1, "Independencia de Cartagena " & i
      ' Inmaculada Concepcion
      calendario.Exceptions.Add 1, DateSerial(i, 12, 8), DateSerial(i, 12, 8), 1, "Inmaculada Concepcion " & i
      ' Navidad
      calendario.Exceptions.Add 1, DateSerial(i, 12, 25), DateSerial(i, 12, 25), 1, "Navidad " & i
    Next i
    On Error GoTo 0
  Next
End Sub
 
Public Function DomingoPascua(Anio As Integer) As Date
   Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer
   Dim f As Integer, g As Integer, h As Integer, i As Integer
   Dim k As Integer, l As Integer, m As Integer, n As Integer
   Dim mes As Integer, día As Integer
  
   a = Anio Mod 19
   b = Int(Anio / 100)
   c = Anio Mod 100
   d = Int(b / 4)
   e = b Mod 4
   f = Int((b + 8) / 25)
   g = Int((b - f + 1) / 3)
   h = (19 * a + b - d - g + 15) Mod 30
   i = Int(c / 4)
   k = c Mod 4
   l = (32 + 2 * e + 2 * i - h - k) Mod 7
   m = Int((a + 11 * h + 22 * l) / 451)
   n = h + l - 7 * m + 114
   mes = Int(n / 31)
   día = 1 + n Mod 31
   DomingoPascua = DateSerial(Anio, mes, día)
End Function
 
Public Function FestivoComputus(Anio As Integer, Optional ss As Integer) As Date
  FestivoComputus = DateAdd("d", ss, DomingoPascua(Anio))
End Function

via Tumblr http://ift.tt/1m1U5Sd