Нужно ли добавлять условие в виртуальную таблицу при соединении по этому же условию

1. scarl1n 12 04.07.24 09:05 Сейчас в теме
Есть временная таблица с номенклатурой вт_Номенклатура. К ней хочу добавить остатки. Вопрос: нужно ли в виртуальную таблицу остатков добавлять условие Номенклатура В(вт_Номенклатура), если при соединении с временной таблицей я все равно напишу Регистр.Номенклатура = вт_Номенклатура.Номенклатура? Будет ли это более оптимизированно?
По теме из базы знаний
Найденные решения
2. scarl1n 12 04.07.24 09:13 Сейчас в теме
Не знаю, почему сразу сам не проверил, но сейчас проверил - соединение без условия в виртуальной таблице в моем случае отработало в 60 раз медленнее, чем с условием.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. scarl1n 12 04.07.24 09:13 Сейчас в теме
Не знаю, почему сразу сам не проверил, но сейчас проверил - соединение без условия в виртуальной таблице в моем случае отработало в 60 раз медленнее, чем с условием.
5. gybson 04.07.24 09:20 Сейчас в теме
(2) Любой отбор при построении виртуальной таблицы сокращает её размер и поэтому эффективен.
6. scarl1n 12 04.07.24 09:25 Сейчас в теме
(5)Ну в другом запросе почему-то условие на В(ВременнаяТаблица) у меня отрабатывало ОЧЕНЬ долго, зато стоило мне выполнить этот запрос отдельно, выгрузить оттуда результат в массив и подставить в качестве параметра, так оно выполнялось очень быстро.
4. scarl1n 12 04.07.24 09:16 Сейчас в теме
(3)Там не было ответа на вопрос, да и пример неподходящий (в левой таблице не может не быть номенклатуры из правой таблицы).
7. Azgerd 04.07.24 09:43 Сейчас в теме
(1) Однозначно перед условием связи нужно указать условия для виртуальной таблицы. СНАЧАЛА выполняются условия для виртуальной таблицы (она обрезается по условиям) а потом происходит связь таблиц.
8. scarl1n 12 04.07.24 09:44 Сейчас в теме
(7)Сейчас я так сделал в запросе своем - у меня он стал выполняться дольше на 10 секунд...
9. scarl1n 12 04.07.24 09:45 Сейчас в теме
(7)
"ВЫБРАТЬ
	                      |	УчетРезервовТМЦОбороты.Заказ КАК ЗаказНаПроизводство,
	                      |	УчетРезервовТМЦОбороты.Номенклатура КАК Номенклатура,
	                      |	УчетРезервовТМЦОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	УчетРезервовТМЦОбороты.Склад КАК Склад,
	                      |	СУММА(УчетРезервовТМЦОбороты.КоличествоПриход) КАК РезервПриход,
	                      |	СУММА(УчетРезервовТМЦОбороты.КоличествоРасход) КАК РезервРасход
	                      |ПОМЕСТИТЬ вт_ОборотыРезервов
	                      |ИЗ
	                      |	РегистрНакопления.УчетРезервовТМЦ.Обороты(&НачалоПериода, &КонецПериода, , Заказ ССЫЛКА Документ.ЗаказНаПроизводство) КАК УчетРезервовТМЦОбороты
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	УчетРезервовТМЦОбороты.Заказ,
	                      |	УчетРезервовТМЦОбороты.Номенклатура,
	                      |	УчетРезервовТМЦОбороты.ХарактеристикаНоменклатуры,
	                      |	УчетРезервовТМЦОбороты.Склад
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////­////////////////////
	                      |ВЫБРАТЬ
	                      |	вт_ОборотыРезервов.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
	                      |	вт_ОборотыРезервов.Номенклатура КАК Номенклатура,
	                      |	вт_ОборотыРезервов.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	вт_ОборотыРезервов.Склад КАК Склад,
	                      |	вт_ОборотыРезервов.РезервПриход КАК РезервПриход,
	                      |	вт_ОборотыРезервов.РезервРасход КАК РезервРасход,
	                      |	УчетРезервовТМЦОстатки.КоличествоОстаток КАК КоличествоОстаток
	                      |ПОМЕСТИТЬ вт_ОстаткиИОборотыРезервов
	                      |ИЗ
	                      |	вт_ОборотыРезервов КАК вт_ОборотыРезервов
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетРезервовТМЦ.Остатки(
	                      |				&КонецПериода,
	                      |				Номенклатура В
	                      |						(ВЫБРАТЬ
	                      |							вт_ОборотыРезервов.Номенклатура
	                      |						ИЗ
	                      |							вт_ОборотыРезервов)
	                      |					И Заказ В
	                      |						(ВЫБРАТЬ
	                      |							вт_ОборотыРезервов.ЗаказНаПроизводство
	                      |						ИЗ
	                      |							вт_ОборотыРезервов)) КАК УчетРезервовТМЦОстатки
	                      |		ПО вт_ОборотыРезервов.ЗаказНаПроизводство = УчетРезервовТМЦОстатки.Заказ
	                      |			И вт_ОборотыРезервов.Номенклатура = УчетРезервовТМЦОстатки.Номенклатура
	                      |			И вт_ОборотыРезервов.ХарактеристикаНоменклатуры = УчетРезервовТМЦОстатки.ХарактеристикаНоменклатуры
	                      |			И вт_ОборотыРезервов.Склад = УчетРезервовТМЦОстатки.Склад
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////­////////////////////
	                      |ВЫБРАТЬ
	                      |	ПартииТоваровНаСкладахОбороты.Номенклатура КАК Номенклатура,
	                      |	ПартииТоваровНаСкладахОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	ПартииТоваровНаСкладахОбороты.Склад КАК Склад,
	                      |	ПартииТоваровНаСкладахОбороты.КоличествоПриход КАК ОстатокПриход,
	                      |	ПартииТоваровНаСкладахОбороты.КоличествоРасход КАК ОстатокРасход
	                      |ПОМЕСТИТЬ вт_ОборотыОстатков
	                      |ИЗ
	                      |	РегистрНакопления.ПартииТоваровНаСкладах.Обороты(
	                      |			&НачалоПериода,
	                      |			&КонецПериода,
	                      |			,
	                      |			Номенклатура В
	                      |				(ВЫБРАТЬ
	                      |					вт_ОстаткиИОборотыРезервов.Номенклатура
	                      |				ИЗ
	                      |					вт_ОстаткиИОборотыРезервов)) КАК ПартииТоваровНаСкладахОбороты,
	                      |	вт_ОстаткиИОборотыРезервов КАК вт_ОстаткиИОборотыРезервов
	                      |ГДЕ
	                      |	ПартииТоваровНаСкладахОбороты.Номенклатура В (вт_ОстаткиИОборотыРезервов.Номенклатура)
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////­////////////////////
	                      |ВЫБРАТЬ
	                      |	вт_ОборотыОстатков.Номенклатура КАК Номенклатура,
	                      |	вт_ОборотыОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	вт_ОборотыОстатков.Склад КАК Склад,
	                      |	вт_ОборотыОстатков.ОстатокПриход КАК ОстатокПриход,
	                      |	вт_ОборотыОстатков.ОстатокРасход КАК ОстатокРасход,
	                      |	ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
	                      |ПОМЕСТИТЬ вт_ОстаткиИОборотыОстатков
	                      |ИЗ
	                      |	вт_ОборотыОстатков КАК вт_ОборотыОстатков
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
	                      |				&КонецПериода,
	                      |				Номенклатура В
	                      |					(ВЫБРАТЬ
	                      |						вт_ОборотыОстатков.Номенклатура
	                      |					ИЗ
	                      |						вт_ОборотыОстатков)) КАК ПартииТоваровНаСкладахОстатки
	                      |		ПО вт_ОборотыОстатков.Номенклатура = ПартииТоваровНаСкладахОстатки.Номенклатура
	                      |			И вт_ОборотыОстатков.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры
	                      |			И вт_ОборотыОстатков.Склад = ПартииТоваровНаСкладахОстатки.Склад"
