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

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

Споiler: если вы думаете, что регистр накопления — это просто "регистр сведений с итогами", то вас ждёт несколько неожиданных открытий. Давайте копать глубже!

1. Назначение: зачем нужны регистры сведений

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

  • 📌 Список курсов валют на определённую дату
  • 📌 Настройки пользователей (например, права доступа)
  • 📌 Реестр контрагентов с их реквизитами
  • 📌 Графики работы сотрудников

Главная особенность: данные здесь хранятся в виде "срезов" по измерениям (например, курс доллара на 10.05.2026). Вы можете получить значение на конкретную дату, но не можете автоматически посчитать, сколько раз курс менялся за месяц — для этого потребуется отдельный запрос.

Пример из практики: в конфигурации 1С:Зарплата и Управление Персоналом регистр сведений ГрафикиРаботыСотрудников хранит привязку сотрудников к графикам. Здесь важна не динамика изменений, а актуальное состояние на текущий момент.

⚠️ Внимание: Если вам нужно хранить историю изменений (например, все предыдущие курсы валют), обязательно настройте периодичность регистра сведений. Без этого данные будут перезаписываться, и вы потеряете историю.
📊 Какой тип регистров вы используете чаще?
Регистры сведений
Регистры накопления
Оба поровну
Не знаю, в чём разница

2. Назначение: когда применяются регистры накопления

Регистры накопления, в отличие от регистров сведений, предназначены для динамических данных, которые требуют автоматического подсчёта итогов. Это:

  • 💰 Остатки товаров на складах
  • 💰 Движения денежных средств по счетам
  • 💰 Начисления зарплаты по сотрудникам
  • 💰 Задолженности покупателей и поставщиков

Ключевое отличие: регистры накопления поддерживают ресурсы (например, количество, сумма) и автоматически рассчитывают остатки или обороты по измерениям (склад, номинал, контрагент). Например, в регистре ТоварыНаСкладах вы можете одним запросом узнать остаток конкретного товара на всех складах или оборот по приходу/расходу за период.

Пример: в 1С:Управление Торговлей регистр накопления ПартииТоваров отслеживает приход и расход товаров по партиям. Без него невозможно было бы автоматически рассчитывать себестоимость при списании по методу FIFO или средней.

💡

Если вам нужны и остатки, и обороты (например, для анализа продаж), используйте регистр накопления с видом ОстаткиИОбороты. Это сэкономит место и ускорит отчёты.

3. Структура: сравнение измерений, ресурсов и реквизитов

Давайте разберёмся, как устроены оба типа регистров изнутри. Для наглядности сравним их структуру в виде таблицы:

Параметр Регистр сведений Регистр накопления
Измерения Определяют "разрезы" данных (например, Валюта, Дата). Можно получить значение по комбинации измерений. Также определяют "разрезы", но дополнительно поддерживают иерархию (например, склад → подсклад).
Ресурсы Отсутствуют. Данные хранятся в реквизитах. Обязательны! Хранят количественные показатели (Количество, Сумма), по которым считаются итоги.
Реквизиты Дополнительные атрибуты (например, комментарий к курсу валюты). Тоже поддерживаются, но используются реже — основная нагрузка ложится на ресурсы.
Периодичность Может быть непериодическим или периодическим (с указанием даты). Всегда привязан к дате/времени (даже если это регистр остатков).
Итоги Не поддерживаются автоматически. Для анализа нужны запросы. Автоматически рассчитывают остатки/обороты. Можно настроить предопределённые итоги для ускорения.

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

Почему в регистрах накопления нельзя хранить текстовые ресурсы?

Текстовые ресурсы не поддерживаются, потому что для них невозможно рассчитать итоги (сумму, среднее, максимум). Исключение — дата, которая технически хранится как число, но отображается как дата.

4. Производительность: что работает быстрее

Это один из самых болезненных вопросов. Давайте разберёмся, какой регистр замедляет работу базы, а какой — ускоряет.

Регистры сведений обычно быстрее при:

  • 🔹 Чтении единичных записей (например, получение курса валюты на дату).
  • 🔹 Записи небольших объёмов данных.
  • 🔹 Отсутствии необходимости в итогах.

Регистры накопления могут тормозить, если:

  • 🔹 В них хранятся миллионы записей (например, все движения товаров за 5 лет).
  • 🔹 Часто пересчитываются итоги (особенно если не настроены предопределённые итоги).
  • 🔹 Используется вид Обороты без необходимости — это увеличивает объём хранимых данных.

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

