Почему новый документ не отображается в структуре подчиненности и как это исправить?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

В практике разработчика 1С при работе с типовыми конфигурациями на обычных формах, такими как «Управление торговлей 10.3» или «Управление производственным предприятием 1.3», часто возникает ситуация: мы добавляем новый вид документа или используем нетиповое расширение конфигурации, создаем документ на основании существующего, но при просмотре структуры подчиненности (дерева связей) видим разрыв. Например, из дочернего документа (корректировки) родитель виден, а из родительского документа (поступления) дочерний — нет. Разберем подробно, почему так происходит и как восстановить ссылочную целостность визуального дерева связей.

Понятие механизма структуры подчиненности

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

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

Шаг 1: Настройка состава критерия отбора

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

  1. Откроем дерево метаданных в конфигураторе.
  2. Перейдем в ветку Общие — Критерии отбора — СвязанныеДокументы.
  3. Откроем вкладку «Состав».
  4. В списке всех документов конфигурации найдем наш документ (например, КорректировкаПоступления).
  5. Развернем его и установим флажок напротив того реквизита, который ссылается на родительский документ. Это может быть ДокументОснование, Сделка или ДокументПоступления.

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

Шаг 2: Проверка индексирования реквизита

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

  1. Найдем в конфигураторе реквизит документа, который мы добавили в критерий отбора на предыдущем шаге.
  2. В палитре свойств найдем параметр «Индексировать».
  3. Установим значение Индексировать или Индексировать с дополнительным упорядочиванием.

Без этого платформа может игнорировать записи при построении дерева в высоконагруженных системах или при определенных программных фильтрах.

Шаг 3: Программные ограничения в обработке вывода

Иногда даже после настройки метаданных документ не появляется в списке. Рассмотрим ситуацию, характерную для УПП 1.3 или доработанных УТ 10.3. В этих конфигурациях за вывод дерева отвечает общая форма или специальная обработка (например, СтруктураПодчиненности или ВыводСтруктурыПодчиненности).

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


// Пример возможного фильтра в модуле обработки
Если ТипЗнч(ТекСсылка) = Тип("ДокументСсылка.КорректировкаПоступления") И НЕ ВыводитьКорректировки Тогда
    Продолжить;
КонецЕсли;

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

Шаг 4: Тестирование и исправление ссылочной целостности

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

Рассмотрим процедуру восстановления:

  1. Создадим резервную копию базы данных (обязательно!).
  2. Зайдем в режим Администрирование — Тестирование и исправление....
  3. Выберем пункты:
    • Проверка ссылочной целостности.
    • Пересчет итогов (иногда помогает обновить индексы).
    • Реиндексация таблиц информационной базы.
  4. Запустим процесс.

Это позволит системе перестроить внутренние таблицы связей, которые использует КритерийОтбора.

Шаг 5: Особенности кэширования и прав доступа

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

1. Очистка кэша: Платформа кэширует структуру метаданных. При изменении состава критерия отбора рекомендуется очистить локальный кэш пользователя (папки в %AppData%\1C\1Cv8).

2. Права доступа (RLS): Если в системе настроены права на уровне записей (RLS), пользователь может видеть родительский документ («Поступление»), но не иметь прав на «Корректировку». В этом случае при построении дерева из корректировки родитель будет виден (так как на него права есть), а при просмотре из поступления система просто отфильтрует дочерний документ, на который у пользователя нет прав. Проверим роли пользователя и ограничения доступа к новому объекту.

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

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

← На главную