Иллюстрированный самоучитель по языку системы 1С:Предприятие

Примеры использования Запросов

Отчет по неходовым товарам

Далее приведен пример нетривиального использования запроса для просмотра одновременно многих видов документов. Цель данной процедуры – вывести в отчет перечень неходовых товаров, которые совсем не продавались за заданный период и показать в каждой строке текущий остаток и стоимость этих товаров. В данном примере запрос формируется с целью определить, что в него не вошло.

Процедура Сформировать()

Перем Запрос, ТекстЗапроса, Таб;

Рег = СоздатьОбъект("Регистр.ОстаткиТовара");

Запрос = СоздатьОбъект("Запрос");

ТекстЗапроса = "//{{ЗАПРОС(Сформировать)

|Период С ДатаНачала По ДатаКонца;

|ТОВАР = Документ.РасходнаяБН.Товар,

| Документ.РасходнаяКредит.Товар, Документ.РасходнаяНал.Товар,

| Документ.РасходнаяРеализ.Товар, Документ.Счет.Товар;

|Группировка ТОВАР упорядочить по ТОВАР.Наименование без групп;

|"//}}ЗАПРОС

;

Если ДатаКонца >= ПолучитьДатуТА() Тогда

ТекстЗапроса = ТекстЗапроса + "Период С ДатаНачала;";

Иначе

ТекстЗапроса = ТекстЗапроса + "Период С ДатаНачала По ДатаКонца;";

Per.ВременныйРасчет();

РассчитатьРегистрыНа(ДатаКонца);

КонецЕсли;

// Выполнение Запроса

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

Возврат;

КонецЕсли;

Тов = СоздатьОбъект("Справочник.Товары");

// обход включая группировки

Тов.ВключатьПодчиненные(1);

// упорядочить по наименованиям

Тов.ПорядокНаименозаний();

ИтогоОстаток = 0;

ИтогоСумма = 0;

Таб = СоздатьОбъект("Таблица");

Таб.ВывестиСекцию("Отчет");

Состояние("В отчет выведено " + ЧислоСтрок + " строк.");

// Запускаем полный цикл по товарам Справочника

Тов.ВыбратьЭлементы();

Пока Тов.ПолучитьЭлемент() > 0 Цикл

Флаг = 0;

Товар = Тов.ТекущийЭлемент();

Если Товар.ЭтоГруппа() = 1 Тогда

Продолжить;

КонецЕсли;

// Здесь пытаемся получить из Запроса информацию о товаре,

// но используем просто сам факт того, что товар попал во

// временный набор данных Запроса.

// Если товар есть в Запросе, то значит он упоминался в

// каких то документах,

// иначе — товар не пользуется спросом — неходовой.

Если Запрос.Получить(Товар) = 1 Тогда

Продолжить;

КонецЕсли;

// находим остатки неходового товара на складе

Рег.СводныеОстатки(Товар, );

ТекОстаток = Рег.ОстатокТовара;

ТекСумма = Рег.БазоваяСтоимость;

Если ТекОстаток = 0 Тогда

Продолжить;

КонецЕсли;

Таб.ВывестиСекцию("Товар");

ИтогоОстаток = ИтогоОстаток + ТекОстаток;

ИтогоСумма = ИтогоСумма + ТекСумма;

КонецЦикла;

Таб.ВывестиСекцию("Итоги");

Таб.ТолькоПросмотр(1);

Таб.Опции(0, 0, 3, 0);

Таб.Показать("Отчет о неходовых товарах", "");

КонецПроцедуры

ДатаКонца = РабочаяДата();

ДатаНачала = ДатаКонца — Константа.ПериодАнализа;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.