При разработке собственных документов в конфигурациях 1С часто возникает задача связать их с уже существующими типовыми объектами. Например, когда на основании типового документа ПоступлениеТоваровУслуг создается новый самописный документ Корректировка. В таких случаях разработчики часто сталкиваются с проблемой: в структуре подчиненности родительского документа (Поступления) новый документ отображается корректно, а вот открыть структуру подчиненности из формы самого нового документа (Корректировки) и увидеть там родительский документ не получается. Данные либо не выводятся совсем, либо кнопка вызова связанных документов отсутствует.
В этой статье мы подробно разберем механизм работы структуры подчиненности "под капотом" платформы 1С:Предприятие 8 и реализуем пошаговое решение этой задачи для конфигураций на обычных формах (таких как УПП 1.3, УТ 10.3, КА 1.1).
Прежде чем переходить к настройке метаданных, давайте разберем логику работы стандартного отчета "Структура подчиненности" (или "Связанные документы"). Система строит дерево связей в двух направлениях от исходного документа:
СвязанныеДокументы). В качестве параметра передается ссылка на текущий документ. Запрос возвращает список всех документов, у которых реквизиты, входящие в состав критерия, ссылаются на исходный.Документ.Корректировка.Реквизит.ДокументОснование) явно включен в состав критерия отбора СвязанныеДокументы.Таким образом, для полной двусторонней связи нам необходимо выполнить три основных шага: правильно настроить критерий отбора, проверить состав типов данных и вывести элемент управления на форму нового документа.
Первым делом откроем конфигурацию и найдем нужный критерий отбора. Разберем по шагам, что нужно сделать:
ДокументСсылка (в УПП 1.3 это сделано по умолчанию). Если в вашей конфигурации типы перечислены вручную, обязательно добавьте в этот список ссылку на ваш новый документ (например, ДокументСсылка.Корректировка).Корректировка), разверните его структуру и установите флажок напротив реквизита, который хранит ссылку на документ-основание (например, ДокументОснование).После сохранения этих настроек платформа будет точно знать, что реквизит ДокументОснование вашего нового документа связывает его с родительским поступлением.
В отличие от управляемых форм (где интерфейс "Перейти" может формироваться автоматически), в обычных формах УПП 1.3 командную панель навигации необходимо настраивать вручную. Если просто настроить критерий отбора, пользователь не увидит изменений, так как на форме нового документа банально нет кнопки для открытия структуры связанных документов.
Давайте добавим эту кнопку на форму документа Корректировка:
ДействиеСтруктураПодчиненности, установим для неё понятное представление (например, текст "Структура подчиненности" или выберем стандартную иконку дерева подчиненности).Теперь нам нужно написать код, который при нажатии на кнопку будет открывать стандартный типовой отчет структуры подчиненности, передавая в него ссылку на текущий документ. В конфигурации УПП 1.3 для этого предусмотрен готовый общий модуль.
В модуле формы нашего документа в созданном обработчике нажатия кнопки пропишем следующий код:
Процедура ДействиеСтруктураПодчиненности(Кнопка)
// Проверим, что документ записан в базу данных, так как у нового (незаписанного)
// документа еще нет ссылки и строить структуру подчиненности для него бессмысленно
Если ЭтоНовый() Тогда
Предупреждение("Для просмотра структуры подчиненности документ необходимо записать!");
Возврат;
КонецЕсли;
// Вызываем стандартный метод открытия формы отчета из общего модуля УПП
РаботаСДиалогами.ОткрытьФормуСтруктурыПодчиненности(Ссылка);
КонецПроцедуры
Этот простой вызов автоматически инициализирует типовой отчет, передаст в него контекст текущего документа, и система сама построит дерево связей как "вверх" к ПоступлениеТоваровУслуг, так и "вниз", если у вашего нового документа появятся свои подчиненные объекты.
Проанализируем несколько неочевидных проблем, с которыми могут столкнуться разработчики при внедрении этого механизма:
Ссылка) еще не сформирована в СУБД. Обязательно добавляйте проверку через метод ЭтоНовый(), чтобы избежать пустых окон или ошибок платформы.СвязанныеДокументы может быть затруднительно. В этом случае в расширении создают собственный аналогичный критерий отбора, а также переопределяют функции общего модуля поиска связей, чтобы они учитывали данные из нового критерия.СвязанныеДокументы.Следуя этой простой инструкции, вы сможете легко связать любые кастомные документы с типовой структурой подчиненности 1С, обеспечив пользователям удобную и прозрачную навигацию по цепочкам ввода на основании.