Заставить СКД выполнить действие "Расшифровать"

1. Diyversus 07.04.23 16:07 Сейчас в теме
Доброго дня, коллеги!
Бьюсь над тем, что бы заставить в процедуре ОбработкаРасшифровки модуля формы отчета отработало выбранное действие "Расшифровать"
Добавил дополнительное действие, переменной СтандартнаяОбработка присвоил значение Ложь.
Одна беда: при выборе пункта Расшифровать, открывается форма со списком группировок, выбираю нужную группировку, жму Ок и ничего не происходит.

Текст процедуры:


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



Или методы обработки расшифровки служат только для заполнения переменных ВыбранноеДействие, ПараметрыВыбранногоДействия , ВыполненноеДействие и при значении переменной СтандартнаяОбработка = Ложь, разработчик должен сам заботиться о выводе результата расшифровки в созданный экземпляр своего отчета?

Может кто-нибудь рассказать о принципе сохранения стандартных функций расшифровки выбранной группировки при программном вмешательстве в обработку расшифровки?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. booksfill 07.04.23 17:23 Сейчас в теме
Вот вам кусок рабочего кода, выкидывать оттуда лишнее не стал, просто обратите внимание на комментарии, особенно вот на этот:
//Для НЕ стандартного действия - у нас это "Расшифровать дет. записями" (см. выше) здесь ничего не будет!

В форму основного отчета добавляем обработчик расшифровки:

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

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

       ИначеЕсли пВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет Тогда  //нажали escape 
         ;
       ИначеЕсли ТипЗнч(пВыполненноеДействие) = Тип("Строка") И пВыполненноеДействие = названиеДопПунктаМеню Тогда  
         пМенеджерДляОтчета = пПоля[0].Значение; 

        ......
      КонецЕсли; 
      
    КонецЕсли;
  Иначе 
    Сообщить("Не то поле");
  КонецЕсли; 	
	
КонецПроцедуры
Показать
3. Diyversus 07.04.23 17:50 Сейчас в теме
(2) Благодарю.
Просто интересно, чего делаю не так?
4. booksfill 07.04.23 18:12 Сейчас в теме
(3) Ну вы правильно поняли, что "разработчик должен сам заботиться о выводе результата расшифровки в созданный экземпляр своего отчета", правда совершенно лишняя последняя часть.

Т.е. правильно так: "разработчик должен сам заботиться о выводе результата расшифровки".
Что вы хотите делать с данными расшифровки - решать вам - хотите запускайте другой отчет, хотите открывайте значение, хотите подавайте звуковые сигналы :)

Попробуйте просто изменить мой код под свои потребности и пройдитесь отладчиком.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот