Связать документы в запросе.

1. Кадош 13.03.19 12:33 Сейчас в теме
Всем привет.
Можно ли связать документы в запросе не используя критерий отбора?
Суть в следующем: все документы одного типа, документ может включать в себя ссылку на другой документ.
В результате запрос надо получить дерево вида:
Основной документ
|_Документы ссылающиеся на основной документ.
Прикрепленные файлы:
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
7. Xershi 1474 13.03.19 13:07 Сейчас в теме
(1) создаешь ВТ с теми что вверху. Остаток распределяешь по нижним ярусам соединением.
Либо у вас косяк в постановке вопроса.
Но если интересует просто ответ, то да можно.
9. Кадош 13.03.19 13:18 Сейчас в теме
(7) запросом надо выводить все документы, в том числе у которых нет подчиненных. Как на картинке, у заказ №3 нет подчиненных документов.
10. Xershi 1474 13.03.19 13:20 Сейчас в теме
(9) ну так выводите в чем проблема?
11. Кадош 13.03.19 13:27 Сейчас в теме
(10) не пойму как сделать такое соединение в запросе
13. Xershi 1474 13.03.19 13:30 Сейчас в теме
(11) получаешь доки. Полная ВТ.
Фильтруешь верхний уровень вторая ВТ.
Левым соединяешь остаток.

План примерно такой.
Если не понятно курс по запросом проходим.
17. mrcamomile 79 13.03.19 15:20 Сейчас в теме
(13) Вот запрос - обходи его и создавай дерево - или допиши итоги и выгрузи результат запроса в дерево

ВЫБРАТЬ
	Т1.Заявка КАК Родитель
	, Т2.Заявка КАК Подчиненная
ИЗ
(
	ВЫБРАТЬ
	    Т.Ссылка КАК Заявка
	ИЗ
	    Документ.БЗ_ЗаявкаПокупателя КАК Т
	ГДЕ
		Т.ОсновнаяЗаявка = ЗНАЧЕНИЕ(Документ.БЗ_ЗаявкаПокупателя.ПустаяСсылка)
) КАК Т1

ЛЕВОЕ СОЕДИНЕНИЕ 
(
	ВЫБРАТЬ
	    Т.Ссылка КАК Заявка
	    , Т.ОсновнаяЗаявка КАК ОсновнаяЗаявка
	ИЗ
	    Документ.БЗ_ЗаявкаПокупателя КАК Т
	ГДЕ
		Т.ОсновнаяЗаявка = ЗНАЧЕНИЕ(Документ.БЗ_ЗаявкаПокупателя.ПустаяСсылка)
) КАК Т2 
ПО Т1.Ссылка = Т2.ОсновнаяЗаявка
Показать
18. Кадош 13.03.19 23:00 Сейчас в теме
(17) как выбрать и связать документы - проблем нет.
Проблема, связать их так (через ИТОГИ?), чтобы без кода получилось, как на картинке.
С учетом всего вышенаписанного, понятно, что такой возможности нет.
19. mrcamomile 79 14.03.19 11:48 Сейчас в теме
(18) в динамическом списке поставь группировку по полу Родитель
2. vadver 39 13.03.19 12:44 Сейчас в теме
Привет!

А уровень подчиненности ограничен?
3. Кадош 13.03.19 12:53 Сейчас в теме
(2) да. у подчиненного документа не может быть подчиненных. поэтому только один уровень в дереве.
4. vadver 39 13.03.19 12:57 Сейчас в теме
Тогда проще всего:
1. Создаем временную таблицу из документов с незаполненным реквизитом "РодительскийДокумент" (или как он там называется?). Это будет верхний уровень
2. Во втором запросе пакета отбираем документы, не входящие в первую таблицу со внутренним соединением со временной таблицей из 1-го запроса пакета.
3. Итоги запроса - по реквизиту "РодительскийДокумент" - это если выводить вручную. Если в СКД - тогда помучиться придется

