Не нашел документации как для ДО добавить собственный документ в структуру связей, да и тип документов ограничен только типовыми.
Подсмотрел как сделано во "Внутренние документы", допилил, работает :)
1. Расширить тип реквизитов своим документов у "Документ", "СвязанныйДокумент" в РС "СвязиДокументов", а также реквизит формы "Документ" у отчета "СтруктураСвязейДокумента" (соответственно снять с поддержки/либо закинуть все это в расширение).
2. Добавить элементы/команды на форму, настроить связи между ними.
3. Код для формы документа
////////////////////////////////////////////////////////////////////////////////
// Работа со связями документа
#Область СвязиДокумента_ДеревоСвязей
&НаКлиенте
Процедура ДеревоСвязейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.ДеревоСвязей.ТекущиеДанные;
Если ТекущиеДанные = Неопределено
Или ТекущиеДанные.ЭтоРодитель Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущиеДанные.Файл) Тогда
ВыборФайла(ТекущиеДанные.Файл);
ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.СвязаннаяСтрока) Тогда
ПерейтиПоНавигационнойСсылке(ТекущиеДанные.СвязаннаяСтрока);
ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.СвязанныйДокумент) Тогда
ПоказатьЗначение(, ТекущиеДанные.СвязанныйДокумент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейПриАктивизацииСтроки(Элемент)
Элементы.ДеревоСвязейОткрыть.Доступность = Ложь;
Элементы.ДеревоСвязейКонтекстноеМенюКнопкаОткрыть.Доступность = Ложь;
Элементы.ДеревоСвязейУдалить.Доступность = Ложь;
Элементы.ДеревоСвязейКонтекстноеМенюКнопкаУдалить.Доступность = Ложь;
Элементы.ДеревоСвязейКонтекстноеМенюКнопкаСкопировать.Доступность = Ложь;
Элементы.ДеревоСвязейКонтекстноеМенюДеревоСвязейСохранитьКак.Доступность = Ложь;
Элементы.ДеревоСвязейКонтекстноеМенюДеревоСвязейНапечататьФайлы.Доступность = Ложь;
Элементы.ДеревоСвязейСохранитьКак.Доступность = Ложь;
Элементы.ДеревоСвязейНапечататьФайлы.Доступность = Ложь;
ТекущиеДанные = Элементы.ДеревоСвязей.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущиеДанные.Файл) Тогда
Элементы.ДеревоСвязейОткрыть.Доступность = Истина;
Элементы.ДеревоСвязейКонтекстноеМенюКнопкаОткрыть.Доступность = Истина;
Элементы.ДеревоСвязейКонтекстноеМенюДеревоСвязейСохранитьКак.Доступность = Истина;
Элементы.ДеревоСвязейКонтекстноеМенюДеревоСвязейНапечататьФайлы.Доступность = Истина;
Элементы.ДеревоСвязейСохранитьКак.Доступность = Истина;
Элементы.ДеревоСвязейНапечататьФайлы.Доступность = Истина;
ИначеЕсли Не ТекущиеДанные.ЭтоРодитель Тогда
Элементы.ДеревоСвязейОткрыть.Доступность = Истина;
Элементы.ДеревоСвязейКонтекстноеМенюКнопкаОткрыть.Доступность = Истина;
Элементы.ДеревоСвязейУдалить.Доступность = Истина;
Элементы.ДеревоСвязейКонтекстноеМенюКнопкаУдалить.Доступность = Истина;
Элементы.ДеревоСвязейКонтекстноеМенюКнопкаСкопировать.Доступность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина;
Если Объект.Ссылка.Пустая() Тогда
НеПродолжатьСозданиеСвязи = Ложь;
Если ОбязательныеТипыСвязей.Количество() <> 0 И
ОбязательныеТипыСвязей.Количество() <> ОбязательныеСвязи.Количество() Тогда
НеПродолжатьСозданиеСвязи = Истина;
КонецЕсли;
Если Не Записать() Тогда
Возврат;
КонецЕсли;
ПоказатьОповещениеПользователя(
НСтр("ru = 'Создание:'"),
ПолучитьНавигационнуюСсылку(Объект.Ссылка),
Строка(Объект.Ссылка),
БиблиотекаКартинок.Информация32);
Если НеПродолжатьСозданиеСвязи Тогда
Возврат;
КонецЕсли;
КонецЕсли;
ТекущиеДанные = Элементы.ДеревоСвязей.ТекущиеДанные;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("УникальныйИдентификаторФормыВладельца", ЭтаФорма.УникальныйИдентификатор);
Если ТекущиеДанные <> Неопределено Тогда
ПараметрыФормы.Вставить("ТипСвязи", Элементы.ДеревоСвязей.ТекущиеДанные.ТипСвязи);
КонецЕсли;
Если Копирование Тогда
ПараметрыКлюча = Новый Структура;
ПараметрыКлюча.Вставить("Документ", Объект.Ссылка);
ПараметрыКлюча.Вставить("ТипСвязи", ТекущиеДанные.ТипСвязи);
ПараметрыКлюча.Вставить("СвязанныйДокумент", ТекущиеДанные.СвязанныйДокумент);
ПараметрыКлюча.Вставить("СвязаннаяСтрока", ТекущиеДанные.СвязаннаяСтрока);
ПараметрыКлюча.Вставить("ДополнительныйОбъектСвязи", ТекущиеДанные.ДополнительныйОбъектСвязи);
ПараметрыФормы.Вставить("ЗначениеКопирования", ПолучитьКлюч(ПараметрыКлюча));
Открытьформу("РегистрСведений.СвязиДокументов.ФормаЗаписи", ПараметрыФормы, Элементы.ДеревоСвязей);
Иначе
ОчиститьСообщения();
Открытьформу("РегистрСведений.СвязиДокументов.Форма.СозданиеСвязи", ПараметрыФормы,
Элементы.ДеревоСвязей,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейПередНачаломИзменения(Элемент, Отказ)
Отказ = Истина;
ТекущиеДанные = Элементы.ДеревоСвязей.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТекущиеДанные.ЭтоРодитель Тогда
Если ЗначениеЗаполнено(ТекущиеДанные.ТипСвязи) Тогда
ПараметрыФормы = Новый Структура("Ключ", ТекущиеДанные.ТипСвязи);
ОткрытьФорму("Справочник.ТипыСвязей.Форма.ФормаЭлемента", ПараметрыФормы, Элементы.ДеревоСвязей);
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.Файл) Тогда
ПоказатьЗначение(, ТекущиеДанные.Файл);
Иначе
ПараметрыКлюча = Новый Структура;
ПараметрыКлюча.Вставить("Документ", Объект.Ссылка);
ПараметрыКлюча.Вставить("ТипСвязи", ТекущиеДанные.ТипСвязи);
ПараметрыКлюча.Вставить("СвязанныйДокумент", ТекущиеДанные.СвязанныйДокумент);
ПараметрыКлюча.Вставить("СвязаннаяСтрока", ТекущиеДанные.СвязаннаяСтрока);
ПараметрыКлюча.Вставить("ДополнительныйОбъектСвязи", ТекущиеДанные.ДополнительныйОбъектСвязи);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("УникальныйИдентификаторФормыВладельца", ЭтаФорма.УникальныйИдентификатор);
ПараметрыФормы.Вставить("Ключ", ПолучитьКлюч(ПараметрыКлюча));
Открытьформу("РегистрСведений.СвязиДокументов.ФормаЗаписи", ПараметрыФормы, Элементы.ДеревоСвязей);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейПередУдалением(Элемент, Отказ)
Отказ = Истина;
ТекущиеДанные = Элементы.ДеревоСвязей.ТекущиеДанные;
Если ТекущиеДанные = Неопределено
Или ТекущиеДанные.ЭтоРодитель
Или ЗначениеЗаполнено(ТекущиеДанные.Файл) Тогда
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения(
"ДеревоСвязейПередУдалениемПродолжение",
ЭтотОбъект,
Новый Структура("ТекущиеДанные", ТекущиеДанные));
ПоказатьВопрос(ОписаниеОповещения,
НСтр("ru = 'Удалить запись?'"),
РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейПередУдалениемПродолжение(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ТекущиеДанные = Параметры.ТекущиеДанные;
ПараметрыУдаления = Новый Структура;
ПараметрыУдаления.Вставить("Документ", Объект.Ссылка);
ПараметрыУдаления.Вставить("ТипСвязи", ТекущиеДанные.ТипСвязи);
ПараметрыУдаления.Вставить("СвязанныйДокумент", ТекущиеДанные.СвязанныйДокумент);
ПараметрыУдаления.Вставить("СвязаннаяСтрока", ТекущиеДанные.СвязаннаяСтрока);
ПараметрыУдаления.Вставить("ДополнительныйОбъектСвязи", ТекущиеДанные.ДополнительныйОбъектСвязи);
УдалитьСвязь(ПараметрыУдаления);
КоллекцияСтрок = ДеревоСвязей.ПолучитьЭлементы();
Для Каждого Строка Из КоллекцияСтрок Цикл
Элементы.ДеревоСвязей.Развернуть(Строка.ПолучитьИдентификатор(), Истина)
КонецЦикла;
// Оповестим связанный документ об удалении связи
Если ЗначениеЗаполнено(ТекущиеДанные.СвязанныйДокумент) Тогда
ПараметрОповещения = Новый Структура;
ПараметрОповещения.Вставить("Документ", ТекущиеДанные.СвязанныйДокумент);
Оповестить("ИзмененыСвязиПодчиненныхДокументов", ПараметрОповещения);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
СвязанныйДокумент = ПараметрыПеретаскивания.Значение[0];
Если ЗначениеЗаполнено(СвязанныйДокумент)
И ДелопроизводствоКлиент.ДокументыМожноСвязать(Объект.Ссылка, СвязанныйДокумент) Тогда
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("СвязанныйДокумент", СвязанныйДокумент);
ОчиститьСообщения();
Открытьформу("РегистрСведений.СвязиДокументов.Форма.СозданиеСвязи", ПараметрыФормы,
Элементы.ДеревоСвязей,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Иначе
ПоказатьПредупреждение(, НСтр("ru = 'Нельзя установить связь между выбранными объектами'"));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СвязиДокумента_Команды
&НаКлиенте
Процедура СтруктураСвязей(Команда)
Если Объект.Ссылка.Пустая() Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Документ еще не записан и не имеет связей.'"));
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура("Документ", Объект.Ссылка);
ОткрытьФорму("Отчет.СтруктураСвязейДокумента.Форма", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСвязь(Команда)
ТекущиеДанные = Элементы.ДеревоСвязей.ТекущиеДанные;
Если ТекущиеДанные = Неопределено
Или ТекущиеДанные.ЭтоРодитель Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущиеДанные.Файл) Тогда
ОткрытьФайл(ТекущиеДанные.Файл);
ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.СвязаннаяСтрока) Тогда
ПерейтиПоНавигационнойСсылке(ТекущиеДанные.СвязаннаяСтрока);
ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.СвязанныйДокумент) Тогда
ПоказатьЗначение(, ТекущиеДанные.СвязанныйДокумент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейОбновить(Команда)
ЗаполнитьСвязи();
КоллекцияСтрок = ДеревоСвязей.ПолучитьЭлементы();
Для Каждого Строка Из КоллекцияСтрок Цикл
ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
Элементы.ДеревоСвязей.Развернуть(ИдентификаторСтроки, Истина)
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейОткрытьДляПросмотра(Команда)
ТекущиеДанные = Элементы.ДеревоСвязей.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущиеДанные.Файл) Тогда
Возврат;
КонецЕсли;
ОткрытьФайл(ТекущиеДанные.Файл);
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейСохранитьКак(Команда)
ВыделенныеСтроки = Элементы.ДеревоСвязей.ВыделенныеСтроки;
Если ВыделенныеСтроки.Количество() > 1 Тогда
СписокФайловДляВыгрузки = Новый СписокЗначений;
Для Каждого ВыбраннаяСтрока Из ВыделенныеСтроки Цикл
ДанныеСтроки = Элементы.ДеревоСвязей.ДанныеСтроки(ВыбраннаяСтрока);
Если ЗначениеЗаполнено(ДанныеСтроки.Файл) Тогда
СписокФайловДляВыгрузки.Добавить(ДанныеСтроки.Файл);
КонецЕсли;
КонецЦикла;
Если СписокФайловДляВыгрузки.Количество() > 0 Тогда
РаботаСФайламиКлиент.СохранитьФайлыКак(СписокФайловДляВыгрузки, УникальныйИдентификатор);
КонецЕсли;
Иначе
ТекущиеДанные = Элементы.ДеревоСвязей.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущиеДанные.Файл) Тогда
ДанныеФайла = РаботаСФайламиВызовСервера.ДанныеФайлаДляСохранения(ТекущиеДанные.Файл,
Неопределено,
ЭтаФорма.УникальныйИдентификатор);
КомандыРаботыСФайламиКлиент.СохранитьКак(ДанныеФайла, УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоСвязейНапечататьФайлы(Команда)
#Если ВебКлиент Тогда
ПоказатьПредупреждение(, НСтр("ru = 'В Веб-клиенте печать файлов не поддерживается.'"));
Возврат;
#КонецЕсли
СистемнаяИнфо = Новый СистемнаяИнформация;
Если СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86
И СистемнаяИнфо.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Печать файлов возможна только в Windows.'"));
Возврат;
КонецЕсли;
ВыделенныеСтроки = Элементы.ДеревоСвязей.ВыделенныеСтроки;
Если ВыделенныеСтроки.Количество() > 1 Тогда
МассивФайлов = Новый Массив;
Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
ДанныеСтроки = Элементы.ДеревоСвязей.ДанныеСтроки(ВыделеннаяСтрока);
Если ЗначениеЗаполнено(ДанныеСтроки.Файл) Тогда
МассивФайлов.Добавить(ДанныеСтроки.Файл);
КонецЕсли;
КонецЦикла;
Если МассивФайлов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ДанныеФайлов = РаботаСФайламиВызовСервера.ДанныеФайловДляОткрытия(
МассивФайлов,
ЭтаФорма.УникальныйИдентификатор);
КомандыРаботыСФайламиКлиент.НапечататьФайлы(ДанныеФайлов);
Иначе
ТекущиеДанные = Элементы.ДеревоСвязей.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Или Не ЗначениеЗаполнено(ТекущиеДанные.Файл) Тогда
Возврат;
КонецЕсли;
ДанныеФайла = РаботаСФайламиВызовСервера.ДанныеФайлаДляОткрытия(
ТекущиеДанные.Файл,
Неопределено,
ЭтаФорма.УникальныйИдентификатор,
Неопределено,
ПредыдущийАдресФайла);
КомандыРаботыСФайламиКлиент.НапечататьФайл(ДанныеФайла);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ДеревоСвязей_Служебные
&НаКлиенте
Процедура ОткрытьФайл(Файл)
Если Не ЗначениеЗаполнено(Файл) Тогда
Возврат;
КонецЕсли;
РаботаСФайламиКлиент.ОткрытьФайлДокумента(Файл, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПоказыватьУдаленныеСвязи(Команда)
ПоказыватьУдаленныеСвязи = Не ПоказыватьУдаленныеСвязи;
Элементы.ДеревоСвязейПоказыватьУдаленныеСвязи.Пометка = ПоказыватьУдаленныеСвязи;
ЗаполнитьСвязи();
КонецПроцедуры
&НаКлиенте
Процедура ПоказыватьТолькоОригиналыВСвязяхПриИзменении(Элемент)
ЗаполнитьСвязи();
КоллекцияСтрок = ДеревоСвязей.ПолучитьЭлементы();
Для Каждого Строка Из КоллекцияСтрок Цикл
ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
Элементы.ДеревоСвязей.Развернуть(ИдентификаторСтроки, Истина)
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ВыборФайла(Файл)
КакОткрывать = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ДействиеПоДвойномуЩелчкуМыши;
Если КакОткрывать = "ОткрыватьКарточку" Тогда
ПоказатьЗначение(, Файл);
Возврат;
КонецЕсли;
ДанныеФайла = РаботаСФайламиВызовСервера.ДанныеФайлаДляОткрытия(Файл,
Неопределено,
ЭтаФорма.УникальныйИдентификатор,
Неопределено,
ПредыдущийАдресФайла);
ПараметрыОбработчика = Новый Структура;
ПараметрыОбработчика.Вставить("ДанныеФайла", ДанныеФайла);
Обработчик = Новый ОписаниеОповещения("СписокВыборПослеВыбораРежимаРедактирования", ЭтотОбъект, ПараметрыОбработчика);
РаботаСФайламиКлиент.ВыбратьРежимИРедактироватьФайл(Обработчик, ДанныеФайла, Истина);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьКлюч(ПараметрыКлюча)
КлючЗаписи = РегистрыСведений.СвязиДокументов.СоздатьКлючЗаписи(ПараметрыКлюча);
Возврат КлючЗаписи;
КонецФункции
&НаСервере
Процедура ЗаполнитьСвязи()
Делопроизводство.ЗаполнитьДеревоСвязейДокумента(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура УдалитьСвязь(Параметры)
Если ЗначениеЗаполнено(Параметры.СвязанныйДокумент) Тогда
СвязанныйДокумент = Параметры.СвязанныйДокумент;
ИначеЕсли ЗначениеЗаполнено(Параметры.СвязаннаяСтрока) Тогда
СвязанныйДокумент = Параметры.СвязаннаяСтрока;
КонецЕсли;
СвязиДокументов.УдалитьСвязь(Параметры.Документ, СвязанныйДокумент, Параметры.ТипСвязи);
ЗаполнитьСвязи();
КонецПроцедуры
&НаСервере
Процедура ПрочитатьСвязи(ТипыСвязей = Неопределено)
Если ТипыСвязей = Неопределено Или ТипыСвязей.Найти(Справочники.ТипыСвязей.НеДействуетВСоответствии) <> Неопределено Тогда
НеДействуетВСоответствии = СвязиДокументов.ПолучитьСвязанныйДокумент(Объект.Ссылка, Справочники.ТипыСвязей.НеДействуетВСоответствии);
НачальныйНеДействуетВСоответствии = НеДействуетВСоответствии;
КонецЕсли;
Если ТипыСвязей = Неопределено Или ТипыСвязей.Найти(Справочники.ТипыСвязей.АвансовыйОтчет) <> Неопределено Тогда
АвансовыйОтчет = СвязиДокументов.ПолучитьСвязанныйДокумент(Объект.Ссылка, Справочники.ТипыСвязей.АвансовыйОтчет);
АвансовыйОтчетПриЧтении = АвансовыйОтчет;
Элементы.ГруппаАвансовыйОтчетУказан.Видимость = ЗначениеЗаполнено(АвансовыйОтчет);
Элементы.ГруппаАвансовыйОтчетНеПредоставлен.Видимость = Не ЗначениеЗаполнено(АвансовыйОтчет)
И НЕ АвансовыйОтчетПредоставлен И АвансовыйОтчетТребуется;
Элементы.ГруппаАвансовыйОтчетПредоставлен.Видимость = Не ЗначениеЗаполнено(АвансовыйОтчет)
И АвансовыйОтчетПредоставлен;
Элементы.ГруппаАвансовыйОтчетНеТребуется.Видимость = Не ЗначениеЗаполнено(АвансовыйОтчет)
И Не АвансовыйОтчетТребуется;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ИзмененыРеквизитыПриИзмененииСвязи" И Параметр = Объект.Ссылка Тогда
Прочитать();
КонецЕсли;
Если ИмяСобытия = "ИзмененыСвязиДокумента" Тогда
Если Параметр.Документ = Объект.Ссылка Тогда
ПрочитатьСвязи(Параметр.ТипыСвязей);
КонецЕсли;
ЗаполнитьСвязи();
// Раскроем дерево
КоллекцияСтрок = ДеревоСвязей.ПолучитьЭлементы();
Для Каждого Строка Из КоллекцияСтрок Цикл
ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
Элементы.ДеревоСвязей.Развернуть(ИдентификаторСтроки, Истина);
КонецЦикла;
// Установим курсор в нужную строку
Если Параметр.Свойство("СвязанныйДокумент") Тогда
НашлиСтроку = Ложь;
КоллекцияСтрок = ДеревоСвязей.ПолучитьЭлементы();
Для Каждого Строка Из КоллекцияСтрок Цикл
Если НашлиСтроку Тогда
Прервать;
КонецЕсли;
ПодчиненныеСтроки = Строка.ПолучитьЭлементы();
Для Каждого ПодчиненнаяСтрока Из ПодчиненныеСтроки Цикл
Если Параметр.СвязанныйДокумент = ПодчиненнаяСтрока.СвязанныйДокумент
И Параметр.ТипыСвязей[0] = ПодчиненнаяСтрока.ТипСвязи Тогда
Элементы.ДеревоСвязей.ТекущаяСтрока = ПодчиненнаяСтрока.ПолучитьИдентификатор();
НашлиСтроку = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если ИмяСобытия = "ИзмененыСвязиПодчиненныхДокументов" И Параметр.Документ = Объект.Ссылка Тогда
ЗаполнитьСвязи();
// Раскроем дерево
КоллекцияСтрок = ДеревоСвязей.ПолучитьЭлементы();
Для Каждого Строка Из КоллекцияСтрок Цикл
ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
Элементы.ДеревоСвязей.Развернуть(ИдентификаторСтроки, Истина);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
4. Для "ДеревоСвязейКартинка" установить картинку значений - "КоллекцияПиктограммФайлов".
Протестировано на 1С:Предприятие 8.3 (8.3.19.1150), Документооборот 8 КОРП, редакция 2.1 (2.1.27.1).