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