<h2>Общие положения написания запросов </a></h2>
<p>Примером неправильной работы с данными в 1С:Предприятиии, есть и остается избыточное обращение к базе данных, вне зависимости от того, в каком формате она хранится. </p>
<p>Как избежать лишних обращений к ИБ, и тем самым существенно уменьшить время формирования отчета проиллюстрируем на примере "Оптимизация Отчета". </p>
<pre>Закладка 100%
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать100)
|Период с ВыбНачПериода по ВыбКонПериода;
|Товар = Документ.РасхНакл.Товар;
|Количество = Документ.РасхНакл.Количество;
|Функция КоличествоСумма = Сумма(Количество);
|Группировка Товар;
|Условие(Товар в ВыбТовар);
|Условие(Товар.ВидТовара = ВыбВидТовара);
|"//}}ЗАПРОС;
</pre>
<p>При написании текста запроса необходимо учитывать, что Запрос при формировании выборки сам отрабатывает только элементарные условия , не запуская при этом исполнительную среду встроенного языка, что значительно экономит время. Если есть возможность привести условие к элементарному - это необходимо сделать. </p>
<pre>
"//{{ЗАПРОС(Сформировать15)
|Период с ВыбНачПериода по ВыбКонПериода;
|Товар = Документ.РасхНакл.Товар;
|ВидТовара = Документ.РасхНакл.Товар.ВидТовара;
|Количество = Документ.РасхНакл.Количество;
|Функция КоличествоСумма = Сумма(Количество);
|Группировка Товар;
|Условие(Товар в ВыбТовар);
|Условие(ВидТовара=ВыбВидТовара);
|"//}}ЗАПРОС;
</pre>
<p>Так как выборка формируется на компьютере пользователя, то все данные, которые необходимы пользователю для построения отчета, должны быть, по возможности, получены посредством запроса. В таблице выводится значение кода товара – для этого в запросе необходимо ввести переменную КодТовара . Тогда для формирования отчета, отпадет необходимость, каждый раз обращаться к ИБ. Следует не забывать про методы Запроса - ЗначениеУпорядочивания и ЭтоГруппа , которые опять же извлекают данные из выборки, минуя ИБ, что заметно уменьшает время формирования запроса. </p>
<pre>
"//{{ЗАПРОС(Сформировать3)
|Период с ВыбНачПериода по ВыбКонПериода;
|Товар = Документ.РасхНакл.Товар;
|ВидТовара = Документ.РасхНакл.Товар.ВидТовара;
|КодТовара = Документ.РасхНакл.Товар.Код;
|Количество = Документ.РасхНакл.Количество;
|Функция КоличествоСумма = Сумма(Количество);
|Группировка Товар;
|Условие(Товар в ВыбТовар);
|Условие(ВидТовара=ВыбВидТовара);
|"//}}ЗАПРОС;
</pre>
<p>В отчете "Оптимизация Отчета" время выполнение самой медленной версии взято за 100%, остальные версии берутся как процент от нее. Следование правилам, дало возможность уменьшить время выполнения запроса почти на 2 порядка! </p>
<h2>Особенности использования запросов для получения информации из справочников </a></h2>
<p>В случае применения объекта "Запрос" для выборки информации из справочников 1С:Предприятия необходимо учитывать следующую особенность.
Читать всю статью: http://www.klerk.ru/soft/1c?15580


