Разработка и Конфигурация · 12 мин
Для чего нужны реквизиты регистра в 1С
Для чего нужны реквизиты регистра в 1С: отличие от измерений и ресурсов, типовые задачи, настройка в конфигураторе, отборы в отчётах и типичные ошибки.
Реквизит регистра в 1С — это дополнительное поле записи регистра, которое хранит произвольную аналитическую или справочную информацию, не участвующую в расчёте итогов. Если измерения определяют разрезы учёта, а ресурсы — числовые или иные значения, которые суммируются и хранятся, то реквизиты отвечают на вопрос «что ещё важно знать об этой записи»: комментарий, ответственного, номер первичного документа, признак ручной корректировки и тому подобное.
Непонимание роли реквизитов — частая причина ошибок проектирования: разработчики добавляют лишние измерения, из-за чего раздуваются индексы и ломается свёртка итогов, либо, наоборот, пытаются хранить нужные для отборов данные в реквизитах и потом не могут построить по ним отчёт. Правильное разделение данных между измерениями, ресурсами и реквизитами напрямую влияет на скорость проведения документов, объём базы и удобство аналитики.
Материал рассчитан на разработчиков и внедренцев, которые дорабатывают типовые или самописные конфигурации: ниже разобраны отличия реквизитов от измерений и ресурсов, типовые сценарии их использования, порядок добавления в конфигураторе, влияние на запросы и отчёты, а также ограничения и типичные ошибки.
Чем реквизит отличается от измерения и ресурса
Каждая запись регистра состоит из трёх логических частей. Измерения задают координаты записи — например, «Номенклатура» и «Склад» в регистре остатков товаров. Именно по измерениям строятся итоги, рассчитываются остатки и обороты, они входят в ключ уникальности записи вместе с периодом и регистратором. Ресурсы — это учитываемые величины: количество, сумма, вес. Платформа хранит по ним агрегированные итоги в разрезе измерений.
Реквизиты стоят особняком: их значения просто сохраняются вместе с записью, но не участвуют ни в формировании итогов, ни в ключе уникальности. Два движения с одинаковыми измерениями, но разными реквизитами — это разные строки таблицы движений, однако в виртуальных таблицах остатков и оборотов реквизиты не видны без дополнительного соединения с таблицей движений.
| Критерий | Измерение | Ресурс | Реквизит |
|---|---|---|---|
| Участвует в итогах | Да, как разрез | Да, как значение | Нет |
| Входит в ключ записи | Да | Нет | Нет |
| Доступно в виртуальных таблицах остатков | Да | Да | Нет (только через соединение) |
| Типичное содержимое | Номенклатура, склад, организация | Количество, сумма | Комментарий, ответственный, признак |
Типовые задачи, которые решают реквизиты
Первая группа задач — хранение поясняющей информации о движении. Например, в регистре взаиморасчётов реквизит «Комментарий» фиксирует причину корректировки долга, а реквизит «Ответственный» — менеджера, оформившего операцию. Эти данные нужны при разборе конкретной записи, но бессмысленны как разрез отчёта: группировать взаиморасчёты по тексту комментария никто не будет.
Вторая группа — служебные ссылки и признаки. Часто в реквизит выносят ссылку на связанный документ (заказ, счёт-фактуру), ставку НДС для расшифровки, признак сторнирования или ручного ввода. Такие поля помогают при детализации отчёта до регистратора и при отладке: видно, откуда взялась запись и почему.
Третья группа — данные для обменов и интеграций. Реквизитом удобно сохранить внешний идентификатор записи, версию данных или отметку о выгрузке, чтобы механизм синхронизации мог сопоставить движения с внешней системой, не меняя структуру учёта.
Проверьте, требуется ли отбор или итоги по этому полю
Проверьте, участвует ли значение в расчёте остатков или оборотов
Проверьте, понадобится ли поле при детализации до движений
Когда реквизит — правильный выбор, а когда нет
Критерий выбора простой: если по полю планируются отборы, группировки или итоги в отчётах и запросах — это измерение. Если поле содержит величину, которую суммируют, — ресурс. Реквизит уместен только тогда, когда значение нужно хранить «рядом» с записью для просмотра, расшифровки или служебной логики, но аналитика по нему не требуется.
Типичная ловушка — поместить в реквизит поле, по которому позже потребовался отчёт. Например, «Проект» добавили реквизитом в регистр продаж, а через полгода понадобилась выручка по проектам. Придётся менять структуру регистра, переносить данные и перепроводить документы — на большой базе это длительная и рискованная операция. Поэтому при малейшем сомнении в будущей аналитике поле лучше сразу сделать измерением.
Как выбрать действие
Как добавить реквизит регистра в конфигураторе
Работа ведётся в конфигураторе на копии базы или в тестовой среде. Откройте дерево конфигурации, найдите нужный регистр (сведений, накопления, бухгалтерии или расчёта) и перейдите на ветку «Реквизиты». Через контекстное меню добавьте новый реквизит, задайте имя, синоним и тип данных — как для любого другого объекта метаданных.
После добавления реквизита заполнение значения выполняется в модуле объекта документа-регистратора при формировании движений: в процедуре «ОбработкаПроведения» при создании записи движения присвойте реквизиту нужное значение. Если реквизит добавлен в уже работающую базу, старые движения останутся с пустым значением — решите заранее, нужна ли обработка заполнения исторических данных.
- 1Создайте резервную копию базы или работайте на тестовой копии
- 2В конфигураторе откройте регистр и добавьте реквизит с нужным типом
- 3Дополните процедуру формирования движений присвоением значения реквизиту
- 4Обновите конфигурацию базы данных
- 5Проведите тестовый документ и проверьте значение реквизита в таблице движений
- 6При необходимости напишите обработку заполнения реквизита в старых движениях
Реквизиты в запросах и отчётах
Главное ограничение, о котором нужно помнить: виртуальные таблицы остатков и оборотов не содержат реквизитов. Чтобы получить значение реквизита, придётся обращаться к физической таблице движений регистра (таблица с именем вида «РегистрНакопления.ИмяРегистра») или соединять виртуальную таблицу с ней по регистратору. Это удорожает запрос и отменяет выигрыш от предрассчитанных итогов.
В отчётах на СКД реквизиты доступны, если источником данных служит таблица движений, а не виртуальная таблица. Типовой приём — построить отчёт по виртуальной таблице для итогов, а детализацию до движений с реквизитами показывать в расшифровке. Так сохраняется и скорость отчёта, и доступ к поясняющим данным.
Для регистров сведений картина мягче: если реквизит добавлен в независимый регистр, он доступен в основной таблице и в срезах последних/первых. Но и здесь отбор по реквизиту не использует индексы, поэтому на больших таблицах такие запросы выполняются медленно.
Влияние на производительность и объём базы
Каждый реквизит увеличивает размер строки таблицы движений. На регистрах с сотнями миллионов записей лишние широкие реквизиты (длинные строки, составные типы) ощутимо раздувают базу и замедляют запись движений. Составной тип данных — отдельный источник проблем: он увеличивает размер хранения и усложняет планы запросов.
Обратная сторона — избыточные измерения, добавленные «на всякий случай» вместо реквизитов. Каждое измерение входит в индексы и в таблицы итогов, что влияет на производительность сильнее, чем реквизит. Поэтому баланс такой: всё, что не нужно для аналитики, осознанно выносите в реквизиты, но и реквизитами не злоупотребляйте.
Типичные ошибки при работе с реквизитами
Самая дорогая ошибка — неверный выбор между измерением и реквизитом на этапе проектирования. Вторая по частоте — ожидание, что реквизит будет виден в отчёте по остаткам: разработчик строит запрос к виртуальной таблице, не находит поле и начинает городить соединения, хотя правильнее было пересмотреть структуру регистра.
Также встречаются: заполнение реквизита не во всех сценариях проведения (часть движений остаётся с пустым значением и портит расшифровки), использование реквизита для хранения данных, которые логичнее держать в самом документе, и забытая обработка исторических данных после добавления реквизита в действующую систему.
Как проверить результат после изменений
После добавления реквизита и доработки проведения проверьте результат на тестовом документе: откройте движения документа (в режиме предприятия — через «Ещё → Движения документа» либо отчётом по движениям) и убедитесь, что реквизит заполнен ожидаемым значением во всех строках. Затем проведите документы разных видов, которые пишут в этот регистр, — значение не должно теряться ни в одном сценарии.
Финальная проверка — запросом к таблице движений: выберите записи за период и убедитесь, что доля пустых значений реквизита соответствует ожиданиям (пустыми могут оставаться только старые движения, если обработка заполнения не выполнялась).
Как проверить результат
Реквизит заполнен во всех строках движений
Часть строк с пустым значением
Реквизит заполняется во всех сценариях
Значение появляется только у одного вида документов
Пустые значения только в старых записях
Пустые значения в новых движениях
Реквизит виден в расшифровке
Поле недоступно или пустое в отчёте
Что важно запомнить
Реквизит регистра хранит поясняющую информацию о записи и не участвует в итогах, ключах и виртуальных таблицах. Выбирайте между измерением, ресурсом и реквизитом по тому, как данные будут использоваться в отчётах, и проверяйте заполнение реквизита во всех сценариях проведения.
Частые вопросы
Можно ли потом превратить реквизит регистра в измерение?
Технически да: добавьте измерение, перенесите значения из реквизита обработкой, затем удалите реквизит. Но изменение состава измерений меняет ключи записей и итоги, поэтому операцию выполняют на копии, с перепроведением документов и проверкой отчётов. На больших базах это длительная процедура.
Почему реквизита нет в отчёте по остаткам регистра накопления?
Виртуальные таблицы остатков и оборотов содержат только измерения и ресурсы. Чтобы увидеть реквизит, постройте запрос к физической таблице движений регистра или соедините её с виртуальной таблицей по регистратору — либо покажите реквизит в расшифровке отчёта.
Индексируются ли реквизиты регистра?
Нет, платформа не создаёт индексов по реквизитам регистров. Отборы и соединения по ним на больших таблицах выполняются перебором. Если по полю регулярно нужны отборы, его следует сделать измерением.
Сколько реквизитов можно добавить в регистр?
Жёсткого практического лимита для прикладного разработчика нет, но каждый реквизит увеличивает размер строки таблицы движений. На регистрах с большим числом записей добавляйте только действительно нужные поля и избегайте длинных строк и составных типов без необходимости.
Чем реквизит регистра отличается от реквизита документа?
Реквизит документа хранится в самом документе и редактируется пользователем в форме. Реквизит регистра хранится в каждой строке движений и заполняется программно при проведении. Одно и то же значение (например, ответственный) может присутствовать и там, и там: в документе — для ввода, в регистре — для пояснения записи.
Нужно ли заполнять реквизит в старых движениях после его добавления?
Зависит от задачи. Если реквизит используется в расшифровках или обменах, незаполненные старые записи дадут неоднородные данные — тогда пишут сервисную обработку, которая обходит движения и проставляет значение. Если реквизит нужен только для новых операций, историю можно не трогать.