Имя: Пароль:
1C
1С v8
1с. Что быстрее отработает? Выбрать КОЛИЧЕСТВО, Выборка.Количество
Ø (Волшебник 19.05.2016 09:52)
0 exiter1
 
19.05.16
01:15
Доброго время суток, уважаемые.
Только начинаю разбираться в конфигурировании. Вот возник вопрос: Стоит задача посчитать количество элементов справочника. Что быстрее отработает в данном случае?

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

Или же так?

Запрос = Новый Запрос;
    Запрос.Текст =    "ВЫБРАТЬ
    |    КОЛИЧЕСТВО (Квартиры.Ссылка) КАК Количество
    |ИЗ
    |    Справочник.Квартиры КАК Квартиры
    |ГДЕ
    |    Квартиры.Дом = &Дом";
    
    Запрос.Параметры.Вставить("Дом", Дом);
    Выборка = Запрос.Выполнить().Выгрузить();
    Пока Выборка.Следующий() Цикл
             Количество = Выборка.Количество;
        КонецЦикла;
        Возврат Количество;
1 exiter1
 
19.05.16
01:49
Сам спросил - сам отвечаю)) Выбрать количество работает слегка быстрее вроде, чем выбирать в запросе все элементы, а потом выгружать выборку и считать в ней количество. Разобрался:

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

Убираем цикл, так как в поле выборки только одно значение всегда будет. Нет смысла цикл крутить.
2 Jonny_Khomich
 
19.05.16
05:25
Гениально!
Тянет на научную работу.
3 AneJIbcuH
 
19.05.16
05:32
Мастер просто!
4 CMblCL
 
19.05.16
06:53
Попробуй еще так
Запрос = Новый Запрос;
    Запрос.Текст =    "ВЫБРАТЬ
    |    Квартиры.Ссылка
    |ИЗ
    |    Справочник.Квартиры КАК Квартиры
    |ГДЕ
    |    Квартиры.Дом = &Дом";
    
    Запрос.Параметры.Вставить("Дом", Дом);
    Выборка = Запрос.Выполнить().Выбрать;
    Возврат Выборка.Количество();
5 Pistol
 
19.05.16
06:58
(4) Уже было год назад на http://govnokod.ru/18040
6 Эрик_Шмид
 
19.05.16
07:09
А в 1с есть же замер производительности
7 1CIlya
 
19.05.16
09:31
(6)
обMSScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
обMSScriptControl.language = "javascript";

ВТМсекНачала = обMSScriptControl.eval("new Date().getTime()");
            
мРезЗапроса = обТекущийЗапрос.Выполнить();
    
ВТМсекКонца = обMSScriptControl.eval("new Date().getTime()");
ВремяВыполненияВТ = (ВТМсекКонца - ВТМсекНачала)/1000;
8 IlyaSR
 
19.05.16
09:48
(5) +
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой