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

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

Регистр сведений в 1С: что делает и как с ним работать

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

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

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

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

Какие задачи решает регистр сведений

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

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

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

Режимы: подчинение регистратору и периодичность

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

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

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

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

Штрихкоды, настройки, соответствия объектов. Одно значение на ключ, истории нет.

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

Курсы валют, адреса с историей. Значения вводятся вручную или загрузкой, срез на дату доступен.

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

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

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

Редкий случай: документ фиксирует факт без истории, например присвоение статуса.

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

Структура: измерения, ресурсы, реквизиты

Измерения образуют ключ записи. Чем больше измерений, тем шире разрез хранения, но тем тяжелее таблица и сложнее запросы. Правило: в измерения выносите только то, по чему реально ищете и отличаете записи. Например, для цен достаточно измерений «Номенклатура» и «ТипЦен» (или «ВидЦены»); добавлять сюда «Комментарий» нельзя — это не координата.

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

  • Измерение «Номенклатура» — ссылка на справочник товаров.
  • Измерение «ВидЦены» — ссылка на справочник видов цен.
  • Ресурс «Цена» — число с нужной точностью.
  • Реквизит «ДокументУстановки» — для независимого регистра, где нужно помнить источник.

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

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

Порядок действий
  1. 1
    В конфигураторе откройте ветку «Регистры сведений» и добавьте новый объект, задайте имя, например «ЦеныНоменклатуры».
  2. 2
    Выберите периодичность: «В пределах регистратора» для цен, устанавливаемых документом, или «Непериодический» для простых соответствий.
  3. 3
    Установите режим записи: «Подчинение регистратору», если записи создают документы, иначе «Независимый».
  4. 4
    Добавьте измерения (Номенклатура, ВидЦены), ресурсы (Цена) и при необходимости реквизиты.
  5. 5
    Если регистр подчинён регистратору, откройте документ-регистратор и на вкладке «Движения» отметьте этот регистр.
  6. 6
    Обновите конфигурацию базы данных (F7) и проверьте, что регистр доступен в пользовательском режиме.

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

Как записывать и читать данные

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

bsl
Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
Запись.Период = ТекущаяДатаСеанса();
Запись.Валюта = ВалютаUSD;
Запись.Курс = 90.5;
Запись.Записать();

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

Запрос среза последних выглядит так:

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

Производительность и типичные ошибки

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

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

Типичные ошибки
01
Хранить цену в справочнике номенклатуры — теряется история, документы задним числом считаются по текущей цене.
02
Делать регистр независимым, хотя записи создаются документом — при распроведении документа записи остаются и дают мусор в отчётах.
03
Выносить в измерения данные с высокой вариативностью (комментарии, даты-время) — ключ перестаёт быть осмысленным, плодятся дубли.
04
Читать срез последних в цикле по каждому товару — сотни запросов вместо одного пакетного.
05
Не проверить права на регистр — пользователи видят пустые значения без ошибок.

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

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

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

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

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

Строка с нужными измерениями и значением ресурса присутствует

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

Записи нет — проверьте отметку регистра в движениях документа и модуль проведения

Распроведение документа
Норма

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

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

Записи остаются — регистр независимый или документ не является регистратором

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

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

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

Возвращается текущее значение — регистр непериодический или дата передана неверно

Права пользователя
Норма

Отчёт показывает данные под рабочей ролью

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

Пусто без ошибок — нет права чтения на регистр

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

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

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

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

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

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

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

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

Используйте виртуальную таблицу СрезПоследних с параметром даты, равной дате документа (для регистра, подчинённого регистратору, лучше передавать момент времени документа). Это вернёт цену, действовавшую именно на тот момент, а не текущую.

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

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

Что произойдёт с данными при изменении структуры регистра?

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

Итог

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

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