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

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

Разработка вложенных отчетов

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

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

Примером нестандартной обработки значения ячейки таблицы может быть, например, вызов на формирование другого отчета. Таким образом, мы можем создавать как бы вложенные отчеты, которые вызываются один из другого, выдавая с каждым разом более детальную информацию. Допустим отчет "Взаиморасчеты" при формировании всегда выводится в кратком виде, когда виден только сводный баланс по контрагенту. Для того, чтобы получить детальный отчет по данному контрагенту, достаточно встать курсором в готовой форме отчета на этого контрагента и нажать клавишу <Enter>. Тогда сработает процедура ОбработкаЯчейкиТаблицы, в которой можно записать вызов формирования детального отчета. А если, кроме того, завести флаг режима отображения, то можно вместо этого показывать карточку этого контрагента из справочника.

Рассмотрим построение вложенных отчетов на примере. Допустим, у вас есть отчет "ПродажиТоваров", в котором отображается перечень товаров, количество и сумма проданных за некоторый период товаров. Программный модуль формирования такого отчета приведен ниже.

Пример:

Процедура ПродВсего()

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

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

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

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

КонецЕсли;

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

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

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

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

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

|Сумма_Прод = Документ.РасхНакл.СуммаРуб;

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

|Группировка ТОВАР;

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

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

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

;

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

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

Возврат;

КонецЕсли;

// Подготовка к заполнению

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

Таб.ИсходнаяТаблица("ТабВсего");

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

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

ПродСумма = Запрос.СуммаПродано;

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

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

Иначе

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

КонецЕсли;

КонецЦикла;

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

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

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

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

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