То тормозит, то не тормозит Подбор товаров в документ продажи

1. user1274184 10.10.23 11:01 Сейчас в теме
Комплексная автоматизация 2.5.99. При открытии формы обработки Подбор товаров в документ продажи, периодически начинается вис на 3-5 минут у определенных пользователей и определенных клиентов, выбранных в Заказе клиента при условии включенной галки Только в наличии на складе. 2 недели может висеть, потом 2 недели не висит, что происходит - непонятно. На продуктиве может висеть, не тестовой нет, в произвольной комбинации. Все кэши, конечно же, сбрасывал.

Вытащил запрос динамического списка номенклатуры, он отрабатывает в консоли без отборов за 3-5 сек, выдает 200000 строк.

Самое интересное, пока вытаскивал текст запроса, поставил пару точек останова в процедуре ОбщийМодуль.ПриСозданииФормыПодбораНаСервере. После прогона по точкам останова открытие формы подбора перестало тормозить!

Можете подсказать, что за глюки такие ловятся, куда смотреть? Когда подбор тормозит, в технологический журнал по фильтру долгих запросов попадает жуткий запрос. СУБД Postgres.
По теме из базы знаний
Найденные решения
8. starik-2005 3039 11.10.23 10:45 Сейчас в теме
1С не рекомендуют соединяться с подзапросами. С валютой не страшно - она там, полагаю, вообще выбирается в небольшом количестве. А с ценами все сложнее. При том там уже отобраны характеристика и вид цены, поэтому не совсем ясно, что они делают в соединении.

Можно попробовать вытащить валюты и цены во временные таблицы (да, динамический список умеет теперь с ними жить). Проиндектировать цены по номенклатуре. Посмотреть, что получится.

Кстати, не совсем понятно, зачем два раза к курсам валют обращаются, но временная таблица тут должна помочь точно.

