Книга: Разработка сложных отчетов в «1С:Предприятии 8». Система компоновки данных
Назад: Переопределение поля для расшифровки
Дальше: Пример 17

Изменение действий расшифровки

Однако разработчик может реализовать и свой, нестандартный, вариант расшифровки. Продемонстрируем этот вариант на примере отчета Сборка системных блоков. Откроем форму отчета. Создадим обработчик события ОбработкаДополнительнойРасшифровки для поля табличного документа Результат (рис. 2.287).

Рис. 2.287. Обработчик события «ОбработкаДополнительнойРасшифровки» для поля «Результат»

В процедуре этого обработчика и будет формироваться контекстное меню расшифровки отчета и определяться поведение отчета при возникновении события ОбработкаДополнительнойРасшифровки, когда пользователь нажатием правой кнопки мыши на ячейке результата отчета вызывает меню расшифровки. Заполним его следующим образом (листинг 2.47).

Листинг 2.47. Процедура обработчика события «ОбработкаДополнительнойРасшифровки» для поля «Результат»

&НаКлиенте

Процедура РезультатОбработкаДополнительнойРасшифровки(Элемент, Расшифровка,

СтандартнаяОбработка)         

Перем ВыбранноеДействие;

Перем ПараметрыВыбранногоДействия;

 

СтандартнаяОбработка = Ложь;

ОбработкаРасшифровки = Новый

ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,

Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));

 

ДоступныеДействия = Новый Массив();

ДоступныеДействия.Добавить(

ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);

ДоступныеДействия.Добавить(

ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать);

ДоступныеДействия.Добавить(

ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);

 

ДополнительныеДействия = Новый СписокЗначений;

ДополнительныеДействия.Добавить("Действие 1");

ДополнительныеДействия.Добавить("Действие 2");

ДополнительныеДействия.Добавить("Действие 3");

 

// Осуществим выбор действия расшифровки пользователем.

ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыбранноеДействие,

ПараметрыВыбранногоДействия, ДоступныеДействия, ДополнительныеДействия);

 

Если ПараметрыВыбранногоДействия <> Неопределено Тогда

Если ВыбранноеДействие =

ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда

ОткрытьЗначение(ПараметрыВыбранногоДействия);

Иначе

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

ПараметрыФормы.Вставить("Расшифровка", Новый

ОписаниеОбработкиРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,

Расшифровка, ПараметрыВыбранногоДействия));

ОткрытьФорму("Отчет.СборкаСистемныхБлоков.Форма", ПараметрыФормы, ,

Истина);

КонецЕсли;

Иначе

Сообщить(ВыбранноеДействие);

КонецЕсли;

 

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

В процедуре обработчика мы сначала отменяем стандартную обработку расшифровки. Затем создаем новый обработчик расшифровки – объект ОбработкаРасшифровкиКомпоновкиДанных и инициализируем его данными расшифровки отчета (реквизит формы ДанныеРасшифровки) и источником доступных настроек для отчета.

Затем задаем список доступных действий расшифровки – ОткрытьЗначение, Отфильтровать, Расшифровать, а также задаем список дополнительных действий расшифровки, например, «Действие 1», «Действие 2», «Действие 3».

После этого мы вызываем интерактивный выбор действия расшифровки, используя метод ВыбратьДействие() объекта ОбработкаРасшифровкиКомпоновкиДанных. Мы передаем в него идентификатор расшифровки (параметр Расшифровка обработчика события ОбработкаРасшифровки), список доступных действий (ДоступныеДействия) и список дополнительных действий (ДополнительныеДействия) меню расшифровки.

После выбора пользователем действия расшифровки мы получаем значение выбранного действия во втором параметре ВыбранноеДействие. Если выбрано действие Открыть, то третий параметр ПараметрыВыбранногоДействия содержит значение, которое нужно открыть. Если выбрано действие Расшифровать, Отфильтровать, Упорядочить, Сгруппировать, Оформить, то параметр ПараметрыВыбранногоДействия содержит настройки, применяемые к отчету. Если выбрано дополнительное действие, то параметр не заполняется.

В зависимости от выбранного действия (ВыбранноеДействие) мы либо открываем выбранное значение, либо формируем новую форму отчета с параметрами СформироватьПриОткрытии и Расшифровка. Параметр СформироватьПриОткрытии, установленный в значение Истина, обеспечивает формирование отчета сразу при открытии формы. В параметре Расшифровка мы описываем расшифровку, которую нужно применить к открываемому отчету, и передаем в конструктор объекта ОписаниеОбработкиРасшифровкиКомпоновкиДанных данные расшифровки (реквизит формы ДанныеРасшифровки), идентификатор расшифровки (параметр Расшифровка обработчика события ОбработкаРасшифровки) и новые настройки, применяемые к отчету (ПараметрыВыбранногоДействия).

Выполним отчет. Нажав правую кнопку мыши на поле отчета, мы можем вызвать меню собственной расшифровки и выполнить перечисленные в нем действия расшифровки (рис. 2.288).

Рис. 2.288. Результат отчета

ВНИМАНИЕ

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

Таким образом, на этом примере мы научились:

Назад: Переопределение поля для расшифровки
Дальше: Пример 17