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