При разработке собственных документов в современных конфигурациях 1С (таких как «Бухгалтерия предприятия 3.0», «ERP Управление предприятием» или «Управление торговлей 11») разработчики часто сталкиваются с проблемой: после создания нового документа кнопка «История подключений» или «Структура подчиненности» на управляемой форме отсутствует или не работает. Попытки решить задачу старыми методами (например, простой настройкой критериев отбора, как это делалось в старых редакциях УПП или КА 1.1) не приносят желаемого результата.
В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), механизм отображения связей между документами называется подсистемой «Связанные документы». Для успешной интеграции нового документа в эту подсистему требуется выполнить ряд последовательных действий в конфигураторе. Разберем этот процесс подробно и пошагово.
Выясним причину, почему простые способы настройки критериев отбора больше не работают сами по себе. В старых конфигурациях на обычных формах платформа автоматически выстраивала дерево подчиненности, если документ был включен в критерий отбора. В управляемом интерфейсе БСП берет управление командной панелью на себя. Механизм связанных документов работает комплексно: он связывает критерии отбора, общие команды и программные интерфейсы БСП воедино. Поэтому просто добавить документ в критерий отбора недостаточно — система не увидит команду вызова формы.
Первым делом нам необходимо зарегистрировать наш новый документ в метаданных критерия отбора, который отвечает за поиск связей. Выполним следующие действия:
СвязанныеДокументы.ДокументСсылка.ИмяВашегоДокумента). Это позволит системе использовать наш документ в качестве отправной точки для поиска связей.ДокументОснование, Сделка или Заказ). Именно по этим полям платформа будет понимать, что наш документ является «подчиненным» по отношению к выбранному основанию.Проанализируем следующую важную деталь: кнопка вывода структуры подчиненности — это общая команда конфигурации. Чтобы платформа поняла, для каких именно типов документов эта команда должна отображаться в панели навигации, выполним настройку типа параметра команды:
СвязанныеДокументы.Даже после выполнения предыдущих шагов кнопка перехода к связанным документам может не появиться на управляемой форме. Рассмотрим два способа решения этой задачи в зависимости от того, как спроектирована форма вашего документа.
Способ А. Через командный интерфейс формы (вручную)
Если форма вашего документа простая и не использует динамическое формирование командных панелей БСП, настроим отображение команды вручную:
Связанные документы и установим для нее флаг в колонке «Видимость» (а также при необходимости флаг «Автоматическое переопределение»).Способ Б. Через подключаемые команды БСП (программно)
Если в вашей конфигурации панели команд на формах формируются динамически с помощью механизмов БСП, ручное добавление команды не сработает. Нам потребуется внедрить программный код БСП в модуль формы документа. Разберем этот пример по шагам:
Добавим вызовы стандартных процедур БСП в соответствующие обработчики событий формы документа:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Проверим, инициализированы ли параметры формы
// И подключаем стандартный механизм команд БСП
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// Обновляем состав и видимость динамических команд при чтении данных
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Инициализируем обновление команд на клиенте при открытии формы
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
Также нам потребуется определить обработчик для выполнения самой подключаемой команды. Добавим на клиенте следующую процедуру:
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
// Выполняем стандартную команду БСП (переход к связанным документам)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
Если вы разрабатываете новый документ внутри расширения конфигурации (чтобы не снимать основную базу с поддержки), стандартный механизм БСП может не увидеть типы из расширения автоматически. Проанализируем, как решить эту проблему:
СвязанныеДокументы в ваше расширение.СвязанныеДокументы в ваше расширение.В некоторых версиях БСП может потребоваться доработка общего модуля СтруктураПодчиненностиСлужебный через аннотацию &ИзменениеИКонтроль, чтобы принудительно зарегистрировать типы расширения в функции ИндексТиповСвязанныхОбъектов(). Это гарантирует, что платформа корректно проиндексирует новые типы данных расширения при построении дерева зависимостей.
Рассмотрим ситуацию, когда вам необходимо не просто вывести форму структуры подчиненности интерактивно, но и программно получить всю цепочку связанных документов для проведения какого-либо анализа. Для этого мы можем использовать встроенный метод работы с критериями отбора платформы 1С:
// Пример получения непосредственных подчиненных документов
СсылкаНаОснование = Объект.ДокументОснование;
Если ЗначениеЗаполнено(СсылкаНаОснование) Тогда
// Выполняем поиск подчиненных объектов по критерию отбора
ТаблицаСвязей = КритерииОтбора.СвязанныеДокументы.Найти(СсылкаНаОснование);
Для Каждого СтрокаСвязи Из ТаблицаСвязей Цикл
// В СтрокаСвязи.Ссылка содержится подчиненный документ
Сообщить("Найден подчиненный документ: " + Строка(СтрокаСвязи.Ссылка));
КонецЦикла;
КонецЕсли;
Важно помнить, что стандартный метод Найти() критерия отбора возвращает только один уровень вложенности (непосредственные подчиненные документы). Если перед вами стоит задача построить полную иерархическую структуру (дерево связей от самого первого родительского документа до самого последнего подчиненного акта или фактуры), этот метод необходимо будет запускать рекурсивно для каждого найденного элемента цепочки.