Запрос к документам, у которых есть ТЧ Товары

1. thelastairbender 31.08.23 09:26 Сейчас в теме
Есть несколько видов товаров, у которых есть ТЧ Товары (Поступление, Оприходование, Перемещение ну и т.д.)
Как оптимальнее обойти табличные части всех этих документов?

Понимаю, что запросы в цикле - зло, но пока что реализовал так:
МассивНужныхВидовДокументов = Новый Массив;
МассивНужныхВидовДокументов.Добавить("Документ.ПоступлениеТоваров");
МассивНужныхВидовДокументов.Добавить("Документ.ОприходованиеТоваров");

ОбщийТекстЗапросаДокументов = "ВЫБРАТЬ
								|	ТчТовары.Ссылка КАК Ссылка,
								|	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТчТовары.Упаковка) КАК Упаковка
								|ИЗ
								|	&НужныйДокумент.Товары КАК ТчТовары
								|ГДЕ
								|	ТчТовары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
								|
								|СГРУППИРОВАТЬ ПО
								|	ТчТовары.Ссылка";

Для Каждого ТекСтрокаВидаДокумента Из МассивНужныхВидовДокументов Цикл
		ТекстЗапросаДокументов = СтрЗаменить(ОбщийТекстЗапросаДокументов,"&НужныйДокумент",ТекСтрокаВидаДокумента);
		ЗапросДокументов = Новый Запрос;
		ЗапросДокументов.Текст = ТекстЗапросаДокументов;
		Выборка = ЗапросДокументов.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			ПочиститьСсылкиНаУпаковкиВДокументе(Выборка.Ссылка);
		КонецЦикла;
КонецЦикла;
Показать
По теме из базы знаний
Найденные решения
6. homer_ 79 31.08.23 10:13 Сейчас в теме
(5) программно формируешь запрос через ОБЪЕДИНИТЬ
Sejix; thelastairbender; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. RustamZz 31.08.23 09:51 Сейчас в теме
(1) Две итерации это не такое зло. Можно оставить.
Sejix; thelastairbender; +2 Ответить
4. thelastairbender 31.08.23 10:04 Сейчас в теме
(3) ну это для примера, вообще в базе 58 таких документов
7. RustamZz 31.08.23 10:33 Сейчас в теме
(4) Это тоже немного, тем более как я понимаю внутри еще обработка всех полученных документов.
thelastairbender; +1 Ответить
2. PowerBoy 3416 31.08.23 09:49 Сейчас в теме
Все в один запрос, в тексте запроса ОБЪЕДИНИТЬ из разных таблиц.
Sejix; thelastairbender; +2 Ответить
5. thelastairbender 31.08.23 10:05 Сейчас в теме
(2) а если изначально неизвестно, какие конкретно виды документов нужны?
6. homer_ 79 31.08.23 10:13 Сейчас в теме
(5) программно формируешь запрос через ОБЪЕДИНИТЬ
Sejix; thelastairbender; +2 Ответить
8. thelastairbender 31.08.23 11:01 Сейчас в теме
(6) Это хорошо, спасибо. А вот теперь вопрос:
Если мы имеем 5 разных документов, что будет оптимальнее?
5 разных простых запросов или один запрос, но с затратами на UNION?
Насколько вообще затратно само обращение к СУБД?
Я просто первый раз в жизни такими вопросами задаюсь, это в сторону планов запроса надо копать?
9. Ravil_ 31.08.23 11:31 Сейчас в теме
(8) можете по разному реализовать и секундомером сравнить. По опыту могу сказать программное сложение текстов может нормально так время занимать если не оптимизировать
10. nomad_irk 76 31.08.23 11:35 Сейчас в теме
(9)Серьёзно? Пробежать по массиву метаданных, набить массив заготовленным шаблоном текста и сделать по итогу
СтрСоединить(Массив, " ОБЪЕДИНИТЬ ВСЕ ")

много время занимает?
11. Ravil_ 31.08.23 11:40 Сейчас в теме
(10) не знаю как СтрСоединить работает, я через "+" делал запрос, формировал текст рекурсивно, ну и там не конечно не 5 слагаемых было. В итоге сложение больше времени занимало чем выполнение самого запроса
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот