Разработка и Конфигурация · 13 мин
Регистр сведений 1С: как использовать на практике
Что такое регистр сведений в 1С, чем он отличается от справочника, как создать, настроить измерения и ресурсы, записывать и читать данные запросом и кодом.
Регистр сведений в 1С — это объект метаданных для хранения информации в разрезе заданных измерений: курсов валют, цен номенклатуры, штрихкодов, настроек пользователей, адресов контрагентов. В отличие от справочника, регистр сведений не порождает ссылочных объектов и не требует уникального кода — запись идентифицируется набором значений измерений (и периодом, если регистр периодический).
Типичная ошибка начинающих разработчиков — хранить переменные данные в справочниках или добавлять реквизиты в документы там, где правильнее использовать регистр сведений. Например, цена товара меняется во времени и не принадлежит конкретному документу «Установка цен» — её место именно в периодическом регистре сведений. Понимание этого разграничения упрощает архитектуру конфигурации и ускоряет отчёты.
Материал ориентирован на тех, кто работает в конфигураторе 1С:Предприятие 8.3 и использует встроенный язык. Все примеры проверяются на учебной или копии рабочей базы — не экспериментируйте с записью и удалением данных в продуктивной информационной базе без резервной копии.
Что такое регистр сведений и когда он нужен
Регистр сведений устроен как таблица: измерения образуют ключ записи, ресурсы — хранимые значения, реквизиты — дополнительные атрибуты, не участвующие в отборе. Записей с одинаковой комбинацией измерений (и периода) в регистре быть не может — платформа контролирует уникальность автоматически.
Классические сценарии использования: курсы валют на дату, цены номенклатуры по видам цен, штрихкоды товаров, сведения о сотрудниках по состоянию на дату, настройки обмена данными, история изменения статусов. Общий признак — данные логически привязаны к комбинации объектов и, возможно, к моменту времени, но не являются самостоятельными сущностями со ссылками.
Выбирайте регистр сведений вместо справочника, когда не нужны ссылки на объект, иерархия, код и наименование. Выбирайте его вместо документа, когда данные не являются фактом хозяйственной операции и не требуют проведения. Если же нужно накапливать количественные итоги (остатки, обороты) — это задача регистров накопления, а не сведений.
Виды регистров сведений и режимы подчинения
По временной составляющей регистры делятся на непериодические и периодические. Периодический регистр хранит значение ресурса на каждую дату, что позволяет получать срез первых или последних значений. Периодичность задаётся в свойствах: в пределах секунды, дня, месяца, квартала или года — от этого зависит точность хранения и поведение виртуальных таблиц срезов.
По режиму записи различают независимые регистры и подчинённые регистратору. Независимый регистр заполняется вручную пользователем или программно в любой момент. Подчинённый регистр записывается только движениями документа-регистратора: каждая запись привязана к документу и удаляется при отмене его проведения.
Сравнение вариантов
Штрихкоды, соответствия объектов при обмене, настройки. Нет истории изменений — старое значение затирается новым.
Курсы валют, история параметров. Доступны срезы последних и первых. Запись возможна вручную и кодом.
Цены, устанавливаемые документом; статусы, меняемые операциями. Полная аудируемость: видно, каким документом внесено значение. Ручное редактирование невозможно.
Правило выбора простое: если значение должно появляться как результат документированного события и откатываться при отмене проведения — используйте подчинение регистратору. Если данные справочного характера, вводятся вручную или загружаются извне — независимый режим удобнее и не требует документов.
Создание регистра сведений в конфигураторе
Откройте конфигуратор, в дереве конфигурации найдите ветку «Регистры сведений» и добавьте новый объект. На закладке «Основные» задайте имя (латиницей, без пробелов, например ЦеныНоменклатуры) и синоним для интерфейса пользователя. Здесь же выберите периодичность и режим записи.
- 1Создайте объект в ветке «Регистры сведений», задайте имя и синоним
- 2Выберите периодичность и режим записи (независимый или подчинён регистратору)
- 3На закладке «Данные» добавьте измерения с типами (например, Номенклатура — СправочникСсылка.Номенклатура)
- 4Добавьте ресурсы (например, Цена — Число(15,2)) и при необходимости реквизиты
- 5На закладке «Права» проверьте доступность регистра для нужных ролей
- 6Обновите конфигурацию базы данных (F7) и проверьте появление регистра в режиме предприятия
На закладке «Данные» добавляйте измерения осознанно: каждое измерение входит в уникальный индекс, и слишком широкий ключ замедляет запись и увеличивает таблицу. Типичный набор для цен — измерения «Номенклатура» и «ВидЦен», ресурс «Цена». Для штрихкодов достаточно одного измерения «Штрихкод» строкового типа и ресурса «Владелец».
Обратите внимание на свойство «Ведущее» у измерения: если оно установлено, удаление объекта-владельца (например, элемента справочника) приведёт к автоматическому удалению записей регистра по этому измерению. Это удобно для поддержания целостности, но опасно, если записи должны сохраняться для истории.
Запись данных в регистр сведений
Для одиночной записи в независимый регистр используйте менеджер записи: создайте объект, заполните измерения и ресурсы, вызовите метод Записать(). Для периодического регистра дополнительно заполните свойство «Период».
// Запись одного значения в периодический регистр
МенеджерЗаписи = РегистрыСведений.ЦеныНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДатаСеанса();
МенеджерЗаписи.Номенклатура = НоменклатураСсылка;
МенеджерЗаписи.ВидЦен = ВидЦенСсылка;
МенеджерЗаписи.Цена = 1250;
МенеджерЗаписи.Записать();Для массовой записи эффективнее набор записей: создайте набор, при необходимости установите отбор по измерениям, добавьте строки и запишите одним вызовом. Важно понимать семантику: НаборЗаписей.Записать() по умолчанию замещает все записи, попадающие под установленный отбор. Если отбор не установлен вообще, вы затрёте весь регистр — это одна из самых разрушительных ошибок.
Для регистра, подчинённого регистратору, запись выполняется в модуле объекта документа в обработчике ОбработкаПроведения: заполните коллекцию Движения.ИмяРегистра, и платформа запишет движения при проведении. Ручное изменение таких записей пользователем заблокировано — это гарантия согласованности с документами.
Чтение данных: запросы, срезы, метод Получить
Основной способ чтения — запрос к таблице регистра. Для периодических регистров платформа предоставляет виртуальные таблицы СрезПоследних и СрезПервых, которые возвращают актуальные значения ресурсов на указанную дату с отбором по измерениям.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Номенклатура КАК Номенклатура,
| Цены.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК Цены";
Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());
Выборка = Запрос.Выполнить().Выбрать();Для точечного чтения одной записи по известному ключу удобен метод ПолучитьПоследнее (для периодического регистра) или чтение менеджером записи с заполненными измерениями. Метод ПолучитьПоследнее возвращает структуру со значениями ресурсов на указанную дату — это короче, чем полноценный запрос, и удобно внутри алгоритмов.
Избегайте обращений к регистру в цикле: если нужно получить цены для тысячи позиций, один запрос с виртуальной таблицей среза и соединением по списку номенклатуры выполнится на порядки быстрее тысячи вызовов ПолучитьПоследнее. Это критично в обработчиках проведения документов и при формировании отчётов.
Оптимизация и типичные проблемы производительности
Главные факторы скорости работы с регистром сведений — состав измерений и корректное использование индексов. Платформа автоматически строит индекс по измерениям, поэтому отборы по измерениям работают быстро, а отборы по ресурсам и реквизитам — медленно. Если по какому-то реквизиту часто ищут, рассмотрите перенос его в измерения или установку свойства «Индексировать».
Периодичность тоже влияет на объём: регистр с периодичностью «в пределах секунды» при частых записях растёт очень быстро. Для курсов валют, загружаемых раз в день, достаточно периодичности «в пределах дня». Избыточная точность не даёт пользы, но раздувает таблицу и замедляет срезы.
Как проверить результат
В режиме предприятия запись видна в списке регистра с правильными измерениями и ресурсами
Записи нет — проверьте, был ли вызван Записать() и не откатилась ли транзакция
Запрос к СрезПоследних на дату после записи возвращает строку
Пустой результат — проверьте параметр периода и отбор по измерениям
Повторная запись с тем же ключом заменяет значение, дублей в списке нет
В списке несколько строк с одинаковыми измерениями — вероятно, регистр периодический и периоды различаются
Для больших таблиц полезно периодически анализировать фактическое использование: какие отборы реально выполняются в запросах, нет ли неиспользуемых измерений. Лишние измерения — это не только место, но и более тяжёлый уникальный индекс при каждой записи.
Практические сценарии и ограничения
Сценарий «курсы валют»: периодический независимый регистр с измерением «Валюта» и ресурсами «Курс» и «Кратность». Загрузка из внешнего источника выполняется регламентным заданием, которое записывает набор записей с отбором по периоду. В документах курс получают через ПолучитьПоследнее на дату документа.
Сценарий «соответствие объектов при обмене»: непериодический регистр с измерениями «Узел» и «УникальныйИдентификаторИсточника» и ресурсом «Ссылка». Такой регистр позволяет при загрузке данных из другой базы находить уже существующие объекты и не создавать дубли. Это стандартный механизм, применяемый в типовых планах обмена.
Если вам нужно хранить историю изменений значения и при этом видеть, кто и когда его изменил, выбирайте регистр, подчинённый регистратору: документ-регистратор сам является журналом изменений с автором и датой. В независимом регистре автора изменения придётся хранить отдельным реквизитом и заполнять программно.
Ограничения, о которых стоит помнить: регистр сведений не имеет иерархии и групп, записи нельзя пометить на удаление как объект (только физически удалить), а права настраиваются на весь регистр, а не на отдельные записи (для разграничения используется RLS — ограничение доступа на уровне записей, что требует аккуратной настройки шаблонов).
Что важно запомнить
Регистр сведений хранит данные в разрезе измерений, периодический вариант — ещё и во времени. Записывайте набором записей с явным отбором, читайте запросами к срезам, а не в цикле. Подчиняйте регистратору, когда значение должно появляться документом. Перед изменением структуры делайте резервную копию.
Частые вопросы
Чем регистр сведений отличается от справочника?
Справочник создаёт ссылочные объекты с кодом, наименованием и возможной иерархией — на них можно ссылаться из документов. Регистр сведений хранит строки данных без ссылок: обратиться к записи можно только по значениям измерений. Если сущности нужны ссылки и самостоятельное существование — это справочник; если данные описывают связь объектов или значение в разрезе ключей — регистр сведений.
Как удалить все записи регистра сведений?
Создайте набор записей без отбора и вызовите Записать() — пустой набор заместит все существующие записи. Либо используйте метод РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей() и запись пустого набора. Операция необратима, поэтому выполняйте её только на копии или после выгрузки данных.
Почему СрезПоследних возвращает пустой результат?
Чаще всего параметр периода раньше даты первой записи — срез возвращает значения на указанный момент включительно, и до первой записи данных просто нет. Также проверьте условие отбора во втором параметре виртуальной таблицы: если отбор по измерениям не совпадает ни с одной записью, результат будет пустым.
Можно ли редактировать подчинённый регистратору регистр вручную?
Нет, платформа запрещает интерактивное и программное изменение таких записей вне движений документа. Изменить значение можно только перепроведением документа-регистратора или созданием корректирующего документа. Это осознанное ограничение, обеспечивающее аудируемость данных.
Как получить историю изменения значения ресурса?
Если регистр периодический, выполните запрос к основной таблице регистра с отбором по измерениям и упорядочиванием по периоду — вы получите все значения с датами. В непериодическом регистре история не хранится: старое значение при записи теряется, и восстановить его можно только из резервной копии или журнала регистрации (если включено логирование изменений данных).
Что лучше для цен: периодический регистр или документ с табличной частью?
Табличная часть документа не подходит для чтения цен «на дату» — пришлось бы искать последний документ вручную. Стандартное решение: документ «Установка цен» как регистратор и периодический регистр сведений, подчинённый ему. Документ фиксирует факт и авторство изменения, регистр даёт быстрый срез актуальных цен.