Примеры использования Запросов
В режиме исполнения у нас получится такой отчет:

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