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

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

Как создать регистр расчета в 1С

Пошаговая инструкция по созданию регистра расчета в 1С: настройка плана видов расчета, измерений, реквизитов, перерасчетов и заполнение движениями документа.

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

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

Материал ориентирован на конфигуратор 1С:Предприятие 8.3 и управляемые формы, но логика объектов одинакова для любой версии платформы 8.x. Если вы работаете в типовой конфигурации вроде 1С:ЗУП, собственный регистр расчета обычно не нужен — там достаточно добавить новый вид расчета в существующий план.

Когда нужен собственный регистр расчета

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

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

Сравнение вариантов

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

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

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

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

Доработка типового плана видов расчета

Подходит для 1С:ЗУП и аналогов: добавляется новый вид расчета без создания своего регистра.

Создание плана видов расчета

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

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

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

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

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

На закладке «Данные» добавьте измерение «Сотрудник» с типом «СправочникСсылка.Сотрудники». Измерение определяет разрез хранения записей — чаще всего это сотрудник, иногда добавляют организацию или подразделение. Ресурс «Результат» с типом «Число» (15, 2) будет хранить сумму начисления. Реквизиты — например, «ДниОтработано» или «ГрафикРаботы» — хранят вспомогательные данные, не участвующие в итогах.

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

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

Настройка перерасчетов

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

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

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

Запись движений документом

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

Для Каждого Строка Из Начисления Цикл

Движение = Движения.НачисленияСотрудников.Добавить();

Движение.ПериодРегистрации = Дата;

Движение.ПериодДействияНачало = Строка.ДатаНачала;

Движение.ПериодДействияКонец = Строка.ДатаОкончания;

Движение.ВидРасчета = Строка.ВидРасчета;

Движение.Сотрудник = Строка.Сотрудник;

Движение.Результат = Строка.Сумма;

КонецЦикла;

Движения.НачисленияСотрудников.Записать();

Обратите внимание: конец периода действия в 1С включается в период, но на границах суток возможны расхождения в секундах. Рекомендуется приводить конец периода к концу дня функцией КонецДня(), иначе при стыковке периодов (отпуск до 10-го, оклад с 11-го) можно получить пересечение или разрыв в одну секунду.

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

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

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

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

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

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

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

Записи в регистре после проведения
Норма

Заполнены вид расчета, сотрудник, период действия и результат

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

Записей нет или пустой вид расчета — ошибка в ОбработкаПроведения

Виртуальная таблица базы
Норма

Возвращает суммы базовых видов расчета за период

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

Пустой результат — не настроена зависимость от базы в плане видов расчета

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

В таблице перерасчета появляются записи по сотруднику

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

Таблица пуста — не связаны измерения перерасчета и регистра

Типичные ошибки
01
Не включен период действия в плане видов расчета — поля периода действия недоступны в записях
02
Документ не указан как регистратор — движения не записываются при проведении
03
Конец периода действия без КонецДня() — разрывы и пересечения на границах периодов
04
Ожидание автоматического расчета суммы — платформа не считает результат, это код разработчика
05
Лишние измерения ради универсальности — замедление запросов к виртуальным таблицам

Ограничения и рекомендации по производительности

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

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

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

Удобно сразу создать для регистра форму списка с колонками «ПериодДействияНачало», «ПериодДействияКонец» и «Результат» — это ускоряет отладку проведения и позволяет бухгалтеру самостоятельно проверять записи без запросов в консоли.
ПЗ
Практическое замечание

Частые вопросы

Чем регистр расчета отличается от регистра сведений?

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

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

Нет. Связь с планом видов расчета — обязательное свойство регистра, платформа не позволит сохранить объект без нее. План видов расчета определяет состав начислений и правила их взаимодействия.

Почему виртуальная таблица «База» возвращает пустой результат?

Чаще всего причина в том, что в плане видов расчета для зависимого вида расчета не указаны базовые виды на закладке «Базовые», либо отключено свойство «Зависимость от базы». Также проверьте, что базовые записи попадают в указанный период и совпадают по измерениям.

Как организовать автоматический перерасчет зарплаты?

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

Сколько измерений оптимально для регистра расчета?

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

Можно ли изменить структуру регистра, в котором уже есть данные?

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

Итог

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

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