8.х Как можно ускорить выполнение запроса?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Berezin, 11 дек 2010.

  1. TopicStarter Overlay
    Berezin
    Offline

    Berezin Опытный в 1С

    Регистрация:
    27 сен 2010
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. Есть запрос, запрос на (70 тыс наименований номенклатуры) выполняется 3 мин, как можно его ускорить? (может нужно задать виды, субконто в параметре виртуальной таблицы?)



    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = 	"ВЫБРАТЬ
    |	ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    |	ХозрасчетныйОстатки.Организация КАК Организация,
    |	ХозрасчетныйОстатки.Субконто1.Наименование КАК спрНаименование,
    |	ХозрасчетныйОстатки.Субконто1.БазоваяЕдиницаИзмерения.Наименование КАК спрЕдИзм,
    |	ХозрасчетныйОстатки.Субконто2.Наименование КАК склад
    |ИЗ
    |	РегистрБухгалтерии.Хозрасчетный.Остатки(
    |			&Дата,
    |			Счет В (&Счет),
    |			&СсылкаВидСубконто,
    |			Субконто1.Наименование В (&НаименованиеПоиска)
    |				И Организация.Наименование В (&ПоискОрганизации)
    |				И Субконто2.Наименование В (&ПоискСклада)
    |				И Субконто1.ЭтоГруппа = &ЭтоГруппа) КАК ХозрасчетныйОстатки
    |
    |УПОРЯДОЧИТЬ ПО
    |	спрНаименование,
    |	Организация";		
    
    
    Запрос.УстановитьПараметр("Дата",НужнаяДата);	                   // заданная дата
    Запрос.УстановитьПараметр("Счет",ПСчет);	                           // массив из 2х счетов 10.01 и 41.01
    Запрос.УстановитьПараметр("НаименованиеПоиска",МассивНоменклатуры); // масив номенклатуры	
    Запрос.УстановитьПараметр("ПоискОрганизации",ППоискОрганизации);	 // массив организаций
    Запрос.УстановитьПараметр("ПоискСклада",ППоискСклада);	                 // массив складов
    Запрос.УстановитьПараметр("ЭтоГруппа",ПЭтоГруппа);	                         // ПЭтоГруппа = Ложь
    
    ТЗШапка = Запрос.Выполнить().Выгрузить();
    
  2. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    1. Виды задайте, хуже не будет.
    2. Счета все время 10.01 и 41.01, если да, то лучше сделать условие через ИЛИ
    3. "Организация.Наименование В" очень плохая конструкция, вы ищите строковую величину в массиве строковых, лучше переделать массив на массив ссылок и использовать конструкцию "Организация В"
  3. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Так попробуйте.
    Код:
    "ВЫБРАТЬ
    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    ХозрасчетныйОстатки.Организация КАК Организация,
    ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто1 КАК Справочник.Номенклатура) КАК спрНаименование,
    ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто1 КАК Справочник.Номенклатура).БазоваяЕдиницаИзмерения КАК спрЕдИзм,
    ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто2 КАК Справочник.Склады) КАК склад
    ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(
    &Дата,
    Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.СырьеИМатериалы)
    ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТоварыНаСкладах),
    ,
    ВЫРАЗИТЬ(Субконто1 КАК Справочник.Номенклатура) В (&НаименованиеПоиска)
    И Организация В (&ПоискОрганизации)
    И ВЫРАЗИТЬ(Субконто2 КАК Справочник.Склады) В (&ПоискСклада)) КАК ХозрасчетныйОстатки
    </span>
    УПОРЯДОЧИТЬ ПО
    спрНаименование,
    Организация"
    </FONT></FONT></pre>
    Помимо того что Itsys сказал про Организацию, то же самое относится к складам и к номенклатуре. У меня в примере все переделано, т.е. ищете по массиву ссылок.

Поделиться этой страницей