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