8.х Увеличить производительность

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

  1. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Код:
    ТекстЗапроса = "
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	ЕСТЬNULL(ТоварыНаСкладах.Номенклатура, ОстаткиПоставщика.Наименование) КАК Номенклатура,
    |	СУММА(  ЕСТЬNULL(ТоварыНаСкладах.КоличествоОстаток, 0.00)
    |	      - ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток, 0.00)
    |	      - ЕСТЬNULL(ТоварыКПередачеСоСкладов.КоличествоОстаток, 0.00)
    |	      " + ?(СтруктураЗаказов = Неопределено,"","+ ЕСТЬNULL(ТоварыВРезерве.КоличествоОстаток, 0.00)") + "
    |	)                                                           КАК КоличествоСвободныйОстаток,
    |	СУММА(ЕСТЬNULL(ОстаткиОрганизации.КоличествоОстаток, 0.00)) КАК КоличествоОстатокОрганизации, 
    //---------------------------------------------------------------------------------------------------------
    |	СУММА(ЕСТЬNULL(ОстаткиПоставщика.Минимум, 0.00)) КАК Минимум, 
    |   СУММА(ЕСТЬNULL(ОстаткиПоставщика.Цена, 0.00)) КАК ЦенаПоставщика,
    |	СУММА(ЕСТЬNULL(ОстаткиПоставщика.Остаток, 0.00)) КАК ОстатокПоставщика 
    //------------------------------------------------------------------------------------------------------------
    |ИЗ
    |	(ВЫБРАТЬ
    |		ОбщиеОстатки.Номенклатура               КАК Номенклатура,
    |		ОбщиеОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |		ОбщиеОстатки.Качество                   КАК Качество,
    |		СУММА(ОбщиеОстатки.КоличествоОстаток)   КАК КоличествоОстаток
    |	ИЗ
    |		(";
    ТекстЗапроса = ТекстЗапроса + ПолучитьСтрокуЗапросаСвободныеОстатки(Новый Структура("ТоварыНаСкладах,ТоварыВРознице,ТоварыОрганизаций,ТоварыВНТТ"), ТекстУсловияКачества, Истина);
    ТекстЗапроса = ТекстЗапроса + "
    |		) КАК ОбщиеОстатки
    |	СГРУППИРОВАТЬ ПО 
    |		ОбщиеОстатки.Номенклатура, ОбщиеОстатки.ХарактеристикаНоменклатуры, ОбщиеОстатки.Качество
    |	) КАК ТоварыНаСкладах
    |
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, " + мУсловиеНоменклатураСклад + ") КАК ТоварыВРезервеНаСкладах
    |ПО
    |	ТоварыВРезервеНаСкладах.Номенклатура = ТоварыНаСкладах.Номенклатура
    |	И ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |	И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)";
    Если НЕ СтруктураЗаказов = Неопределено Тогда
    Если ЗаказИзШапки Тогда
    Если ВидРегистраПлюсСвободныйОстаток = "ТоварыВРезервеНаСкладах" Тогда
    ТекстЗапроса = ТекстЗапроса +"
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, " + мУсловиеНоменклатураСклад + " И ДокументРезерва = &ДокументРезерва) КАК ТоварыВРезерве
    |ПО
    |	ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура
    |	И ТоварыВРезерве.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |	И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)";
    ИначеЕсли ВидРегистраПлюсСвободныйОстаток = "ТоварыКПередачеСоСкладов" Тогда
    ТекстЗапроса = ТекстЗапроса +"
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&Дата, " + мУсловиеНоменклатураСклад + " И ДокументПередачи = &ДокументРезерва) КАК ТоварыВРезерве
    |ПО ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура
    |	И ТоварыВРезерве.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |	И ТоварыВРезерве.Качество = ТоварыНаСкладах.Качество";
    КонецЕсли;
    Иначе
    //временная таблица товаров в резерве
    Запрос.Текст = "
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	ТоварыВРезервеНаСкладах.Номенклатура               КАК Номенклатура,
    |	ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |	СУММА(ТоварыВРезервеНаСкладах.КоличествоОстаток)   КАК КоличествоОстаток
    |ПОМЕСТИТЬ ТоварыВРезерве
    |ИЗ
    |	РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, " + мУсловиеНоменклатураСклад + ") КАК ТоварыВРезервеНаСкладах
    |ЛЕВОЕ СОЕДИНЕНИЕ
    //
    |	ЗаказыТаблицаНоменклатура КАК ЗаказаноПоДокументуЗаказ
    //
    |ПО
    |	ЗаказаноПоДокументуЗаказ.Номенклатура = ТоварыВРезервеНаСкладах.Номенклатура
    |	И ЗаказаноПоДокументуЗаказ.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры
    |	И ЗаказаноПоДокументуЗаказ.ДокументРезерва = ТоварыВРезервеНаСкладах.ДокументРезерва
    |ГДЕ
    |	НЕ ЗаказаноПоДокументуЗаказ.ДокументРезерва ЕСТЬ NULL
    |	ИЛИ ТоварыВРезервеНаСкладах.ДокументРезерва = &ДокументРезерва
    |СГРУППИРОВАТЬ ПО ТоварыВРезервеНаСкладах.Номенклатура, ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры
    |ИНДЕКСИРОВАТЬ ПО ТоварыВРезервеНаСкладах.Номенклатура, ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры
    |";
    Запрос.Выполнить();
    ТекстЗапроса = ТекстЗапроса +"
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |	ТоварыВРезерве КАК ТоварыВРезерве
    |ПО
    |	ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура
    |	И ТоварыВРезерве.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |	И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)";			
    КонецЕсли;
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса +"
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |	РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&Дата, " + мУсловиеНоменклатураСклад + ТекстУсловияКачества + ") КАК ТоварыКПередачеСоСкладов
    |ПО
    |	ТоварыКПередачеСоСкладов.Номенклатура = ТоварыНаСкладах.Номенклатура
    |	И ТоварыКПередачеСоСкладов.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |	И ТоварыКПередачеСоСкладов.Качество = ТоварыНаСкладах.Качество
    |	
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |	РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата, " + мУсловиеНоменклатураСкладОрганизация + ТекстУсловияКачества + ") КАК ОстаткиОрганизации
    |ПО
    |	ОстаткиОрганизации.Номенклатура = ТоварыНаСкладах.Номенклатура
    |	И ОстаткиОрганизации.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |	И ОстаткиОрганизации.Качество = ТоварыНаСкладах.Качество
    |	ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОстаткиПоставщика.СрезПоследних КАК ОстаткиПоставщика
    |	ПО (ОстаткиПоставщика.Наименование = ТоварыНаСкладах.Номенклатура)
    |
    |СГРУППИРОВАТЬ ПО
    |	ЕСТЬNULL(ТоварыНаСкладах.Номенклатура, ОстаткиПоставщика.Наименование)
    |";
    Запрос.Текст = ТекстЗапроса;
    
    РезультатЗапроса = Запрос.Выполнить();
    
    
    Всем доброго времени!
    Сейчас на выполнение этого запроса уходит около 2,5 сек подскажите как можно увеличить скорость выполнения этого запроса?
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    1. RLS используется?
    2. Запрос многовариантный. Покажите текст запроса, который именно у вас получается.
  3. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Код:
     "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ЕСТЬNULL(ТоварыНаСкладах.Номенклатура, ОстаткиПоставщика.Наименование) КАК Номенклатура,
    СУММА(  ЕСТЬNULL(ТоварыНаСкладах.КоличествоОстаток, 0.00)
    - ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток, 0.00)
    - ЕСТЬNULL(ТоварыКПередачеСоСкладов.КоличествоОстаток, 0.00)
    
    )                                                           КАК КоличествоСвободныйОстаток,
    СУММА(ЕСТЬNULL(ОстаткиОрганизации.КоличествоОстаток, 0.00)) КАК КоличествоОстатокОрганизации, 
    СУММА(ЕСТЬNULL(ОстаткиПоставщика.Минимум, 0.00)) КАК Минимум, 
    СУММА(ЕСТЬNULL(ОстаткиПоставщика.Цена, 0.00)) КАК ЦенаПоставщика,
    СУММА(ЕСТЬNULL(ОстаткиПоставщика.Остаток, 0.00)) КАК ОстатокПоставщика 
    ИЗ
    (ВЫБРАТЬ
    ОбщиеОстатки.Номенклатура               КАК Номенклатура,
    ОбщиеОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ОбщиеОстатки.Качество                   КАК Качество,
    СУММА(ОбщиеОстатки.КоличествоОстаток)   КАК КоличествоОстаток
    ИЗ
    (
    ВЫБРАТЬ
    ТаблицаОстатков.Номенклатура               КАК Номенклатура,
    ТаблицаОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ТаблицаОстатков.Качество КАК Качество,
    ТаблицаОстатков.КоличествоОстаток КАК КоличествоОстаток
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И Склад В (&Склад)  И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ) КАК ТаблицаОстатков
    </span>
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
    ТаблицаОстатков.Номенклатура               КАК Номенклатура,
    ТаблицаОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ТаблицаОстатков.Качество КАК Качество,
    ТаблицаОстатков.КоличествоОстаток КАК КоличествоОстаток
    ИЗ
    РегистрНакопления.ТоварыВРознице.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И Склад В (&Склад)  И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ) КАК ТаблицаОстатков
    
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
    ТаблицаОстатков.Номенклатура               КАК Номенклатура,
    ТаблицаОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ТаблицаОстатков.Качество КАК Качество,
    0 КАК КоличествоОстаток
    ИЗ
    РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ) КАК ТаблицаОстатков
    
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ
    ТаблицаОстатков.Номенклатура               КАК Номенклатура,
    ТаблицаОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ЗНАЧЕНИЕ(Справочник.Качество.Новый) КАК Качество,
    ТаблицаОстатков.КоличествоОстаток КАК КоличествоОстаток
    ИЗ
    РегистрНакопления.ТоварыВНТТ.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И Склад В (&Склад) ) КАК ТаблицаОстатков
    
    ) КАК ОбщиеОстатки
    СГРУППИРОВАТЬ ПО 
    ОбщиеОстатки.Номенклатура, ОбщиеОстатки.ХарактеристикаНоменклатуры, ОбщиеОстатки.Качество
    ) КАК ТоварыНаСкладах
    
    ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И Склад В (&Склад) ) КАК ТоварыВРезервеНаСкладах
    ПО
    ТоварыВРезервеНаСкладах.Номенклатура = ТоварыНаСкладах.Номенклатура
    И ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)
    ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И Склад В (&Склад)  И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ) КАК ТоварыКПередачеСоСкладов
    ПО
    ТоварыКПередачеСоСкладов.Номенклатура = ТоварыНаСкладах.Номенклатура
    И ТоварыКПередачеСоСкладов.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    И ТоварыКПередачеСоСкладов.Качество = ТоварыНаСкладах.Качество
    
    ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ) КАК ОстаткиОрганизации
    ПО
    ОстаткиОрганизации.Номенклатура = ТоварыНаСкладах.Номенклатура
    И ОстаткиОрганизации.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    И ОстаткиОрганизации.Качество = ТоварыНаСкладах.Качество
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОстаткиПоставщика.СрезПоследних КАК ОстаткиПоставщика
    ПО (ОстаткиПоставщика.Наименование = ТоварыНаСкладах.Номенклатура)
    
    СГРУППИРОВАТЬ ПО
    ЕСТЬNULL(ТоварыНаСкладах.Номенклатура, ОстаткиПоставщика.Наименование)"
    </FONT></FONT></pre>
    RLS только стандартный от 1с
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    1. Лучше переписать все левые соединения на временные таблицы.
    Отладить их время создания. Будет уже понятно, где медленно.
    2. Внутреннее соединение в последнем соединений однозначно вынести во временную таблицы и проверить скорость.
    3. Переписать группировку - при использований временных она будет выглядеть по другом (в момент соединения уже надо получить, что у нас будет - номенклатура или наименование)

    Итого: для хорошей отладки необходимо переписать под временные таблицы весь запрос и использоать пакетный. Тем самым можно получить стабильное время выполнения (оптимизатор лучше нас поймет, ибо сейчас фиг знает, какой план запроса он выберет)
    Так же необходимо сделать проверку актуальности статистики БД и обновление индексов (см. соответствующую статью на ИТС)
  5. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Я переделал запрос, разбил на два
    вот первый:
    Код:
        
    ТекстЗапроса = "
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ТоварыНаСкладах.Номенклатура                                КАК Номенклатура,
    |    СУММА(  ЕСТЬNULL(ТоварыНаСкладах.КоличествоОстаток, 0.00)
    |          - ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток, 0.00)
    |          - ЕСТЬNULL(ТоварыКПередачеСоСкладов.КоличествоОстаток, 0.00)
    |          " + ?(СтруктураЗаказов = Неопределено,"","+ ЕСТЬNULL(ТоварыВРезерве.КоличествоОстаток, 0.00)") + "
    |    )                                                           КАК КоличествоСвободныйОстаток,
    |    СУММА(ЕСТЬNULL(ОстаткиОрганизации.КоличествоОстаток, 0.00)) КАК КоличествоОстатокОрганизации
    |ИЗ
    |    (ВЫБРАТЬ
    |        ОбщиеОстатки.Номенклатура               КАК Номенклатура,
    |        ОбщиеОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |        ОбщиеОстатки.Качество                   КАК Качество,
    |        СУММА(ОбщиеОстатки.КоличествоОстаток)   КАК КоличествоОстаток
    |    ИЗ
    |        (";
    ТекстЗапроса = ТекстЗапроса + ПолучитьСтрокуЗапросаСвободныеОстатки(Новый Структура("ТоварыНаСкладах,ТоварыВРознице,ТоварыОрганизаций,ТоварыВНТТ"), ТекстУсловияКачества, Истина);
    ТекстЗапроса = ТекстЗапроса + "
    |        ) КАК ОбщиеОстатки
    |
    |    СГРУППИРОВАТЬ ПО
    |        ОбщиеОстатки.Номенклатура, ОбщиеОстатки.ХарактеристикаНоменклатуры, ОбщиеОстатки.Качество
    |    ) КАК ТоварыНаСкладах
    |
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, " + мУсловиеНоменклатураСклад + ") КАК ТоварыВРезервеНаСкладах
    |ПО
    |    ТоварыВРезервеНаСкладах.Номенклатура = ТоварыНаСкладах.Номенклатура
    |    И ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |    И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)";
    Если НЕ СтруктураЗаказов = Неопределено Тогда
    Если ЗаказИзШапки Тогда
    Если ВидРегистраПлюсСвободныйОстаток = "ТоварыВРезервеНаСкладах" Тогда
    ТекстЗапроса = ТекстЗапроса +"
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, " + мУсловиеНоменклатураСклад + " И ДокументРезерва = &ДокументРезерва) КАК ТоварыВРезерве
    |ПО
    |    ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура
    |    И ТоварыВРезерве.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |    И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)
    |";
    ИначеЕсли ВидРегистраПлюсСвободныйОстаток = "ТоварыКПередачеСоСкладов" Тогда
    ТекстЗапроса = ТекстЗапроса +"
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&Дата, " + мУсловиеНоменклатураСклад + " И ДокументПередачи = &ДокументРезерва) КАК ТоварыВРезерве
    |ПО ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура
    |    И ТоварыВРезерве.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |    И ТоварыВРезерве.Качество = ТоварыНаСкладах.Качество
    |";
    КонецЕсли;
    Иначе
    //временная таблица товаров в резерве
    Запрос.Текст = "
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ТоварыВРезервеНаСкладах.Номенклатура               КАК Номенклатура,
    |    ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |    СУММА(ТоварыВРезервеНаСкладах.КоличествоОстаток)   КАК КоличествоОстаток
    |ПОМЕСТИТЬ ТоварыВРезерве
    |ИЗ
    |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, " + мУсловиеНоменклатураСклад + ") КАК ТоварыВРезервеНаСкладах
    |ЛЕВОЕ СОЕДИНЕНИЕ
    //
    |    ЗаказыТаблицаНоменклатура КАК ЗаказаноПоДокументуЗаказ
    //
    |ПО
    |    ЗаказаноПоДокументуЗаказ.Номенклатура = ТоварыВРезервеНаСкладах.Номенклатура
    |    И ЗаказаноПоДокументуЗаказ.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры
    |    И ЗаказаноПоДокументуЗаказ.ДокументРезерва = ТоварыВРезервеНаСкладах.ДокументРезерва
    |ГДЕ
    |    НЕ ЗаказаноПоДокументуЗаказ.ДокументРезерва ЕСТЬ NULL
    |    ИЛИ ТоварыВРезервеНаСкладах.ДокументРезерва = &ДокументРезерва
    |СГРУППИРОВАТЬ ПО ТоварыВРезервеНаСкладах.Номенклатура, ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры
    |ИНДЕКСИРОВАТЬ ПО ТоварыВРезервеНаСкладах.Номенклатура, ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры
    |";
    Запрос.Выполнить();
    
    ТекстЗапроса = ТекстЗапроса +"
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    ТоварыВРезерве КАК ТоварыВРезерве
    |ПО
    |    ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура
    |    И ТоварыВРезерве.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |    И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)
    |";
    КонецЕсли;
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса +"
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&Дата, " + мУсловиеНоменклатураСклад + ТекстУсловияКачества + ") КАК ТоварыКПередачеСоСкладов
    |ПО
    |    ТоварыКПередачеСоСкладов.Номенклатура = ТоварыНаСкладах.Номенклатура
    |    И ТоварыКПередачеСоСкладов.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |    И ТоварыКПередачеСоСкладов.Качество = ТоварыНаСкладах.Качество
    |    
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |    РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата, " + мУсловиеНоменклатураСкладОрганизация + ТекстУсловияКачества + ") КАК ОстаткиОрганизации
    |ПО
    |    ОстаткиОрганизации.Номенклатура = ТоварыНаСкладах.Номенклатура
    |    И ОстаткиОрганизации.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры
    |    И ОстаткиОрганизации.Качество = ТоварыНаСкладах.Качество
    |
    |СГРУППИРОВАТЬ ПО
    |    ТоварыНаСкладах.Номенклатура
    |";
    Запрос.Текст = ТекстЗапроса;
    
    РезультатЗапроса = Запрос.Выполнить();
    
    
    
    
    Второй:
    Код:
    ОстаткиПоставщика=Новый Запрос;
    ОстаткиПоставщика.Текст=
    "ВЫБРАТЬ
    |    ОстаткиПоставщика.Наименование,
    |    ОстаткиПоставщика.Цена,
    |    ОстаткиПоставщика.Минимум,
    |    ОстаткиПоставщика.Остаток
    |ИЗ
    |    РегистрСведений.ОстаткиПоставщика КАК ОстаткиПоставщика";
    РезультатОстатков=ОстаткиПоставщика.Выполнить();
    СтруктураИсходныхПараметров.Вставить("РезультатПодборПоЗапросу", РезультатЗапроса);
    ТаблицаОстатков = РезультатЗапроса.Выгрузить();
    
    ТаблицаПоставщика = РезультатОстатков.Выгрузить(); //здесь идет самая большая задержка
    
    
    
    а если я буду объединять эти таблицы то будет еще больше задержка?

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