Ну и давайте почитаем, сколько тут соединений "ЦеныНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Числитель"?
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 10.10.23 11:56 Сейчас в теме
(1) Надо найти где рождается этот жуткий запрос.
3. user1274184 10.10.23 13:45 Сейчас в теме
(2)Где в 1С он рождается найдено. В консоли работает нормально. В технологическом журнале посгрешный запрос.
4. RustamZz 10.10.23 13:50 Сейчас в теме
(3) А запрос 1С можно посмотреть?
5. user1274184 10.10.23 15:39 Сейчас в теме
(4)
ВЫБРАТЬ
	
	СправочникНоменклатура.Ссылка КАК Ссылка,
	СправочникНоменклатура.Артикул КАК Артикул,
	СправочникНоменклатура.Код КАК Код,
	СправочникНоменклатура.Наименование КАК Наименование,
	СправочникНоменклатура.ПометкаУдаления КАК ПометкаУдаления,
	СправочникНоменклатура.Родитель КАК Родитель,
	СправочникНоменклатура.ЭтоГруппа КАК ЭтоГруппа,
	СправочникНоменклатура.Ссылка КАК Номенклатура,
	СправочникНоменклатура.Ссылка КАК ЭлементСписка,
	СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
	СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	
	ВЫБОР КОГДА СправочникНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор) ТОГДА
		ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.ВариантРасчетаЦеныНабора, ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка))
	ИНАЧЕ
		ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка)
	КОНЕЦ КАК ВариантРасчетаЦеныНабора,
	ВариантыКомплектацииНоменклатуры.СодержитТовары КАК СодержитТовары,
	ВариантыКомплектацииНоменклатуры.СодержитУслуги КАК СодержитУслуги,
	
	СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	СправочникНоменклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
	СправочникНоменклатура.Качество КАК Качество,
	СправочникНоменклатура.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик,
	ВЫБОР
		КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
			ТОГДА ИСТИНА
		КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)) И ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитТовары, ЛОЖЬ) И Не ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитУслуги, ЛОЖЬ)
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК ЭтоТовар,
	ВЫБОР
		КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа))
			ТОГДА ИСТИНА
		КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)) И ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитУслуги, ЛОЖЬ) И НЕ ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитТовары, ЛОЖЬ)
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК ЭтоУслуга,
	ВЫБОР
		КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры)
			ТОГДА СправочникНоменклатура.ВидНоменклатуры
		КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
			ТОГДА СправочникНоменклатура.Ссылка
		КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры)
			ТОГДА СправочникНоменклатура.ВладелецХарактеристик
		ИНАЧЕ Неопределено
	КОНЕЦ КАК ВладелецХарактеристик,
	ВЫБОР
		КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
			ТОГДА ЛОЖЬ
		ИНАЧЕ ИСТИНА
	КОНЕЦ КАК ХарактеристикиИспользуются,
	ВЫБОР
		КОГДА СправочникНоменклатура.ЭтоГруппа
			ТОГДА ВЫБОР
					КОГДА СправочникНоменклатура.ПометкаУдаления
						ТОГДА 13
					ИНАЧЕ 12
				КОНЕЦ
		ИНАЧЕ ВЫБОР
				КОГДА СправочникНоменклатура.ЕстьТоварыДругогоКачества
					ТОГДА 4 + ВЫБОР
							КОГДА СправочникНоменклатура.ПометкаУдаления
								ТОГДА 1
							ИНАЧЕ 0
						КОНЕЦ + ВЫБОР
							КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
								ТОГДА 0
							ИНАЧЕ 2
						КОНЕЦ
				ИНАЧЕ -1 + ВЫБОР
						КОГДА СправочникНоменклатура.ПометкаУдаления
							ТОГДА 1
						ИНАЧЕ 0
					КОНЕЦ + ВЫБОР
						КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
							ТОГДА 1
						ИНАЧЕ 3
					КОНЕЦ
			КОНЕЦ
	КОНЕЦ КАК ИндексКартинки,

	&ВидыЦен КАК ВидЦены,
	ЕСТЬNULL(ЦеныНоменклатуры.Упаковка, ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)) КАК Упаковка,
	ВЫРАЗИТЬ(ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) * ВЫБОР
			КОГДА &Валюта <> ЦеныНоменклатуры.Валюта
				ТОГДА ВЫБОР
						КОГДА ЕСТЬNULL(КурсыСрезПоследнихВалютаЦены.КурсЗнаменатель, 0) > 0
								И ЕСТЬNULL(КурсыСрезПоследнихВалютаЦены.КурсЧислитель, 0) > 0
								И ЕСТЬNULL(КурсыСрезПоследнихВалютаДокумента.КурсЗнаменатель, 0) > 0
								И ЕСТЬNULL(КурсыСрезПоследнихВалютаДокумента.КурсЧислитель, 0) > 0
							ТОГДА КурсыСрезПоследнихВалютаЦены.КурсЧислитель * КурсыСрезПоследнихВалютаДокумента.КурсЗнаменатель / (КурсыСрезПоследнихВалютаДокумента.КурсЧислитель * КурсыСрезПоследнихВалютаЦены.КурсЗнаменатель)
						ИНАЧЕ 0
					КОНЕЦ
			ИНАЧЕ 1
		КОНЕЦ КАК ЧИСЛО(31,2)) КАК Цена,
	ВЫРАЗИТЬ(ЕСТЬNULL(ВсеОстатки.ВНаличии, 0) / ЕСТЬNULL(ВЫБОР
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
				И ЦеныНоменклатуры.Номенклатура.ВесИспользовать
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Числитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ВесЧислитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ВесЗнаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Числитель / ЦеныНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ВесЧислитель / ЦеныНоменклатуры.Номенклатура.ВесЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем)
				И ЦеныНоменклатуры.Номенклатура.ОбъемИспользовать
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ОбъемЕдиницаИзмерения.Числитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ОбъемЧислитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ОбъемЗнаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ОбъемЕдиницаИзмерения.Числитель / ЦеныНоменклатуры.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ОбъемЧислитель / ЦеныНоменклатуры.Номенклатура.ОбъемЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)
				И ЦеныНоменклатуры.Номенклатура.ПлощадьИспользовать
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ПлощадьЧислитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ПлощадьЗнаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель / ЦеныНоменклатуры.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ПлощадьЧислитель / ЦеныНоменклатуры.Номенклатура.ПлощадьЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина)
				И ЦеныНоменклатуры.Номенклатура.ДлинаИспользовать
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ДлинаЕдиницаИзмерения.Числитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ДлинаЧислитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ДлинаЗнаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ДлинаЕдиницаИзмерения.Числитель / ЦеныНоменклатуры.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ДлинаЧислитель / ЦеныНоменклатуры.Номенклатура.ДлинаЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
		КОГДА (ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Мощность)
					ИЛИ ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Энергия)
					ИЛИ ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ЭлектрическийЗаряд)
					ИЛИ ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Время))
				И ЦеныНоменклатуры.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ЕдиницаИзмерения.Числитель / ЦеныНоменклатуры.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
			ТОГДА 1
		ИНАЧЕ NULL
	КОНЕЦ, 1) КАК ЧИСЛО(15, 3)) КАК ВНаличииОстаток,
	ЕСТЬNULL(ВсеОстатки.ВНаличии, 0) КАК ВНаличииВБазовыхЕдиницах,
	ВЫРАЗИТЬ(ЕСТЬNULL(ВсеОстатки.Свободно, 0) / ЕСТЬNULL(ВЫБОР
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Вес)
				И ЦеныНоменклатуры.Номенклатура.ВесИспользовать
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Числитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ВесЧислитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ВесЗнаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Числитель / ЦеныНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ВесЧислитель / ЦеныНоменклатуры.Номенклатура.ВесЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Объем)
				И ЦеныНоменклатуры.Номенклатура.ОбъемИспользовать
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ОбъемЕдиницаИзмерения.Числитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ОбъемЧислитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ОбъемЗнаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ОбъемЕдиницаИзмерения.Числитель / ЦеныНоменклатуры.Номенклатура.ОбъемЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ОбъемЧислитель / ЦеныНоменклатуры.Номенклатура.ОбъемЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Площадь)
				И ЦеныНоменклатуры.Номенклатура.ПлощадьИспользовать
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ПлощадьЧислитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ПлощадьЗнаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ПлощадьЕдиницаИзмерения.Числитель / ЦеныНоменклатуры.Номенклатура.ПлощадьЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ПлощадьЧислитель / ЦеныНоменклатуры.Номенклатура.ПлощадьЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Длина)
				И ЦеныНоменклатуры.Номенклатура.ДлинаИспользовать
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ДлинаЕдиницаИзмерения.Числитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ДлинаЧислитель, 0) <> 0
				И ЕСТЬNULL(ЦеныНоменклатуры.Номенклатура.ДлинаЗнаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ДлинаЕдиницаИзмерения.Числитель / ЦеныНоменклатуры.Номенклатура.ДлинаЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ДлинаЧислитель / ЦеныНоменклатуры.Номенклатура.ДлинаЗнаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
		КОГДА (ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Мощность)
					ИЛИ ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Энергия)
					ИЛИ ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.ЭлектрическийЗаряд)
					ИЛИ ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Время))
				И ЦеныНоменклатуры.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины = ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ((ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))) / (ВЫРАЗИТЬ(ЦеныНоменклатуры.Номенклатура.ЕдиницаИзмерения.Числитель / ЦеныНоменклатуры.Номенклатура.ЕдиницаИзмерения.Знаменатель КАК ЧИСЛО(17, 7))) КАК ЧИСЛО(17, 7))
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.Упаковка)
				И ЕСТЬNULL(ЦеныНоменклатуры.Упаковка.Знаменатель, 0) <> 0
			ТОГДА ВЫРАЗИТЬ(ЦеныНоменклатуры.Упаковка.Числитель / ЦеныНоменклатуры.Упаковка.Знаменатель КАК ЧИСЛО(17, 7))
		КОГДА ЦеныНоменклатуры.Упаковка.ТипИзмеряемойВеличины = ЗНАЧЕНИЕ(Перечисление.ТипыИзмеряемыхВеличин.КоличествоШтук)
			ТОГДА 1
		ИНАЧЕ NULL
	КОНЕЦ, 1) КАК ЧИСЛО(15, 3)) КАК Доступно
