В материале "Несколько рекомендаций по разработке расчета показателей эффективности" упоминалась возможность использования одного и того же показателя эффективности в компаниях с различным объемом обрабатываемой информации. В этом случае период расчета можно вынести в параметр функции. Кроме того, вынесение периода расчета в параметр функции добавит расчету гибкости.
Примером такого показателя может быть количество принятых за период сотрудников. В крупной компании такой показатель можно рассчитывать раз в месяц, а в небольшой информация накопится только за полгода или год.
Еще одним примером является количество созданных документов. В одной компании рассчитывать показатель можно каждый день, во второй каждую неделю, а в третьей - каждый месяц.
В случае, если производится перерасчет показателя эффективности, период указывается явно. Если же расчет производится по умолчанию, необходимо вычислить период расчета показателя эффективности в зависимости от введенного периода. Предлагаю пример такого расчета.
В начало расчета необходимо вставить определение псевдоконстант, определяющих возможные периоды расчета показателя.
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
Авторизуйтесь, чтобы написать комментарий