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

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

Регистры сведений в 1С: назначение, виды и практика работы

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

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

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

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

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

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

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

На уровне СУБД регистр сведений — физическая таблица, где набор измерений входит в уникальный индекс. Поэтому выборка по измерениям выполняется быстро, а поиск по ресурсам без индекса — медленно. Это важно учитывать при проектировании: то, по чему ищут, должно быть измерением; то, что получают, — ресурсом.

Виды регистров сведений и когда какой выбрать

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

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

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

Непериодический независимый

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

Периодический независимый

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

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

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

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

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

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

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

Чтение и запись данных программно

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

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

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

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

Типичные задачи и сценарии использования

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

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

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

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

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

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

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

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

Проверка результата и диагностика

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

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

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

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

Запись в регистре
Норма

Одна запись на уникальный набор измерений, ресурсы заполнены

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

Дубли не создаются, но старые значения затираются неожиданно — проверьте периодичность

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

Возвращает актуальное значение на указанную дату

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

Пустой результат — проверьте дату среза и отбор по измерениям

Права доступа
Норма

Роль видит и редактирует регистр в режиме предприятия

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

Регистр не виден в интерфейсе или ошибка доступа при записи

Итог

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

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

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

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

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

Можно ли хранить в регистре сведений остатки товаров?

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

Что делает виртуальная таблица «Срез последних»?

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

Почему запись в регистр не сохраняется без ошибок?

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

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

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

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

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