Перевели базу на SQL, работать работает, но есть проблема в подборе очень сильно тормозит. Проанализировав по замерам производительности обнаружил две процедуры которые портят все дело:
глВернутьЦену()
глПолчитьОстатокНоменклатуры()
переработав данные процедуры на прямые запросы, я выяснил что процдура получения остатко на прямых запросах работает в 8 раз медленнее (и то на втором далее тесте. на первом тормоза аж в 16 раз)
Вот какие запросы я наваял
//Сформируем переменные строки для текстов запроса
СтрокаСкладУсловие = "";
СтрокаСкладИзмерение = "";
СтрокаФирмаУсловие = "";
СтрокаДоговорУсловие = "";
СтрокаДоговорИзмерение = "";
СтрокаЗаявкаУсловие = "";
СтрокаЗаявкаИзмерение = "";
Если ПустоеЗначение(Склад) = 0 Тогда
СтрокаСкладУсловие = " AND Склад = :ВыбСклад";
СтрокаСкладИзмерение = ",Склад";
КонецЕсли;
Если ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "Справочник" Тогда
СтрокаФирмаУсловие = "Фирма = :ВыбФирма";
ИначеЕсли ТипЗначенияСтр(ФирмаДляОстатковТМЦ) = "СписокЗначений" Тогда
СтрокаФирмаУсловие = "Фирма IN (Select VAL FROM #СписокФирм)";
КонецЕсли;
Если ПустоеЗначение(Договор) = 0 Тогда
СтрокаДоговорУсловие = " AND ДоговорПокупателя = :ВыбДоговор";
СтрокаДоговорИзмерение = ",ДоговорПокупателя";
КонецЕсли;
Если ПустоеЗначение(Заявка) = 0 Тогда
СтрокаЗаявкаУсловие = " AND ЗаявкаПокупателя = :ВыбЗаявка";
СтрокаЗаявкаИзмерение = ",ЗаявкаПокупателя";
КонецЕсли;
//Сформируем тексты запросов
------------------
ТекстЗапросаОстаткиНаСкладе = "
|SELECT
| SUM(РегОстатки.КоличествоОстаток) as Количество
|FROM
| $РегистрОстатки.ОстаткиТМЦ(:ВыбДата~,," + СтрокаФирмаУсловие + " AND Номенклатура = :ВыбНоменкл " + СтрокаСкладУсловие + ",
| (Фирма,Номенклатура"+ СтрокаСкладИзмерение +"),Количество) as РегОстатки
|";
------------------
ТекстЗапросаОстаткиНаФирме = "
|SELECT
| SUM(РегОстатки.КоличествоОстаток) as Количество
|FROM
| $РегистрОстатки.ОстаткиТМЦ(:ВыбДата~,," + СтрокаФирмаУсловие + " AND Номенклатура = :ВыбНоменкл,
| (Фирма, Номенклатура), Количество) as РегОстатки
|";
------------------
ТекстЗапросаРезервыНаСкладе = "
|SELECT
| SUM(РегРезервы.КоличествоОстаток) as Количество
|FROM
| $РегистрОстатки.РезервыТМЦ(:ВыбДата~,," + СтрокаФирмаУсловие + " AND Номенклатура = :ВыбНоменкл " + СтрокаСкладУсловие + ",
| (Фирма,Номенклатура"+ СтрокаСкладИзмерение +"),Количество) as РегРезервы
|";
------------------
ТекстЗапросаРезервыНаФирме = "
|SELECT
| SUM(РегРезервы.КоличествоОстаток) as Количество
|FROM
| $РегистрОстатки.РезервыТМЦ(:ВыбДата~,," + СтрокаФирмаУсловие + " AND Номенклатура = :ВыбНоменкл,
| (Фирма,Номенклатура),Количество) as РегРезервы
|";
------------------
ТекстЗапросаРезервыПоДоговоруНаСкладе = "
|SELECT
| SUM(РегРезервы.КоличествоОстаток) as Количество
|FROM
| $РегистрОстатки.РезервыТМЦ(:ВыбДата~,," + СтрокаФирмаУсловие + " AND Номенклатура = :ВыбНоменкл
|" + СтрокаСкладУсловие + СтрокаДоговорУсловие + ",
| (Фирма,Номенклатура"+ СтрокаСкладИзмерение + СтрокаДоговорИзмерение + "),Количество) as РегРезервы
|";
------------------
ТекстЗапросаРезервыПоЗаявкеНаСкладе = "
|SELECT
| SUM(РегРезервы.КоличествоОстаток) as Количество
|FROM
| $РегистрОстатки.РезервыТМЦ(:ВыбДата~,," + СтрокаФирмаУсловие + " AND Номенклатура = :ВыбНоменкл
|" + СтрокаСкладУсловие + СтрокаЗаявкаУсловие + ",
| (Фирма,Номенклатура"+ СтрокаСкладИзмерение + СтрокаЗаявкаИзмерение + "),Количество) as РегРезервы
|";
------------------
ТекстЗапросаРезервыПоДоговоруНаФирме = "
|SELECT
| SUM(РегРезервы.КоличествоОстаток) as Количество
|FROM
| $РегистрОстатки.РезервыТМЦ(:ВыбДата~,," + СтрокаФирмаУсловие + " AND Номенклатура = :ВыбНоменкл
|" + СтрокаДоговорУсловие + ",
| (Фирма,Номенклатура" + СтрокаДоговорИзмерение + "),Количество) as РегРезервы
|";
------------------
ТекстЗапросаРезервыПоЗаявкеНаФирме = "
|SELECT
| SUM(РегРезервы.КоличествоОстаток) as Количество
|FROM
| $РегистрОстатки.РезервыТМЦ(:ВыбДата~,," + СтрокаФирмаУсловие + " AND Номенклатура = :ВыбНоменкл
|" + СтрокаЗаявкаУсловие +",
| (Фирма,Номенклатура" + СтрокаЗаявкаИзмерение + "),Количество) as РегРезервы
|";
------------------
Вопрос как ускорить все это хозяйство!
при 46 повторениях процедура выполняется 1,5 секунды
хотелось бы где то почитать вообще про методы оптимизации подобных вещей.