К статье
Практический материал

Разработка и Конфигурация · 11 мин

Регистр расчета в 1С 8.3: что это и как он работает

Регистр расчета в 1С 8.3: что это, виды расчета, период действия, вытеснение, настройка и типовые ошибки при работе с начислениями.

Регистр расчета — это объект метаданных платформы 1С:Предприятие 8.3, предназначенный для хранения результатов периодических расчетов: начислений зарплаты, отпускных, больничных, алиментов, арендных платежей и подобных величин. В отличие от регистров накопления или сведений, регистр расчета умеет работать с периодом действия записи, автоматически вычислять фактический период и поддерживать механизм вытеснения одних расчетов другими.

Главная особенность объекта — связь с планом видов расчета. План видов расчета описывает сами виды начислений и удержаний (оклад, премия, НДФЛ-удержание и т.д.), а регистр расчета хранит конкретные записи: кто, какой вид расчета, за какой период и с каким результатом. Без плана видов расчета регистр расчета создать нельзя — платформа потребует указать его в свойствах объекта.

Типовой пример — расчет заработной платы. Документ «Начисление зарплаты» делает движения по регистру расчета «Начисления», где каждая запись содержит сотрудника, вид расчета «Оклад по дням», период действия с 1 по 31 число месяца и рассчитанную сумму. Механизм перерасчетов позволяет автоматически отследить, что после изменения исходных данных запись нужно пересчитать.

Из чего состоит регистр расчета

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

Пользовательские поля делятся на три категории. Измерения определяют разрезы учета — обычно это сотрудник, подразделение или организация. Ресурсы хранят числовые результаты расчета: сумму, количество отработанных дней, размер тарифа. Реквизиты несут дополнительную информацию, не участвующую в расчетах, например комментарий или ссылку на приказ.

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

Виды регистров расчета и их отличия

Платформа предлагает два базовых режима работы регистра расчета, которые задаются свойством «Период действия». Если флаг установлен, записи получают период действия, становится доступно вытеснение и расчет фактического периода. Если снят — регистр работает как простое хранилище сумм по периодам регистрации, без механизмов вытеснения.

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

Третья настройка — «Периодичность». Она определяет шаг периода регистрации: год, квартал, месяц, день или в пределах секунды. Для зарплатных расчетов почти всегда выбирают месяц, так как начисления привязаны к расчетному месяцу. Неправильно выбранная периодичность усложнит отборы и виртуальные таблицы.

Сравнение режимов

С периодом действия

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

Без периода действия

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

С базовым периодом

Нужен, когда один расчет строится от итогов других (процент от оклада). Добавляет виртуальную таблицу базы.

Вытеснение и фактический период действия

Вытеснение — ключевой механизм регистров расчета. Если сотрудник болел часть месяца, вид расчета «Больничный» должен вытеснить «Оклад» на дни болезни, чтобы оклад не начислялся за эти дни. Связи вытеснения настраиваются в плане видов расчета на закладке «Вытесняющие» у каждого вида расчета.

Вытеснение работает только при пересечении периодов действия записей в одном измерении (например, по одному сотруднику). Фактический период действия — это то, что осталось от периода действия записи после вычитания всех вытесняющих интервалов. Его можно получить через виртуальную таблицу «ФактическийПериодДействия» регистра расчета.

Типичная ошибка — ожидать, что вытеснение само пересчитает сумму оклада. Платформа лишь предоставляет данные о фактическом периоде и базе; формулу расчета (например, «оклад / норма дней × фактические дни») разработчик реализует в модуле проведения документа или в процедуре расчета. Без корректной формулы сумма останется полной, несмотря на вытеснение.

Виртуальные таблицы регистра расчета

У регистра расчета нет таблицы остатков или оборотов в привычном смысле — вместо них платформа предоставляет специализированные виртуальные таблицы. Основная — «ФактическийПериодДействия», возвращающая набор непересекающихся интервалов фактического действия записей с учетом вытеснений.

Вторая таблица — «ДанныеГрафика». Она показывает значения графика (например, количество рабочих дней) за период действия каждой записи. Именно из нее берут норму дней или часов для расчета оклада пропорционально отработанному времени.

