Помогите оптимизировать запрос Розница 2.3 (блок проверки скидок)
Доброго времени.
Пытаюсь оптимизировать код/запрос ниже. Прошу помощи, сам уже голову сломал. Суть в чем, это код розницы 2.3. Проверка условий скидки. Выполнились, не выполнились. Он проверяет каждую скидку и условия в ней. Суть в том, что на запрос тратится время, при чем довольно много (2 секунды, добавил товар пересчет, вбил количество пересчет, изменил количество пересчет). У нас много комплектов.
Запрос (из поставки не измененный) в цикле, привет 1С. Голову сломал, придумать особо ничего не смог.
Пытаюсь оптимизировать код/запрос ниже. Прошу помощи, сам уже голову сломал. Суть в чем, это код розницы 2.3. Проверка условий скидки. Выполнились, не выполнились. Он проверяет каждую скидку и условия в ней. Суть в том, что на запрос тратится время, при чем довольно много (2 секунды, добавил товар пересчет, вбил количество пересчет, изменил количество пересчет). У нас много комплектов.
Запрос (из поставки не измененный) в цикле, привет 1С. Голову сломал, придумать особо ничего не смог.
Код |
---|
КомплектПокупки = Новый ТаблицаЗначений;
КомплектПокупки.Колонки.Добавить("НомерСтрокиКомплекта", Новый ОписаниеТипов("Строка"));
КомплектПокупки.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
КомплектПокупки.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
КомплектПокупки.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
// Может быть лучше цикл в цикле?
Для Каждого СтрокаУсловия Из Условие.Строки Цикл
Если СтрокаУсловия.ИмяРаздела = "КомплектПокупки" Тогда
НоваяСтрокаКомплекта = КомплектПокупки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаКомплекта, СтрокаУсловия);
КонецЕсли;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Товары.КлючСвязи КАК КлючСвязи,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Количество КАК Количество,
| Товары.Сегмент КАК Сегмент
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|;
|
|//////////////////////////////////////////////////////////// Показать |
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Добавить менеждер временых таблиц и выполнять запрос (3) только
так как если 0, тогда КоличествоКомплектов = 0, а далее
т.е эти строки всё равно будут пропущены.
Если КоличествоКомплектов > 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 Тогда
т.е эти строки всё равно будут пропущены.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот