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

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

Что такое регистр расчета в 1С и зачем он нужен

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

  • 📅 Привязывать данные к календарным периодам (день, месяц, квартал, год)
  • ⚖️ Хранить не только итоговые суммы, но и детализацию расчетов (например, по каждому сотруднику или виду налога)
  • 🔄 Автоматически пересчитывать данные при изменении базовых параметров (например, если изменилась ставка налога)
  • 📊 Поддерживать сложные алгоритмы начислений (например, прогрессивную шкалу налогов или бонусы по стажу)

Классический пример использования — расчет зарплаты. В регистре расчета можно хранить:

  • 💰 Начисленную зарплату по каждому сотруднику за каждый месяц
  • 📉 Удержанные налоги (НДФЛ, страховые взносы)
  • 🎁 Премии, надбавки, компенсации
  • 📅 Больничные, отпускные и другие выплаты, привязанные к периодам

Без регистров расчета пришлось бы вручную вести таблицы с данными за каждый месяц, что неизбежно привело бы к ошибкам. В 1С:Зарплата и Управление Персоналом или 1С:Бухгалтерия эти объекты уже настроены "из коробки", но понимать их устройство важно для корректной работы и доработок.

📊 С какой целью вы изучаете регистры расчета в 1С?
Для настройки зарплаты
Для бухгалтерских расчетов
Для программирования в 1С
Для сдачи отчетности
Другое

Регистры расчета vs регистры накопления: ключевые различия

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

Параметр Регистр накопления Регистр расчета
Основное назначение Учет остатков и оборотов (например, товары на складе, деньги в кассе) Расчеты, привязанные к периодам (зарплата, налоги, амортизация)
Привязка ко времени Может хранить данные без привязки к датам (например, остатки на текущий момент) Всегда привязан к периодам (день, месяц, квартал)
Поддержка перерасчета Не поддерживает автоматический перерасчет при изменении параметров Может автоматически пересчитывать данные за прошлые периоды при изменении правил
Типичные примеры использования Учет товаров, денежных средств, основных средств Зарплата, налоги, амортизация, бонусы, штрафы
Структура хранения Остатки и обороты по измерениям (например, по складам и номенклатуре) Расчетные базы, результаты расчетов, графики (например, по сотрудникам и видам начислений)

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

⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) регистры расчета могут использоваться для сложных производственных расчетов, таких как калькуляция себестоимости по периодам. В этом случае их настройка требует глубокого понимания методологии учета.

Структура регистра расчета: из чего он состоит

