Разработка и Конфигурация · 11 мин
Ведущее измерение регистра 1С: назначение и практика применения
Что такое ведущее измерение регистра сведений в 1С, чем оно отличается от обычного, как влияет на удаление записей и как правильно его использовать.
Ведущее измерение — это специальное свойство измерения регистра сведений в 1С, которое связывает запись регистра с объектом базы данных (документом или элементом справочника). Когда измерение помечено как ведущее, запись регистра становится логически подчинённой объекту, на который ссылается это измерение: при удалении объекта запись удаляется автоматически вместе с ним.
Механизм решает практическую задачу целостности данных. Без ведущего измерения записи регистра сведений существуют сами по себе: документ удалили, а записи, хранящие его дополнительные характеристики, остались «сиротами» и продолжают занимать место и попадать в отчёты. Ведущее измерение превращает регистр в расширение объекта: данные живут ровно столько, сколько живёт сам объект.
Свойство «Ведущее» устанавливается в конфигураторе на уровне конкретного измерения регистра сведений и доступно только для измерений ссылочного типа. Изменение этого свойства в работающей базе требует понимания последствий: включение флага не удалит уже существующие «висячие» записи, а снятие флага разорвёт связь, на которую мог опираться прикладной код.
Что именно делает измерение ведущим
У каждого измерения регистра сведений в палитре свойств есть флаг «Ведущее». Он доступен, только если тип измерения — ссылка на объект базы данных: справочник, документ, план видов характеристик и т.п. Для примитивных типов (число, строка, дата) флаг недоступен, потому что примитивное значение нельзя удалить из базы как объект.
Смысл флага — декларативное объявление зависимости. Платформа «узнаёт», что запись регистра принадлежит конкретному объекту, и берёт на себя два действия: каскадное удаление записей при удалении объекта и особую обработку при работе со ссылками. Разработчику не нужно писать обработчики удаления — всё делает платформа на уровне ядра.
Важно отличать ведущее измерение от признака «Основной отбор». Основной отбор влияет на удобство работы в интерфейсе и построение индексов, ведущее измерение — на жизненный цикл данных. Это независимые свойства, хотя на практике ведущее измерение почти всегда делают и основным отбором.
Как работает каскадное удаление
Главный эффект ведущего измерения — автоматическое удаление записей. Когда пользователь или код удаляет объект, на который ссылается ведущее измерение, платформа находит все записи регистра с этой ссылкой и удаляет их в той же транзакции. Если удаление объекта откатывается, записи регистра тоже остаются нетронутыми.
Это работает и при непосредственном удалении, и при удалении через пометку с последующей обработкой «Удаление помеченных объектов». Механизм срабатывает независимо от того, как именно удалён объект: интерактивно, программно методом Удалить() или через типовую обработку.
Обратная ситуация тоже имеет нюанс: включение флага «Ведущее» на существующем регистре не приводит к немедленной чистке. Записи, ссылающиеся на уже удалённые объекты (битые ссылки), останутся в таблице — их нужно удалять отдельной обработкой.
Чем ведущее измерение отличается от регистра, подчинённого регистратору
В 1С есть два способа привязать записи регистра сведений к объекту: сделать регистр подчинённым регистратору (режим «Подчинение регистратору») или оставить его независимым, но добавить ведущее измерение. Это принципиально разные архитектуры.
Два способа привязки записей
Записи пишутся документом при проведении, ключ записи — регистратор и номер строки. Подходит, когда данные рождаются движениями документа. Нельзя писать записи без документа.
Записи можно создавать вручную, из обработок и обменов, ключ — комбинация измерений. Подходит для дополнительных свойств объекта, которые меняются независимо от проведения документов.
Выбор зависит от природы данных. Если значение — это следствие проведения документа (цены из документа установки цен, статусы из документа изменения), логичен регистр, подчинённый регистратору. Если значение — атрибут объекта, который менеджер правит вручную в любой момент (менеджер по умолчанию, особые условия доставки), правильнее независимый регистр с ведущим измерением.
Практические сценарии применения
Хранение дополнительных свойств объекта
Типичный сценарий: нужно хранить для контрагента набор произвольных параметров, не загромождая справочник десятками реквизитов. Создаётся независимый регистр сведений, где измерение — ссылка на контрагента с флагом «Ведущее», а ресурсы — сами параметры. При удалении контрагента все его параметры исчезают автоматически.
Привязка данных к документу без подчинения регистратору
Иногда к документу нужно прикрепить данные, которые создаются не при проведении, а позже — например, результат внешней проверки или ответ из интеграционного сервиса. Подчинять регистр регистратору нельзя, потому что документ не должен перепроводиться. Ведущее измерение типа «ДокументСсылка» решает задачу: запись создаётся когда угодно, но удаляется вместе с документом.
Несколько ведущих измерений
У регистра может быть несколько ведущих измерений одновременно. Тогда запись удаляется при удалении любого из объектов-владельцев. Это удобно для регистров связей «многие-ко-многим»: например, связь сотрудника и подразделения, где удаление любой из сторон должно убирать связь.
Как настроить ведущее измерение в конфигураторе
- 1Откройте в конфигураторе нужный регистр сведений и перейдите на закладку «Данные».
- 2Добавьте измерение и задайте ему ссылочный тип — например, СправочникСсылка.Контрагенты.
- 3В палитре свойств измерения установите флаг «Ведущее».
- 4При необходимости включите также «Основной отбор» для удобной фильтрации в формах.
- 5Обновите конфигурацию базы данных и проверьте поведение на тестовом объекте: создайте запись, удалите объект, убедитесь, что запись исчезла.
После обновления конфигурации проверьте существующие данные. Если регистр уже содержал записи со ссылками на удалённые объекты, они отобразятся с битыми ссылками и не удалятся сами. Для очистки используют простой запрос по условию «Ссылка ЕСТЬ NULL» после соединения с таблицей владельца или обработку поиска и удаления таких записей.
Запрос = Новый Запрос("ВЫБРАТЬ Рег.Контрагент ИЗ РегистрСведений.ПараметрыКонтрагентов КАК Рег ГДЕ Рег.Контрагент.Ссылка ЕСТЬ NULL");Проверка результата и типичные ошибки
Как проверить корректность работы
Запись регистра появляется при создании и исчезает при удалении объекта
Запись остаётся после удаления объекта — флаг «Ведущее» не установлен или не обновлена конфигурация БД
В отчёте нет строк с битыми ссылками вида «<Объект не найден>»
Есть битые ссылки — требуется чистка устаревших записей
При отмене удаления объекта записи регистра сохраняются
Записи пропали при отменённом удалении — признак самописного, а не платформенного удаления
Ещё одна частая ошибка — попытка использовать ведущее измерение как замену контролю ссылочной целостности при обменах. Если запись регистра приехала по обмену раньше объекта-владельца, она сохранится с битой ссылкой, и механизм ведущего измерения её не удалит. Такие ситуации обрабатывают настройкой порядка выгрузки или отложенной регистрацией.
Как выбрать архитектуру
Ограничения и границы применения
Ведущее измерение существует только у регистров сведений. У регистров накопления, расчёта и бухгалтерии привязка к жизненному циклу решается через подчинение регистратору — флага «Ведущее» у их измерений нет. Поэтому переносить этот механизм на другие типы регистров нельзя.
Второе ограничение — производительность при массовом удалении. При удалении объекта платформа ищет записи по ведущему измерению, поэтому оно должно быть проиндексировано (обычно это обеспечивается автоматически, особенно если включён основной отбор). На очень больших таблицах удаление объекта с тысячами связанных записей занимает заметное время — это нормально, но стоит учитывать при пакетных операциях.
Наконец, ведущее измерение не заменяет бизнес-логику. Если при удалении объекта нужно не просто удалить записи, а выполнить дополнительные действия (писать в журнал, уведомлять интеграцию), потребуется подписка на событие «ПриУдалении» объекта — платформенный механизм работает молча.
Что важно запомнить
Ведущее измерение регистра сведений связывает запись с объектом-владельцем и обеспечивает автоматическое каскадное удаление записей вместе с объектом. Оно применяется только к измерениям ссылочного типа, не очищает старые битые ссылки и не заменяет подчинение регистратору для движений документов.
Частые вопросы
Можно ли сделать ведущим измерение типа «Строка» или «Число»?
Нет. Флаг «Ведущее» доступен только для ссылочных типов, потому что механизм основан на отслеживании удаления объекта базы данных. Примитивное значение не является объектом и не может быть удалено отдельно.
Удалятся ли записи регистра, если объект помечен на удаление, но физически не удалён?
Нет. Каскадное удаление срабатывает только при фактическом удалении объекта — непосредственном или через обработку удаления помеченных. Пока объект просто помечен, записи регистра остаются доступными.
Что произойдёт с записями при включении флага «Ведущее» в уже работающей базе?
Существующие записи не изменятся и не удалятся. Механизм начнёт действовать только на будущие удаления объектов. Записи с битыми ссылками, накопленные ранее, нужно чистить отдельной обработкой.
Может ли у регистра быть несколько ведущих измерений?
Да. В этом случае запись удаляется при удалении объекта по любому из ведущих измерений. Это удобно для регистров связей между двумя объектами, где связь не должна переживать ни одну из сторон.
Чем ведущее измерение отличается от свойства «Основной отбор»?
«Основной отбор» влияет на построение индексов и удобство фильтрации в формах списка, а «Ведущее» — на жизненный цикл записей при удалении объекта. Свойства независимы, но на практике их обычно включают вместе для одного и того же измерения.
Работает ли каскадное удаление при обмене данными?
Да, если в узел обмена пришло сообщение об удалении объекта и оно выполнилось, связанные записи регистра удалятся автоматически. Но если запись регистра пришла раньше самого объекта, она сохранится с битой ссылкой — порядок объектов в обмене нужно контролировать отдельно.