Помогите оптимизировать запрос Розница 2.3 (блок проверки скидок)

1. shestopalovpro 153 03.10.22 20:21 Сейчас в теме
Доброго времени.

Пытаюсь оптимизировать код/запрос ниже. Прошу помощи, сам уже голову сломал. Суть в чем, это код розницы 2.3. Проверка условий скидки. Выполнились, не выполнились. Он проверяет каждую скидку и условия в ней. Суть в том, что на запрос тратится время, при чем довольно много (2 секунды, добавил товар пересчет, вбил количество пересчет, изменил количество пересчет). У нас много комплектов.

Запрос (из поставки не измененный) в цикле, привет 1С. Голову сломал, придумать особо ничего не смог.

Код
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. spacecraft 03.10.22 21:46 Сейчас в теме
(1) попробуйте индексы для таблиц Товары и ТоварыБезСтрок добавить по полям связи в соединениях.

Если в таблице КомплектПокупки значений больше чем в других, то и для нее индексы так же добавить.
Sashares; +1 Ответить
2. starjevschik 03.10.22 20:53 Сейчас в теме
Не видно замера производительности, он потерялся, похоже, при вставке кода. Без него оптимизировать нечего.
3. shestopalovpro 153 03.10.22 21:26 Сейчас в теме
(2) РезультатПакета = Запрос.ВыполнитьПакет(); 54 % Времени занимает
6. Sashares 34 03.10.22 23:28 Сейчас в теме
(3)54% от двух секунд?

А вот эта строка сколько занимает?
СтрокиЧека = СтрокаДереваСкидок.СтруктураДополнительныхДанных.ТаблицаТоваровПоСегментам.НайтиСтроки(СтруктураПоиска);
5. dehro 5 03.10.22 23:01 Сейчас в теме
Добавить менеждер временых таблиц и выполнять запрос (3) только
Если КоличествоКомплектов > 0 Тогда


ВЫБРАТЬ
            |    КомплектПокупки.Номенклатура КАК Номенклатура,
            |    КомплектПокупки.Характеристика КАК Характеристика,
            |    ВЫБОР
            |        КОГДА ЕСТЬNULL(Товары.Количество, 0) = 0
            |                ИЛИ КомплектПокупки.Количество = 0
            |            ТОГДА 0
            |        ИНАЧЕ ВЫБОР
            |                КОГДА (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))) = (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 3)))
            |                    ТОГДА ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))
            |                ИНАЧЕ ВЫБОР
            |                        КОГДА (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))) * КомплектПокупки.Количество - Товары.Количество >= 0
            |                            ТОГДА (ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))) - 1
            |                        ИНАЧЕ ВЫРАЗИТЬ(Товары.Количество / КомплектПокупки.Количество КАК ЧИСЛО(15, 0))
            |                    КОНЕЦ
            |            КОНЕЦ
            |    КОНЕЦ КАК КоличествоКомплектов
            |ПОМЕСТИТЬ ТаблицаКомплектовБезСтрок
            |ИЗ
            |    КомплектПокупки КАК КомплектПокупки
            |        ЛЕВОЕ СОЕДИНЕНИЕ ТоварыБезСтрок КАК Товары
            |        ПО КомплектПокупки.Номенклатура = Товары.Номенклатура
            |            И КомплектПокупки.Характеристика = Товары.Характеристика
            |            И Товары.Сегмент = &Сегмент
             | ГДЕ ЕСТЬNULL(Товары.Количество, 0) >0
Показать

так как если 0, тогда КоличествоКомплектов = 0, а далее
Если ВыборкаСтроки.КоличествоКомплектов > 0 Тогда

т.е эти строки всё равно будут пропущены.
7. muskul 04.10.22 12:46 Сейчас в теме
Где то видел что в рознице была кнопка запускать расчет скидок только перед пробитием
Оставьте свое сообщение

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