15.02.2010

Работа с расшифровкой в управляемом приложении

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

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

Выбрать действие расшифровки можно при помощи объекта ОбработкаРасшифровкиКомпоновкиДанных.

Пример создания объекта ОбработкаРасшифровкиКомпоновкиДанных:

Копировать в буфер обмена

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

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

После создания объекта, можно воспользоваться его методом ВыбратьДействие, для выбора действия пользователя.

Пример:

Копировать в буфер обмена

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

...

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

Результат выбора пользователя будет помещен в переменные ВыбранноеДействие и ПараметрыВыбранногоДействия.

Использовать данный выбор можно, например, так:

Копировать в буфер обмена

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

В данном примере, выбор пользователем пункта "Открыть" приведет к тому, что выбранное значение покажется пользователю.

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

Полностью обработчик расшифровки будет выглядеть так:

Копировать в буфер обмена

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

При необходимости, расшифровку, выдаваемую методом ВыбратьДействие можно выполнить и самостоятельно.

Пример:

Копировать в буфер обмена

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

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

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