К статье
Практический материал

Разработка и Конфигурация · 14 мин

Для чего используется регистр сведений в 1С

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

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

Главное отличие регистра сведений от справочника — отсутствие иерархии, кодов и предопределённых элементов как обязательной структуры. Регистр сведений хранит «плоские» записи, каждая из которых уникальна в рамках набора измерений (и периода, если регистр периодический). Именно поэтому типовые конфигурации используют его для цен, курсов валют, штрихкодов, адресов контрагентов, настроек учёта и служебных соответствий.

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

Что такое регистр сведений и как он устроен

Структура регистра сведений состоит из трёх групп полей. Измерения — это разрезы хранения (например, «Номенклатура», «Валюта», «Организация»). Ресурсы — сами хранимые значения (цена, курс, процент). Реквизиты — дополнительные атрибуты записи, которые не входят в ключ уникальности, но помогают описать запись (комментарий, автор, признак актуальности).

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

Физически в базе данных регистр сведений — отдельная таблица. Платформа автоматически строит индексы по измерениям, поэтому выборки по ним работают быстро. Однако выборки по ресурсам и реквизитам без индексирования могут быть медленными на больших объёмах — это важно учитывать при проектировании.

Виды регистров сведений: периодичность и подчинение

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

По режиму записи регистры делятся на независимые и подчинённые регистратору. Независимый регистр заполняется вручную, обработкой или программно — записи существуют сами по себе. Регистр, подчинённый регистратору, изменяется только документом: каждая запись привязана к документу-регистратору, и при отмене проведения документа записи удаляются автоматически. Классический пример — «Цены номенклатуры» в типовых конфигурациях, где цены устанавливаются документом «Установка цен номенклатуры».

Сравнение вариантов

Независимый непериодический

Подходит для постоянных соответствий: штрихкоды, настройки, сопоставление объектов при обмене. Нет истории изменений.

Независимый периодический

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

Подчинённый регистратору

Подходит, когда изменение значения — хозяйственная операция с документом: установка цен, назначение скидок. Записи живут вместе с документом.

Типовые сценарии использования

Первый и самый распространённый сценарий — хранение цен и условий. Цена зависит от номенклатуры, типа цен, иногда от характеристики и единицы измерения. Хранить её в карточке товара нельзя: цен несколько, они меняются во времени. Регистр сведений решает задачу естественно: измерения — номенклатура и тип цен, ресурс — значение цены, период задаёт момент начала действия.

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

Третий сценарий — соответствия и сопоставления. При обмене с внешними системами нужно знать, какому элементу справочника 1С соответствует объект внешней базы. Регистр сведений с измерением «Внешний идентификатор» и ресурсом «Ссылка на объект» (или наоборот) — стандартное решение. Аналогично хранят штрихкоды, артикулы поставщиков, привязку физических лиц к пользователям.

Четвёртый сценарий — настройки и параметры учёта. Флаг «Использовать серии», адрес склада по умолчанию для подразделения, параметры обмена — всё это удобно хранить в регистрах сведений, когда значение зависит от одного-двух измерений и не требует отдельного справочника.

Прежде чем создавать новый регистр сведений, проверьте типовую конфигурацию: для цен, штрихкодов, курсов, адресов и настроек регистры почти наверняка уже существуют. Доработка существующего регистра (добавление реквизита) обычно безопаснее, чем создание параллельной структуры, которую придётся синхронизировать с типовой логикой.
ПЗ
Практическое замечание

Как выбрать структуру регистра

Начните с вопроса: «В разрезе чего хранится значение?» Ответ определяет измерения. Правило минимализма: чем меньше измерений, тем проще запросы и меньше вероятность дублей по лишнему разрезу. Если значение зависит только от товара — одно измерение. Добавляйте измерение только когда без него возникают коллизии: например, цена одного товара различается по типам цен — значит, «Тип цен» обязан быть измерением.

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

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

Маршрут решения

Как выбрать действие

Значение одно и не зависит ни от чего (константа по сути)Используйте константу, а не регистр сведений
Значение зависит от одного-двух измерений, история не нужнаСоздайте независимый непериодический регистр сведений
Нужна история значений и срезы на датуСоздайте периодический регистр сведений
Изменение значения оформляется документом с возможностью отменыСделайте регистр подчинённым регистратору
Данные имеют собственную карточку, иерархию и много атрибутовИспользуйте справочник, регистр сведений не подходит

Работа с регистром: запись и чтение данных