Показать
10. user2033930 04.07.24 09:47 Сейчас в теме
(9) Нельзя делать соединения с виртуальными таблицами. Вытащи УчетРезервовТМЦ.Остатки и ПартииТоваровНаСкладах.Остатки тоже в отдельные ВТ. Вот их потом и соединяй, не забыв проиндексировать их по полям связи. И будет тебе счастье.
14. scarl1n 12 04.07.24 09:57 Сейчас в теме
(10)Сделал, еще дольше стало =(
"ВЫБРАТЬ
	                      |	УчетРезервовТМЦОбороты.Заказ КАК ЗаказНаПроизводство,
	                      |	УчетРезервовТМЦОбороты.Номенклатура КАК Номенклатура,
	                      |	УчетРезервовТМЦОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	УчетРезервовТМЦОбороты.Склад КАК Склад,
	                      |	СУММА(УчетРезервовТМЦОбороты.КоличествоПриход) КАК РезервПриход,
	                      |	СУММА(УчетРезервовТМЦОбороты.КоличествоРасход) КАК РезервРасход
	                      |ПОМЕСТИТЬ вт_ОборотыРезервов
	                      |ИЗ
	                      |	РегистрНакопления.УчетРезервовТМЦ.Обороты(&НачалоПериода, &КонецПериода, , Заказ ССЫЛКА Документ.ЗаказНаПроизводство) КАК УчетРезервовТМЦОбороты
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	УчетРезервовТМЦОбороты.Заказ,
	                      |	УчетРезервовТМЦОбороты.Номенклатура,
	                      |	УчетРезервовТМЦОбороты.ХарактеристикаНоменклатуры,
	                      |	УчетРезервовТМЦОбороты.Склад
	                      |
	                      |ИНДЕКСИРОВАТЬ ПО
	                      |	ЗаказНаПроизводство,
	                      |	Номенклатура,
	                      |	ХарактеристикаНоменклатуры,
	                      |	Склад
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////­////////////////////
	                      |ВЫБРАТЬ
	                      |	УчетРезервовТМЦОстатки.Заказ КАК ЗаказНаПроизводство,
	                      |	УчетРезервовТМЦОстатки.Номенклатура КАК Номенклатура,
	                      |	УчетРезервовТМЦОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	УчетРезервовТМЦОстатки.Склад КАК Склад,
	                      |	СУММА(УчетРезервовТМЦОстатки.КоличествоОстаток) КАК КоличествоОстаток
	                      |ПОМЕСТИТЬ вт_ОстаткиРезервов
	                      |ИЗ
	                      |	РегистрНакопления.УчетРезервовТМЦ.Остатки(
	                      |			&КонецПериода,
	                      |			Номенклатура В
	                      |					(ВЫБРАТЬ
	                      |						вт_ОборотыРезервов.Номенклатура
	                      |					ИЗ
	                      |						вт_ОборотыРезервов)
	                      |				И Заказ В
	                      |					(ВЫБРАТЬ
	                      |						вт_ОборотыРезервов.ЗаказНаПроизводство
	                      |					ИЗ
	                      |						вт_ОборотыРезервов)) КАК УчетРезервовТМЦОстатки
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	УчетРезервовТМЦОстатки.Заказ,
	                      |	УчетРезервовТМЦОстатки.Номенклатура,
	                      |	УчетРезервовТМЦОстатки.ХарактеристикаНоменклатуры,
	                      |	УчетРезервовТМЦОстатки.Склад
	                      |
	                      |ИНДЕКСИРОВАТЬ ПО
	                      |	ЗаказНаПроизводство,
	                      |	Номенклатура,
	                      |	ХарактеристикаНоменклатуры,
	                      |	Склад
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////­////////////////////
	                      |ВЫБРАТЬ
	                      |	вт_ОборотыРезервов.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
	                      |	вт_ОборотыРезервов.Номенклатура КАК Номенклатура,
	                      |	вт_ОборотыРезервов.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	вт_ОборотыРезервов.Склад КАК Склад,
	                      |	вт_ОборотыРезервов.РезервПриход КАК РезервПриход,
	                      |	вт_ОборотыРезервов.РезервРасход КАК РезервРасход,
	                      |	вт_ОстаткиРезервов.КоличествоОстаток КАК КоличествоОстаток
	                      |ПОМЕСТИТЬ вт_ОстаткиИОборотыРезервов
	                      |ИЗ
	                      |	вт_ОборотыРезервов КАК вт_ОборотыРезервов
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ вт_ОстаткиРезервов КАК вт_ОстаткиРезервов
	                      |		ПО вт_ОборотыРезервов.ЗаказНаПроизводство = вт_ОстаткиРезервов.ЗаказНаПроизводство
	                      |			И вт_ОборотыРезервов.Номенклатура = вт_ОстаткиРезервов.Номенклатура
	                      |			И вт_ОборотыРезервов.ХарактеристикаНоменклатуры = вт_ОстаткиРезервов.ХарактеристикаНоменклатуры
	                      |			И вт_ОборотыРезервов.Склад = вт_ОстаткиРезервов.Склад
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////­////////////////////
	                      |ВЫБРАТЬ
	                      |	ПартииТоваровНаСкладахОбороты.Номенклатура КАК Номенклатура,
	                      |	ПартииТоваровНаСкладахОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	ПартииТоваровНаСкладахОбороты.Склад КАК Склад,
	                      |	ПартииТоваровНаСкладахОбороты.КоличествоПриход КАК ОстатокПриход,
	                      |	ПартииТоваровНаСкладахОбороты.КоличествоРасход КАК ОстатокРасход
	                      |ПОМЕСТИТЬ вт_ОборотыОстатков
	                      |ИЗ
	                      |	РегистрНакопления.ПартииТоваровНаСкладах.Обороты(
	                      |			&НачалоПериода,
	                      |			&КонецПериода,
	                      |			,
	                      |			Номенклатура В
	                      |				(ВЫБРАТЬ
	                      |					вт_ОстаткиИОборотыРезервов.Номенклатура
	                      |				ИЗ
	                      |					вт_ОстаткиИОборотыРезервов)) КАК ПартииТоваровНаСкладахОбороты,
	                      |	вт_ОстаткиИОборотыРезервов КАК вт_ОстаткиИОборотыРезервов
	                      |ГДЕ
	                      |	ПартииТоваровНаСкладахОбороты.Номенклатура В (вт_ОстаткиИОборотыРезервов.Номенклатура)
	                      |
	                      |ИНДЕКСИРОВАТЬ ПО
	                      |	Номенклатура,
	                      |	ХарактеристикаНоменклатуры,
	                      |	Склад
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////­////////////////////
	                      |ВЫБРАТЬ
	                      |	ПартииТоваровНаСкладахОстатки.Номенклатура КАК Номенклатура,
	                      |	ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	ПартииТоваровНаСкладахОстатки.Склад КАК Склад,
	                      |	СУММА(ПартииТоваровНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
	                      |ПОМЕСТИТЬ вт_ОстаткиОстатков
	                      |ИЗ
	                      |	РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
	                      |			&КонецПериода,
	                      |			Номенклатура В
	                      |				(ВЫБРАТЬ
	                      |					вт_ОборотыОстатков.Номенклатура
	                      |				ИЗ
	                      |					вт_ОборотыОстатков)) КАК ПартииТоваровНаСкладахОстатки
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ПартииТоваровНаСкладахОстатки.Номенклатура,
	                      |	ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры,
	                      |	ПартииТоваровНаСкладахОстатки.Склад
	                      |
	                      |ИНДЕКСИРОВАТЬ ПО
	                      |	Номенклатура,
	                      |	ХарактеристикаНоменклатуры,
	                      |	Склад
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////­////////////////////
	                      |ВЫБРАТЬ
	                      |	вт_ОборотыОстатков.Номенклатура КАК Номенклатура,
	                      |	вт_ОборотыОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	                      |	вт_ОборотыОстатков.Склад КАК Склад,
	                      |	вт_ОборотыОстатков.ОстатокПриход КАК ОстатокПриход,
	                      |	вт_ОборотыОстатков.ОстатокРасход КАК ОстатокРасход,
	                      |	вт_ОстаткиОстатков.КоличествоОстаток КАК КоличествоОстаток
	                      |ПОМЕСТИТЬ вт_ОстаткиИОборотыОстатков
	                      |ИЗ
	                      |	вт_ОборотыОстатков КАК вт_ОборотыОстатков
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ вт_ОстаткиОстатков КАК вт_ОстаткиОстатков
	                      |		ПО вт_ОборотыОстатков.Номенклатура = вт_ОстаткиОстатков.Номенклатура
	                      |			И вт_ОборотыОстатков.ХарактеристикаНоменклатуры = вт_ОстаткиОстатков.ХарактеристикаНоменклатуры
	                      |			И вт_ОборотыОстатков.Склад = вт_ОстаткиОстатков.Склад"
Показать
11. Zevzm 04.07.24 09:49 Сейчас в теме
(9) К оборотом присоединяете остатки. Почему сразу не взять ВТ Остатки и Обороты?
12. scarl1n 12 04.07.24 09:55 Сейчас в теме
(11)Потому что по заказу много оборотов по одной номенклатуре, а мне нужен итог (сколько было до начала выполнения заказа, сколько по нему прихода, расхода, сколько получилось). Если брать таблицу остатков и оборотов, а затем сгруппировать и просуммировать колонки, то в начальном и конечном остатке неверные данные получатся.
13. Azgerd 04.07.24 09:56 Сейчас в теме
Условие: Номенклатура В (ВЫБРАТЬ вт_ОборотыРезервов.Номенклатура ИЗ вт_ОборотыРезервов) И ЗАКАЗ В (ВЫБРАТЬ вт_ОборотыРезервов.ЗаказНаПроизводство ИЗ вт_ОборотыРезервов.ЗаказНаПроизводство) неправило.
15. scarl1n 12 04.07.24 09:58 Сейчас в теме
16. Azgerd 04.07.24 09:59 Сейчас в теме
Правильно: (Номенклатура, Заказ) В (Выбрать вт_ОборотыРезервов.Номенклатура, вт_ОборотыРезервов.Номенклатура.ЗаказНаПроизводство ИЗ вт_ОборотыРезервов)
Оставьте свое сообщение

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