Третья таблица — «База<ИмяРегистра>» (появляется при включенном базовом периоде). Она агрегирует результаты базовых видов расчета за базовый период записи. В запросе к этим таблицам обязательно задавайте параметры условий (измерения, регистратор, вид расчета), иначе запрос будет перебирать всю таблицу и работать медленно на больших базах.

bsl
ВЫБРАТЬ ФПД.Сотрудник, ФПД.ПериодДействияНачало, ФПД.ПериодДействияКонец ИЗ РегистрРасчета.Начисления.ФактическийПериодДействия(Сотрудник = &Сотрудник) КАК ФПД

Как создать и настроить регистр расчета

Работа начинается с плана видов расчета: создайте его в ветке «Планы видов расчета» конфигуратора, определите предопределенные виды расчета и настройте для них базовые, ведущие и вытесняющие связи. Только после этого добавляйте регистр расчета и указывайте созданный план в его свойствах.

Далее настройте измерения (минимум — сотрудник), ресурсы (сумма, при необходимости дни/часы), включите период действия и укажите график. Затем добавьте регистр в список движений документа-регистратора и напишите код формирования записей в обработке проведения.

Порядок создания
  1. 1
    Создайте план видов расчета и добавьте предопределенные виды расчета
  2. 2
    Настройте вытесняющие и ведущие связи в плане видов расчета
  3. 3
    Создайте регистр расчета, укажите план видов расчета, периодичность и период действия
  4. 4
    Добавьте измерения (сотрудник), ресурсы (сумма) и настройте график
  5. 5
    Включите регистр в движения документа-регистратора и напишите код проведения
  6. 6
    Проверьте расчет на тестовом примере с вытеснением, например оклад плюс больничный

Типовые ошибки при работе с регистрами расчета

Самая частая проблема — неверно настроенные связи вытеснения. Если больничный не вытесняет оклад, сотрудник получит двойное начисление за дни болезни. Проверяйте связи в плане видов расчета и убедитесь, что периоды действия записей действительно пересекаются по одному измерению.

Вторая ошибка — игнорирование механизма перерасчетов. Когда исходные данные изменились задним числом (например, введен больничный за прошлый месяц), зависимые записи должны быть помечены к перерасчету. Для этого в конфигурации создают объект «Перерасчет» и связывают его с регистром расчета; программно записи добавляют в набор перерасчета.

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

Типичные ошибки
01
Не настроены вытесняющие связи — двойные начисления за пересекающиеся периоды
02
Формула расчета не учитывает фактический период — сумма оклада не уменьшается при больничном
03
Запрос к ФактическийПериодДействия без параметров — тяжелые запросы по всей таблице
04
Игнорирование перерасчетов — устаревшие суммы после изменения данных задним числом
05
Изменение структуры регистра в рабочей базе без копии — риск потери истории начислений

Проверка результата и контрольные точки

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

Контрольные точки

Как проверить результат

Фактический период действия записи оклада
Норма

Исключает дни больничного

Тревожный признак

Покрывает весь месяц целиком

Сумма начислений за месяц
Норма

Оклад пропорционален отработанным дням плюс больничный

Тревожный признак

Полный оклад плюс больничный за те же дни

Данные графика
Норма

Норма дней соответствует производственному календарю

Тревожный признак

Норма пустая или не совпадает с календарем

Перерасчет после изменения задним числом
Норма

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

Тревожный признак

Старые суммы остались без изменений

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

При отладке расчетов удобно временно выводить в сообщения содержимое записи до и после расчета: период действия, базу, данные графика и итоговую сумму. Это быстрее, чем каждый раз строить отчет по регистру.
ПЗ
Практическое замечание

Частые вопросы о регистрах расчета

Чем регистр расчета отличается от регистра накопления?

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

Можно ли создать регистр расчета без плана видов расчета?

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

Что такое перерасчет и когда он нужен?

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

Как получить фактический период действия записи?

Через виртуальную таблицу «ФактическийПериодДействия» регистра расчета. В запросе обязательно задайте параметры отбора (измерения, регистратор), иначе таблица построится по всем записям регистра, что медленно на больших базах.

Почему вытеснение настроено, но сумма оклада не уменьшается?

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

Итог

Что важно запомнить

Регистр расчета — основной инструмент периодических начислений в 1С 8.3. Он работает в связке с планом видов расчета, поддерживает период действия, вытеснение и перерасчеты. Корректный результат зависит от настройки связей в плане видов расчета и формулы, учитывающей фактический период.