ФункцияПолучитьРодительскиеДокументы(ДокументСсылка,СписокСвязанныхДокументов=Неопределено,мУжеВСписке=Неопределено)ЭкспортЕслиСписокСвязанныхДокументов=НеопределеноТогдаСписокСвязанныхДокументов=НовыйСписокЗначений;КонецЕсли;ЕслимУжеВСписке=НеопределеноТогдамУжеВСписке=НовыйСоответствие;КонецЕсли;МетаданныеДокумента=ДокументСсылка.Метаданные();СписокРеквизитов=НовыйСписокЗначений;ДляКаждогоРеквизитИЗМетаданныеДокумента.РеквизитыЦиклТипыРеквизита=Реквизит.Тип.Типы();ДляКаждогоТекущийТипИЗТипыРеквизитаЦиклМетаданныеРеквизита=Метаданные.НайтиПоТипу(ТекущийТип);ЕслиМетаданныеРеквизита<>НеопределеноИМетаданные.Документы.Содержит(МетаданныеРеквизита)ИПравоДоступа( "Чтение" ,МетаданныеРеквизита)ТогдаПопыткаЗначениеРеквизита=ДокументСсылка[Реквизит.Имя];ИсключениеПрервать;КонецПопытки;ЕСлиЗначениеРеквизита<>НеопределеноИНЕЗначениеРеквизита.Пустая()ИТипЗнч(ЗначениеРеквизита)=ТекущийТипИмУжеВСписке[ЗначениеРеквизита]=НеопределеноИСписокРеквизитов.НайтиПоЗначению(ДокументСсылка[Реквизит.Имя])=НеопределеноТогдаПопыткаСписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата, "ДФ=yyyyMMddЧЧММсс" ));ИсключениеОтладкаТекстОшибки=ОписаниеОшибки();КонецПопытки;КонецЕсли;КонецЕсли;КонецЦикла;КонецЦикла;ДляКаждогоТЧИзМетаданныеДокумента.ТабличныеЧастиЦиклСтрРеквизитов= "" ;ПопыткаСодержимоеТЧ=ДокументСсылка[ТЧ.Имя].Выгрузить();ИсключениеПрервать;КонецПопытки;ДляКаждогоРеквизитИЗТЧ.РеквизитыЦиклТипыРеквизита=Реквизит.Тип.Типы();ДляКаждогоТекущийТипИЗТипыРеквизитаЦиклМетаданныеРеквизита=Метаданные.НайтиПоТипу(ТекущийТип);ЕслиМетаданныеРеквизита<>НеопределеноИМетаданные.Документы.Содержит(МетаданныеРеквизита)ИПравоДоступа( "Чтение" ,МетаданныеРеквизита)ТогдаСтрРеквизитов=СтрРеквизитов+?(СтрРеквизитов= "" , "" , ", " )+Реквизит.Имя;Прервать;КонецЕсли;КонецЦикла;КонецЦикла;СодержимоеТЧ.Свернуть(СтрРеквизитов);ДляКаждогоКолонкаТЧИЗСодержимоеТЧ.КолонкиЦиклДляКаждогоСтрокаТЧИЗСодержимоеТЧЦиклПопыткаЗначениеРеквизита=СтрокаТЧ[КолонкаТЧ.Имя];ИсключениеПродолжить;КонецПопытки;МетаданныеЗначения=Метаданные.НайтиПоТипу(ТипЗнч(ЗначениеРеквизита));ЕслиМетаданныеЗначения=НеопределеноТогда// базовый типПродолжить;КонецЕсли;ЕСлиЗначениеРеквизита<>НеопределеноИНЕЗначениеРеквизита.Пустая()ИМетаданные.Документы.Содержит(МетаданныеЗначения)ИмУжеВСписке[ЗначениеРеквизита]=НеопределеноТогдаЕслиСписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита)=НеопределеноТогдаПопыткаСписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата, "ДФ=yyyyMMddЧЧММсс" ));ИсключениеОтладкаТекстОшибки=ОписаниеОшибки();КонецПопытки;КонецЕсли;КонецЕсли;КонецЦикла;КонецЦикла;КонецЦикла;мУжеВСписке.Вставить(ДокументСсылка,Истина);ДляКаждогоСтрСЗИзСписокРеквизитовЦиклСписокСвязанныхДокументов=ПолучитьРодительскиеДокументы(СтрСЗ.Значение,СписокСвязанныхДокументов,мУжеВСписке);КонецЦикла;Запрос=НовыйЗапрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка | ИЗ Документ." +МетаданныеДокумента.Имя+ " ГДЕ Ссылка = &Ссылка" );Запрос.УстановитьПараметр( "Ссылка" ,ДокументСсылка);Выборка=Запрос.Выполнить().Выбрать();ЕСлиВыборка.Следующий()ТогдаСписокСвязанныхДокументов.Добавить(Выборка.Ссылка);ИначеСписокСвязанныхДокументов.Добавить(ДокументСсылка);КонецЕсли;ВозвратСписокСвязанныхДокументов;КонецФункцииФункцияПолучитьПодчиненныеДокументы(ДокументСсылка,СписокСвязанныхДокументов=Неопределено,мУжеВСписке=Неопределено)ЭкспортЕслиСписокСвязанныхДокументов=НеопределеноТогдаСписокСвязанныхДокументов=НовыйСписокЗначений;КонецЕсли;ЕслимУжеВСписке=НеопределеноТогдамУжеВСписке=НовыйСоответствие;КонецЕсли;Таблица=ПолныеПрава.ПолучитьВыборкуПоКритериюОтбора( "СвязанныеДокументы" ,ДокументСсылка);КэшПоТипамДокументов=НовыйСоответствие;ДляКаждогоСтрокаТаблицыИЗТаблицаЦиклМетаданныеДокумента=СтрокаТаблицы.Ссылка.Метаданные();ЕслиНеПравоДоступа( "Чтение" ,МетаданныеДокумента)ТогдаПродолжить;КонецЕсли;ИмяДокумента=МетаданныеДокумента.Имя;СинонимДокумента=МетаданныеДокумента.Синоним;СтруктураТипа=КэшПоТипамДокументов[ИмяДокумента];ЕслиСтруктураТипа=НеопределеноТогдаСтруктураТипа=НовыйСтруктура( "Синоним, МассивСсылок" ,СинонимДокумента,НовыйМассив);КэшПоТипамДокументов.Вставить(ИмяДокумента,СтруктураТипа);КонецЕсли;СтруктураТипа.МассивСсылок.Добавить(СтрокаТаблицы.Ссылка);КонецЦикла;ЕСлиКэшПоТипамДокументов.Количество()= 0 ТогдаВозвратСписокСвязанныхДокументов;КонецЕсли;ТекстЗапросаНачало= "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ (" ;ТекстЗапросаКонец= ") КАК ПодчиненныеДокументы " ;Запрос=НовыйЗапрос;ДляКаждогоКлючИЗначениеИЗКэшПоТипамДокументовЦиклЗапрос.Текст=Запрос.Текст+?(Запрос.Текст= "" , " |ВЫБРАТЬ " , " |ОБЪЕДИНИТЬ ВСЕ |ВЫБРАТЬ" )+ " |Ссылка |ИЗ Документ." +КлючИЗначение.Ключ+ " |ГДЕ Ссылка В (&" +КлючИЗначение.Ключ+ ")" ;Запрос.УстановитьПараметр(КлючИЗначение.Ключ,КлючИЗначение.Значение.МассивСсылок);КонецЦикла;Запрос.Текст=ТекстЗапросаНачало+Запрос.Текст+ТекстЗапро
В данной функции обязательным параметром является ДокументСсылка т.е документ, которого получаем структуру подчинненых документов.Рабочий параметр СписокСвязанныхДокументов хранит спискок подчинненых документов