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