ИЗ
	
	Справочник.Номенклатура КАК СправочникНоменклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры КАК ВариантыКомплектацииНоменклатуры
		ПО ВариантыКомплектацииНоменклатуры.Владелец = СправочникНоменклатура.Ссылка
		И ВариантыКомплектацииНоменклатуры.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
		И ВариантыКомплектацииНоменклатуры.Основной

	
	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
			,
			ВидЦены = &ВидыЦен
				И Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
			{(Номенклатура).* КАК Номенклатура}
		) КАК ЦеныНоменклатуры
	ПО (ЦеныНоменклатуры.Номенклатура = СправочникНоменклатура.Ссылка)
		И (ЦеныНоменклатуры.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
	И (ЦеныНоменклатуры.ВидЦены = &ВидыЦен)
	
	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних(,
				БазоваяВалюта В (ВЫБРАТЬ
					БазоваяВалютаПоУмолчанию.Значение КАК Значение
				ИЗ
					Константа.БазоваяВалютаПоУмолчанию КАК БазоваяВалютаПоУмолчанию)) КАК КурсыСрезПоследнихВалютаЦены
	ПО (КурсыСрезПоследнихВалютаЦены.Валюта = ЦеныНоменклатуры.Валюта)

	
	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних(, Валюта = &Валюта
				И БазоваяВалюта В (ВЫБРАТЬ
					БазоваяВалютаПоУмолчанию.Значение КАК Значение
				ИЗ
					Константа.БазоваяВалютаПоУмолчанию КАК БазоваяВалютаПоУмолчанию)) КАК КурсыСрезПоследнихВалютаДокумента
	ПО (ИСТИНА)

	
	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаспределениеЗапасов КАК ВсеОстатки
		ПО ВсеОстатки.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ОстатокНаСкладе)
		И ВсеОстатки.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
		И ВсеОстатки.Склад = &Склад
		И ВсеОстатки.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
		И ВсеОстатки.Номенклатура = СправочникНоменклатура.Ссылка

