Помогите, пожалуйста, оптимизировать запрос

1. user1671936 1 22.11.22 09:19 Сейчас в теме
Добрый день. Есть запрос. Зависает при выполнении. Подскажите, пожалуйста, как можно оптимизировать?
ВЫБРАТЬ
	РеализацияТоваровУслуг.Контрагент КАК Контрагент,
	РеализацияТоваровУслуг.Ссылка КАК Реализация
ПОМЕСТИТЬ ВТСсылки
ИЗ
	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
	РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТСсылки.Реализация КАК Реализация,
	РеализацияТоваровУслугТовары.Сумма КАК Сумма,
	РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
	ВТСсылки.Контрагент КАК Контрагент
ПОМЕСТИТЬ ВТРеализации
ИЗ
	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСсылки КАК ВТСсылки
		ПО (ВТСсылки.Реализация = РеализацияТоваровУслугТовары.Ссылка)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоступлениеТоваровУслуг.Ссылка КАК Поступление,
	ПоступлениеТоваровУслуг.Дата КАК Дата,
	ПоступлениеТоваровУслуг.Контрагент КАК Контрагент
ПОМЕСТИТЬ ВТСсылкиПоступлений
ИЗ
	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
	ПоступлениеТоваровУслуг.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&ДатаНачала, МЕСЯЦ, -6) И &ДатаОкончания
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТСсылкиПоступлений.Поступление КАК Поступление,
	ВТСсылкиПоступлений.Дата КАК Дата,
	ВТСсылкиПоступлений.Контрагент КАК Контрагент,
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
	ВТРеализации.Реализация КАК Реализация,
	ВТРеализации.Контрагент КАК КонтрагентРеализации
ПОМЕСТИТЬ ВТПоступления
ИЗ
	Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ПРАВОЕ СОЕДИНЕНИЕ ВТРеализации КАК ВТРеализации
		ПО ПоступлениеТоваровУслугТовары.Номенклатура = ВТРеализации.Номенклатура
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСсылкиПоступлений КАК ВТСсылкиПоступлений
		ПО (ВТСсылкиПоступлений.Поступление = ПоступлениеТоваровУслугТовары.Ссылка)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВТСсылкиПоступлений.Поступление,
	ВТСсылкиПоступлений.Дата,
	ВТСсылкиПоступлений.Контрагент,
	ПоступлениеИзПереработкиПродукция.Номенклатура,
	ВТРеализации.Реализация,
	ВТРеализации.Контрагент
ИЗ
	Документ.ПоступлениеИзПереработки.Продукция КАК ПоступлениеИзПереработкиПродукция
		ПРАВОЕ СОЕДИНЕНИЕ ВТРеализации КАК ВТРеализации
		ПО ПоступлениеИзПереработкиПродукция.Номенклатура = ВТРеализации.Номенклатура
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСсылкиПоступлений КАК ВТСсылкиПоступлений
		ПО (ВТСсылкиПоступлений.Поступление = ПоступлениеИзПереработкиПродукция.Ссылка)
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. tamidi 8 22.11.22 09:34 Сейчас в теме
(1)Чтобы оптимизировать запрос надо понимать, что в результате нам необходимо получить.
У вас в итоговом запросе идет соединение всей номенклатуры из реализации со всей номенклатурой поступления в разрезе документов и прихода и расхода, и если документов и номенклатуры много, то это может выполняться сильно долга и не факт, что выполнится.
3. user1671936 1 22.11.22 09:43 Сейчас в теме
(2)
Чтобы оптимизировать запрос надо понимать, что в результате нам необходимо получить.
необходимо получить номенклатуру из реализации, и последний документ поступления, по которому эта номенклатура поступила. Кусок запроса с максимумом дата не добавил еще.
4. Zevzm 22.11.22 10:11 Сейчас в теме
(3) Выбирать данные из документов не самая лучшая идея, ваши документы пишут данные в РН, не пробовали брать данные оттуда? Какая у вас конфигурация?
tamidi; user1089020; user1671936; +3 Ответить
8. user1671936 1 22.11.22 10:34 Сейчас в теме
(4)
ваши документы пишут данные в РН, не пробовали брать данные оттуда?
спасибо, попробую.
5. minarenko 22.11.22 10:17 Сейчас в теме
(3)первый и второй пакет можно объединить так, вы все равно суммы потом как вижу не используете
ВЫБРАТЬ РАЗЛИЧНЫЕ
    РеализацияТоваровУслугТовары.Ссылка КАК Реализация,
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент
ПОМЕСТИТЬ ВТРеализации
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
;
Показать
user1671936; +1 Ответить
6. minarenko 22.11.22 10:19 Сейчас в теме
(3) посмотрите размер ВТРеализации, если несколько десятков тысяч записей, то добавляйте индекс на номенклатуру
user1671936; +1 Ответить
7. user1671936 1 22.11.22 10:33 Сейчас в теме
(6) около 19000 записей.
(6)
то добавляйте индекс на номенклатуру
попробую, спасибо.
9. beldieff 22.11.22 10:35 Сейчас в теме
(6)Ну и поступление тоже надо индексировать. И разименовать
ПО (Выразить(ВТСсылкиПоступлений.Поступление Как Додумент.ПоступлениеТоваровУслуг) = ПоступлениеТоваровУслугТовары.Ссылка)
user1671936; +1 Ответить
13. Sashares 34 22.11.22 10:58 Сейчас в теме
(9)
И разименовать