Чтобы правильно работать с регистром расчета, нужно понимать его внутреннее устройство. Он состоит из нескольких ключевых элементов:

  1. Измерения — это "координаты", по которым ведется расчет. Например, для зарплаты это могут быть:
    • 👤 Сотрудник (по кому ведется расчет)
    • 💼 Подразделение (где работает сотрудник)
    • 📋 ВидНачисления (зарплата, премия, больничный)
  2. Ресурсы — это собственно данные, которые рассчитываются. Например:
    • 💰 Сумма (размер начисления или удержания)
    • ⏱️ КоличествоДней (для отпусков или больничных)
  • Реквизиты — дополнительная информация, которая не участвует в расчетах, но может понадобиться для анализа. Например:
    • 📝 Примечание (комментарий к начислению)
    • 🔗 ДокументОснование (ссылка на приказ или больничный лист)
    • График — определяет, как часто проводятся расчеты (ежемесячно, ежеквартально и т.д.).
    • Базовый период — период, за который ведутся расчеты (например, месяц для зарплаты).

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

    • 📊 База для начисления (оклад, тарифная ставка)
    • 📉 Расчетная база для удержаний (например, сумма до вычета НДФЛ)
    • 💵 Итоговая сумма к выплате
    Что такое "виртуальные таблицы" регистра расчета?

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

    Виды регистров расчета в 1С

    В платформе 1С:Предприятие существует два основных типа регистров расчета, которые отличаются способом хранения данных:

    1. Регистр расчета (с поддержкой оборотов)

    Это классический вариант, который:

    • 📈 Хранит обороты (начисления и удержания) по периодам
    • 🔄 Поддерживает перерасчет данных при изменении правил
    • 📊 Позволяет получать детализированные отчеты по каждому виду расчета

    🔹 Где используется: Зарплата, налоги, страховые взносы, амортизация основных средств.

    2. Регистр расчета (без оборотов)

    Более простой вариант, который:

    • 📋 Хранит только последние значения (например, остатки отпусков)
    • ❌ Не поддерживает обороты и перерасчет
    • ⚡ Быстрее работает с большими объемами данных

    🔹 Где используется: Учет остатков отпусков, больничных листов, графиков работы.

    ⚠️ Внимание: Если вам нужно хранить историю изменений (например, как менялась сумма начисленной зарплаты за год), используйте регистр с оборотами. Для статичных данных (например, остаток отпуска на текущую дату) достаточно регистра без оборотов.

    🔹 Пример из 1С:Зарплата и Управление Персоналом 3.1:

    • 💰 НачисленияЗарплаты — регистр расчета с оборотами (хранит все начисления по месяцам)
    • 📅 ОстаткиОтпусков — регистр расчета без оборотов (хранит только актуальный остаток)

    Как создать и настроить регистр расчета: пошаговая инструкция

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

    ☑️ Шаги создания регистра расчета

    Выполнено: 0 / 7

    1. Создание регистра в конфигураторе

    Откройте конфигуратор (F12 → Конфигуратор) и:

    1. В дереве объектов найдите ветку Регистры расчета.
    2. Нажмите правой кнопкой и выберите Добавить.
    3. Задайте имя регистра, например, ПремииСотрудников.
    4. Укажите периодичность (например, Месяц).

    2. Настройка измерений

    Измерения определяют, по каким "координатам" будут группироваться данные. Для премий логично добавить:

    • 👤 Сотрудник (тип: СправочникСсылка.Сотрудники)
    • 💼 Подразделение (тип: СправочникСсылка.Подразделения)
    • 📋 ВидПремии (тип: Перечисление.ВидыПремий)

    3. Добавление ресурсов

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

    • 💰 Сумма (тип: Число(15, 2))
    • 📝 Процент (если премия рассчитывается как % от оклада, тип: Число(5, 2))

    4. Настройка графика

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

    • 📅 ГрафикРасчетаПремий (ежемесячно, в конце месяца)

    График настраивается в отдельном объекте конфигурации (Графики расчета).

    5. Программная запись данных

    Чтобы записать данные в регистр, используйте следующий код (пример для премий):

    Движение = Движения.ПремииСотрудников.Добавить();
    

    Движение.Период = ТекущаяДата();

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

    Движение.ВидПремии = ВидыПремий.Ежемесячная;

    Движение.Сумма = 5000; // Размер премии

    Движение.Записать();

    ⚠️ Внимание: При записи движений в регистр расчета обязательно указывайте Период — иначе данные не будут корректно группироваться по месяцам. Если период не указан, 1С может записать данные в "нулевой" период, что приведет к ошибкам в отчетах.

    ПремииСотрудниковОбороты.Сотрудник,

    СУММА(ПремииСотрудниковОбороты.Сумма) КАК СуммаПремий

    ИЗ

    РегистрРасчета.ПремииСотрудников.Обороты(&ПериодНачало, &ПериодКонец,) КАК ПремииСотрудниковОбороты

    ГДЕ

    ПремииСотрудниковОбороты.Сотрудник = &Сотрудник

    СГРУППИРОВАТЬ ПО

    ПремииСотрудниковОбороты.Сотрудник-->

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

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

    1. Неправильная привязка к периодам

    🔴 Проблема: Данные записываются не в тот период (например, премия за декабрь попадает в январь).

    Решение: Всегда явно указывайте Период при записи движений. Пример правильного кода:

    Движение.Период = НачалоМесяца(ДатаНачисления);

    2. Дублирование записей

    🔴 Проблема: Один и тот же расчет дублируется (например, зарплата начисляется дважды за месяц).

    Решение: Перед записью проверяйте, есть ли уже движение за этот период:

    Если НЕ Движения.ПремииСотрудников.Найти(Сотрудник, НачалоМесяца(ТекущаяДата())) Тогда
    

    // Записываем движение

    КонецЕсли;

    3. Ошибки при перерасчете

    🔴 Проблема: После изменения ставки налога или оклада старые периоды не пересчитываются.

    Решение: Используйте метод Перерасчет() для регистра:

    РегистрыРасчета.ПремииСотрудников.Перерасчет(НачалоГода(ТекущаяДата()), ТекущаяДата());

    4. Несоответствие графика расчета

    🔴 Проблема: Расчеты проводятся не в те даты, которые заданы в графике (например, премия начисляется 1-го числа вместо 30-го).

    Решение: Проверьте настройки графика в объекте ГрафикиРасчета и сопоставьте их с датами документов.

    5. Потеря данных при обновлении конфигурации

    🔴 Проблема: После обновления 1С данные в регистре исчезли или исказились.

    Решение: Перед обновлением:

    • 🔄 Сделайте резервную копию базы
    • 📋 Проверьте, не изменилась ли структура регистра в новой версии
    • 🛠️ При необходимости напишите обработку для переноса данных
    ⚠️ Внимание: Если в регистре расчета хранятся критически важные данные (например, зарплата за несколько лет), перед любыми изменениями структуры обязательно создавайте резервную копию и тестируйте обновление на копии базы. В некоторых случаях изменение типа ресурса (например, с Число на Денежный) может привести к потере данных!

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

    Рассмотрим, как работает регистр расчета на примере начисления зарплаты в 1С:Зарплата и Управление Персоналом 3.1.

    1. Структура регистра НачисленияЗарплаты

    В типовой конфигурации этот регистр имеет следующие ключевые элементы:

    • Измерения:
      • 👤 Сотрудник
      • 💼 Подразделение
      • 📋 ВидНачисления (оклад, премия, больничный)
    • Ресурсы:
      • 💰 Сумма (размер начисления)
      • 📉 База (например, оклад для расчета премии)
    • График: ГрафикРасчетаЗарплаты (ежемесячно)

    2. Как записываются данные

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

    Движение = Движения.НачисленияЗарплаты.Добавить();
    

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

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

    Движение.ВидНачисления = ВидыНачислений.Оклад;

    Движение.Сумма = Оклад * КоэффициентЗанятости;

    Движение.База = Оклад; // База для расчета НДФЛ и взносов

    Движение.Записать();

    3. Как формируются отчеты

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

    ВЫБРАТЬ
    

    НачисленияЗарплатыОбороты.Сотрудник КАК Сотрудник,

    НачисленияЗарплатыОбороты.ВидНачисления КАК ВидНачисления,

    СУММА(НачисленияЗарплатыОбороты.Сумма) КАК Сумма

    ИЗ

    РегистрРасчета.НачисленияЗарплаты.Обороты(&НачалоПериода, &КонецПериода,) КАК НачисленияЗарплатыОбороты

    ГДЕ

    НачисленияЗарплатыОбороты.Подразделение = &Подразделение

    СГРУППИРОВАТЬ ПО

    НачисленияЗарплатыОбороты.Сотрудник,

    НачисленияЗарплатыОбороты.ВидНачисления

    4. Перерасчет при изменении оклада

    Если оклад сотрудника изменился ретроактивно (например, с 1 января), нужно пересчитать зарплату за прошлые месяцы:

    РегистрыРасчета.НачисленияЗарплаты.Перерасчет(НачалоГода(ТекущаяДата()), ТекущаяДата());
    💡

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

    FAQ: ответы на частые вопросы о регистрах расчета

    🔹 Можно ли использовать регистр накопления вместо регистра расчета?

    Технически можно, но это приведет к ряду проблем:

    • 📅 Вы потеряете привязку к периодам (не сможете легко получить данные за месяц/квартал)
    • 🔄 Не будет поддержки автоматического перерасчета
    • 📊 Сложнее будет строить отчеты по историческим данным

    Используйте регистры накопления только для учета остатков (товары, деньги), а для расчетов — регистры расчета.

    🔹 Как очистить регистр расчета, если в него попали неверные данные?

    Для очистки регистра используйте метод Очистить():

    РегистрыРасчета.ИмяРегистра.Очистить(НачалоПериода, КонецПериода);

    ⚠️ Внимание: Очистка удаляет все движения за указанный период. Если нужно удалить только часть данных, используйте отбор:

    Выборка = РегистрыРасчета.ИмяРегистра.Выбрать(НачалоПериода, КонецПериода);
    

    Пока Выборка.Следующий() Цикл

    Если Выборка.Сотрудник = НеверныйСотрудник Тогда

    Выборка.Удалить();

    КонецЕсли;

    КонецЦикла;

    🔹 Почему в отчете не показываются данные из регистра расчета?

    Возможные причины:

    • 📅 Неверно указан период в запросе (проверьте даты)
    • 🔍 Отсутствует отбор по измерениям (например, не указано подразделение)
    • 🛠️ Данные не записаны в регистр (проверьте движения документов)
    • 🔄 Регистр не обновлен после изменений (попробуйте сделать Перерасчет())

    Для диагностики используйте отчет Анализ регистра расчета (доступен в типовой конфигурации).

    🔹 Можно ли в одном регистре расчета хранить данные по зарплате и налогам?

    Технически можно, но это плохая практика. Разделяйте расчеты по разным регистрам:

    • 💰 НачисленияЗарплаты — для окладов, премий, больничных
    • 📉 Удержания — для НДФЛ, алиментов, прочих удержаний
    • 🏥 СтраховыеВзносы — для взносов в ПФР, ФСС, ФОМС

    Это упростит:

    • 📊 Построение отчетности (например, 6-НДФЛ и РСВ)
    • 🔍 Поиск ошибок
    • 🔄 Перерасчеты при изменении законодательства
    🔹 Как перенести данные из одного регистра расчета в другой?

    Для переноса данных используйте следующий алгоритм:

    1. Создайте обработку с двумя выборками: из старого и нового регистра.
    2. Настройте соответствие полей (измерений и ресурсов).
    3. Используйте цикл для переноса данных:
    ВыборкаСтарого = РегистрыРасчета.СтарыйРегистр.Выбрать();
    

    Пока ВыборкаСтарого.Следующий() Цикл

    Движение = Движения.НовыйРегистр.Добавить();

    Движение.Период = ВыборкаСтарого.Период;

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

    Движение.Сумма = ВыборкаСтарого.Сумма;

    Движение.Записать();

    КонецЦикла;

    ⚠️ Перед переносом обязательно сделайте резервную копию базы!