15.02.2010
В данной статье описывается, как работать с расшифровкой отчета, созданного при помощи системы компоновки данных, в управляемом приложении.
Для того чтобы переопределить расшифровку в форме отчета, нужно установить обработчик события ОбработкаРасшифровки у поля табличного документа, в который выводится результат отчета.
Выбрать действие расшифровки можно при помощи объекта ОбработкаРасшифровкиКомпоновкиДанных.
Пример создания объекта ОбработкаРасшифровкиКомпоновкиДанных:
Копировать в буфер обменаОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));
В данном примере создается объект типа ОбработкаРасшифровкиКомпоновкиДанных, он инициализируется адресом хранилища, в котором располагаются данные расшифровки (в форме отчета по умолчанию адрес данных расшифровки записывается в реквизит ДанныеРасшифровки), источник доступных настроек. В качестве источника доступных настроек используется источник для отчета.
После создания объекта, можно воспользоваться его методом ВыбратьДействие, для выбора действия пользователя.
Пример:
Копировать в буфер обменаПерем ВыбранноеДействие;
Перем ПараметрыВыбранногоДействия;
...
ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыбранноеДействие, ПараметрыВыбранногоДействия);
Результат выбора пользователя будет помещен в переменные ВыбранноеДействие и ПараметрыВыбранногоДействия.
Использовать данный выбор можно, например, так:
Копировать в буфер обменаЕсли ВыбранноеДействие <> ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет Тогда
Если ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
ОткрытьЗначение(ПараметрыВыбранногоДействия);
Иначе
Парам = Новый Структура;
Парам.Вставить("СформироватьПриОткрытии", Истина);
Парам.Вставить("Расшифровка", Новый ОписаниеОбработкиРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Расшифровка, ПараметрыВыбранногоДействия));
ОткрытьФорму("Отчет.РаботаСРасшифровкой.Форма", Парам, , Истина);
КонецЕсли;
КонецЕсли;
В данном примере, выбор пользователем пункта "Открыть" приведет к тому, что выбранное значение покажется пользователю.
Выбор же другого действия приведет к открытию формы отчета, которой, через параметры форму указали необходимость формирования при открытии и указали необходимость расшифровки.
Полностью обработчик расшифровки будет выглядеть так:
Копировать в буфер обмена&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Перем ВыбранноеДействие;
Перем ПараметрыВыбранногоДействия;
СтандартнаяОбработка = Ложь;
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));
ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыбранноеДействие, ПараметрыВыбранногоДействия);
Если ВыбранноеДействие <> ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет Тогда
Если ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
ОткрытьЗначение(ПараметрыВыбранногоДействия);
Иначе
Парам = Новый Структура;
Парам.Вставить("СформироватьПриОткрытии", Истина);
Парам.Вставить("Расшифровка", Новый ОписаниеОбработкиРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Расшифровка, ПараметрыВыбранногоДействия));
ОткрытьФорму("Отчет.РаботаСРасшифровкой.Форма", Парам, , Истина);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
При необходимости, расшифровку, выдаваемую методом ВыбратьДействие можно выполнить и самостоятельно.
Пример:
Копировать в буфер обмена&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Перем ВыбранноеДействие;
Перем ПараметрыВыбранногоДействия;
СтандартнаяОбработка = Ложь;
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));
ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыбранноеДействие, ПараметрыВыбранногоДействия);
Если ВыбранноеДействие <> ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет Тогда
Если ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
ОткрытьЗначение(ПараметрыВыбранногоДействия);
Иначе
ОтработатьРасшифровку(Новый ОписаниеОбработкиРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Расшифровка, ПараметрыВыбранногоДействия));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОтработатьРасшифровку(ОписаниеОбработкиРасшифровки)
ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровкиОбъект, Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));
РезультирующиеНастройки = ОбработкаРасшифровки.ПрименитьНастройки(ОписаниеОбработкиРасшифровки.Идентификатор, ОписаниеОбработкиРасшифровки.ПрименяемыеНастройки);
Если ТипЗнч(РезультирующиеНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(РезультирующиеНастройки);
ИначеЕсли ТипЗнч(РезультирующиеНастройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(РезультирующиеНастройки);
КонецЕсли;
СкомпоноватьРезультат();
КонецПроцедуры
В методе ОбработатьРасшифровку видно, что для применения настроек расшифровки можно использовать метод ПрименитьНастройки. Метод ПрименитьНастройки может вернуть как полные настройки компоновки данных, так и пользовательские настройки компоновки данных. Пользовательские настройки расшифровки могут быть получены, если применяемые настройки можно полностью применить в пользовательских настройках.