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

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

Регистр сведений в 1С: назначение, виды и практика работы

Что такое регистр сведений в 1С: назначение, отличия от справочников, периодические и непериодические регистры, режимы подчинения и практика создания.

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

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

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

Из чего состоит регистр сведений

Структура регистра определяется тремя группами полей. Измерения — это разрезы хранения, которые вместе образуют уникальный ключ записи. Например, в регистре цен измерениями будут «Номенклатура» и «ТипЦен»: двух записей с одинаковой парой значений быть не может. Ресурсы — хранимые данные: цена, курс, процент скидки. Реквизиты — дополнительная информация, которая не входит в ключ и не участвует в уникальности, например комментарий или автор записи.

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

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

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

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

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

Независимые регистры и подчинённые регистратору

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

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

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

Независимый регистр

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

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

Подходит, когда изменение данных должно фиксироваться документом: цены, кадровые сведения. Гарантирует контроль, но требует документа для каждого изменения.

Периодический

Выбирается, когда нужна история значений во времени. Требует аккуратной работы со срезами последних в запросах.

Непериодический

Выбирается, когда важно только текущее значение. Проще в использовании и быстрее в выборках.

Как создать регистр сведений в конфигураторе

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

Порядок действий
  1. 1
    Откройте конфигуратор и в дереве конфигурации выберите «Регистры сведений» → «Добавить».
  2. 2
    Укажите имя и синоним, например «ЦеныПоставщиков».
  3. 3
    Выберите режим: независимый или подчинён регистратору; при необходимости задайте периодичность.
  4. 4
    Добавьте измерения (например, «Номенклатура», «Поставщик») — они образуют ключ записи.
  5. 5
    Добавьте ресурсы (например, «Цена») и при необходимости реквизиты.
  6. 6
    При режиме «подчинён регистратору» отметьте документ-регистратор и настройте проведение по регистру.
  7. 7
    Настройте права доступа для ролей и обновите конфигурацию базы данных.
  8. 8
    Проверьте: откройте регистр в режиме предприятия, создайте запись и убедитесь, что данные сохраняются и доступны в отчётах.

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

Чтение и запись данных программно

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

bsl
Менеджер = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Менеджер.Период = ТекущаяДатаСеанса();
Менеджер.Валюта = ВалютаСсылка;
Менеджер.Курс = 90.5;
Менеджер.Записать();

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

Когда регистр сведений лучше справочника и наоборот

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

Альтернатива регистру — дополнительные реквизиты и сведения (механизм БСП), которые позволяют добавлять свойства к объектам без изменения конфигурации. Они удобны для пользовательских расширений, но уступают регистрам в производительности массовых выборок и гибкости запросов.

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

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

Данные описывают самостоятельный объект, на который нужны ссылкиИспользуйте справочник
Данные — характеристика других объектов в разрезе ключаИспользуйте регистр сведений
Нужна история изменений значения во времениСделайте регистр периодическим
Каждое изменение должно оформляться документомПодчините регистр регистратору
Свойство нужно добавить без доработки конфигурацииРассмотрите дополнительные реквизиты и сведения

Типичные ошибки и ограничения

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

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

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

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

Сохранение записи
Норма

Запись создаётся, повторная запись с тем же ключом выдаёт понятную ошибку

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

Дубли ключей сохраняются молча или ошибка возникает на корректных данных

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

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

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

Возвращаются устаревшие или несколько записей

Движения документа
Норма

Проведение создаёт записи, отмена проведения их удаляет

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

Записи остаются после отмены проведения или не создаются

Итог

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

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

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

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

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

Можно ли изменить периодичность существующего регистра?

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

Как получить актуальную цену товара на дату в запросе?

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

Почему регистр не отображается у пользователя в режиме предприятия?

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

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

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

Что выбрать для хранения настроек пользователей?

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