четверг, 13 апреля 2017 г.

СКД. При расшифровке запустить отчет с другой схемой СКД.


Что бы при расшифровке, открыть отчет с другой схемой СКД, в которой будет описан другой отчет, необходимо:

1)Добавить реквизит отчета "ЭтоРасшифровка" - Булево.
2)В процедуре обработки расшифровки указать следующий код:

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