Общие положения написания запросов
Примером неправильной работы с данными в 1С:Предприятиии, есть и остается избыточное обращение к базе данных, вне зависимости от того, в каком формате она хранится.
Как избежать лишних обращений к ИБ, и тем самым существенно уменьшить время формирования отчета проиллюстрируем на примере "Оптимизация Отчета".
Закладка 100% ТекстЗапроса = "//{{ЗАПРОС(Сформировать100) |Период с ВыбНачПериода по ВыбКонПериода; |Товар = Документ.РасхНакл.Товар; |Количество = Документ.РасхНакл.Количество; |Функция КоличествоСумма = Сумма(Количество); |Группировка Товар; |Условие(Товар в ВыбТовар); |Условие(Товар.ВидТовара = ВыбВидТовара); |"//}}ЗАПРОС;
При написании текста запроса необходимо учитывать, что Запрос при формировании выборки сам отрабатывает только элементарные условия , не запуская при этом исполнительную среду встроенного языка, что значительно экономит время. Если есть возможность привести условие к элементарному - это необходимо сделать.
"//{{ЗАПРОС(Сформировать15) |Период с ВыбНачПериода по ВыбКонПериода; |Товар = Документ.РасхНакл.Товар; |ВидТовара = Документ.РасхНакл.Товар.ВидТовара; |Количество = Документ.РасхНакл.Количество; |Функция КоличествоСумма = Сумма(Количество); |Группировка Товар; |Условие(Товар в ВыбТовар); |Условие(ВидТовара=ВыбВидТовара); |"//}}ЗАПРОС;
Так как выборка формируется на компьютере пользователя, то все данные, которые необходимы пользователю для построения отчета, должны быть, по возможности, получены посредством запроса. В таблице выводится значение кода товара – для этого в запросе необходимо ввести переменную КодТовара . Тогда для формирования отчета, отпадет необходимость, каждый раз обращаться к ИБ. Следует не забывать про методы Запроса - ЗначениеУпорядочивания и ЭтоГруппа , которые опять же извлекают данные из выборки, минуя ИБ, что заметно уменьшает время формирования запроса.
"//{{ЗАПРОС(Сформировать3) |Период с ВыбНачПериода по ВыбКонПериода; |Товар = Документ.РасхНакл.Товар; |ВидТовара = Документ.РасхНакл.Товар.ВидТовара; |КодТовара = Документ.РасхНакл.Товар.Код; |Количество = Документ.РасхНакл.Количество; |Функция КоличествоСумма = Сумма(Количество); |Группировка Товар; |Условие(Товар в ВыбТовар); |Условие(ВидТовара=ВыбВидТовара); |"//}}ЗАПРОС;
В отчете "Оптимизация Отчета" время выполнение самой медленной версии взято за 100%, остальные версии берутся как процент от нее. Следование правилам, дало возможность уменьшить время выполнения запроса почти на 2 порядка!
Особенности использования запросов для получения информации из справочников
В случае применения объекта "Запрос" для выборки информации из справочников 1С:Предприятия необходимо учитывать следующую особенность. При обработке справочника объект "Запрос" не обрабатывает группы справочника. То есть он не использует их в качестве исходных данных для получения первичной выборки. При обработке уже полученных записей запрос добавляет группы для выбранных записей - элементов, если существует группировка по переменной запроса типа "Справочник". Такой способ обработки является стандартным, и Запрос выполняет ее так же, как он это делает, например, для реквизитов документа имеющих тип "Справочник". То есть, если в запросе по документам использовать группировку по реквизиту "Товар" документа "Счет", то в полученном отчете можно получить записи и по группам товаров, вошедших в запрос. Аналогично, если в запросе по справочнику получать в качестве группировки текущий элемент, то в полученный отчет будут включены записи, соответствующие группам отобранных запросом элементов. Однако так как сами группы не обрабатываются запросом при заполнении таблицы выборки, то в отчет не попадут те группы, которые не имеют элементов, или группы, элементы которых не попали в выборку. Соответственно объект "Запрос" не может применяться в тех случаях, когда нужно обрабатывать собственно группы, или получать все элементы, включая группы. С другой стороны, так как в большинстве случаев должны выбираться непосредственно элементы, запрос может быть успешно применен для обработки справочника. В том числе, Запрос позволяет существенно ускорить выборку элементов по условию, при работе с базой данных в формате SQL.
При обработке с помощью запроса справочников, имеющих периодические реквизиты, следует учитывать, что значения периодических реквизитов выбираются только на конечную границу периода запроса. То есть, с помощью запроса нет возможности получить историю периодических реквизитов, а можно получить только срез значений на определенный момент.
Mista.Ru
Начать дискуссию