Ускоряем списание партий УПП 1.2 / 1.3 / УТ 10.3

25.06.13

База данных - HighLoad оптимизация

Не секрет, что многие пользователи, использующие партионный учет (а таких очень много, даже среди огромных холдингов, несмотря на пропаганду РАУЗ) при больших нагрузках сталкиваются с резким замедлением списания партий.  

Чего только не придумывалось, чтобы как то решить эту проблему – это и отсроченное списание партий ночью и сверхчастое обновление статистики SQL, но почему-то среди общих рекомендаций не встречается оптимизация именно типового кода УПП.

 

В типовой УПП механизм списания партий реализован очень давно. Его основная логика не менялась как минимум с релиза 1.2.16 по 1.3.26, т.е 4 года. Скорее всего за эти годы не раз сменялись внутренние стандарты разработки прикладных решений в самой 1с. На текущий момент не рекомендуется использовать в запросе соединение с подзапросом, но так как код был достаточно старый, то такое соединение использовалось до релиза 1.3.26. Ситуация наконец была исправлена в релизе  1.3.27, но как показала личная практика это решение не принесло значимой пользы при больших нагрузках.

 

Задолго до релиза 1.3.27 я столкнулся с тем, что на предприятии имеющем розничное подразделение с несколькими сотнями документов «Отчет о розничных продажах» в день со средним количеством строк порядка 100 уже невозможно было провести весь объем документов даже за окно доступное ночью (работа базы была почти круглосуточная, но ночью нагрузка значительно меньше). В среднем документ «Отчет о розничных продажах» проводился по 3-5 минут, если кто-то вдруг решил перепровести документ днем, то время проведения могло доходить до 30 минут, что конечно сильно тормозило других пользователей. Т.е. ситуация стала абсолютно невыносимой. Доступа к серверу SQL в той организации я не имел, поэтому у меня был один выход – попробовать оптимизировать типовой код.

 

Для поиска узкого места выгрузил копию базы в файловую (на тот момент она еще выгружалась, достаточно было очистить регистр сведений «Версии объектов»). Отладчиком был найден типовой код на котором висело по минуте – это были банальные строки Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам) в процедурах ПолучитьДеревоПартийНаСкладахУпр, ПолучитьДеревоПартийНаСкладахБух, ПолучитьДеревоПартийНаСкладахНал общего модуля УправлениеЗапасамиПартионныйУчет.

 

Посмотрев текст запроса и грубо упростив его получаем:

 

ВЫБРАТЬ

            ПартииТоваровНаСкладах.Номенклатура

ИЗ

            РегистрСведений.СписанныеТовары КАК СписанныеТовары

                                   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(

                                   &Дата,

                                   Номенклатура В

                                       (ВЫБРАТЬ

                                           РегистрСведений.СписанныеТовары.Номенклатура

                                       ИЗ

                                           РегистрСведений.СписанныеТовары

                                       ГДЕ

                                           РегистрСведений.СписанныеТовары.Регистратор = &Ссылка)) КАК ПартииТоваровНаСкладах

                        ПО СписанныеТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура

ГДЕ

            СписанныеТовары.Регистратор = &Ссылка

 

 

Что мне здесь не понравилось:

1) Из регистра сведений «Списанные товары» информация выбирается не один раз, а несколько

2) Получается что сначала идет соединение, а только потом отбор условием ГДЕ СписанныеТовары.Регистратор = &Ссылка.

 

Обе эти проблемы решаются элементарно – перед

Возврат Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);

В трех вышеуказнных функция вставляем код

   Запрос.Текст =
   
"ВЫБРАТЬ
    |    *
    |ПОМЕСТИТЬ СписанныеТовары
    |ИЗ
    |    РегистрСведений.СписанныеТовары
    |ГДЕ
    |    Регистратор В (&ОсновнойДокумент, &Ссылка)
    |ИНДЕКСИРОВАТЬ ПО Номенклатура;
    |
    |"
+ СтрЗаменить(Запрос.Текст, "РегистрСведений.СписанныеТовары", "СписанныеТовары");

Этот сверхпростой код принес колоссальный эффект – документы которые проводились по 3-5 мин стали проводиться по 20-40 секунд. Пробовал добавлять различные индексы кроме Номенклатуры и играться с условиями – где-то это давало дополнительный прирост местами даже в 2 раза.

 

Этот код ускоряет весь механизм списания партий. На других документах списывающих партии время проведения так же значительно снизилось.

 