Интерактивно независимый регистр сведений редактируется через форму списка: пользователь открывает регистр из раздела настройки или через «Все функции» и добавляет записи вручную. Подчинённый регистратору регистр напрямую не редактируется — записи появляются при проведении документа-регистратора.

Программно запись выполняется через менеджер записи (для одной записи) или набор записей (для группы). Для чтения актуального значения периодического регистра используется виртуальная таблица «СрезПоследних», для истории — «СрезПервых» или обычная выборка по таблице регистра. Типичный запрос актуальных цен выглядит как соединение со срезом последних на заданную дату.

bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныСрез.Номенклатура КАК Номенклатура,
| ЦеныСрез.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныСрез";
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Результат = Запрос.Выполнить().Выгрузить();

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

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

Производительность и ограничения

Платформа автоматически индексирует измерения, поэтому отборы по измерениям работают быстро даже на миллионах записей. Проблемы начинаются, когда в запросах фильтруют по ресурсам или реквизитам: такие поля по умолчанию не индексируются. Для реквизитов, по которым регулярно ищут, включайте свойство «Индексировать» в конфигураторе — но не для всех подряд, каждый индекс замедляет запись.

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

Третий момент — регистрация изменений в планах обмена. Если регистр участвует в обмене данными, каждая запись порождает служебные данные об изменениях. Массовые перезаписи регистра «для профилактики» раздувают очереди обмена. Регистрируйте к обмену только реально изменённые записи.

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

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

Вторая ошибка — избыточные измерения. Разработчик добавляет в измерения всё, «что может пригодиться», и получает регистр, где записи дублируются по ненужным разрезам, а срез последних возвращает неожиданные строки. Каждое измерение должно быть обосновано бизнес-правилом уникальности.

Третья ошибка — игнорирование ведущих измерений. Если измерение с типом «СправочникСсылка» пометить как ведущее, запись регистра будет автоматически удаляться при удалении объекта-владельца. Это удобно для целостности, но опасно, если данные должны пережить удаление объекта. Выбирайте осознанно.

Типичные ошибки
01
Использование регистра сведений вместо справочника для сущностей с собственной карточкой — ломает ссылочную модель и отчёты
02
Лишние измерения — дубли записей и неочевидные результаты среза последних
03
Срез последних в цикле по строкам — критичное падение производительности отчёта
04
Периодический регистр там, где история не нужна — усложнение всех запросов без выгоды
05
Прямая правка записей типовых регистров без копии — риск потери данных обмена и истории цен

Как проверить, что регистр работает правильно

После создания или доработки регистра проверьте три вещи: уникальность, корректность срезов и поведение при удалении связанных объектов. Уникальность проверяется попыткой создать две записи с одинаковыми измерениями — платформа должна либо заменить запись, либо сообщить об ошибке, но не создать дубль.

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

Контрольные точки

Как проверить результат

Дубли по измерениям
Норма

Запрос с группировкой по измерениям не даёт количество больше 1

Тревожный признак

Есть комбинации измерений с несколькими записями на один период

Срез последних на дату
Норма

Возвращает значение, действовавшее именно на эту дату

Тревожный признак

Возвращает более позднее значение или пусто при наличии записей

Права доступа
Норма

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

Тревожный признак

Регистр доступен всем или недоступен тем, кому нужен

Поведение при удалении объекта
Норма

Записи удаляются вместе с владельцем только если измерение ведущее

Тревожный признак

Записи пропадают неожиданно или остаются «висячими» с битыми ссылками

Итог

Что важно запомнить

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

Частые вопросы о регистрах сведений

Чем регистр сведений отличается от регистра накопления?

Регистр сведений хранит текущие значения и их историю — он отвечает на вопрос «какое значение действует». Регистр накопления хранит движения (приходы и расходы) и отвечает на вопрос «сколько осталось». Цена товара — регистр сведений, складской остаток — регистр накопления. Смешивать их нельзя: остатки в регистре сведений придётся пересчитывать вручную, а цены в регистре накопления теряют смысл.

Можно ли изменить структуру регистра, когда в нём уже есть данные?

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

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

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

Почему запись в регистр сведений не сохраняется без ошибок?

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

Нужно ли включать регистр сведений в план обмена?

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

Можно ли пользователю без программирования добавить записи в регистр сведений?

Да, если у пользователя есть права и регистр независимый: он открывается как обычный список через интерфейс конфигурации или через «Все функции» — «Регистры сведений». Записи добавляются, редактируются и удаляются интерактивно. Для регистров, подчинённых регистратору, записи создаются только проведением соответствующего документа, прямое редактирование недоступно.