Если вы работаете с 1С:Предприятие и сталкиваетесь с расчетами зарплаты, налогов, амортизации или любых других периодических начислений, то без регистров расчета вам не обойтись. Это один из ключевых объектов конфигурации, который часто вызывает вопросы у новичков. Почему для одних задач используют регистры накопления, а для других — расчета? Как правильно их настроить, чтобы избежать ошибок в отчетах? И почему при неправильной работе с ними данные могут "разъехаться" по периодам?
В этой статье мы разберем регистры расчета в 1С с нуля: от базового определения до практических примеров настройки. Вы узнаете, чем они принципиально отличаются от регистров накопления, как устроена их внутренняя структура, и какие типичные ошибки допускают пользователи при работе с ними. Материал будет полезен и бухгалтерам, и программистам 1С, и тем, кто только начинает осваивать платформу.
Что такое регистр расчета в 1С и зачем он нужен
Регистр расчета — это объект конфигурации 1С, предназначенный для хранения данных о расчетах, которые привязаны к определенным периодам времени. В отличие от регистров накопления, которые просто фиксируют остатки и обороты (например, количество товаров на складе), регистры расчета умеют:
- 📅 Привязывать данные к календарным периодам (день, месяц, квартал, год)
- ⚖️ Хранить не только итоговые суммы, но и детализацию расчетов (например, по каждому сотруднику или виду налога)
- 🔄 Автоматически пересчитывать данные при изменении базовых параметров (например, если изменилась ставка налога)
- 📊 Поддерживать сложные алгоритмы начислений (например, прогрессивную шкалу налогов или бонусы по стажу)
Классический пример использования — расчет зарплаты. В регистре расчета можно хранить:
- 💰 Начисленную зарплату по каждому сотруднику за каждый месяц
- 📉 Удержанные налоги (НДФЛ, страховые взносы)
- 🎁 Премии, надбавки, компенсации
- 📅 Больничные, отпускные и другие выплаты, привязанные к периодам
Без регистров расчета пришлось бы вручную вести таблицы с данными за каждый месяц, что неизбежно привело бы к ошибкам. В 1С:Зарплата и Управление Персоналом или 1С:Бухгалтерия эти объекты уже настроены "из коробки", но понимать их устройство важно для корректной работы и доработок.
Регистры расчета vs регистры накопления: ключевые различия
Новички часто путают эти два типа регистров, потому что оба хранят данные и поддерживают обороты. Но их назначение принципиально разное. Давайте сравним:
| Параметр | Регистр накопления | Регистр расчета |
|---|---|---|
| Основное назначение | Учет остатков и оборотов (например, товары на складе, деньги в кассе) | Расчеты, привязанные к периодам (зарплата, налоги, амортизация) |
| Привязка ко времени | Может хранить данные без привязки к датам (например, остатки на текущий момент) | Всегда привязан к периодам (день, месяц, квартал) |
| Поддержка перерасчета | Не поддерживает автоматический перерасчет при изменении параметров | Может автоматически пересчитывать данные за прошлые периоды при изменении правил |
| Типичные примеры использования | Учет товаров, денежных средств, основных средств | Зарплата, налоги, амортизация, бонусы, штрафы |
| Структура хранения | Остатки и обороты по измерениям (например, по складам и номенклатуре) | Расчетные базы, результаты расчетов, графики (например, по сотрудникам и видам начислений) |
🔹 Пример из практики: Если вам нужно хранить данные о количестве отработанных часов сотрудником за месяц — это задача для регистра расчета. А если вы ведете учет остатков материалов на складе — тут нужен регистр накопления.
⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) регистры расчета могут использоваться для сложных производственных расчетов, таких как калькуляция себестоимости по периодам. В этом случае их настройка требует глубокого понимания методологии учета.
Структура регистра расчета: из чего он состоит
Чтобы правильно работать с регистром расчета, нужно понимать его внутреннее устройство. Он состоит из нескольких ключевых элементов:
- Измерения — это "координаты", по которым ведется расчет. Например, для зарплаты это могут быть:
- 👤
Сотрудник(по кому ведется расчет) - 💼
Подразделение(где работает сотрудник) - 📋
ВидНачисления(зарплата, премия, больничный)
- 👤
- Ресурсы — это собственно данные, которые рассчитываются. Например:
- 💰
Сумма(размер начисления или удержания) - ⏱️
КоличествоДней(для отпусков или больничных)
- 💰
- 📝
Примечание(комментарий к начислению) - 🔗
ДокументОснование(ссылка на приказ или больничный лист)
🔹 Важный нюанс: В регистре расчета можно хранить не только итоговые суммы, но и промежуточные данные. Например, для расчета зарплаты может храниться:
- 📊 База для начисления (оклад, тарифная ставка)
- 📉 Расчетная база для удержаний (например, сумма до вычета НДФЛ)
- 💵 Итоговая сумма к выплате
Что такое "виртуальные таблицы" регистра расчета?
В 1С для регистров расчета автоматически создаются виртуальные таблицы, которые позволяют получать данные за периоды без написания сложных запросов. Например, таблица Обороты покажет все начисления за выбранный месяц, а таблица ПоследниеЗначения — актуальные данные на дату. Это удобно для формирования отчетов, например, по начисленной зарплате за квартал или по остаткам отпусков сотрудников.
Виды регистров расчета в 1С
В платформе 1С:Предприятие существует два основных типа регистров расчета, которые отличаются способом хранения данных:
1. Регистр расчета (с поддержкой оборотов)
Это классический вариант, который:
- 📈 Хранит обороты (начисления и удержания) по периодам
- 🔄 Поддерживает перерасчет данных при изменении правил
- 📊 Позволяет получать детализированные отчеты по каждому виду расчета
🔹 Где используется: Зарплата, налоги, страховые взносы, амортизация основных средств.
2. Регистр расчета (без оборотов)
Более простой вариант, который:
- 📋 Хранит только последние значения (например, остатки отпусков)
- ❌ Не поддерживает обороты и перерасчет
- ⚡ Быстрее работает с большими объемами данных
🔹 Где используется: Учет остатков отпусков, больничных листов, графиков работы.
⚠️ Внимание: Если вам нужно хранить историю изменений (например, как менялась сумма начисленной зарплаты за год), используйте регистр с оборотами. Для статичных данных (например, остаток отпуска на текущую дату) достаточно регистра без оборотов.
🔹 Пример из 1С:Зарплата и Управление Персоналом 3.1:
- 💰
НачисленияЗарплаты— регистр расчета с оборотами (хранит все начисления по месяцам) - 📅
ОстаткиОтпусков— регистр расчета без оборотов (хранит только актуальный остаток)
Как создать и настроить регистр расчета: пошаговая инструкция
Если вы программист 1С или администратор базы, рано или поздно вам придется создавать регистры расчета с нуля. Рассмотрим процесс на примере создания регистра для учета премий сотрудников.
☑️ Шаги создания регистра расчета
1. Создание регистра в конфигураторе
Откройте конфигуратор (F12 → Конфигуратор) и:
- В дереве объектов найдите ветку
Регистры расчета. - Нажмите правой кнопкой и выберите
Добавить. - Задайте имя регистра, например,
ПремииСотрудников. - Укажите периодичность (например,
Месяц).
2. Настройка измерений
Измерения определяют, по каким "координатам" будут группироваться данные. Для премий логично добавить:
- 👤
Сотрудник(тип:СправочникСсылка.Сотрудники) - 💼
Подразделение(тип:СправочникСсылка.Подразделения) - 📋
ВидПремии(тип:Перечисление.ВидыПремий)
3. Добавление ресурсов
Ресурсы — это те данные, которые мы будем рассчитывать. Для премий это:
- 💰
Сумма(тип:Число(15, 2)) - 📝
Процент(если премия рассчитывается как % от оклада, тип:Число(5, 2))
4. Настройка графика
График определяет, как часто будут проводиться расчеты. Для премий обычно используется:
- 📅
ГрафикРасчетаПремий(ежемесячно, в конце месяца)
График настраивается в отдельном объекте конфигурации (Графики расчета).
5. Программная запись данных
Чтобы записать данные в регистр, используйте следующий код (пример для премий):
Движение = Движения.ПремииСотрудников.Добавить();
Движение.Период = ТекущаяДата();
Движение.Сотрудник = СсылкаНаСотрудника;
Движение.ВидПремии = ВидыПремий.Ежемесячная;
Движение.Сумма = 5000; // Размер премии
Движение.Записать();
⚠️ Внимание: При записи движений в регистр расчета обязательно указывайте Период — иначе данные не будут корректно группироваться по месяцам. Если период не указан, 1С может записать данные в "нулевой" период, что приведет к ошибкам в отчетах.
ПремииСотрудниковОбороты.Сотрудник,
СУММА(ПремииСотрудниковОбороты.Сумма) КАК СуммаПремий
ИЗ
РегистрРасчета.ПремииСотрудников.Обороты(&ПериодНачало, &ПериодКонец,) КАК ПремииСотрудниковОбороты
ГДЕ
ПремииСотрудниковОбороты.Сотрудник = &Сотрудник
СГРУППИРОВАТЬ ПО
ПремииСотрудниковОбороты.Сотрудник-->
Типичные ошибки при работе с регистрами расчета и как их избежать
Даже опытные пользователи 1С иногда допускают ошибки, которые приводят к некорректным расчетам или потере данных. Рассмотрим самые распространенные проблемы и способы их решения.
1. Неправильная привязка к периодам
🔴 Проблема: Данные записываются не в тот период (например, премия за декабрь попадает в январь).
✅ Решение: Всегда явно указывайте Период при записи движений. Пример правильного кода:
Движение.Период = НачалоМесяца(ДатаНачисления);
2. Дублирование записей
🔴 Проблема: Один и тот же расчет дублируется (например, зарплата начисляется дважды за месяц).
✅ Решение: Перед записью проверяйте, есть ли уже движение за этот период:
Если НЕ Движения.ПремииСотрудников.Найти(Сотрудник, НачалоМесяца(ТекущаяДата())) Тогда
// Записываем движение
КонецЕсли;
3. Ошибки при перерасчете
🔴 Проблема: После изменения ставки налога или оклада старые периоды не пересчитываются.
✅ Решение: Используйте метод Перерасчет() для регистра:
РегистрыРасчета.ПремииСотрудников.Перерасчет(НачалоГода(ТекущаяДата()), ТекущаяДата());
4. Несоответствие графика расчета
🔴 Проблема: Расчеты проводятся не в те даты, которые заданы в графике (например, премия начисляется 1-го числа вместо 30-го).
✅ Решение: Проверьте настройки графика в объекте ГрафикиРасчета и сопоставьте их с датами документов.
5. Потеря данных при обновлении конфигурации
🔴 Проблема: После обновления 1С данные в регистре исчезли или исказились.
✅ Решение: Перед обновлением:
- 🔄 Сделайте резервную копию базы
- 📋 Проверьте, не изменилась ли структура регистра в новой версии
- 🛠️ При необходимости напишите обработку для переноса данных
⚠️ Внимание: Если в регистре расчета хранятся критически важные данные (например, зарплата за несколько лет), перед любыми изменениями структуры обязательно создавайте резервную копию и тестируйте обновление на копии базы. В некоторых случаях изменение типа ресурса (например, сЧислонаДенежный) может привести к потере данных!
Практический пример: расчет зарплаты с использованием регистра расчета
Рассмотрим, как работает регистр расчета на примере начисления зарплаты в 1С:Зарплата и Управление Персоналом 3.1.
1. Структура регистра НачисленияЗарплаты
В типовой конфигурации этот регистр имеет следующие ключевые элементы:
- Измерения:
- 👤
Сотрудник - 💼
Подразделение - 📋
ВидНачисления(оклад, премия, больничный)
- 👤
- Ресурсы:
- 💰
Сумма(размер начисления) - 📉
База(например, оклад для расчета премии)
- 💰
- График:
ГрафикРасчетаЗарплаты(ежемесячно)
2. Как записываются данные
При проведении документа Начисление зарплаты в регистр добавляются движения. Например, для оклада:
Движение = Движения.НачисленияЗарплаты.Добавить();
Движение.Период = ДатаНачисления;
Движение.Сотрудник = Сотрудник;
Движение.ВидНачисления = ВидыНачислений.Оклад;
Движение.Сумма = Оклад * КоэффициентЗанятости;
Движение.База = Оклад; // База для расчета НДФЛ и взносов
Движение.Записать();
3. Как формируются отчеты
На основе регистра строятся отчеты, например, Анализ начислений по сотрудникам. Запрос к регистру может выглядеть так:
ВЫБРАТЬ
НачисленияЗарплатыОбороты.Сотрудник КАК Сотрудник,
НачисленияЗарплатыОбороты.ВидНачисления КАК ВидНачисления,
СУММА(НачисленияЗарплатыОбороты.Сумма) КАК Сумма
ИЗ
РегистрРасчета.НачисленияЗарплаты.Обороты(&НачалоПериода, &КонецПериода,) КАК НачисленияЗарплатыОбороты
ГДЕ
НачисленияЗарплатыОбороты.Подразделение = &Подразделение
СГРУППИРОВАТЬ ПО
НачисленияЗарплатыОбороты.Сотрудник,
НачисленияЗарплатыОбороты.ВидНачисления
4. Перерасчет при изменении оклада
Если оклад сотрудника изменился ретроактивно (например, с 1 января), нужно пересчитать зарплату за прошлые месяцы:
РегистрыРасчета.НачисленияЗарплаты.Перерасчет(НачалоГода(ТекущаяДата()), ТекущаяДата());
Регистры расчета в 1С автоматически поддерживают историю изменений. Это означает, что вы можете в любой момент увидеть, какие начисления были сделаны сотруднику за любой прошлый период, даже если правила расчета изменились.
FAQ: ответы на частые вопросы о регистрах расчета
🔹 Можно ли использовать регистр накопления вместо регистра расчета?
Технически можно, но это приведет к ряду проблем:
- 📅 Вы потеряете привязку к периодам (не сможете легко получить данные за месяц/квартал)
- 🔄 Не будет поддержки автоматического перерасчета
- 📊 Сложнее будет строить отчеты по историческим данным
Используйте регистры накопления только для учета остатков (товары, деньги), а для расчетов — регистры расчета.
🔹 Как очистить регистр расчета, если в него попали неверные данные?
Для очистки регистра используйте метод Очистить():
РегистрыРасчета.ИмяРегистра.Очистить(НачалоПериода, КонецПериода);
⚠️ Внимание: Очистка удаляет все движения за указанный период. Если нужно удалить только часть данных, используйте отбор:
Выборка = РегистрыРасчета.ИмяРегистра.Выбрать(НачалоПериода, КонецПериода);
Пока Выборка.Следующий() Цикл
Если Выборка.Сотрудник = НеверныйСотрудник Тогда
Выборка.Удалить();
КонецЕсли;
КонецЦикла;
🔹 Почему в отчете не показываются данные из регистра расчета?
Возможные причины:
- 📅 Неверно указан период в запросе (проверьте даты)
- 🔍 Отсутствует отбор по измерениям (например, не указано подразделение)
- 🛠️ Данные не записаны в регистр (проверьте движения документов)
- 🔄 Регистр не обновлен после изменений (попробуйте сделать
Перерасчет())
Для диагностики используйте отчет Анализ регистра расчета (доступен в типовой конфигурации).
🔹 Можно ли в одном регистре расчета хранить данные по зарплате и налогам?
Технически можно, но это плохая практика. Разделяйте расчеты по разным регистрам:
- 💰
НачисленияЗарплаты— для окладов, премий, больничных - 📉
Удержания— для НДФЛ, алиментов, прочих удержаний - 🏥
СтраховыеВзносы— для взносов в ПФР, ФСС, ФОМС
Это упростит:
- 📊 Построение отчетности (например, 6-НДФЛ и РСВ)
- 🔍 Поиск ошибок
- 🔄 Перерасчеты при изменении законодательства
🔹 Как перенести данные из одного регистра расчета в другой?
Для переноса данных используйте следующий алгоритм:
- Создайте обработку с двумя выборками: из старого и нового регистра.
- Настройте соответствие полей (измерений и ресурсов).
- Используйте цикл для переноса данных:
ВыборкаСтарого = РегистрыРасчета.СтарыйРегистр.Выбрать();
Пока ВыборкаСтарого.Следующий() Цикл
Движение = Движения.НовыйРегистр.Добавить();
Движение.Период = ВыборкаСтарого.Период;
Движение.Сотрудник = ВыборкаСтарого.Сотрудник;
Движение.Сумма = ВыборкаСтарого.Сумма;
Движение.Записать();
КонецЦикла;
⚠️ Перед переносом обязательно сделайте резервную копию базы!