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

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

Для чего предназначен регистр сведений в 1С

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

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

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

Регистры сведений используются во всех типовых конфигурациях: «Управление торговлей», «Бухгалтерия предприятия», «Зарплата и управление персоналом». Понимание их устройства необходимо и разработчику, и внедренцу, и продвинутому пользователю, который работает с ценами, курсами валют или адресами контрагентов.

Из чего состоит регистр сведений

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

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

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

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

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

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

Тип регистраКогда применятьПример из типовых
Независимый непериодическийАктуальные настройки, соответствия без историиСоответствия объектов при обмене
Независимый периодическийЗначения, меняющиеся во времени, история нужнаКурсы валют
Подчинённый регистраторуДанные, порождаемые документамиЦены номенклатуры (документ «Установка цен»)
Маршрут решения

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

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

Типовые сценарии применения

Хранение цен и курсов валют

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

Адреса и контактная информация

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

Соответствия объектов при обмене

При синхронизации между базами (например, «Управление торговлей» и «Бухгалтерия») нужно помнить, какому элементу справочника одной базы соответствует элемент другой. Для этого служат независимые регистры сведений с измерениями «Уникальный идентификатор источника» и «Ссылка приёмника».

Настройки и параметры учёта

Функциональные опции, учётные политики организаций, параметры обменов — всё это удобно хранить в регистрах сведений, где измерением выступает организация или пустой ключ (константоподобное хранение). В отличие от констант, регистр позволяет вести историю изменения настроек.

Цены товаровПериодический регистр

Нужна история и срез на дату документа

Курсы валютПериодический регистр

Пересчёт сумм по курсу на дату операции

Штрихкоды номенклатурыНезависимый непериодический

Ключ — штрихкод, история не нужна

Статусы документовРегистр, подчинённый регистратору

Записи живут вместе с документом

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

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

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

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

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

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

Порядок создания регистра
  1. 1
    Определите, какие данные хранятся и по каким разрезам нужен отбор — это будущие измерения
  2. 2
    Решите, нужна ли история значений: если да — включите периодичность
  3. 3
    Определите источник записей: ручной ввод — независимый режим, документы — подчинение регистратору
  4. 4
    Добавьте измерения, ресурсы и реквизиты в конфигураторе, настройте индексы
  5. 5
    Обновите конфигурацию базы данных и проверьте запись и чтение на тестовых данных

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

Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

Запись.Период = ТекущаяДатаСеанса();

Запись.Валюта = ВалютаСсылка;

Запись.Курс = 92.5;

Запись.Кратность = 1;

Запись.Записать();

Для чтения актуального значения из периодического регистра используйте метод ПолучитьПоследнее() или виртуальную таблицу «СрезПоследних» в запросе. В запросах срез последних предпочтительнее: он работает на уровне СУБД и не вызывает обращений в цикле.

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

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

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

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

Ещё одно ограничение: в непериодическом регистре нельзя хранить два значения с одинаковым ключом измерений. Если бизнес-логика требует нескольких значений (например, несколько телефонов одного вида у контрагента), добавьте измерение «НомерСтроки» или используйте периодический регистр.

Типичные ошибки
01
Использование регистра сведений вместо регистра накопления для остатков — итоги приходится считать вручную и они расходятся
02
Измерение с составным типом «любая ссылка» — индекс становится неэффективным, запросы тормозят
03
Чтение среза последних в цикле по каждому товару вместо одного запроса — катастрофическое падение производительности
04
Хранение истории в непериодическом регистре через реквизит «Дата» — срез на прошлую дату становится невозможен
05
Ручная правка записей, подчинённых регистратору, — рассинхронизация с документами и ошибки при перепроведении

Чем регистр сведений отличается от других объектов

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

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

Сравнение объектов хранения

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

Значения в разрезе измерений: цены, курсы, настройки. Нет итогов и остатков

Справочник

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

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

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

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

Как проверить корректность проектирования

Уникальность ключа
Норма

Комбинация измерений однозначно определяет запись

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

Нужны несколько строк с одинаковыми измерениями

Получение значения на дату
Норма

Срез последних возвращает правильное значение

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

Регистр непериодический, а история нужна

Жизненный цикл записей
Норма

Записи удаляются вместе с документом при отмене проведения

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

После отмены проведения остаются «сироты»

Скорость отчёта
Норма

Срез с отбором по измерениям выполняется быстро

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

Отбор накладывается после среза, запрос тормозит

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

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

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

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

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

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

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

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

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

Как программно удалить все записи независимого регистра?

Создайте набор записей без отбора (или с нужным отбором) и вызовите метод Записать() у пустого набора — это заменит существующие записи пустым набором. Альтернатива для полной очистки — метод Удалить через набор записей либо стандартная обработка очистки в режиме предприятия при наличии прав.

Нужен ли регистру сведений номер строки или уникальный идентификатор записи?

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

Итог

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

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