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

Программная обработка расшифровки

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

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

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

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

&НаКлиенте

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

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

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

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

 

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

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

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

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

 

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

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

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

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

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

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

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

 

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

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

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

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

 

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

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

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

 

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

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

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

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

Иначе

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

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

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

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

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

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

Истина);

КонецЕсли;

Иначе

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

КонецЕсли;

 

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

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

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

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

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

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

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

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

ВНИМАНИЕ

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

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

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

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

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

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

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

Иначе

Если ФормаРасшифровки Тогда

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

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

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

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

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

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

Истина);

Иначе

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

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

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

КонецЕсли;    

КонецЕсли;

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

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

&НаСервере

Процедура ОтработатьРасшифровку(ОписаниеОбработкиРасшифровки)

 

ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);

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

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

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

РезультирующиеНастройки =

ОбработкаРасшифровки.ПрименитьНастройки(ОписаниеОбработкиРасшифровки.Идентификатор,

ОписаниеОбработкиРасшифровки.ПрименяемыеНастройки);

 

Если ТипЗнч(РезультирующиеНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда

Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(РезультирующиеНастройки);

ИначеЕсли ТипЗнч(РезультирующиеНастройки) =

Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда

Отчет.КомпоновщикНастроек.

ЗагрузитьПользовательскиеНастройки(РезультирующиеНастройки);

КонецЕсли;

 

СкомпоноватьРезультат();

 

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

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

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