Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1C_pr77_Lang2.doc
Скачиваний:
7
Добавлен:
20.11.2019
Размер:
2.52 Mб
Скачать

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

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

//--------------------------------

Процедура ПечатьСправочника()

// Процедура печати полного справочника товаров

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

//Создание объекта типа Запрос

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

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

|Товар = Справочник.Товары.ТекущийЭлемент;

|Группировка Товар Упорядочить по Товар.МинЗапас;

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

// Если ошибка в запросе, то выход из процедуры

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

Возврат;

КонецЕсли;

// Заполнение выходных форм данными запроса

// Создание Таблицы для выходного отчета

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

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

Пока Запрос.Группировка("Товар") = 1 Цикл

// Заполнение полей Товар

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

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

Иначе

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

КонецЕсли;

КонецЦикла;

//Отображение выходного отчета

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

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

Таб.Показать("Список товаров по каталогу", "");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

;

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

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

Иначе

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

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

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

КонецЕсли;

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

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

Возврат;

КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

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

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

Флаг = 0;

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

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

Продолжить;

КонецЕсли;

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

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

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

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

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

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

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

Продолжить;

КонецЕсли;

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

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

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

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

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

Продолжить;

КонецЕсли;

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

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

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

КонецЦикла;

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

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

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]