Понятно, или подробнее надо?
5. Кадош 13.03.19 13:00 Сейчас в теме
(4) В таком случае будет выводится итог по документам у которых нет подчиненных связей, а этого не надо.
6. vadver 39 13.03.19 13:05 Сейчас в теме
(5) Не будет. Мы отбираем во 2-м запросе с ВНУТРЕННИМ соединением со временной таблицей из первого запроса
8. Кадош 13.03.19 13:16 Сейчас в теме
(6) а если у документа нет подчиненных?
12. vadver 39 13.03.19 13:28 Сейчас в теме
(8) Я вот пытаюсь у себя в голове совместить эти утверждения:
В таком случае будет выводится итог по документам у которых нет подчиненных связей, а этого не надо.

и
а если у документа нет подчиненных?

и что-то у меня плохо получается их совместить.... Наверно чего-то не понимаю...
Давай еще раз уточним: надо выводить все документы, или документы только с подчиненными?
И как планируешь выводить: через обходы результата запроса или через СКД?
14. Кадош 13.03.19 13:31 Сейчас в теме
(12) Надо выводить все документы.
15. vadver 39 13.03.19 13:48 Сейчас в теме
(14) Тогда во 2-й запрос пакета добавить объединение со временной таблицей из 1-го запроса. Что-то типа такого:
ВЫБРАТЬ
ВЫБРАТЬ
	Док.РодительскийДокумент,
	Док.Ссылка
ИЗ Документ.ЗаявкаПокупателя
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_РодДокументы
	ПО ВТ_РодДокументы.Ссылка = Док.РодительскийДокумент
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
	ВТ_РодДокументы.Ссылка,
	NULL
ИЗ ВТ_РодДокументы

УПОРЯДОЧИТЬ ПО
	Док.РодительскийДокумент.Дата,
	isnull(Док.Ссылка.Дата, ДАТАВРЕМЯ(1,1,1))
Показать

Упорядочивать по дате.
При обходе детальных записей проверять заполненность ссылки документа. Если не заполнена - прерывать цикл по детальным записям
16. Кадош 13.03.19 13:57 Сейчас в теме
(15) Сейчас я делаю так:
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	БЗ_ЗаявкаПокупателя.Ссылка КАК Заявка,
		|	БЗ_ПодчиненныеЗаявки.Ссылка КАК ЗаявкаПодчиненная
		|ИЗ
		|	Документ.БЗ_ЗаявкаПокупателя КАК БЗ_ЗаявкаПокупателя
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.БЗ_ЗаявкаПокупателя КАК БЗ_ПодчиненныеЗаявки
		|		ПО БЗ_ЗаявкаПокупателя.Ссылка = БЗ_ПодчиненныеЗаявки.Ссылка.ОсновнаяЗаявка
		|			И (БЗ_ПодчиненныеЗаявки.ВключитьвЗаявку)
		|ГДЕ
		|	НЕ БЗ_ЗаявкаПокупателя.ВключитьвЗаявку
		|ИТОГИ ПО
		|	Заявка";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаСсылка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	ДеревоЗначений = РеквизитФормыВЗначение("СписокДокументов");
	ДеревоЗначений.Строки.Очистить();
	Пока ВыборкаСсылка.Следующий() Цикл
		Корень = ДеревоЗначений.Строки.Добавить();;
		Корень.Заявка = ВыборкаСсылка.Заявка;
		
		ВыборкаДетальныеЗаписи = ВыборкаСсылка.Выбрать();
		
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			Если ВыборкаДетальныеЗаписи.ЗаявкаПодчиненная <> NULL Тогда
				
				ПодчиненаяСтрока = Корень.Строки.Добавить();
				ПодчиненаяСтрока.Заявка = ВыборкаДетальныеЗаписи.ЗаявкаПодчиненная;
				
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
Показать


Получаю результат, как на рисунке.

Вопрос в том, можно ли получить такой же результат, только одним запросом.
Прикрепленные файлы:
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день