Описание встроенного языка системы 1С Предприятие


         

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


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

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

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

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

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

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

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

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

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

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

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

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

   ;



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

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

   Иначе

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

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

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

   КонецЕсли;

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

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

      Возврат;

   КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

      Флаг = 0;

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

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

         Продолжить;

      КонецЕсли;

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




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

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

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

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

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

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

         Продолжить;

      КонецЕсли;

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

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

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

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

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

         Продолжить;

      КонецЕсли;

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

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

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

   КонецЦикла;

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

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

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

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

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

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

ДатаНачала = ДатаКонца — Константа.ПериодАнализа;


Содержание раздела