Расчет показателя эффективности с указанием периода расчета

5 0

В материале "Несколько рекомендаций по разработке расчета показателей эффективности" упоминалась возможность использования одного и того же показателя эффективности в компаниях с различным объемом обрабатываемой информации. В этом случае период расчета можно вынести в параметр функции. Кроме того, вынесение периода расчета в параметр функции добавит расчету гибкости.

Примером такого показателя может быть количество принятых за период сотрудников. В крупной компании такой показатель можно рассчитывать раз в месяц, а в небольшой информация накопится только за полгода или год.

Еще одним примером является количество созданных документов. В одной компании рассчитывать показатель можно каждый день, во второй каждую неделю, а в третьей - каждый месяц.

В случае, если производится перерасчет показателя эффективности, период указывается явно. Если же расчет производится по умолчанию, необходимо вычислить период расчета показателя эффективности в зависимости от введенного периода. Предлагаю пример такого расчета.

В начало расчета необходимо вставить определение псевдоконстант, определяющих возможные периоды расчета показателя.

  MONTH_SIGN = 'М'
  QUARTER_SIGN = 'К'
  HALF_YEAR_SIGN = 'П'
  YEAR_SIGN = 'Г'

Кроме того, необходимо определить следующие псевдоконстанты, которые понадобятся при расчете.

  BEGIN_PERIOD_INDEX = 1
  END_PERIOD_INDEX = 2
  LAST_PERIOD_STEP = -1
  NOT_FOUND = -1
  MONTH_TEMPLATE = 'M'
  YEAR_TEMPLATE = 'Y'
  THIRD_MONTH = 3
  SIXTH_MONTH = 6
  NINETH_MONTH = 9   
  BEGIN_OF_DAY_TIME = '00:00:00'
  END_OF_DAY_TIME = '23:59:59'
  DATE_TEMPLATE = 'D.M.YY'
  START_YEAR_TEMPLATE = '01.01.YY'
  END_FIRS_QUARTER_TEMPLATE = '31.03.YY'
  START_SECOND_QUARTER_TEMPLATE = '01.04.YY'
  END_FIRST_HALFYEAR_TEMPLATE = '30.06.YY' 
  START_SECOND_HALFYEAR_TEMPLATE = '01.07.YY'
  END_THIRD_QUARTER_TEMPLATE = '30.09.YY' 
  START_FORTH_QUARTER_TEMPLATE = '01.10.YY'
  END_YEAR_TEMPLATE = '31.12.YY'
  DATE_DELIMITER = '|'

Вычислить сегодняшнюю дату (относительно нее будут производиться все расчеты).

Today = Today() 

Вычисление периода будет производиться следующим образом:

  // месяц
  if CalculatedPeriod == MONTH_SIGN
    BeginOfPeriod = BeginOfMonth(LAST_PERIOD_STEP; Today)
    EndOfPeriod = EndOfMonth(LAST_PERIOD_STEP; Today)
  endif
  // квартал
  if CalculatedPeriod == QUARTER_SIGN
    if FormatDate(MONTH_TEMPLATE; Today) <= THIRD_MONTH
      BeginOfPeriod = FormatDate(START_FORTH_QUARTER_TEMPLATE; 
        ChangeDate(YEAR_TEMPLATE; Today; LAST_PERIOD_STEP))
      EndOfPeriod = FormatDate(END_YEAR_TEMPLATE; 
        ChangeDate(YEAR_TEMPLATE; Today; LAST_PERIOD_STEP))
    else
      if FormatDate(MONTH_TEMPLATE; Today) <= SIXTH_MONTH
        BeginOfPeriod = FormatDate(START_YEAR_TEMPLATE; Today)
        EndOfPeriod = FormatDate(END_FIRS_QUARTER_TEMPLATE; Today)
      else
        if FormatDate(MONTH_TEMPLATE; Today) <= NINETH_MONTH
          BeginOfPeriod = FormatDate(START_SECOND_QUARTER_TEMPLATE; Today)
          EndOfPeriod = FormatDate(END_FIRST_HALFYEAR_TEMPLATE; Today)
        else
          BeginOfPeriod = FormatDate(START_SECOND_HALFYEAR_TEMPLATE; Today)
          EndOfPeriod = FormatDate(END_THIRD_QUARTER_TEMPLATE; Today)
        endif
      endif
    endif
  endif
  // полугодие
  if CalculatedPeriod == HALF_YEAR_SIGN
    if FormatDate(MONTH_TEMPLATE; Today) <= SIXTH_MONTH
      BeginOfPeriod = FormatDate(START_SECOND_HALFYEAR_TEMPLATE; 
        ChangeDate(YEAR_TEMPLATE; Today; LAST_PERIOD_STEP))
      EndOfPeriod = FormatDate(END_YEAR_TEMPLATE; 
        ChangeDate(YEAR_TEMPLATE; Today; LAST_PERIOD_STEP))
    else
      BeginOfPeriod = FormatDate(START_YEAR_TEMPLATE; Today)
      EndOfPeriod = FormatDate(END_FIRST_HALFYEAR_TEMPLATE; Today)
    endif
  endif
  // год
  if CalculatedPeriod == YEAR_SIGN 
    BeginOfPeriod = FormatDate(START_YEAR_TEMPLATE; 
      ChangeDate(YEAR_TEMPLATE; Today; LAST_PERIOD_STEP))
    EndOfPeriod = FormatDate(END_YEAR_TEMPLATE; 
      ChangeDate(YEAR_TEMPLATE; Today; LAST_PERIOD_STEP))
  endif
Пока комментариев нет.

Авторизуйтесь, чтобы написать комментарий