Так же я пробовал эту модификацию на текущем месте работы – здесь не было особых проблем с проведением документов списывающих партии, тем не менее, код дал ускорение при восстановлении партионной последовательности при закрытии месяца. Особенно это было заметно в случае когда сервер 1с длительное время работал без перезагрузки. При переходе на релиз 1.3.27 раз уж был изменен типовой код в этом месте решил отказаться от своей доработки, но на следующий же день получил несколько звонков от сбыта, что реализации стали проводиться заметно дольше. Сейчас уже более полугода работаем на более мощном сервере, но повторять эксперимент уже нет желания.

 

Позже на просторах интернета был найден и другой способ – сверхчастое обновление статистики только по нужным регистрам.

 

Дополнено 25.06.2013 - Теперь исправление запроса корректно и для ордерной схемы. Код раскрашен разукрашкой - //infostart.ru/public/19856/

См. также

Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    2990    spyke    27    

42

Быстродействие типовой 1С

HighLoad оптимизация Платформа 1С v8.3 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    5116    vasilev2015    19    

37

Анализируем SQL сервер глазами 1С-ника

HighLoad оптимизация Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих зааросов на sql, ожиданий, конвертация запроса в 1с и рекомендации где может тормозить

1 стартмани

15.02.2024    7648    158    ZAOSTG    68    

96

Удаление строк из таблицы значений различными способами с замером производительности

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    5982    doom2good    48    

63

Опыт оптимизации 1С на PostgreSQL

HighLoad оптимизация Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    8873    ivanov660    6    

76

ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ

HighLoad оптимизация Бесплатно (free)

Казалось бы, КОРП-системы должны быть устойчивы, быстры и надёжны. Но, работая в рамках РКЛ, мы видим немного другую картину. Об основных болевых точках КОРП-систем и подходах к их решению пойдет речь в статье.

15.11.2023    5105    a.doroshkevich    20    

72

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16190    skovpin_sa    14    

