При разработке пользовательских форм в конфигурациях на базе Библиотеки Стандартных Подсистем (например, 1С:Комплексная автоматизация 2, 1С:ERP или 1С:Управление торговлей 11) часто возникает задача открыть структуру подчиненности (связанные документы) для объекта, выбранного в текущей строке табличной части.
Разберем по шагам, как правильно реализовать этот функционал и на что обратить внимание при настройке метаданных.
Прежде чем вызывать форму отчета связанных документов из кода, необходимо убедиться, что тип целевого документа поддерживает вывод структуры подчиненности:
КритерийОтбора.СвязанныеДокументы. Если реквизит или тип документа отсутствует в составе этого критерия, система не сможет найти связанные объекты в базе данных.ОбщаяКоманда.СвязанныеДокументы (или ОбщаяКоманда.СтруктураПодчиненности). Тип вашего документа должен быть внесен в список разрешенных параметров.Рассмотрим, как получить ссылку на документ из текущей выделенной строки табличной части управляемой формы. Для этого проанализируем обращение к свойству ТекущиеДанные элемента формы:
ТекущиеДанные = Элементы.ИмяТабличнойЧасти.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(ТекущиеДанные.ИмяКолонкиДокумента) Тогда
СсылкаНаДокумент = ТекущиеДанные.ИмяКолонкиДокумента;
КонецЕсли;
Важно: Выбранный документ обязательно должен быть записан в информационной базе. Для не записанного объекта выражение ЗначениеЗаполнено(Ссылка) вернет Ложь, и структура подчиненности не сформируется.
Разберем основной и самый распространенный вариант вызова отчета через метод ОткрытьФорму. Для этого сформируем структуру параметров с ключом отбора ЗначениеОтбора:
&НаКлиенте
Процедура КомандаОткрытьСтруктуруПодчиненности(Команда)
ТекущиеДанные = Элементы.ТабличнаяЧасть.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ТекущиеДанные.Документ) Тогда
ВызватьИсключение "Документ в текущей строке не выбран или не записан!";
КонецЕсли;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ЗначениеОтбора", ТекущиеДанные.Документ);
ОткрытьФорму("ОбщаяФорма.СвязанныеДокументы", ПараметрыОткрытия);
КонецПроцедуры
Проанализируем ситуацию, когда необходимо получить список связанных документов программно без открытия стандартной общей формы. В этом случае выполним запрос напрямую к критерию отбора КритерийОтбора.СвязанныеДокументы:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СвязанныеДокументы.Ссылка КАК Ссылка
|ИЗ
| КритерийОтбора.СвязанныеДокументы(&ИсходящийДокумент) КАК СвязанныеДокументы";
Запрос.УстановитьПараметр("ИсходящийДокумент", СсылкаНаДокумент);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Обработка найденных подчиненных документов
КонецЦикла;
Этот способ позволяет программно обойти дерево подчиненных объектов и выгрузить их в собственную таблицу или дерево на форме.