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

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

Для чего нужны реквизиты регистра в 1С

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

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

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

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

Чем реквизит отличается от измерения и ресурса

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

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

КритерийИзмерениеРесурсРеквизит
Участвует в итогахДа, как разрезДа, как значениеНет
Входит в ключ записиДаНетНет
Доступно в виртуальных таблицах остатковДаДаНет (только через соединение)
Типичное содержимоеНоменклатура, склад, организацияКоличество, суммаКомментарий, ответственный, признак

Типовые задачи, которые решают реквизиты

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

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

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

Данные нужны в группировках отчётаЭто измерение

Проверьте, требуется ли отбор или итоги по этому полю

Данные — число для суммированияЭто ресурс

Проверьте, участвует ли значение в расчёте остатков или оборотов

Данные только поясняют записьЭто реквизит

Проверьте, понадобится ли поле при детализации до движений

Когда реквизит — правильный выбор, а когда нет

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

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

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

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

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

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

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

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

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

Реквизиты в запросах и отчётах

Главное ограничение, о котором нужно помнить: виртуальные таблицы остатков и оборотов не содержат реквизитов. Чтобы получить значение реквизита, придётся обращаться к физической таблице движений регистра (таблица с именем вида «РегистрНакопления.ИмяРегистра») или соединять виртуальную таблицу с ней по регистратору. Это удорожает запрос и отменяет выигрыш от предрассчитанных итогов.

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

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

Влияние на производительность и объём базы

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

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

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

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

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

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

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

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

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

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

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

Движения тестового документа
Норма

Реквизит заполнен во всех строках движений

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

Часть строк с пустым значением

Проведение разных видов документов
Норма

Реквизит заполняется во всех сценариях

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

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

Запрос к таблице движений за период
Норма

Пустые значения только в старых записях

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

Пустые значения в новых движениях

Отчёт с детализацией до движений
Норма

Реквизит виден в расшифровке

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

Поле недоступно или пустое в отчёте

Итог

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

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

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

Можно ли потом превратить реквизит регистра в измерение?

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

Почему реквизита нет в отчёте по остаткам регистра накопления?

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

Индексируются ли реквизиты регистра?

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

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

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

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

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

Нужно ли заполнять реквизит в старых движениях после его добавления?

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