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

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

Регистры сведений в 1С: какие бывают и как выбрать нужный вид

Какие бывают регистры сведений в 1С: периодические и непериодические, подчинённые регистратору и независимые. Признаки выбора, примеры и типичные ошибки.

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

Классификация регистров сведений строится по двум независимым осям: периодичность (нужна ли привязка ко времени) и режим подчинения (записываются ли данные документом-регистратором или вручную). Эти два свойства задаются в конфигураторе при создании объекта и в дальнейшем определяют, как с регистром можно работать в коде и в пользовательском режиме.

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

Из чего состоит регистр сведений: измерения, ресурсы, реквизиты

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

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

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

Непериодические регистры: когда история не нужна

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

Такой регистр выбирают, когда прошлые значения не представляют интереса: при изменении старая запись просто перезаписывается. Это самый лёгкий по объёму и самый быстрый по чтению вариант, потому что платформе не нужно строить срез по дате.

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

Периодические регистры: хранение истории значений

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

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

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

В конфигураторе есть поле «Период»Регистр периодический

Смотрите свойство «Периодичность» — оно задаёт шаг истории

Есть закладка «Регистратор» в списке записейРегистр подчинён регистратору

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

Доступны виртуальные таблицы СрезПоследнихПериодический независимый регистр

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

В списке одна строка на комбинацию ключейНепериодический регистр

История не хранится, старые значения теряются

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

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

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

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

Сравнение режимов подчинения

Независимый

Подходит для справочных данных и настроек. Записи редактируются вручную, нет связи с документами, удаление не отслеживается.

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

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

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

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

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

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

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

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

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

Запись и чтение данных: практические приёмы

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

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

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

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

При массовой записи в независимый регистр не забывайте устанавливать отбор по измерениям у набора записей перед записью с замещением — иначе набор без отбора при записи с параметром «Замещение = Истина» очистит всю таблицу регистра.

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

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

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

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

Типичные ошибки
01
Чтение среза последних перебором всех записей в коде вместо виртуальной таблицы — резкое падение скорости на больших регистрах
02
Запись набора без отбора с замещением — полная очистка регистра
03
Ресурс вместо измерения для поля поиска — невозможность использовать СрезПоследних с отбором
04
Изменение периодичности заполненного регистра — ошибки реструктуризации и потеря данных
05
Хранение итогов и остатков в регистре сведений вместо регистра накопления

Как проверить, что регистр работает правильно

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

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

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

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

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

СрезПоследних на прошлую дату
Норма

Возвращает значение, действовавшее именно на ту дату

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

Возвращает самое свежее значение независимо от даты

Отмена проведения документа
Норма

Записи подчинённого регистра удаляются

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

Записи остаются в регистре

Ввод дублирующей записи
Норма

Платформа выдаёт ошибку уникальности

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

Запись перезаписывается или дублируется

Скорость отчёта по регистру
Норма

Запрос использует виртуальные таблицы с параметрами

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

Отчёт читает всю таблицу целиком

Часто задаваемые вопросы

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

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

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

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

Почему запрос к СрезПоследних работает медленно?

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

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

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

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

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

Сколько измерений можно добавить в регистр сведений?

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

Итог

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

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