Почему документ отображается в структуре подчиненности УТ 10.3 при пустом реквизите «Сделка»?

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

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

Понятие критерия отбора как основного механизма связей

Для начала проанализируем, как именно строится дерево подчиненности. В классических конфигурациях на обычных формах (к которым относится УТ 10.3) этот функционал реализован через объект метаданных КритерийОтбора. В нашем случае ключевым объектом является критерий отбора СвязанныеДокументы.

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

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

Анализ табличных частей документа

Одной из самых частых причин появления «невидимой» связи является заполнение реквизитов в табличных частях. В УТ 10.3 реализована возможность детализации отгрузки по заказам. Рассмотрим ситуацию подробнее:

  1. Если в настройках параметров учета или в договоре с контрагентом выбран способ ведения взаиморасчетов «По заказам», то одна реализация может закрывать сразу несколько заказов.
  2. В этом случае реквизит Сделка в шапке документа может быть пуст или содержать основной заказ, но в табличной части Товары (или Услуги) появляется колонка ЗаказПокупателя (или Заказ).
  3. Для каждой строки товара может быть указан свой документ-основание.

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

Скрытые и системные реквизиты

Проанализируем еще одну техническую особенность. У многих документов в 1С существует стандартный реквизит ДокументОснование. В УТ 10.3 разработчики часто используют его для программного хранения связи при создании объекта «на основании». При этом данный реквизит может быть вообще не выведен на форму. Пользователь его не видит и не может очистить вручную, но в базе данных поле заполнено.

Также стоит обратить внимание на реквизит Сделка. В зависимости от типа операции и настроек видимости на форме, программный код может скрывать или блокировать это поле, но оно может содержать значение, переданное при вводе на основании. Выясним это, посмотрев на объект через «Консоль запросов» или через типовую обработку «Групповая обработка справочников и документов», которая позволяет увидеть реальные значения всех полей в БД.

Как найти «виновника» связи в конфигураторе

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

  1. Перейдите в ветку Общие -> Критерии отбора.
  2. Найдите объект СвязанныеДокументы и откройте его.
  3. Перейдите на закладку «Состав».
  4. Найдите в списке ваш документ (например, РеализацияТоваровУслуг).
  5. Посмотрите, какие именно реквизиты отмечены галочками. Обратите внимание на:
    • Сделка (в шапке);
    • ЗаказПокупателя (в шапке);
    • Заказ (в табличной части Товары);
    • Заказ (в табличной части Услуги);
    • ДокументОснование (если есть).

Именно наличие галочки напротив реквизита табличной части объясняет, почему при пустой шапке связь все равно существует.

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

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


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

Этот метод работает универсально для всех документов, входящих в состав критерия. Если вы хотите узнать, какой именно реквизит внутри Реализации ссылается на Заказ, вам придется перебрать все отмеченные в составе критерия поля этого документа программно или через консоль запросов.

Влияние настроек договора

Не забудем про бизнес-логику. В УТ 10.3 поведение полей сильно зависит от договора. Выясним причину зависимости:

Резюмируем: Структура подчиненности в УТ 10.3 — это результат работы критерия отбора СвязанныеДокументы. Если вы видите связь при пустом реквизите Сделка в шапке, ищите заполненные реквизиты Заказ в табличных частях Товары, Услуги, ВозвратнаяТара или проверьте наличие скрытого реквизита ДокументОснование через инструменты отладки или консоль запросов.

← На главную