⚠️ Внимание: В больших базах регистры накопления с оборотными регистраторами (например, Регистратор = Документ.РеализацияТоваров) могут приводить к блокировкам при одновременной записи. Если пользователи жалуются на "подвисания" при проведении документов, проверьте именно эти регистры.

Использовать предопределённые итоги для часто запрашиваемых разрезов|

Ограничить количество измерений (не более 5-7)|

Для больших объёмов данных настроить архивные периоды|

Проверять индексы на фрагментацию (особенно после массовых операций)|-->

5. Примеры из реальных конфигураций 1С

Теория — это хорошо, но давайте посмотрим, как регистры используются в типовых конфигурациях.

1С:Бухгалтерия 8:

  • 📊 Регистр сведений КурсыВалют — хранит курсы ЦБ и пользовательские курсы. Периодический, с измерениями Валюта и Дата.
  • 📊 Регистр накопления Хозрасчетный — учитывает обороты по счётам бухгалтерского учёта. Вид Обороты, ресурсы — Сумма, Количество.

1С:Управление Торговлей 11:

  • 📊 Регистр сведений ЦеныНоменклатуры — хранит прайс-листы с привязкой к типам цен (розница, опт). Непериодический.
  • 📊 Регистр накопления ТоварыНаСкладах — остатки и обороты товаров. Вид ОстаткиИОбороты, ресурс — Количество.

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

  • 📊 Регистр сведений ГрафикиРаботыСотрудников — привязка сотрудников к графикам.
  • 📊 Регистр накопления НачисленияЗарплаты — суммы начислений и удержаний по сотрудникам. Вид Обороты.

Обратите внимание: в 1С:ERP регистры накопления часто заменяют на регистры бухгалтерии (для интеграции с бухучётом), но принцип остаётся тот же — если нужны итоги, используется регистр с ресурсами.

💡

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

6. Типичные ошибки при выборе регистра

Даже опытные разработчики иногда ошибаются. Вот самые распространённые ляпы:

Ошибка 1: Использовать регистр накопления для статических данных

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

Как исправить: Перенесите данные в регистр сведений или справочник.

Ошибка 2: Хранить историю изменений в регистре сведений без периодичности

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

Как исправить: Добавьте измерение Дата и сделайте регистр периодическим.

Ошибка 3: Использовать регистр сведений для учёта остатков

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

Как исправить: Замените на регистр накопления с видом Остатки — это ускорит работу в сотни раз.

Ошибка 4: Слишком много измерений в регистре накопления

Пример: регистр с 10+ измерениями (склад, номенклатура, партия, серия, цвет, размер...) приводит к взрывному росту количества записей.

Как исправить: Объедините редко используемые измерения в одно (например, ХарактеристикаНоменклатуры).

⚠️ Внимание: Если вы обнаружили, что регистр накопления занимает более 50% объёма базы данных, это сигнал к рефакторингу. Возможно, часть данных стоит вынести в регистры сведений или архивировать.

7. Как выбрать между регистром сведений и накопления: чек-лист

Прежде чем создавать новый регистр, пройдитесь по этому списку:

Нужны ли автоматические итоги (остатки/обороты)? → Если да, то регистр накопления|

Требуется ли история изменений? → Если да, то регистр сведений с периодичностью|

Данные статичные или динамичные? → Статичные → регистр сведений; динамичные → накопления|

Будут ли данные часто обновляться? → Часто → накопления (если нужны итоги) или сведения (если нет)|

Нужна ли привязка к документам? → Если да, то регистр накопления с регистратором|-->

Дополнительные вопросы для сложных случаев:

  • 🔍 Будут ли данные использоваться в отчётах с группировкой? → Если да, регистр накопления упростит написание запросов.
  • 🔍 Нужно ли блокировать данные при записи? → Регистры накопления поддерживают блокировки на уровне записей.
  • 🔍 Планируется ли интеграция с бухгалтерским учётом? → Тогда лучше использовать регистр бухгалтерии или накопления.

Если после ответа на эти вопросы всё ещё есть сомнения, попробуйте смоделировать оба варианта на тестовой базе и замерьте производительность при типичных операциях.

8. Оптимизация и альтернативы

Иногда регистры — не лучшее решение. Рассмотрим альтернативы:

Вместо регистра сведений:

  • 📋 Справочники — если данные редко меняются и не требуют привязки к дате.
  • 📋 Константы — для глобальных настроек (например, ставка НДС).
  • 📋 Планы видов характеристик — для сложных иерархических данных.

Вместо регистра накопления:

  • 📈 Регистры бухгалтерии — если нужна двойная запись (дебет/кредит).
  • 📈 Регистры расчёта — для сложных алгоритмов начислений (например, зарплата).
  • 📈 Виртуальные таблицы — если итоги можно посчитать "на лету" без хранения.

