Имя: Пароль:
1C
1С v8
Оптимизировать запрос
0 Alexperumov
 
03.09.13
09:26
Какнить можно оптимизировать этот запрос?

Функция ЗапросСуммы(ДатаНачала1,Номенклатура,Фио)
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ДатаНачала",   ДатаНачала1);
    Запрос.УстановитьПараметр("ДатаКонца",   КонецМесяца(ДатаНачала1));
    Запрос.УстановитьПараметр("Номенклатура",   Номенклатура);
    Запрос.УстановитьПараметр("Фио",   Фио);
    Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.СпецодеждаВЭксплуатации);

    Запрос.Текст =
    "ВЫБРАТЬ
    |    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт,
    |    ХозрасчетныйОстаткиИОбороты.Субконто1,
    |    ХозрасчетныйОстаткиИОбороты.Субконто2,
    |    ХозрасчетныйОстаткиИОбороты.Субконто3
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
    |            &ДатаНачала,
    |            &ДатаКонца,
    |            ,
    |            ,
    |            Счет = &Счет,
    |            ,
    |            Субконто1 = &Номенклатура
    |                И Субконто3 = &Фио) КАК ХозрасчетныйОстаткиИОбороты";
    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сумма = ВыборкаДетальныеЗаписи.СуммаОборотКт;
    КонецЦикла;
    
    Возврат(Сумма);
    
КонецФункции
1 ДенисЧ
 
03.09.13
09:27
ВЫРАЗИТЬ на субконты наложи.
2 golden-pack
 
03.09.13
09:28
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сумма = ВыборкаДетальныеЗаписи.СуммаОборотКт;
    КонецЦикла;
    
    Возврат(Сумма);
3 Maxus43
 
03.09.13
09:28
ускорения не даст имхо
4 Maxus43
 
03.09.13
09:29
а смысл цикла? возвратить одну последнюю сумму?
5 MSOliver
 
03.09.13
09:29
использовать таблицу оборотов, вид субконто - ускорит
6 golden-pack
 
03.09.13
09:31
(3) даст
7 MSOliver
 
03.09.13
09:31
вернёт только последнюю сумму по второму субконто (если оно заполнено)
8 Нуф-Нуф
 
03.09.13
09:32
поидее нет второго субконта - значит не использует индекс
9 Нуф-Нуф
 
03.09.13
09:32
нет в отборах
10 MSOliver
 
03.09.13
09:34
Я вот не уверен что если Выразить на субконто наложить что это
ускорит... а к чему приводить?
11 Alexperumov
 
03.09.13
09:34
Спасибо, сейчас проверю насчет субконто и оборотов.. Не понял как выразить поможет
12 Maxus43
 
03.09.13
09:37
(11) цикл зачем? ты только одну сумму возвращаешь, а собирает их запрос - все. Логику меняй, доставая только одну запись запросом
13 Maxus43
 
03.09.13
09:38
(12) всмысле возвращает все записи в разрезе 2-го субконто, если оно разное
14 KuAl
 
03.09.13
09:40
если счет один, вырази субконто, быстрее точно будет
про обороты правильно сказали
15 mzelensky
 
03.09.13
09:45
(10) исходя из чего ты в этом не уверен?
16 Fragster
 
модератор
03.09.13
09:46
(15) исходя из того, что обращения через точку нету, а в 8.2 Выразить() к тому же и индекс не дает использовать
17 Maxus43
 
03.09.13
09:50
выразить никогда не давало ускорения при выборке.

При сравнении, получении реквизитов поля и т.д. это делать нужно, но никак не при выборке обычной.
Например Выразить в Соединении - наоборот убъёт скорость, а не добавит
18 Alexperumov
 
03.09.13
10:01
убрал цикл и заменил таблицу стало быстрее на 20%..
19 Maxus43
 
03.09.13
10:11
(18) 2-е субконто зачем в выборке тебе? если условие на него не ставится?
20 Sabbath
 
03.09.13
10:27
(0)(19) Вообще зачем вытаскивать все, когда нужна только сумма
21 Sabbath
 
03.09.13
10:29
Ну и ВЫРАЗИТЬ можно попробовать... Кстати интересно, ФИО это текст ФИО или или все-таки ссылка
22 Alexperumov
 
03.09.13
10:30
(21) да спс убрал,  Ссылка на ФизЛицо
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.