Иногда требуется получить данные по структуре подчиненных или связанных документов в 1с 8.2

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

В данной функции обязательным параметром является ДокументСсылка т.е документ, которого получаем структуру подчинненых документов.Рабочий параметр СписокСвязанныхДокументов хранит спискок подчинненых документов

О блоге

БлогерЗдравствуйте, мое имя Николай, я профессионально занимаюсь комплексной автоматизацией различных сфер бизнеса, предоставляемые мною услуги включают настройку различного оборудования, программирование и отладка различных приложений.

На текущей странице моего сайта будут публиковаться статьи и заметки о программировании, нюансах настройки серверного оборудования и не только.

Для сотрудничества со мной вы можете связаться через форму на странице контакты.

ПОИСК ПО САЙТУ