ГДЕ
	
	НЕ СправочникНоменклатура.ЭтоГруппа

	
{ГДЕ
	(1 В
		(ВЫБРАТЬ ПЕРВЫЕ 1
			1
		ИЗ
			РегистрСведений.НоменклатураСегмента КАК Сегменты
		ГДЕ
			Сегменты.Номенклатура = СправочникНоменклатура.Ссылка
			И Сегменты.Сегмент = &СегментНоменклатуры))}

Показать
6. RustamZz 10.10.23 17:11 Сейчас в теме
(5) Для РС со срезами есть физические таблицы? Очень похоже, что система считает что их нет и переделывает на запрос к виртуальной таблице.
7. user1274184 11.10.23 08:57 Сейчас в теме
(6) Вот такие физические регистры есть
Прикрепленные файлы:
8. starik-2005 3039 11.10.23 10:45 Сейчас в теме
1С не рекомендуют соединяться с подзапросами. С валютой не страшно - она там, полагаю, вообще выбирается в небольшом количестве. А с ценами все сложнее. При том там уже отобраны характеристика и вид цены, поэтому не совсем ясно, что они делают в соединении.

Можно попробовать вытащить валюты и цены во временные таблицы (да, динамический список умеет теперь с ними жить). Проиндектировать цены по номенклатуре. Посмотреть, что получится.

Кстати, не совсем понятно, зачем два раза к курсам валют обращаются, но временная таблица тут должна помочь точно.

Ну и давайте почитаем, сколько тут соединений "ЦеныНоменклатуры.Номенклатура.ВесЕдиницаИзмерения.Числитель"?
9. user1274184 13.10.23 15:58 Сейчас в теме
(8)Спасибо, пойду этим путем как наиболее вероятным.
Оставьте свое сообщение

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