При изучении механизмов сложных периодических расчетов в платформе 1С:Предприятие у многих разработчиков возникает резонный вопрос: зачем в свойствах регистра расчета указывать конкретный ресурс в поле Значение графика, если виртуальная таблица ДанныеГрафика и так возвращает все числовые ресурсы графика по всем периодам? Разберем подробно, в каком именно механизме платформы задействована эта настройка, как формируется расчетная база и с какими системными ограничениями можно столкнуться на практике.
Проанализируем поведение виртуальной таблицы База<ИмяРегистраРасчета>. Когда мы рассчитываем зависимое начисление (например, премию, надбавку или удержание), базовый период текущей записи может не совпадать целиком с фактическим периодом действия базовой записи, а пересекаться с ним лишь частично.
Рассмотрим конкретную ситуацию: сотруднику начислен оклад за весь месяц (например, с 1 по 30 ноября), а премия или доплата рассчитывается за интервал с 15 по 30 ноября. Возникает вопрос: какую долю оклада платформа должна включить в расчетную базу текущей записи?
Для решения этой задачи платформе требуется весовой критерий каждой даты интервала. Именно здесь вступает в работу ресурс, выбранный в свойстве Значение графика:
Таким образом, формула расчета базовой суммы выглядит следующим образом:
БазоваяСумма = ИсходныйРезультатБазы * (ЗначениеГрафикаЗаПериодПересечения / ЗначениеГрафикаЗаФактическийПериодБазы)
Разберем по шагам, как платформа связывает конкретную строку начисления с нужной строкой графика работы. В регистре сведений графиков, как правило, содержатся не только даты и часы, но и разрезы учета: измерение со ссылкой на справочник графиков (например, пятидневка, шестидневка или сменный график).
Чтобы платформа знала, по какому именно графику определять веса дней для конкретного сотрудника, выполняются следующие настройки:
ГрафикРаботы).Если связь не настроена или заполнена неверно, платформа не сможет сопоставить строки начислений со шкалой рабочего времени, что приведет к ошибкам расчета виртуальных таблиц.
Выясним причину неочевидных ошибок, которые могут возникнуть при стандартном механизме расчета базы:
Дни или только Часы). Если в конфигурации в одном регистре рассчитываются сотрудники как с поденной оплатой, так и с суммированным (почасовым) учетом времени, платформа всегда будет рассчитывать доли базы строго по выбранному в метаданных ресурсу.Если поведение стандартной виртуальной таблицы базы не удовлетворяет условиям задачи, рассмотрим варианты обхода:
Посмотрим на пример запроса, демонстрирующий ручное получение данных графика с расчетом нужных показателей без ограничений одного ресурса метаданных:
ВЫБРАТЬ
ОсновныеНачисления.Ссылка КАК Документ,
ОсновныеНачисления.Сотрудник КАК Сотрудник,
ОсновныеНачисления.График КАК График,
ДанныеГрафика.ЧасыФактическийПериодДействия КАК ОтработаноЧасов,
ДанныеГрафика.ДниФактическийПериодДействия КАК ОтработаноДней
ИЗ
РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
&Фильтр,
График = &График
) КАК ДанныеГрафика
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.НачислениеЗарплаты.Начисления КАК ОсновныеНачисления
ПО ДанныеГрафика.НомерСтроки = ОсновныеНачисления.НомерСтроки
Таким образом, поле Значение графика не ограничивает состав полей виртуальной таблицы ДанныеГрафика, а выполняет критически важную служебную функцию: задает весовую шкалу для корректного деления сумм при расчете виртуальной таблицы базы.