98
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
100. insurgut 207 08.05.15 10:00 Сейчас в теме
Эх, на клиент-серверном варианте в моем случае доработки только замедлили перепроведение :(
101. ZLENKO 398 19.06.15 14:43 Сейчас в теме
(100) insurgut, "Эх, на клиент-серверном варианте в моем случае доработки только замедлили перепроведение"

Так отож... Тестировать надо на том на чем работать будет.
102. asp-1c 21.07.15 13:55 Сейчас в теме
Нижайший поклон!
База задыхалась со старой методикой проводки.
Протестировал старый код запроса ПолучитьОстаткиПартийНаСкладахУпр на скорость. Документ 30 строк табличной части проводил с давностью 5 дней. Скорость выполнения в КонсолиЗапросов не падала ниже 7 секунд даже при повторных запросах (первый запрос дольше, около 13 секунд!!!)

После оптимизации запрос выполнялся меньше секунды. Итог данных - тот же.
СПАСИБО! И еще раз, Нижайший поклон! Очень помогли!
103. insurgut 207 21.07.15 16:33 Сейчас в теме
Интересно, а кто-нибудь задавался скоростью перепроведения в Бухгалтерии? Жесть как долго и уныло там все перепроводится :(
104. ZLENKO 398 28.07.15 15:44 Сейчас в теме
(103) insurgut, "кто-нибудь задавался скоростью перепроведения в Бухгалтерии? Жесть как долго и уныло там все перепроводится :("

Нужно использовать методику из УПП - данные для проведения получать из регистров накопления, а в регистры плана счетов только записывать. Например, в УПП есть регистр накопления ПартииТоваров бухгалтерский...
105. sonne 20.08.15 17:35 Сейчас в теме
(0) в КА точно такое же проведение по партиям, как и в УПП. Спасибо за публикацию :)
На тестовых данных каждый запрос на получение дерева партий теперь выполняется за 0.7 секунд, вместо 13! Надо добраться до реальной базы и проверить, но кажется, это наше спасение.
106. madway 119 27.05.16 23:22 Сейчас в теме
в регистре "списанные товары" на данный момент 8,5 млн записей.
Поменял запрос на поставленный в шапке, сильной разницы не заметил. РСО с 3 строчками проводился по полторы минуты.
Немного модифицировал запрос, получил время выполнения менее 1 секунды.

Для ознакомления:


  Запрос.Текст =
    "ВЫБРАТЬ
    |    *
    |ПОМЕСТИТЬ СписанныеТовары
    |ИЗ
    |    РегистрСведений.СписанныеТовары
    |ГДЕ
    |    Период = &ОсновнойДокументДата И Регистратор = &ОсновнойДокумент
    |    ИЛИ Период = &СсылкаДата И Регистратор = &Ссылка
    |
    //|ИНДЕКСИРОВАТЬ ПО Номенклатура
    |;
    |" + СтрЗаменить(Запрос.Текст, "РегистрСведений.СписанныеТовары", "СписанныеТовары");

Показать
aupovy; izidakg; Lusha_28; SP2000; dolter; +5 Ответить
107. SP2000 29 06.02.17 07:52 Сейчас в теме
Спасибо большое автору!

(106) Александр и Вам спасибо большое.

Общее время проведение документов сократилось в 6 раз!
108. Wrols 89 01.06.17 11:48 Сейчас в теме
При переходе на платформу 8.2.19.130 данный кусок кода стал дико тормозить (серверный вариант).
Проблема была локализована в способе отбора регистратора "В (&ОсновнойДокумент, &Ссылка)".
Потребовалось изменение на "Регистратор = &ОсновнойДокумент ИЛИ Регистратор = &Ссылка".

Т.е. целиком код:

// ок старт 

Запрос.Текст = 
"ВЫБРАТЬ 
| * 
|ПОМЕСТИТЬ СписанныеТовары 
|ИЗ 
| РегистрСведений.СписанныеТовары 
|ГДЕ 
| Регистратор = &ОсновнойДокумент ИЛИ  Регистратор = &Ссылка 
|ИНДЕКСИРОВАТЬ ПО Номенклатура; 
| 
|" + СтрЗаменить(Запрос.Текст, "РегистрСведений.СписанныеТовары", "СписанныеТовары"); 

// Сообщить(Запрос.Текст); 

// ок финиш
Показать
chetirepda; +1 Ответить
109. Leelon 2 03.11.17 14:04 Сейчас в теме
было 110 секунд, стало 2,4 секунды на одном и том же документе.
Огромное СПАСИБО!!!
110. Vitalk 15.11.17 16:18 Сейчас в теме
Дааа уж..., элементарная доработка сократила проведение документа по партиям с 30 до 1 секунды! Спасибо!
111. Михрутка 29.01.18 02:04 Сейчас в теме
Вставил код из шапки. Серверный вариант на MS SQL. Скорость увеличилась значительно. До добавления - проведения 148 документов - 151 секунда, после, проведние 242 документов - 22 секунды
112. websamson 306 05.02.18 08:53 Сейчас в теме
Выявил проблему с помощью сервиса Гилева. В процедуре ПолучитьДеревоПартийНаСкладахУпр при выполнении запроса было очень много продолжительных вызовов. Заменил текст запроса на запрос из топика. Протестировал на реализации (по ордеру) с табличной частью из 18 строк. Кэш "прогрет" в обоих случаях. Сравнил время выполнения запроса. Типовой код 0.718 сек. Код из топика 0.13 сек. Ускорение выполнения запроса более чем в 5.5 раз.
113. feihuevina 27.12.18 12:26 Сейчас в теме
Спасибо огромное!!!!!!!!!
Стало проводиться в несколько раз быстрее, до этого три года мучался
114. unknown181538 151 04.01.19 22:40 Сейчас в теме
Со второй уже базой разбираюсь.
В первой помогло убрать отбор в параметрах виртуальной таблицы партий.
115. unknown181538 151 06.01.19 19:34 Сейчас в теме
Функция КТ_ЗапросОбщийСлучайСписания()

Возврат "ВЫБРАТЬ
|	СписанныеТовары.НомерСтрокиДокумента,
|	СписанныеТовары.ДокументПартии,
|	СписанныеТовары.Регистратор,
|	СписанныеТовары.Номенклатура КАК Номенклатура,
|	СписанныеТовары.Склад КАК Склад,
|	СписанныеТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
|	СписанныеТовары.ДопустимыйСтатус1 КАК ДопустимыйСтатус1,
|	СписанныеТовары.ДопустимыйСтатус2,
|	СписанныеТовары.ДопустимыйСтатус3,
|	СписанныеТовары.ДопустимыйСтатус4,
|	СписанныеТовары.Качество,
|	СписанныеТовары.ЗаказПартии,
|	СписанныеТовары.СписыватьТолькоПоЗаказу КАК СписыватьТолькоПоЗаказу,
|	СписанныеТовары.СерияНоменклатуры,
|	СписанныеТовары.КодОперацииПартииТоваров
|ПОМЕСТИТЬ СписанныеТовары
|ИЗ
|	РегистрСведений.СписанныеТовары КАК СписанныеТовары
|ГДЕ
|	СписанныеТовары.Регистратор В (&Ссылка, &ОсновнойДокумент)
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	ПартииОстаток.Номенклатура,
|	ПартииОстаток.ХарактеристикаНоменклатуры,
|	ПартииОстаток.Качество,
|	ПартииОстаток.СтатусПартии,
|	ПартииОстаток.Склад,
|	ПартииОстаток.Заказ,
|	ПартииОстаток.СерияНоменклатуры,
|	ПартииОстаток.ДокументОприходования,
|	ПартииОстаток.КоличествоОстаток,
|	ПартииОстаток.СтоимостьОстаток
|ПОМЕСТИТЬ ВТ_Партии
|ИЗ
|	РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
|			&Дат,
|			(Номенклатура, ХарактеристикаНоменклатуры, Склад) В
|				(ВЫБРАТЬ
|					СписанныеТовары.Номенклатура,
|					СписанныеТовары.ХарактеристикаНоменклатуры,
|					СписанныеТовары.Склад
|				ИЗ
|					СписанныеТовары
|				ГДЕ
|					СписанныеТовары.Регистратор = &Ссылка)) КАК ПартииОстаток
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	СписанныеТовары.НомерСтрокиДокумента КАК НомерСтрокиДокумента,
|	ПартииТоваровНаСкладах.Номенклатура,
|	ПартииТоваровНаСкладах.ДокументОприходования КАК ДокументОприходования,
|	ПартииТоваровНаСкладах.ДокументОприходования.Дата КАК ДокументОприходованияДата,
|	ПартииТоваровНаСкладах.Склад,
|	ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
|	ПартииТоваровНаСкладах.СерияНоменклатуры,
|	ПартииТоваровНаСкладах.Качество,
|	ПартииТоваровНаСкладах.Заказ,
|	ПартииТоваровНаСкладах.КоличествоОстаток КАК Количество,
|	ПартииТоваровНаСкладах.СтоимостьОстаток КАК Стоимость,
|	ПартииТоваровНаСкладах.СтатусПартии,
|	ВЫБОР
|		КОГДА СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
|			ТОГДА 0
|		ИНАЧЕ 1
|	КОНЕЦ КАК ЧислоСерияНоменклатуры,
|	ВЫБОР
|		КОГДА СписанныеТовары.ДокументПартии = НЕОПРЕДЕЛЕНО
|			ТОГДА 0
|		ИНАЧЕ ВЫБОР
|				КОГДА СписанныеТовары.ДокументПартии = ПартииТоваровНаСкладах.ДокументОприходования
|					ТОГДА 0
|				ИНАЧЕ 1
|			КОНЕЦ
|	КОНЕЦ КАК ЧислоДокументОприходования,
|	ВЫБОР
|		КОГДА СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО
|			ТОГДА 0
|		ИНАЧЕ ВЫБОР
|				КОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
|					ТОГДА 1
|				ИНАЧЕ 0
|			КОНЕЦ
|	КОНЕЦ КАК ЧислоЗаказ,
|	ВЫБОР
|		КОГДА ПартииТоваровНаСкладах.СтатусПартии = &НаКомиссию
|			ТОГДА 1
|		ИНАЧЕ 0
|	КОНЕЦ КАК ЧислоСтатусПартии
|ИЗ
|	СписанныеТовары КАК СписанныеТовары
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Партии КАК ПартииТоваровНаСкладах
|		ПО СписанныеТовары.Номенклатура = ПартииТоваровНаСкладах.Номенклатура
|			И СписанныеТовары.ХарактеристикаНоменклатуры = ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры
|			И (ВЫБОР
|				КОГДА ПартииТоваровНаСкладах.Качество = &ПустоеКачество
|					ТОГДА ИСТИНА
|				ИНАЧЕ ВЫБОР
|						КОГДА СписанныеТовары.Качество = &ПустоеКачество
|							ТОГДА ПартииТоваровНаСкладах.Качество = &КачествоНовый
|						ИНАЧЕ ПартииТоваровНаСкладах.Качество = СписанныеТовары.Качество
|					КОНЕЦ
|			КОНЕЦ)
|			И (ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад
|				ИЛИ ПартииТоваровНаСкладах.Склад = &ПустойСклад)
|			И (ВЫБОР
|				КОГДА СписанныеТовары.ДопустимыйСтатус1 <> &ПустойСтатус
|						ИЛИ СписанныеТовары.ДопустимыйСтатус2 <> &ПустойСтатус
|						ИЛИ СписанныеТовары.ДопустимыйСтатус3 <> &ПустойСтатус
|						ИЛИ СписанныеТовары.ДопустимыйСтатус4 <> &ПустойСтатус
|					ТОГДА ПартииТоваровНаСкладах.СтатусПартии = &ПустойСтатус
|							ИЛИ ПартииТоваровНаСкладах.СтатусПартии = &СтатусПартииПоОрдеру
|							ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус1
|							ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус2
|							ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус3
|							ИЛИ ПартииТоваровНаСкладах.СтатусПартии = СписанныеТовары.ДопустимыйСтатус4
|				ИНАЧЕ ИСТИНА
|			КОНЕЦ)
|			И (ВЫБОР
|				КОГДА СписанныеТовары.СписыватьТолькоПоЗаказу = ИСТИНА
|					ТОГДА ВЫБОР
|							КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
|								ТОГДА ВЫБОР
|										КОГДА НЕ СписанныеТовары.ЗаказПартии = НЕОПРЕДЕЛЕНО
|											ТОГДА ЛОЖЬ
|										ИНАЧЕ ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
|									КОНЕЦ
|							ИНАЧЕ ИСТИНА
|						КОНЕЦ
|				ИНАЧЕ ВЫБОР
|						КОГДА ПартииТоваровНаСкладах.Заказ <> СписанныеТовары.ЗаказПартии
|							ТОГДА ПартииТоваровНаСкладах.Заказ = &ПустойЗаказ
|						ИНАЧЕ ИСТИНА
|					КОНЕЦ
|			КОНЕЦ)
|			И (СписанныеТовары.СерияНоменклатуры = ПартииТоваровНаСкладах.СерияНоменклатуры
|				ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры)
|ГДЕ
|	СписанныеТовары.Регистратор = &ОсновнойДокумент
|
|УПОРЯДОЧИТЬ ПО
|	ЧислоСерияНоменклатуры,
|	ЧислоДокументОприходования,
|	ЧислоЗаказ,
|	ЧислоСтатусПартии,
|	ДокументОприходованияДата,
|	ДокументОприходования
|ИТОГИ ПО
|	НомерСтрокиДокумента";

