Далее приведен пример нетривиального использования запроса для просмотра одновременно многих видов документов. Цель данной процедуры — вывести в отчет перечень неходовых товаров, которые совсем не продавались за заданный период и показать в каждой строке текущий остаток и стоимость этих товаров. В данном примере запрос формируется с целью определить, что в него не вошло.
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
Рег = СоздатьОбъект("Регистр.ОстаткиТовара");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(Сформировать)
|Период С ДатаНачала По ДатаКонца;
|ТОВАР = Документ.РасходнаяБН.Товар,
| Документ.РасходнаяКредит.Товар, Документ.РасходнаяНал.Товар,
| Документ.РасходнаяРеализ.Товар, Документ.Счет.Товар;
|Группировка ТОВАР упорядочить по ТОВАР.Наименование без групп;
|"//}}ЗАПРОС
;
Если ДатаКонца >= ПолучитьДатуТА() Тогда
ТекстЗапроса = ТекстЗапроса + "Период С ДатаНачала;";
Иначе
ТекстЗапроса = ТекстЗапроса + "Период С ДатаНачала По ДатаКонца;";
Per.ВременныйРасчет();
РассчитатьРегистрыНа(ДатаКонца);
КонецЕсли;
// Выполнение Запроса
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Тов = СоздатьОбъект("Справочник.Товары");
// обход включая группировки
Тов.ВключатьПодчиненные(1);
// упорядочить по наименованиям
Тов.ПорядокНаименозаний();
ИтогоОстаток = 0;
ИтогоСумма = 0;
Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Отчет");
Состояние("В отчет выведено " + ЧислоСтрок + " строк.");
// Запускаем полный цикл по товарам Справочника
Тов.ВыбратьЭлементы();
Пока Тов.ПолучитьЭлемент() > 0 Цикл
Флаг = 0;
Товар = Тов.ТекущийЭлемент();
Если Товар.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
// Здесь пытаемся получить из Запроса информацию о товаре,