Разработка и Конфигурация · 11 мин
Как создать регистр расчета в 1С
Пошаговая инструкция по созданию регистра расчета в 1С: настройка плана видов расчета, измерений, реквизитов, перерасчетов и заполнение движениями документа.
Регистр расчета — объект конфигурации 1С, предназначенный для хранения результатов периодических начислений и удержаний: зарплаты, премий, отпускных, больничных, налогов. В отличие от регистра накопления, он работает с понятием периода действия, поддерживает зависимость от базового периода и механизм вытеснения видов расчета. Именно поэтому любой расчет заработной платы в самописной или дорабатываемой конфигурации начинается с создания регистра расчета.
Типовая цепочка объектов выглядит так: план видов расчета определяет, какие начисления и удержания существуют в системе; регистр расчета хранит сами записи с периодом действия, сотрудником и результатом; документ (например, «Начисление зарплаты») формирует движения по регистру. Ниже разобран каждый шаг с указанием свойств, которые чаще всего настраивают неправильно.
Материал ориентирован на конфигуратор 1С:Предприятие 8.3 и управляемые формы, но логика объектов одинакова для любой версии платформы 8.x. Если вы работаете в типовой конфигурации вроде 1С:ЗУП, собственный регистр расчета обычно не нужен — там достаточно добавить новый вид расчета в существующий план.
Когда нужен собственный регистр расчета
Собственный регистр расчета оправдан, если вы разрабатываете конфигурацию с нуля или добавляете в учетную систему самостоятельный блок расчетов: начисление аренды, расчет роялти, компенсации, штрафные санкции с периодом действия. Ключевой признак — необходимость хранить записи с периодом действия, который может отличаться от периода регистрации, и получать данные за базовый период.
Если задача — просто накапливать суммы по сотрудникам без зависимости от периодов и вытеснения, достаточно регистра накопления. Он проще, быстрее и не требует плана видов расчета. Ошибка на этом этапе приводит к избыточной архитектуре: регистр расчета тяжелее в обслуживании, а его специальные возможности остаются невостребованными.
Сравнение вариантов
Подходит для начислений с периодом действия, вытеснением и базой: зарплата, отпускные, больничные. Требует план видов расчета.
Подходит для простого накопления сумм без периодической логики: задолженность, выплаты. Проще и быстрее.
Подходит для 1С:ЗУП и аналогов: добавляется новый вид расчета без создания своего регистра.
Создание плана видов расчета
План видов расчета — обязательный спутник регистра расчета: он хранит список начислений и удержаний и определяет их взаимодействие. В конфигураторе откройте ветку «Планы видов расчета» и добавьте новый объект, например «ОсновныеНачисления». На закладке «Основные» задайте имя и синоним.
На закладке «Расчет» включите флажок «Использует период действия» — без него регистр не сможет хранить фактические даты начала и окончания начисления. Если планируются зависимые расчеты (например, премия процентом от оклада), включите «Зависимость от базы» и укажите тип зависимости: по периоду действия или по периоду регистрации.
На закладке «Предопределенные» создайте виды расчета, которые будут доступны сразу после обновления конфигурации: «Оклад», «Премия», «ОплатаБольничного». Для каждого вида на закладке «Вытесняющие» и «Базовые» укажите связи: больничный вытесняет оклад, премия зависит от оклада как от базы. Эти настройки платформа использует при расчете базы и фактического периода действия.
Создание регистра расчета и настройка свойств
В ветке «Регистры расчета» добавьте новый объект, например «НачисленияСотрудников». В свойстве «План видов расчета» укажите созданный ранее план — это обязательная связь, без нее регистр не сохранится. Периодичность регистра выберите «В пределах месяца» для зарплатных расчетов или «В пределах года» для годовых начислений: от нее зависит, как платформа строит виртуальные таблицы базы и фактического периода действия.
На закладке «Данные» добавьте измерение «Сотрудник» с типом «СправочникСсылка.Сотрудники». Измерение определяет разрез хранения записей — чаще всего это сотрудник, иногда добавляют организацию или подразделение. Ресурс «Результат» с типом «Число» (15, 2) будет хранить сумму начисления. Реквизиты — например, «ДниОтработано» или «ГрафикРаботы» — хранят вспомогательные данные, не участвующие в итогах.
Проверьте, что в свойстве «Регистраторы» отмечен документ, который будет формировать движения, — например, «НачислениеЗарплаты». Без регистратора записи в регистр нельзя добавить штатными средствами проведения.
- 1Создайте план видов расчета, включите период действия и зависимость от базы
- 2Добавьте предопределенные виды расчета с вытесняющими и базовыми связями
- 3Создайте регистр расчета и свяжите его с планом видов расчета
- 4Добавьте измерение «Сотрудник», ресурс «Результат», нужные реквизиты
- 5Укажите документ-регистратор в свойствах регистра
- 6Реализуйте проведение документа с записью движений
- 7Обновите конфигурацию базы данных и проверьте проведение на тестовом документе
Настройка перерасчетов
Перерасчет — механизм автоматической пометки записей, которые стали недостоверными после изменения исходных данных. Классический пример: рассчитали зарплату за месяц, потом задним числом ввели больничный — записи по окладу за этот период должны быть пересчитаны.
На закладке «Перерасчеты» регистра расчета добавьте объект перерасчета, например «ПерерасчетНачислений». В его измерениях укажите измерение регистра («Сотрудник») и свяжите его с измерением самого перерасчета. При проведении документа задним числом платформа автоматически добавит в перерасчет записи по затронутым сотрудникам.
Важно понимать ограничение: платформа только фиксирует необходимость перерасчета, но не выполняет его сама. Чтение таблицы перерасчета и повторное проведение документов — задача разработчика, обычно реализуемая в регламентном задании или в обработке перед закрытием месяца.
Запись движений документом
Движения формируются в модуле объекта документа в процедуре ОбработкаПроведения. Для каждой строки табличной части создается запись в наборе записей регистра. Минимальный пример:
Для Каждого Строка Из Начисления Цикл
Движение = Движения.НачисленияСотрудников.Добавить();
Движение.ПериодРегистрации = Дата;
Движение.ПериодДействияНачало = Строка.ДатаНачала;
Движение.ПериодДействияКонец = Строка.ДатаОкончания;
Движение.ВидРасчета = Строка.ВидРасчета;
Движение.Сотрудник = Строка.Сотрудник;
Движение.Результат = Строка.Сумма;
КонецЦикла;
Движения.НачисленияСотрудников.Записать();
Обратите внимание: конец периода действия в 1С включается в период, но на границах суток возможны расхождения в секундах. Рекомендуется приводить конец периода к концу дня функцией КонецДня(), иначе при стыковке периодов (отпуск до 10-го, оклад с 11-го) можно получить пересечение или разрыв в одну секунду.
Сам расчет результата (сумма по окладу пропорционально отработанным дням, процент от базы) платформа не выполняет автоматически — это логика вашего кода. Типовой подход: запросом к виртуальной таблице «ФактическийПериодДействия» получить отработанное время, к таблице «База» — сумму базы, затем вычислить результат и записать его в движение.
Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ РегистрРасчета.НачисленияСотрудников.ФактическийПериодДействия(Сотрудник = &Сотрудник)");Проверка результата и типичные ошибки
После обновления конфигурации создайте тестовый документ, проведите его и откройте движения через кнопку «Движения» в форме документа или через универсальный отчет. Проверьте, что в записях заполнены вид расчета, сотрудник, оба периода и результат. Затем постройте запрос к виртуальным таблицам регистра — они должны возвращать данные без ошибок.
Отдельно проверьте сценарий с перерасчетом: проведите документ за прошлый период после расчета текущего и убедитесь, что в таблице перерасчета появились записи. Если таблица пуста — не настроена связь измерений в объекте перерасчета.
Как проверить результат
Заполнены вид расчета, сотрудник, период действия и результат
Записей нет или пустой вид расчета — ошибка в ОбработкаПроведения
Возвращает суммы базовых видов расчета за период
Пустой результат — не настроена зависимость от базы в плане видов расчета
В таблице перерасчета появляются записи по сотруднику
Таблица пуста — не связаны измерения перерасчета и регистра
Ограничения и рекомендации по производительности
Регистр расчета хранит данные с учетом периодичности, и виртуальные таблицы (база, фактический период действия, данные графика) строятся соединением нескольких физических таблиц. На больших объемах — сотни тысяч записей в месяц — запросы без отбора по сотруднику и периоду выполняются заметно медленно. Всегда передавайте параметры виртуальных таблиц, не выбирайте данные целиком.
Не добавляйте в регистр измерения «на будущее». Каждое измерение увеличивает индексы и стоимость записи. Если аналитика нужна только для отчетов, рассмотрите хранение ее в реквизитах или в отдельном регистре сведений.
Перед изменением структуры регистра в рабочей базе сделайте резервную копию: удаление измерения или изменение типа ресурса приведет к реструктуризации таблиц, которая на больших объемах занимает значительное время и требует монопольного доступа.
Удобно сразу создать для регистра форму списка с колонками «ПериодДействияНачало», «ПериодДействияКонец» и «Результат» — это ускоряет отладку проведения и позволяет бухгалтеру самостоятельно проверять записи без запросов в консоли.
Частые вопросы
Чем регистр расчета отличается от регистра сведений?
Регистр сведений просто хранит значения в разрезе измерений и, опционально, периода. Регистр расчета добавляет связь с планом видов расчета, период действия, механизм вытеснения, зависимость от базы и перерасчеты. Для зарплатных задач регистр сведений не подходит — в нем нет этой логики.
Можно ли создать регистр расчета без плана видов расчета?
Нет. Связь с планом видов расчета — обязательное свойство регистра, платформа не позволит сохранить объект без нее. План видов расчета определяет состав начислений и правила их взаимодействия.
Почему виртуальная таблица «База» возвращает пустой результат?
Чаще всего причина в том, что в плане видов расчета для зависимого вида расчета не указаны базовые виды на закладке «Базовые», либо отключено свойство «Зависимость от базы». Также проверьте, что базовые записи попадают в указанный период и совпадают по измерениям.
Как организовать автоматический перерасчет зарплаты?
Платформа только помечает записи в таблице перерасчета. Автоматизацию реализуют через регламентное задание: запрос читает таблицу перерасчета, находит затронутые документы, перепроводит их и очищает обработанные записи перерасчета.
Сколько измерений оптимально для регистра расчета?
Минимально необходимое количество: обычно одно измерение «Сотрудник», иногда добавляют «Организация». Каждое лишнее измерение увеличивает объем индексов и замедляет запись движений и запросы к виртуальным таблицам.
Можно ли изменить структуру регистра, в котором уже есть данные?
Добавление новых реквизитов и измерений возможно, но требует реструктуризации. Удаление измерений или смена типов может привести к потере данных. Все изменения выполняйте на копии базы с резервной копией рабочей.
Что важно запомнить
Регистр расчета создается в связке с планом видов расчета: план задает виды начислений и правила вытеснения, регистр хранит записи с периодом действия. Движения формирует документ-регистратор в ОбработкеПроведения, расчет суммы — задача вашего кода. Проверяйте результат через движения документа и виртуальные таблицы, а структуру регистра меняйте только на копии базы.