Для больших баз данных (100+ Гб) рассмотрите:

  • 🗃️ Архивацию старых данных в отдельные регистры.
  • 🗃️ Шардинг — разделение регистров по периодам (например, отдельный регистр для каждого года).
  • 🗃️ Денормализацию — дублирование часто запрашиваемых данных в справочники.

Помните: регистр накопления с оборотными регистраторами может занимать в 10-100 раз больше места, чем регистр сведений с аналогичными данными. Всегда оценивайте объём данных перед выбором!

⚠️ Внимание: В последних версиях платформы 1С:Предприятие 8.3.20+ появилась поддержка непериодических регистров накопления. Это может быть полезно для учёта "вечных" остатков (например, основные средства), но используйте эту возможность с осторожностью — она ещё недостаточно протестирована в боевых условиях.

FAQ: Частые вопросы по регистрам 1С

Можно ли в регистре сведений хранить остатки товаров?

Технически можно, но это крайне неэффективно. Вам придётся вручную обновлять остатки при каждом движении товара, что приведёт к:

  • 🔸 Потере данных при ошибках (например, если документ не проведётся до конца).
  • 🔸 Замедлению работы из-за постоянных блокировок.
  • 🔸 Сложности в поддержке (придётся писать триггеры для всех операций).

Используйте для остатков только регистры накопления!

Как перенести данные из регистра сведений в регистр накопления?

Для переноса:

  1. Создайте новый регистр накопления с нужной структурой.
  2. Напишите обработку, которая:
    • 📌 Выгружает данные из регистра сведений (например, через запрос).
    • 📌 Преобразует их в движения регистра накопления.
    • 📌 Записывает движения с правильной датой и регистратором.
  3. Проверьте итоги после переноса — они должны совпадать с ручными расчётами.
  4. Пример кода для переноса курсов валют (если вдруг понадобилось):

    
    

    Процедура ПеренестиКурсыВалют()

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ

    | КурсыВалют.Валюта КАК Валюта,

    | КурсыВалют.Дата КАК Дата,

    | КурсыВалют.Курс КАК Курс

    |ИЗ

    | РегистрСведений.КурсыВалют КАК КурсыВалют";

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();

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

    Движение = Документы.УстановкаКурсовВалют.СоздатьДвижение();

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

    Движение.Валюта = Выборка.Валюта;

    Движение.Курс = Выборка.Курс;

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

    КонецЦикла;

    КонецПроцедуры

Почему регистр накопления тормозит базу?

Основные причины:

  • 🐢 Слишком много измерений с высокой кардинальностью (например, регистр по строкам документов).
  • 🐢 Нет предопределённых итогов, и они пересчитываются при каждом запросе.
  • 🐢 Регистр хранит данные за много лет без архивации.
  • 🐢 Частые массовые операции (например, перепроводка документов).

Решения:

  • 🔧 Настройте предопределённые итоги для часто используемых разрезов.
  • 🔧 Архивируйте старые данные (например, старше 3 лет).
  • 🔧 Разбейте регистр на несколько (например, отдельно для розницы и опта).
Можно ли сделать регистр накопления непериодическим?

В последних версиях платформы 1С:Предприятие 8.3.20+ это возможно, но:

  • ⚠️ Такой регистр не сможет хранить историю изменений.
  • ⚠️ Итоги будут рассчитываться только по актуальным данным.
  • ⚠️ Не все типовые конфигурации поддерживают этот функционал.
  • Пример использования: учёт основных средств, где важны только текущие остатки, а история движений не нужна.

Как очистить регистр накопления без потери данных?

Для безопасной очистки:

  1. Сделайте резервную копию базы!
  2. Используйте обработку УниверсальнаяОчисткаРегистров из 1С:ИТС.
  3. Или напишите свой код с проверками:

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ РАЗРЕШЕННЫЕ

| " + ИмяРегистра + ".Ссылка КАК Ссылка

|ИЗ

| РегистрНакопления." + ИмяРегистра + " КАК " + ИмяРегистра + "

|ГДЕ

| " + ИмяРегистра + ".Период МЕЖДУ &НачалоПериода И &КонецПериода";

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);

Запрос.УстановитьПараметр("КонецПериода", КонецПериода);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

Возврат Ложь;

КонецЕсли;

// Удаление движений

Движения = Результат.Выгрузить();

Для Каждого Движение Из Движения Цикл

Движение.Удалить();

КонецЦикла;

Возврат Истина;

КонецПроцедуры

После очистки обязательно пересчитайте итоги!