8.х Увеличение скорости работы Конструктора запроса

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем MyNameNoName, 18 ноя 2013.

  1. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    В конструкторе запроса текущий документ связан с регистром накопления(поля отбираются по документу) - такая необходимость именно из-за того что документы не проведены(а не использовать второй регистр). Во вкладке связи связаны документ и регистр по двум реквизитам. Можно ли как-нибудь увеличить скорость выполняемого расчета. Какие есть выходы?
    Думал прикрутить параметры виртуальной таблицы но не получается.
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    покажите Ваш запрос
  3. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Код:
    Запрос.Текст =
    "ВЫБРАТЬ
    |			 РегистрацияТовары.НоменклатураСчет КАК НоменклатураСчет,
    |			 РегистрацияТовары.ЕдиницаИзмеренияСчет КАК ЕдиницаИзмеренияСчет,
    |			 РегистрацияТовары.КоличествоСчет КАК КоличествоСчет,
    |			 РегистрацияТовары.НоменклатураЗаказ КАК НоменклатураЗаказ,
    |			 РегистрацияТовары.ЕдиницаИзмеренияЗаказ КАК ЕдиницаИзмеренияЗаказ,
    |			 РегистрацияТовары.ЗаказНаПроизводство КАК ЗаказНаПроизводство,
    |			 ПотребностиЗаказовНаПроизводствоОстатки.ВидВоспроизводства КАК ВидВоспроизводства,
    |			 ПотребностиЗаказовНаПроизводствоОстатки.Спецификация КАК Спецификация,
    |			 ПотребностиЗаказовНаПроизводствоОстатки.Подразделение КАК Подразделение,
    |			 ПотребностиЗаказовНаПроизводствоОстатки.Продукция КАК Продукция,
    |			 ПотребностиЗаказовНаПроизводствоОстатки.КоличествоОстаток КАК КоличествоОстатокПоПозиции,
    |			 РегистрацияТовары.ЕдиницаИзмеренияСчет.Коэффициент КАК Коэффициент
    |ИЗ
    |			 Документ.Регистрация.Товары КАК РегистрацияТовары
    |							 ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПотребностиЗаказовНаПроизводство.Остатки КАК ПотребностиЗаказовНаПроизводствоОстатки
    |							 ПО РегистрацияТовары.НоменклатураЗаказ = ПотребностиЗаказовНаПроизводствоОстатки.Номенклатура
    |											 И РегистрацияТовары.ЗаказНаПроизводство = ПотребностиЗаказовНаПроизводствоОстатки.ЗаказНаПроизводство
    |ГДЕ
    |			 РегистрацияТовары.Ссылка = &Документ";
    Запрос.УстановитьПараметр("Документ", Документ);
    Таблица = Запрос.Выполнить().Выгрузить();
    
    Уж очень долго думает
  4. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Ну так у Виртуальной таблицы ПотребностиЗаказовНаПроизводство.Остатки можно условие РегистрацияТовары.ЗаказНаПроизводство = ПотребностиЗаказовНаПроизводствоОстатки.ЗаказНаПроизводство
    в нем обыграть

    типа

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

    Выбрать
    | РегистрацияТовары.ЗаказНаПроизводство КАК ЗаказНаПроизводство
    |ИЗ
    | Документ.Регистрация.Товары КАК РегистрацияТовары
    |ГДЕ
    | РегистрацияТовары.Ссылка = &Документ

    Засунул в условие виртуальной таблицы
  5. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    А что за параметр в данном случае &ДатаСреза???
    Что за параметр мне устанавливать?

    И без этого параметра ощутимо быстрее работает. Спасибо большое.
  6. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    без этого параметра берется текущий остаток, который лежит в отдельной таблице, поэтому он читается быстрее.
    Но стоит учесть, что это не остаток на текущую дату, это остаток после всех операций в регистре. и если у вас там есть движения будущей датой, то остаток будет на будущую дату.
  7. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Так получается &ДатаСреза это текущая дата?
  8. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    это дата, на которую нужны остатки
  9. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Именно и это хороше правило тона, если есть виртуальная таблица Остатки или обороты, то в ней должны быть указаны даты
  10. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    ну в общем это не правило хорошего тона, а производственная необходимость :) - при контроле остатков лучше получать как раз конечный остаток, то есть без даты.
    короче зависит от задачи
  11. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Да нет даже если в задаче необходимо всегда получать на текущую дату, то все равно ставиться этот параметр а в установках он уже опредялется как текущая дата

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