В СКД расшифровка представляет собой всплывающее меню (по двойному клику на ячейке), содержащие доступные пользователю действия, такие как открытие ссылки на элемент, упорядочивание, группировка, оформление и пр. Здесь я приведу примеры решения наиболее распространенных задач, связанных с расшифровкой, таких как:
1. Ограничение доступных действий;
2. Добавление в меню своего произвольного действия;
3. Добавление в меню различных действий, в зависимости от ячейки, для которой выполняется расшифровка.
Вся работа с расшифровкой, выполняется в событии ОбработкаРасшифровки. Что бы получить доступ к этому событию, необходимо сначала сгенерировать основную форму отчета. Затем ПолеТабличногоДокумента > Свойства > События.
Итак,
задача №1. Постановка: Необходимо доступные действия для пользователя ограничить только: открытием элемента, упорядочиванием и оформлением.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) Перем ВыполненноеДействие; СтандартнаяОбработка=Ложь; ОбработкаРасшифровки=Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); ДоступныеДействия=Новый Массив; // заполняем доступные действия, если параметр не указан, то будут доступны все действия ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить); Настройки=ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,ДоступныеДействия); Если Настройки<>Неопределено Тогда // требуется сформировать отчет с новыми настройками КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); // загружаем настройки ЭлементыФормы.Результат.Очистить(); // очищаем поле табличного документа СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки); // выводим результат КонецЕсли; КонецПроцедуры |
Задача №2. Постановка: Необходимо добавить в меню свое действие, открывающее основную форму элемента, содержащегося в ячейке, для которой выполняется расшифровка.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) Перем ВыполненноеДействие; СтандартнаяОбработка=Ложь; ОбработкаРасшифровки=Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); ДополнительныеДействия=Новый СписокЗначений; ДополнительныеДействия.Добавить("Действие1","Дополнительное действие 1"); // добавляем свое действие Настройки=ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,,ДополнительныеДействия); Если Настройки<>Неопределено Тогда КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); ЭлементыФормы.Результат.Очистить(); СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки); Иначе Если ВыполненноеДействие="Действие1" Тогда ВыполнитьДействие1(Расшифровка); // процедура выполняемая при выборе пункта меню "Дополнительное действие 1" КонецЕсли; КонецЕсли; КонецПроцедуры |
В процедуре ВыполнитьДействие1(Расшифровка) получаем ПараметрРасшифровки для выбранной ячейки и открывает основную форму:
1 2 3 4 |
Процедура ВыполнитьДействие1(Расшифровка) Ссылка=ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение; Ссылка.ПолучитьФорму().Открыть(); КонецПроцедуры |
Задача №3. Постановка: Необходимо в зависимости от колонки, для которой выполняется расшифровка, добавлять свои действия: для «Поле1» – «Действие1», для «Поле2» – «Действие2».
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) Перем ВыполненноеДействие; СтандартнаяОбработка=Ложь; ОбработкаРасшифровки=Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); ДополнительныеДействия=Новый СписокЗначений; // Проверяем для какого поля выполняется расшифровка Если ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле="Поле1" Тогда ДополнительныеДействия.Добавить("Действие1","Дополнительное действие 1"); ИначеЕсли ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле="Поле2" Тогда ДополнительныеДействия.Добавить("Действие2","Дополнительное действие 2"); КонецЕсли; Настройки=ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,,ДополнительныеДействия); Если Настройки<>Неопределено Тогда КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); ЭлементыФормы.Результат.Очистить(); СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки); Иначе Если ВыполненноеДействие="Действие1" Тогда ВыполнитьДействие1(Расшифровка); ИначеЕсли ВыполненноеДействие="Действие2" Тогда ВыполнитьДействие2(Расшифровка); КонецЕсли; КонецЕсли; КонецПроцедуры |
Как видите, ничего сложного здесь нет! )
При использовании в типовой конфигурации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Чтобы добавить свою расшифровку в СКД нужно в Форме отчета. // ЭлементФормы ПолеТаблчногоДокумента в событие ОбработкаРасшифровки поставить: Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) Если ДанныеРасшифровки.Элементы.Получить(Расшифровка).ПолучитьПоля()[0].Поле = "ДокументОприходования" Тогда Док = ДанныеРасшифровки.Элементы.Получить(Расшифровка).ПолучитьПоля().Найти("ДокументОприходования").Значение; Если ТипЗнч(Док) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда СтандартнаяОбработка = Ложь; Предупреждение(Док.Комментарий); Возврат; КонецЕсли; КонецЕсли; ТиповыеОтчеты.СтандартнаяОбработкаРасшифровкиТиповогоОтчета(ОтчетОбъект, ЭтаФорма, Расшифровка, СтандартнаяОбработка); КонецПроцедуры |