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

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

Регистр сведений в 1С: зачем он нужен и когда его применять

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

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

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

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

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

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

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

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

Зачем нужен регистр сведений: типовые задачи

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

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

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

Цены, курсы, ставкиЗначение в разрезе объекта

Нужна история изменений и получение значения на дату

Адреса, телефоныОписательные данные объекта

Много значений одного типа у одного объекта

Настройки, соответствияСвязь между объектами

Нужен быстрый поиск по ключу без ссылочного объекта

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

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

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

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

Справочник

Самостоятельные сущности, на которые ссылаются. Избыточен для простых пар «объект — значение».

Регистр сведений

Характеристики объектов, история значений, соответствия. Не считает итоги.

Регистр накопления

Остатки и обороты: склад, деньги, взаиморасчёты. Требует регистратора и проведения.

Периодичность и подчинение регистратору: как выбрать режим

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

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

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

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

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

Как работать с регистром сведений программно

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

bsl
// Актуальный курс валюты на дату
Отбор = Новый Структура("Валюта", ВалютаUSD);
Значения = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ТекущаяДатаСеанса(), Отбор);
Курс = Значения.Курс;

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

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

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

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

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

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

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

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

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

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

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

Ключевой запрос
Норма

Один запрос к СрезПоследних с отбором по измерениям

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

Цикл с ПолучитьПоследнее по каждому объекту

Структура регистра
Норма

Поля поиска — в измерениях

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

Отборы идут по реквизитам и ресурсам

Согласованность с документами
Норма

Записи подчинённого регистра появляются только проведением

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

Записи есть, а документов-регистраторов нет или наоборот

Когда регистр сведений не нужен

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

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

Итог

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

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

Частые вопросы

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

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

Можно ли изменить периодичность регистра после заполнения данными?

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

Как быстро получить актуальные цены для списка товаров?

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

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

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

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

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