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