Зачем?
16. beldieff 22.11.22 12:08 Сейчас в теме
(13)
Зачем?
Невнимательно читал. Увидел
 ПО (ВТСсылкиПоступлений.Поступление = ПоступлениеИзПереработкиПродукция.Ссылка) 
и   ПО (ВТСсылкиПоступлений.Поступление = ПоступлениеТоваровУслугТовары.Ссылка) 
и предположил что ВТСсылкиПоступлений.Поступление составного типа.
но в (11) уже вчитался и понял что связь с ПоступлениеИзПереработкиПродукция вообще бесмысленна.
12. SeTIrk 22.11.22 10:55 Сейчас в теме
(3) А для чего вам переработка? То что номенклатура могла прийти по переработке?
11. beldieff 22.11.22 10:53 Сейчас в теме
(1)
-Выбрать всё в отдельные ВТшки
-Проиндексировать поля по которым будет связь
-Не обращаться к одной и тойже таблице несколько раз. ВТСсылки и ВТРеализации можно получить одним запросом в одну ВТ, так же как и ВТСсылкиПоступлений незачем связывать с ПоступлениеТоваровУслугТовары
-Ограничить количество строк в таблицах. Так если нам в ВТСсылкиПоступлений или ПоступлениеИзПереработкиПродукция нужны только документы с номенклатурой из реализаций почему бы при выборке не поставить условие на номенклатуру из ВТРеализации.
-Разименовывать поля составного типа через Выразить()
ВЫБРАТЬ
    ВТСсылкиПоступлений.Поступление,
    ВТСсылкиПоступлений.Дата,
    ВТСсылкиПоступлений.Контрагент,
    ПоступлениеИзПереработкиПродукция.Номенклатура,
    ВТРеализации.Реализация,
    ВТРеализации.Контрагент
ИЗ
    Документ.ПоступлениеИзПереработки.Продукция КАК ПоступлениеИзПереработкиПродукция
        ПРАВОЕ СОЕДИНЕНИЕ ВТРеализации КАК ВТРеализации
        ПО ПоступлениеИзПереработкиПродукция.Номенклатура = ВТРеализации.Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСсылкиПоступлений КАК ВТСсылкиПоступлений
        ПО (ВТСсылкиПоступлений.Поступление = ПоступлениеИзПереработкиПродукция.Ссылка)
Показать

этот блок вообще не понятен он же пустой всегда
user1671936; +1 Ответить
10. mrSallivan 73 22.11.22 10:36 Сейчас в теме
А зачем вы делаете соединение реализаций к реализациям?
РТУ.Товары.Ссылка - там же есть реквизиты, которые в первом пакете вы получаете.
Я бы еще добавил условие на Проведен, чтобы мусор убрать.
tamidi; user1089020; user1671936; +3 Ответить
14. SeTIrk 22.11.22 11:20 Сейчас в теме
Без переработки, с максимумом по дате прихода, но без фильтра даты.
По идее надо ВТ переработки, и потом совместить.

ВЫБРАТЬ
	РеализацияТоваровУслугТовары.Ссылка КАК Реализация,
	РеализацияТоваровУслугТовары.Сумма КАК Сумма,
	РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
	РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент
ПОМЕСТИТЬ ВТРеализации
ИЗ
	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
	РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
	И РеализацияТоваровУслугТовары.Ссылка.Проведен
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ВТРеализации.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТНоменклатура
ИЗ
	ВТРеализации КАК ВТРеализации
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
	МАКСИМУМ(ПоступлениеТоваровУслугТовары.Ссылка.Дата) КАК Дата
ПОМЕСТИТЬ ВТМаксимумыПриходов
ИЗ
	ВТНоменклатура КАК ВТНоменклатура
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ПО ВТНоменклатура.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура
ГДЕ
	ПоступлениеТоваровУслугТовары.Ссылка.Проведен

СГРУППИРОВАТЬ ПО
	ПоступлениеТоваровУслугТовары.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТМаксимумыПриходов.Номенклатура КАК Номенклатура,
	ВТМаксимумыПриходов.Дата КАК Дата,
	ПоступлениеТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент,
	ПоступлениеТоваровУслугТовары.Ссылка.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТПоступления
ИЗ
	ВТМаксимумыПриходов КАК ВТМаксимумыПриходов
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
		ПО ВТМаксимумыПриходов.Номенклатура = ПоступлениеТоваровУслугТовары.Номенклатура
			И ВТМаксимумыПриходов.Дата = ПоступлениеТоваровУслугТовары.Ссылка.Дата
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТПоступления.Номенклатура КАК Номенклатура,
	ВТПоступления.Ссылка КАК Приобретение,
	ВТПоступления.Контрагент КАК Поставщик,
	ВТРеализации.Реализация КАК Реализация,
	ВТРеализации.Контрагент КАК Покупатель
ИЗ
	ВТРеализации КАК ВТРеализации
		ЛЕВОЕ СОЕДИНЕНИЕ ВТПоступления КАК ВТПоступления
		ПО ВТРеализации.Номенклатура = ВТПоступления.Номенклатура
Показать


103тс за полторы минуты, приемлемо, но лучше на хозрасчетный перейти, с фильтрацией по типу регистратора
user1671936; +1 Ответить
15. coollerinc 188 22.11.22 11:45 Сейчас в теме
Че то мне кажется этот запрос не оптимизировать нужно. Вряд ли он выдавал бы нужный результат, даже если бы работал
Оставьте свое сообщение

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