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

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

Как работает регистр расчета в 1С

Как устроен регистр расчета 1С: период действия, база, вытеснение, перерасчеты и зависимость от базы. Разбираем настройку видов расчета и типичные ошибки разработчика.

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

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

Механизм чаще всего применяется в решениях класса «1С:Зарплата и управление персоналом» и в самописных конфигурациях, где нужны сложные расчеты по формулам с зависимостью от периода и других начислений. Ниже разберем устройство регистра, настройку вытеснения и базы, перерасчеты и типичные ошибки разработчиков.

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

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

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

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

План видов расчета и его роль

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

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

Как работает вытеснение по периоду действия

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

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

Округление суммыОклад меньше полного

Сравните результат с пропорцией по графику — вытеснение сработало

Фактический периодНесколько интервалов вместо одного

Значит, вытесняющий расчет пересекался частично — это норма

Результат не изменилсяСумма оклада полная при наличии отпуска

Проверьте список вытесняющих видов расчета в карточке отпуска

Расчет базы и зависимые начисления

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

При запросе к таблице базы указываются измерения связи (как сопоставлять записи текущего и базового расчетов — обычно по сотруднику) и разрезы (по каким измерениям суммировать базу). Ошибки в этих параметрах — самая частая причина нулевой или завышенной базы.

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

bsl
Запрос = Новый Запрос("ВЫБРАТЬ СУММА(База.РезультатБаза) КАК База ИЗ РегистрРасчета.Начисления.БазаНачисления(&Измерения, &Измерения, , ПериодДействия МЕЖДУ &Начало И &Конец) КАК База");

Перерасчеты: зачем нужны и как настроить

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

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

Настройка перерасчета
  1. 1
    Создайте объект «Перерасчет» в ветке «Регистры расчета»
  2. 2
    Укажите регистр расчета и измерения, по которым фиксируются изменения
  3. 3
    Заполните список видов расчета, подлежащих перерасчету
  4. 4
    В карточках зависимых видов расчета укажите ведущие виды
  5. 5
    В коде расчета добавьте чтение таблицы перерасчета и повторный расчет записей
  6. 6
    Проверьте: измените базовое начисление задним числом и убедитесь, что в перерасчете появились строки

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

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

Вторая группа — ошибки настройки связей. Не заполнен список базовых видов — база всегда нулевая. Циклические зависимости между видами расчета (А зависит от Б, Б зависит от А) приводят к невозможности корректного расчета. Неверно выбрана периодичность регистра — расчеты за квартал не сходятся с помесячными данными.

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

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

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

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

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

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

Сумма оклада при отпуске
Норма

Пропорциональна фактически отработанным дням

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

Полный оклад или ноль

База премии
Норма

Равна сумме базовых начислений за период

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

Ноль или сумма по чужому сотруднику

Таблица перерасчета
Норма

Пуста после повторного расчета

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

Строки накапливаются и не обрабатываются

Когда регистр расчета не нужен

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

Выбор объекта для хранения

Регистр сведений

История значений без вычислений: оклады, ставки, коэффициенты

Регистр накопления

Обороты и остатки: выплаты, задолженность, взаиморасчеты

Регистр расчета

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

Итог

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

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

Ответы на частые вопросы

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

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

Почему база зависимого расчета равна нулю?

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

Можно ли изменить периодичность существующего регистра расчета?

Технически можно, но это запускает полную реструктуризацию таблиц регистра. На объемной рабочей базе операция длительная и рискованная. Безопасный путь: создать новый регистр с нужной периодичностью, перенести данные обработкой и переключить документы на него, предварительно протестировав на копии.

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

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

Что произойдет при циклической зависимости видов расчета?

Платформа не сможет определить корректный порядок расчета: вид А зависит от базы вида Б, а Б — от базы А. В результате расчет либо даст неверные суммы, либо потребует ручного задания очередности. Такие зависимости нужно разрывать на этапе проектирования, например выделяя промежуточный вид расчета.

Нужен ли регистр расчета в простой самописной конфигурации?

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