Зачем нужно свойство Значение графика в регистре расчета 1С и где оно используется?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При изучении механизмов сложных периодических расчетов в платформе 1С:Предприятие у многих разработчиков возникает резонный вопрос: зачем в свойствах регистра расчета указывать конкретный ресурс в поле Значение графика, если виртуальная таблица ДанныеГрафика и так возвращает все числовые ресурсы графика по всем периодам? Разберем подробно, в каком именно механизме платформы задействована эта настройка, как формируется расчетная база и с какими системными ограничениями можно столкнуться на практике.

Механизм пропорционального деления базовых начислений

Проанализируем поведение виртуальной таблицы База<ИмяРегистраРасчета>. Когда мы рассчитываем зависимое начисление (например, премию, надбавку или удержание), базовый период текущей записи может не совпадать целиком с фактическим периодом действия базовой записи, а пересекаться с ним лишь частично.

Рассмотрим конкретную ситуацию: сотруднику начислен оклад за весь месяц (например, с 1 по 30 ноября), а премия или доплата рассчитывается за интервал с 15 по 30 ноября. Возникает вопрос: какую долю оклада платформа должна включить в расчетную базу текущей записи?

Для решения этой задачи платформе требуется весовой критерий каждой даты интервала. Именно здесь вступает в работу ресурс, выбранный в свойстве Значение графика:

  1. Платформа определяет фактический период действия базовой записи.
  2. Вычисляется суммарное значение ресурса, указанного в свойстве Значение графика, за весь фактический период действия базовой записи (это знаменатель дроби).
  3. Вычисляется сумма того же ресурса за период пересечения базовой записи с базовым периодом рассчитываемой строки (это числитель дроби).
  4. Полученный коэффициент умножается на результат базовой записи.

Таким образом, формула расчета базовой суммы выглядит следующим образом:

БазоваяСумма = ИсходныйРезультатБазы * (ЗначениеГрафикаЗаПериодПересечения / ЗначениеГрафикаЗаФактическийПериодБазы)

Связь регистра расчета с регистром сведений графика

Разберем по шагам, как платформа связывает конкретную строку начисления с нужной строкой графика работы. В регистре сведений графиков, как правило, содержатся не только даты и часы, но и разрезы учета: измерение со ссылкой на справочник графиков (например, пятидневка, шестидневка или сменный график).

Чтобы платформа знала, по какому именно графику определять веса дней для конкретного сотрудника, выполняются следующие настройки:

  1. В регистре расчета создается реквизит или измерение (например, ГрафикРаботы).
  2. В свойствах этого реквизита заполняется свойство Связь с графиком, где выбирается соответствующее измерение регистра сведений графика.
  3. В свойствах самого регистра расчета указываются: регистр сведений графика, ресурс в свойстве Значение графика и дата графика.

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

Ограничения платформы и потенциальные проблемы

Выясним причину неочевидных ошибок, которые могут возникнуть при стандартном механизме расчета базы:

  1. Один весовой ресурс на весь регистр. В свойствах регистра расчета можно выбрать строго один ресурс в поле Значение графика (например, только Дни или только Часы). Если в конфигурации в одном регистре рассчитываются сотрудники как с поденной оплатой, так и с суммированным (почасовым) учетом времени, платформа всегда будет рассчитывать доли базы строго по выбранному в метаданных ресурсу.
  2. Проблема нулевого делителя. Если за весь период действия базовой записи сумма выбранного ресурса графика оказывается равной нулю (например, период начисления целиком пришелся на праздничные/выходные дни или график попросту не был заполнен), платформа не может вычислить коэффициент пропорции. В этом случае в виртуальную таблицу базы возвращается нулевое значение, даже если фактическая сумма базового начисления в регистре присутствует.

Альтернативные способы получения базы

Если поведение стандартной виртуальной таблицы базы не удовлетворяет условиям задачи, рассмотрим варианты обхода:

  1. Зависимость по периоду регистрации. Если необходимо включить базовую сумму целиком без учета рабочих дней и пропорций пересечения интервалов, в плане видов расчета настраивают зависимость по периоду регистрации, а не по периоду действия.
  2. Разделение на несколько регистров расчета. При явном различии единиц учета времени создают два отдельных регистра расчета: один для поденного учета (со значением графика по дням), второй для почасового учета (со значением графика по часам).
  3. Ручной расчет базовой суммы запросом. В сложных расчетных схемах базовые начисления получают через прямое соединение таблиц регистра расчета, фактических периодов действия и среза регистра графика с нужными условиями, вычисляя пропорцию по собственному алгоритму.

Посмотрим на пример запроса, демонстрирующий ручное получение данных графика с расчетом нужных показателей без ограничений одного ресурса метаданных:


ВЫБРАТЬ
	ОсновныеНачисления.Ссылка КАК Документ,
	ОсновныеНачисления.Сотрудник КАК Сотрудник,
	ОсновныеНачисления.График КАК График,
	ДанныеГрафика.ЧасыФактическийПериодДействия КАК ОтработаноЧасов,
	ДанныеГрафика.ДниФактическийПериодДействия КАК ОтработаноДней
ИЗ
	РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
		&Фильтр,
		График = &График
	) КАК ДанныеГрафика
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.НачислениеЗарплаты.Начисления КАК ОсновныеНачисления
		ПО ДанныеГрафика.НомерСтроки = ОсновныеНачисления.НомерСтроки

Таким образом, поле Значение графика не ограничивает состав полей виртуальной таблицы ДанныеГрафика, а выполняет критически важную служебную функцию: задает весовую шкалу для корректного деления сумм при расчете виртуальной таблицы базы.

← На главную