В описании внимание уделено расчету оклада одновременно и по часам и по дням. Описание краткое. Детали можно посмотреть непосредственно в решениях.
Тест. Прежде чем перейти к рассмотрению 1-го варианта, предлагаю рассмотреть демонстрацию работы свойства «Значение графика» плана видов расчета.
Решим следующую задачу. Необходимо реализовать расчет оклада и премии. Оклад рассчитывается как произведение часовой ставки на количество отработанных часов, расчетный период месяц. Так же необходимо фиксировать количество отработанных часов и дней. Премия рассчитывается как процент от оклада, начисленного в этом же месяце. Размеры часовой ставки и процента премии будем вводить непосредственно в документе «Начисление зарплаты».
Решение выполнено на базе каркасной конфигурации.
Заведем тестовые данные в базу. В качестве расчетного периода я выбрал февраль 2011, 20 рабочих дней (в качестве выходных учитываю только субботы и воскресенья) легко поделить без остатка на 2. Подготовим 2 графика работы «Пятидневка» и «Пятидневка укороченная», у «Пятидневки» все рабочие дни по 8 часов, у «Пятидневки укороченной» первые 10 рабочих дней по 4 часа, остальные по 8 часов. Начислим оклады Бельдыеву по графику «Пятидневка», Васиной по графику «Пятидневка укороченная», часовая ставка 250 руб. И обоим сотрудникам начислим премии 100%, указав в качестве базового периода первую половину месяца (чтобы вошли туда только первые 10 дней).
Получим следующий результат:
Бельдыев: Оклад – 40000 руб, Премия – 40000 руб* 80 ч / 160 ч = 20000 руб
Васина: Оклад – 30000 руб, Премия – 30000 руб* 40 ч / 120 ч = 10000 руб
И так, в регистре сведений, описывающем графики работы, мы можем завести произвольное количество ресурсов, но только одно указать в качестве значения свойства «Значение графика» плана видов расчета, которое и будет влиять на расчет пропорции базы ресурсов регистра расчета.
Вариант 1. В регистре сведений «Графики работы» у нас будет два ресурса: «Значение» - для указания рабочих часов и «ЗначениеДни» - для указания рабочих дней. «Значение» мы укажем в качестве свойства «Значение графика» плана видов расчета «Основные начисления». Рассчитывать пропорцию базы в зависимости от количества рабочих дней в рамках данной задачи нам не нужно, поэтому этим подходом для расчета количества рабочих дней мы можем воспользоваться. Заполняем значения свойств регистра расчета: «График работы» - регистр сведений «График работы», «Дата графика» - «Дата». Реквизит «График работы» регистра расчета «Основные начисления» связываем с измерением «График работы» регистра сведений (свойство «Связь с графиком»). В регистре расчета «Основные начисления» создаем «двойные» ресурсы: «Результат» - для хранения результата рассчитанного по часам (оклад в часах), «Результат по дням» - для хранения результата рассчитанного по дням (оклад в днях для целей управленческого учета), «Отработано часов» и «Отработано дней». Оклад, рассчитанный по часам и по дням, храним в одной записи регистра расчета.
Вариант 2. В регистре сведений «Графики работы» создаем дополнительное измерение «Вид учета времени» с типом ПеречислениеСылка.ВидыУчетаВремени. Перечисление имеет два значения: «По дням», «По часам». В результате по каждому графику мы можем хранить/посчитать отработанное время по дням или по часам. В регистре расчета «Основные начисления» создаем реквизиты «График работы» и «Вид учета времени», связываем их с соответствующими измерениями регистра сведений «Графики работы» (остальное стандартно). Посчитать оклад по часам мы можем без проблем – указываем вид учета времени «По часам», а чтобы посчитать по дням создаем еще один регистр расчета «Основные начисления (Упр. учет)» - двойник регистра расчета «Основные начисления». Для оклада параллельно создаем в этом регистре-двойнике запись и указываем вид учета времени «По дням». Для видов расчета, вытесняющих оклад, тоже создаем записи. Оклад, рассчитанный по часам и по дням, храним в разных регистрах расчета.
Вариант 3. Этот вариант совмещает в себе элементы решений первых двух вариантов. В регистре сведений «Графики работы» присутствуют дополнительное измерение «Вид учета времени» и дополнительный ресурс «Дополнительное значение». Например, мы оклад будем рассчитывать по графику с видом учета времени «По часам», ресурс «Значение» будет содержать часы, а ресурс «Дополнительное значение» - дни. А для расчета прогулов нас будет интересовать только количество дней – вид учета времени будет «По дням», а ресурс «Значение» будет хранить дни (в дополнительное значение можно записать часы). В регистре расчета «Основные начисления» реквизиты «График работы» и «Вид учета времени», связываем с соответствующими измерениями регистра сведений «Графики работы» (остальное стандартно). Создаем «двойные» ресурсы: «Результат», «Результат по дням» - для хранения альтернативного результата. Оклад, рассчитанный по часам и по дням, храним в одной записи регистра расчета.
Другие виды расчета в задаче. Расчет невыхода вполне понятен и во всех 3-х вариантах выполнен одинаково.
Что касается расчета надбавки, то для понимания, что же требует постановка задачи, воспользовался подсказкой http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=568247. В первых 2-х варианта реализация одинаковая. В третьем варианте сделал попытку оптимизировать запрос к регистру накопления «Продажи». Также в комментариях показан нежелательный вариант с запросом в цикле.
Отчеты. Во втором варианте создаем два отчета. В первом и третьем вариантах одинаково, создаем один отчет и два варианта настройки.