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