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

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

В режиме исполнения у нас получится такой отчет:

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

Далее, допустим, мы хотим получить более подробный отчет по конкретному товару, так, чтобы указав на товар в отчете, и дважды нажав кнопку мыши, мы получали отчет по продажам именно этого товара с точностью до каждого клиента. Для этого откроем в Конфигураторе редактор таблицы нашего отчета и в свойствах ячейки (Свойства ячейки – Текст – поле: Значение), отображающей наименование товара, проставим значение ячейки. ("Запрос.Товар")

Далее, в программном модуле напишем процедуру формирования дополнительного отчета.

Продолжение примера:

//*********************************

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

Процедура ПродТовар(ВТовар)

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

ДатаКон = ДатаКонца;

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

ДатаКон = Дата(0);

КонецЕсли;

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

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

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

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

|КЛИЕНТ = Документ.РасхНакл.Клиент;

|ТОВАР = Документ.РасхНакл.Товар;

|СУММ = Документ.РасхНакл.СуммаВал;

|КОЛВО = Документ.РасхНакл.Количество;

|Группировка КЛИЕНТ Упорядочить По КЛИЕНТ.Наименование;

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

|Функция Продано = Сумма(КОЛВО);

|Функция ПродСум = Сумма(СУММ);

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

;

Если ВТовар.Выбран() = 1 Тогда

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

ТекстЗапроса = ТекстЗапроса +

"Условие(Товар.ПринадлежитГруппе(ВТовар) = 1);";

Иначе

ТекстЗапроса = ТекстЗапроса + "Условие (Товар = ВТовар);";

ФОдинТовар = 1;

КонецЕсли;

КонецЕсли;

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

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

Возврат;

КонецЕсли;

// Подготовка к заполнению выходных форм

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

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

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

Таб.ВывестиСекцию("Клиент");

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

Если ФОдинТовар = 0 Тогда

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

КонецЕсли;

КонецЦикла;

КонецЦикла;

// Вывод заполненной формы

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

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

Таб.Показать("Продажа товара", "");

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

Теперь нам осталось написать предопределенную процедуру, которая возьмет на себя обработку события "двойной щелчок мышью на выбранной ячейке таблицы". Главная задача этой процедуры – определить, что выбрана ячейка, где указано значение товара и вызвать на исполнение процедуру формирования дополнительного отчета, написанную ранее.

Продолжение примера:

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

Процедура ОбработкаЯчейкиТаблицы(ЗначЯч, ФлагСтандартнойОбработки)

Если ТипЗначения(ЗначЯч) = 2 Тогда

ФлагСтандартнойОбработки = 1;

Возврат;

КонецЕсли;

ПродТовар(ЗначЯч);

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

Теперь, в режиме исполнения, если в отчете "Продажи товаров" мы укажем курсором на товар, например, "Сапоги женские" и дважды щелкнем на нем мышью, то сформируется дополнительный подробный отчет "Продажа товара".

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.