Имя: Пароль:
1C
 
Оптимизация запросов
0 Killgur
 
15.07.04
15:02
Самописная конфа, v77, регистры

Для выборки данных используеются два запроса, на основании их далее расчитываются дефицит материалов.

Что можно сделать для ускорения запроса?

   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Потребность)
   |Период с ВыбКонПериода по ВыбКонПериода;
   |Без итогов;
   |МПЗ = Регистр.Потребность.МПЗ;
   |ВидМатериала = Регистр.Потребность.МПЗ.ВидМатериала;
   |Количество = Регистр.Потребность.Количество;
   |Функция КоличествоКонОст = КонОст(Количество);
   |Группировка МПЗ без упорядочивания без групп;
   |Условие(ВидМатериала в ВидПолуфабриката);
   |"//}}ЗАПРОС
   ;
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;

   тз ="";
   Запрос.Выгрузить(тз);
   сзМПЗ = СоздатьОбъект("СписокЗначений");
   тз.Выгрузить(сзМПЗ);
       
   ОснСклад = Константа.ОсновнойСкладПолуфабрикатов;
   
   ТекстЗапроса =
   "//{{ЗАПРОС(Дефицит)
   |Период с ВыбКонПериода по ВыбКонПериода;
   |Заказ = Регистр.Потребность.Заказ, Регистр.Резервы.Заказ, Регистр.СебестоимостьПроизводства.Заказ;
   |МПЗ = Регистр.Потребность.МПЗ, Регистр.Резервы.МПЗ, Регистр.СебестоимостьПроизводства.Полуфабрикат, Регистр.МестаХранения.МПЗ, Регистр.ЗаказМПЗ.МПЗ;
   |Потр = Регистр.Потребность.Количество;
   |Рез = Регистр.Резервы.Количество;
   |Враб = Регистр.СебестоимостьПроизводства.Количество;
   |НаСкл = Регистр.МестаХранения.Количество;
   |ВЗак = Регистр.ЗаказМПЗ.Количество;
   |Склад = Регистр.МестаХранения.МестоХранения;
   |Функция Потребность = КонОст(Потр);
   |Функция Резерв = КонОст(Рез);
   |Функция НаСкладе = КонОст(НаСкл) когда (Склад в ОснСклад);
   |Функция ВРаботе = НачОст(Враб);
   |Функция ВЗаказе = КонОст(ВЗак);
   |Группировка МПЗ без упорядочивания без групп;
   |Группировка Заказ;
   |Условие(МПЗ в сзМПЗ);
   |"//}}ЗАПРОС
   ;
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;
1 Warlock
 
15.07.04
20:16
(не вчитываясь в текст запросов) Переписать все нафиг!
2 Валентин
 
15.07.04
21:47
На строчке тз.Выгрузить(сзМПЗ), сзМПЗ становиться "ТаблицейЗначений". Лучше програмно скопируй
Но согласен с (1)
3 NS
 
16.07.04
01:30
Хм... А что не так?
(2) Не смешно... Бредишь...
4 Killgur
 
16.07.04
08:47
(1) Аргументы в студию ...
(2) там одна колонка МПЗ, ее выгружаем в список значений, по моему тут все нормально
(3) Это все работает, меня интересует вопрос ускорения запросов.
5 Sniffer
 
16.07.04
08:58
(2)в каком месте сзМПЗ становиться "ТаблицейЗначений"? По-моему все нормально
6 Валентин
 
16.07.04
09:31
Виноват. Писал теоретически. Сейчас проверил действительно все работает. Пойду учить матчасть.
Но все равно. Запрос должен быть красивым. Или у меня свое понятие о красоте...
7 Sniffer
 
16.07.04
09:37
Понятие "красоты" ИМХО включает в себя корректность и быстродействие работы софта.
8 fez
 
16.07.04
10:05
Переписать, используя прямой доступ к таблицам.
9 Sniffer
 
16.07.04
10:40
(8) Это как интересно "прямой доступ к таблицам"? Если БД на SQL, тогда  скл-ным запросом, а если ДБФ - используя функциия низкого уровня DELPHI, C++, ASSEMBLER или в машинных кодах?!