КонецФункции

Функция ПолучитьДеревоПартийНаСкладахУпр (МоментКон, СтруктураПараметров)

...
...
...

		
		
	Иначе
		// Общий случай списания
		//ЗаполнитьЗапросПартийНаСкладахУпр(Запрос, ВестиПартионныйУчетПоСкладам, СтратегияСтатусПартии, СпособОценкиМПЗ);
		//Если НЕ СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании тогда
		//	Запрос.Текст = СтрЗаменить(Запрос.Текст,"ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры",
		//	"ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры
		//	|ИЛИ СписанныеТовары.КодОперацииПартииТоваров = &КодРезервирование");
		//	Запрос.УстановитьПараметр("КодРезервирование" , СтруктураПараметров.КодыОпераций.РезервированиеПодЗаказ)
		//КонецЕсли;
Показать


Запрос.Текст = КТ_ЗапросОбщийСлучайСписания(); // 06/01/2019
Если НЕ СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст,"ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры",
"ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры
|ИЛИ СписанныеТовары.КодОперацииПартииТоваров = &КодРезервирование");
Запрос.УстановитьПараметр("КодРезервирование" , СтруктураПараметров.КодыОпераций.РезервированиеПодЗаказ)
КонецЕсли;

КонецЕсли;

MS SQL . Ускорило в несколько раз. Примерно в 4. Документы с сотней строк ускоряются раз в 30. С одной строкой- немного замедляются.
116. unknown181538 151 07.01.19 18:25 Сейчас в теме
(115) В регистре партий не индексировано измерение "ХарактеристикаНоменклатуры". Индексация дала еще примерно 30% прироста в скорости.
117. Andruykha 178 03.08.20 18:45 Сейчас в теме
Оставьте свое сообщение