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