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

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

Регистр сведений в 1С: как он устроен и как с ним работать

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

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

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

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

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

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

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

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

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

Какие виды регистров сведений бывают

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

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

Когда выбирать подчинение регистратору

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

ВариантКлюч записиКак заполняетсяТипичный пример
Независимый непериодическийИзмеренияВручную, кодом, обменомШтрихкоды товаров
Независимый периодическийПериод + измеренияВручную, кодомКурсы валют
Подчинённый регистраторуРегистратор + измеренияДвижения документаЦены номенклатуры

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

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

Подходит для данных из внешних источников и ручного редактирования; нет автоматической очистки при отмене документов.

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

Гарантирует согласованность с документами и автоматическую очистку, но записи нельзя править вручную.

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

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

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

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

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

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

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

Как записывать данные в регистр

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

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

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

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

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

Виртуальной таблице среза можно передать параметры: дату среза и условие отбора по измерениям. Отбор внутри параметров виртуальной таблицы работает быстрее, чем фильтрация в предложении ГДЕ после соединения, поэтому условия по измерениям всегда передавайте в параметры.

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

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

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

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

Второе ограничение — объём. Регистр с миллионами строк и частой перезаписью наборов требует аккуратной работы с отборами: набор записей всегда читает и перезаписывает порцию целиком по установленному отбору. Запись набора без отбора по всем измерениям в большом регистре может заблокировать таблицу надолго.

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

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

Запись новой строки
Норма

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

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

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

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

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

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

Несколько строк на один ключ или пустой результат при наличии данных

Скорость выборки
Норма

Запрос по измерениям выполняется быстро на рабочем объёме

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

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

Типичные ошибки при работе с регистрами сведений

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

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

Типичные ошибки
01
Непериодический регистр там, где нужна история — придётся пересоздавать объект и мигрировать данные.
02
Отбор в ГДЕ вместо параметров виртуальной таблицы среза — резкое падение скорости запроса.
03
Запись набора без отбора по измерениям — перезапись лишних строк и блокировки таблицы.
04
Ручная правка записей подчинённого регистратора — рассинхронизация с документами.
05
Составные типы измерений без необходимости — раздувание индексов и медленные соединения.
Маршрут решения

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

Нужна история изменения значения во времениСоздавайте периодический регистр с подходящей точностью периода
Данные строго следуют за документом и должны отменяться вместе с нимИспользуйте режим подчинения регистратору и проведение документа
Данные загружаются из внешних систем или правятся вручнуюВыбирайте независимый режим записи
Часто ищете записи по значению поляСделайте это поле измерением или включите его индексирование

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

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

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

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

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

Как удалить все записи регистра сведений?

Программно — создать набор записей без отбора и записать его пустым: НаборЗаписей.Записать(). Для подчинённого регистратора записи удаляются отменой проведения документов. Перед массовым удалением в рабочей базе обязательно сделайте резервную копию.

Почему срез последних возвращает пустой результат?

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

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

Штатно — нет, и делать этого не следует. Записи такого регистра принадлежат документам: при перепроведении или отмене проведения они будут перезаписаны. Если нужно исправить данные, правьте сам документ и перепроводите его.

Что быстрее: менеджер записи или набор записей?

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

Итог

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

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