gifts2017

Реализация расшифровки в Системе Компоновки Данных

Опубликовал Андрей Скляров (coder1cv8) в раздел Программирование - Практика программирования

Продолжая свой цикл заметок про СКД, сегодня я хотел бы поподробнее остановиться на расшифровке.

В СКД расшифровка представляет собой всплывающее меню (по двойному клику на ячейке), содержащие доступные пользователю действия, такие как открытие ссылки на элемент, упорядочивание, группировка, оформление и пр. Здесь я приведу примеры решения наиболее распространенных задач, связанных с расшифровкой, таких как:

 

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(Расшифровка);

                        КонецЕсли;

            КонецЕсли;

КонецПроцедуры

 

Как видите, ничего сложного здесь нет! :)

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Андрей Скляров (coder1cv8) 05.02.09 09:40
Спасибо за плюсы и комментарии! :)
Eldjer; dr.Uid; +2 Ответить
2. ish (Ish_2) 05.02.09 18:11
В отчете , где присутствуют группировки по строкам и по колонкам , у большинства пользователей вызывает затруднение вопрос :
"Как найти поля всех родителей выбранной ячейки по строкам и по столбцам ?".
Например для того ,чтобы построить отбор для подчиненного отчета.
Было бы полезно , если бы Вы в следующей статье раскрыли бы этот вопрос.
sergey_in; +1 Ответить
3. kadr (kadr) 12.04.09 22:11
>> 2
Применительно к примеру примерно так
Массив = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьРодителей()
Массив[0] - родитель по горизонтали
Массив[1] - родитель по вертикали

а во как получить настройки СКД при наличии нескольких СКД в отчете (обработке)
СхемаКомпоновкиДанных = ПолучитьМакет("СтоимостнаяОценкаСклада");
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);
КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);

Теперь в настройках только отборы
Группировки подобным образом получить не удалось :(
4. Андрей Скляров (coder1cv8) 13.04.09 08:30
(3) Ну это легко! )
Код
СхемаКомпоновкиДанных1 = ПолучитьМакет("СтоимостнаяОценкаСклада");
КомпоновщикНастроек1=Новый КомпоновщикНастроекКомпоновкиДанных();
КомпоновщикНастроек1.ЗагрузитьНастройки(СхемаКомпоновкиДанных1.НастройкиПоУмолчанию);
Настройки=КомпоновщикНастроек1.Настройки;
Показать полностью
5. Андрей Скляров (coder1cv8) 13.04.09 08:32
+(4) Ну что с отображением кода творится?! Хоть тегами не пользуйся! :((
6. Игорь Исхаков (Ish_2) 13.04.09 10:13
(3) Ответ безусловно верный . Если бы вопрос был о родителях при одноуровневой группировке. Если речь идет ПОЛЯХ ВСЕХ родителей ,то

1.Предполагаются многоуровневые группировки неизвестного уровня.
2.Значения массива , полученного методом НайтиРодителей() могут иметь различные типы и на определенных уровнях могут не иметь полей (неприменим метод ПолучитьПоля()).

Таким образом , предполагается процедура.
Я предположил , что это не частный (узкий) вопрос , и его можно рассмотреть в задаче № 4.

7. kadr (kadr) 13.04.09 10:24
(4)
не так то все и легко ;)

Код
   СхемаКомпоновкиДанных1 = ПолучитьМакет("СтоимостнаяОценкаСклада");
   КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных1.НастройкиПоУмолчанию);
   Настройки=КомпоновщикНастроек.Настройки;
   
   ФормаНастройки = ПолучитьФорму("ФормаНастройки");
   ФормаНастройки.Открыть();
Показать полностью


Отбор загружается, группировок нет.
ФормаНастройки - стандартная форма настройки СКД.
Основная схема компоновки данных отчета не указана. При указании основной СКД отчета группировки остаются от основной СКД, а отбор от загружаемой

(6) Организовать рекурсивную процедуру обхода родителей
8. Андрей Скляров (coder1cv8) 13.04.09 11:28
(7) "КомпоновщикНастроек" - это расширение формы отчета, не надо так переменную называть! ;)
9. Андрей Скляров (coder1cv8) 13.04.09 11:31
+(8) В том смысле, что завидите отдельный компоновщик, как у меня в примере и всё будет работать...
10. kadr (kadr) 13.04.09 13:08
С учетом (8)
Выставил макет СКД отчета "СтоимостнаяОценкаСклада"

Код
   СхемаКомпоновкиДанных1 = ПолучитьМакет("СтоимостнаяОценкаСклада");
   КомпоновщикНастроек1=Новый КомпоновщикНастроекКомпоновкиДанных();   
   КомпоновщикНастроек1.ЗагрузитьНастройки(СхемаКомпоновкиДанных1.НастройкиПоУмолчанию);   
      
   Сообщить(КомпоновщикНастроек1.Настройки.ДоступныеПоляВыбора.Элементы.Количество());  // результат 0
   Сообщить(КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы.Количество()); // результат 11

Показать полностью


В созданном нами компоновщике доступных полей выбора - 0
В в расширении формы отчета доступных полей выбора - 11

Доступные поля выбора не загружаются с настройками??
11. Андрей Скляров (coder1cv8) 13.04.09 13:27
(10) Хм... Ну вот выдрал пример из своего отчета, где по расшифровке выводятся движения по товару/складу с помощью вложенной схемы:

Процедура ДвиженияПоТовару(Номенклатура,Склад)
ТабДок=Новый ТабличныйДокумент;

СКД_Расшифровка=СхемаКомпоновкиДанных.ВложенныеСхемыКомпоновкиДанных[0].Схема;
КомпоновщикНастроек_Расшифровка=Новый КомпоновщикНастроекКомпоновкиДанных();
КомпоновщикНастроек_Расшифровка.ЗагрузитьНастройки(СКД_Расшифровка.НастройкиПоУмолчанию);
Настройки=КомпоновщикНастроек_Расшифровка.Настройки;
// Установим параметры
Параметры=Настройки.ПараметрыДанных.Элементы;

ПараметрНоменклатура=Параметры.Найти("Номенклатура");
ПараметрНоменклатура.Значение=Номенклатура;
ПараметрНоменклатура.Использование=Истина;

ПараметрСклад=Параметры.Найти("Склад");
ПараметрСклад.Значение=Склад;
ПараметрСклад.Использование=Истина;

КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных=КомпоновщикМакета.Выполнить(СКД_Расшифровка,Настройки);
ПроцессорКомпоновкиДанных=Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

ТабДок.ТолькоПросмотр=Истина;
ТабДок.ОтображатьСетку=Ложь;
ТабДок.ОтображатьЗаголовки=Ложь;
ТабДок.ФиксацияСверху=1;
ТабДок.Показать("Движения по товару <"+Номенклатура+">");
КонецПроцедуры

вот так всё работает, 100%
12. kadr (kadr) 13.04.09 15:25
строка кода

СКД_Расшифровка=СхемаКомпоновкиДанных.ВложенныеСхемыКомпоновкиДанных[0].Схема;

предполагает, что у Вас заполнена основная СКД для отчета и Вы используете расширение ОтчетОбъект.СхемаКомпоновкиДанных.

Посмотрите как отработает тот же код если очистить основную СКД отчета и загрузить макет в коде

СхемаКомпоновкиДанных1 = ПолучитьМакет(ИмяВашегоМакетаСКД)
СКД_Расшифровка=СхемаКомпоновкиДанных1.ВложенныеСхемыКомпоновкиДанных[0].Схема;
13. Андрей Скляров (coder1cv8) 13.04.09 17:19
(12) Насколько я понимаю, между схемой полученной из макета и вложенной схемой, не должно быть принципиальных отличий...
14. Андрей Скляров (coder1cv8) 13.04.09 17:22
Вообще, есть в СКД некоторые глюки... В частности, заметил, что может "отваливаться" как сама схема, так и форма настроек. В таком случае помогает только пересоздание отчета.
15. kadr (kadr) 13.04.09 20:25
(13) также обратил внимание, что при заполненном свойству основная СКД отчета все работает нормально, а при программной обработке остается только отбор и выбранные поля
16. kadr (kadr) 23.04.09 10:04
Вот где собака порылась!!!
перед загрузкой настроек во вновь созданный КомпоновщикНастроек его надо инициализировать

	СхемаКомпоновкиДанных = ПолучитьМакет(ИмяМакета);	
	_КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;	
	ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);
	_КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);
	_КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

...Показать Скрыть
reneyr; СергейКа; coder1cv8; +3 Ответить 1
17. Андрей Скляров (coder1cv8) 23.04.09 11:55
18. Сергей Кучеров (СергейКа) 23.04.09 12:02
Как раз появилась задача с изменением стандартной расшифровки СКД :) Только хотел разбираться.
19. Артур Аюханов (artbear) 23.04.09 12:09
А кто-нибудь смотрел реализацию универсальных отчетов и шаблонов для них на базе СКД в последних версиях БП и ЗУП ?
Сделано очень красиво и удобно для пользователя.
Очень легко портируется в другие конфигурации.

Я где-то минут за 20 перенес универсальный отчет + шаблон + все необходимое в самописную конфу для 8.1
20. Андрей Скляров (coder1cv8) 23.04.09 14:32
(19) Да, молодцы. Обратил внимание на реализацию формы настроек, штатная - очень уж мудреная для пользователя. Да и запросы в ЗУП, которые были на несколько страниц, на порядок легче читать стало!...
21. Сергей Кучеров (СергейКа) 23.04.09 16:51
3 пример некорректен. По крайней мере у меня получается : если выбирается действие из произвольного списка, то ОбработкаРасшифровки.Выполнить() возвращает "Непределено"... Т.е. уже не заходит в условие вывода отчета...
22. Андрей Скляров (coder1cv8) 23.04.09 17:57
(21) В примере, дополнительное действие - это не изменение настроек и (или) вывод отчета, а какое-то другое действие не связанное с выводом, например открытие какой-либо формы, обработки.
Так что всё корректно, опять же в пределах примера )
23. Сергей Кучеров (СергейКа) 23.04.09 19:50
(22) Точно :) Я чё-то строчку "Иначе" пропустил :)
24. Артур Аюханов (artbear) 18.05.09 13:41
Кто-нибудь знает ответ на еще один подводный или надводный камень в СКД?
http://infostart.ru/forum/forum14/topic9440/messages/
25. katzo (katzo) 16.06.09 17:09
Люди, спасите! Ну никак не могу настроить отбор вложенной схемы, чтобы детализировать общий отчет... У меня процедурка, которая данные для отбора выглядит так:

&НаКлиенте
Функция ПолучитьРекурсивноСтруктуруОтбора(ТекущееПоле, СтруктураОтбора = Неопределено)
Если СтруктураОтбора = Неопределено Тогда
СтруктураОтбора = Новый Структура;
КонецЕсли;

Для каждого ТекЭл Из ТекущееПоле.ПолучитьПоля() Цикл
СтруктураОтбора.Вставить(ТекЭл.Поле, ТекЭл.Значение);
КонецЦикла;

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

Возврат СтруктураОтбора;
КонецФункции // ПолучитьРекурсивноСтруктуруОтбора()




Вызывается она так:

ТекущееПоле = ДанныеРасшифровки.Элементы[Расшифровка];
СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(ТекущееПоле);

В итоге значения полей (строк и колонок) получаю спокойно, а из группировок не могу никак вытащить ни название группировки (мне нужно именно получить путь к данным, а не ничего не значащее "ГруппировкаN"), ни значения, которые потом надо установить в отбор во вложенной схеме... Может я что не так делаю? Я только-только начал программить под СКД, 100 грамм не помогли, а тяжелые наркотики я не хочу употреблять, чтобы в этом разобраться:(
26. Alex Ln (jerer) 03.08.09 13:31
Привет! Прикольная функция, тоже думал об этом вопросе, мне кажется так должно работать. Не пробовал на сложных группировках, скажи если проверишь и что не так.
Функция ПолучитьРекурсивноСтруктуруОтбора(ТекущееПоле, СтруктураОтбора = Неопределено)
	Если СтруктураОтбора = Неопределено Тогда
		СтруктураОтбора = Новый Структура;
	КонецЕсли; 
	
	Если ТипЗнч(ТекущееПоле) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
		Для Каждого ТекЭл Из ТекущееПоле.ПолучитьПоля() Цикл
			СтруктураОтбора.Вставить(ТекЭл.Поле, ТекЭл.Значение);
		КонецЦикла;
	КонецЕсли;
	
	Для Каждого ТекЭл Из ТекущееПоле.ПолучитьРодителей() Цикл
		ПолучитьРекурсивноСтруктуруОтбора(ТекЭл, СтруктураОтбора);
	КонецЦикла; 
	
	Возврат СтруктураОтбора;
КонецФункции 

...Показать Скрыть

27. Alex Ln (jerer) 03.08.09 13:33
Правда, тут два раза одни и те же значения добавляются, "Вставить" помогает, но типа не оптимально.
28. Эстер Коган (e.kogan) 15.09.09 16:26
Вопрос автору: есть ли способ получить путь к данным поля, выбранного для расшифровки?
29. Пафнутий Чебышев (primat) 16.09.09 12:29
Привет! Подскажите, пожалуйста. Формирую отчет в СКД программно, и расшифровка совсем не работает. То есть привязанная к табличному полю функция на действие "Обработки расшифровки" просто не срабатывает.

Вот так формирую отчет:
ЭлементыФормы.Результат.Очистить();

ИсполняемыеНастройки = КомпоновщикНастроек.Настройки;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, ИсполняемыеНастройки);

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, ,Расшифровка);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.НачатьВывод();
Пока Истина Цикл
ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных.Следующий();
Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда
Прервать;
КонецЕсли;
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультатаКомпоновкиДанных);
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
ЭлементыФормы.Результат.ПоказатьУровеньГруппировокСтрок(0);

При инициации процессора компоновки данных можно задать переменную, в которую "будут выводиться результаты компоновки данных" (это по синтакс-помощнику). Я написал - Расшифровка, не работает.

А что там надо написать, какую переменную создать, чтобы расшифровка срабатывала, кто-нибудь знает?
30. Пафнутий Чебышев (primat) 16.09.09 12:43
Нашел ответ. Надо было добавить третий параметр ДанныеРасшифровки в КомпоновщикМакета.Выполнить() и в ПроцессорКомпоновкиДанных.Инициализировать(). После этого можно менять расшифровку как угодно.
31. Андрей Скляров (coder1cv8) 16.09.09 15:30
(28) Не совсем понятен вопрос... По-моему "ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле" - это и есть путь к данным, т.е. имя поля в компоновке.
32. Эстер Коган (e.kogan) 16.09.09 16:43
(31) Нет-нет, не имя того поля, ПО которому я щёлкнула, а имя того поля, которое я выбрала для расшифровки текущего!
Т.е. "Расшифровать", и нужно то поле, которое было выбрано в диалоге "Выбор поля"!
33. Эстер Коган (e.kogan) 16.09.09 16:47
32 + Или хотя бы по какому принципу формируется список полей в диалоге "Выбор поля", чтобы это сымитировать...
34. Эстер Коган (e.kogan) 22.09.09 13:39
32+
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

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


При повторном щелчке по исходной таблице (после выполнения расшифровки) процедура вылетает на указанной строке с ошибкой:

{Форма.ФормаОтчета(178)}: Значение, соответствующее ключу, не задано
текПоле=ДанныеРасшифровки.Элементы[Расшифровка];

В отладчике значение переменной Расшифровка в обоих случаях одинаково, а вот ДанныеРасшифровки - разные, хотя клик по одному и тому же полю в одной и той же ячейке. Чем бороть?
35. Эстер Коган (e.kogan) 22.09.09 13:52
(34) Сама нашла, у меня ДанныеРасшифровки менялись (неявно) в дальнейшем коде.
36. Igor2010 (IgorXml) 16.11.09 12:30
Мой код для СКД расшифровка на 8.2. Может сгодиться кому :D :
&НаСервере
Функция ПолучитьURLСхемы()
    ОсновнаяСхемаКомпоновкиДанных=Отчеты.ПоПредметам.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    URLСхемы = ПоместитьВоВременноеХранилище(ОсновнаяСхемаКомпоновкиДанных);
    Возврат URLСхемы;
КонецФункции

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
   СтандартнаяОбработка=Ложь;
   URLСхемы=ПолучитьURLСхемы();
   ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы);
   Обработка=Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,ИсточникДоступныхНастроек);
   Результат=Неопределено;
   Параметр=Неопределено;
   ДоступныеДействия = Новый Массив;
   ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
   Обработка.ВыбратьДействие(Расшифровка,Результат,Параметр,ДоступныеДействия,);
   П =    Новый Структура("Ключ", Параметр);
   Форма = ПолучитьФорму("Справочник.Предметы.ФормаОбъекта", П);
   Форма.Открыть();
   ПриОткрытии(ложь);
КонецПроцедуры 
   
...Показать Скрыть
Евген86; VsHome; Brook; Spacer; aleksanderpushkin; FilatovRA; kimskiysanya; reneyr; DimaP; andmaslov; Поручик; pobedria; coder1cv8; +13 Ответить 1
37. Настя Счастливая (bela88) 04.12.09 09:34
А у меня следующая ситуация и разобраться в ней пока не получается.
Создаю отчет по результативности звонков. Пример выводимых данных в приклепленном файле.

И мне нужно по нажатию на ячейку с цифрой выводить следующую расшифровку: список событий, по которым был зарегистрирован такой результат. Если пишу
ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьРодителей()[0].ПолучитьПоля().Найти("Мероприятие")
то значение мероприятия известно, когда выбранная ячейка находится в строчке "Семинар УТ", если же нажимаю на любую другую ячейку, привязку к данной группировке по семинару не могу найти.

Если кто-нибудь сталкивался с подобной ситуацией, подскажите:)
38. kitt al;dskjf;ldasjkf (kitt) 22.07.10 02:26
плюсую, надеюсь будет продожение. Хотел бы посмотреть разных примеров с расшифровкой с помощью вложенных схем
39. Alex Stasyuk (GreenFox) 19.06.12 10:34
(37) Поддерживаю - как расшифровку распространить на всю строку? Мне надо как то при клике на любое поле в строке получить значение в конкретной ячейке в этой строке.
40. Евгений Зорин (evn-zorin) 11.09.12 13:43
41. Вадим Миляев (PrinzOfMunchen) 03.04.13 11:05
(39) GreenFox, задаюсь тем же вопросом.
42. Yauhen Makei (mrDSide) 14.11.13 16:00
Отличная статья. Спасибо!
43. Скоробогатов Александр (Eldjer) 25.02.14 11:18
(41) PrinzOfMunchen, уже почти день ковыряюсь над расшифровкой со всей строкой =\
44. Андрей Г (grand.pers) 28.04.15 12:44
Статья - именно то, что нужно. Но вот какая у меня проблема: при сохранении конфигурации системы выдает следующую ошибку:
{Отчет.ОСВ1.Форма.ФормаОтчета.Форма(15,49)}: Слишком много фактических параметров (СкомпоноватьРезультат)
СкомпоноватьРезультат(ЭлементыФормы.Результат,<<?>>ДанныеРасшифровки); // выводим результат (Проверка: Тонкий клиент)

Почему? И что нужно сделать, чтобы все работало?
Evgenii_1980; +1 Ответить
45. minimaxpo (minimaxpo) 22.09.15 17:17
Всем здравствуйте.
Такой вопрос: настроены две вложенные схемы к основной СКД (схемы идентичные основной, но добавлен параметр для отбора в виртуальной таблице) . Выводятся в отчет последовательно, как 3 отдельных отчета. Так вот как понять к какой СКД относится элемент расшифровки? Т.е., в зависимости от ячейки, расшифровку которой нужно получить, необходимо определить в какой СКД эта ячейка выведена.
46. Dima (sokir) 30.09.15 17:48
На упр формах никак не могу подобраться к ДанныеРасшифровки.
Пытаюсь получить через ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки) - пишит "Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа".
На стороне сервера ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки) работает, но надо на стороне клиента.
Хелп!
47. Владимир Насыров (Spacer) 11.12.15 18:04
(46) sokir, Надо на стороне сервера вытаскивать все что нужно из данных расшифровки.
Помещать полученные данные скажем в фиксированный массив или в фиксированную структуру,
и возвращать на клиент.
48. Alex M1 (m1_1976) 09.06.16 16:01
самая первая строка не работает

ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(<<?>>СхемаКомпоновкиДанных)); (Проверка: Тонкий клиент)

почему, кто подскажет...
Я "на клиенте." Но и в примере "на клиенте"!
49. Игорь Кащеев (IgorXml) 15.06.16 16:32
Для обычных конф. где не подходит расшифровка из "Шаблона 1С" самое простое это:
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
//***Типовой кусок кода ***(	
	//ДопСписок = Новый СписокЗначений;
	//ТиповыеОтчеты.ОбработкаРасшифровкиТиповогоОтчета(Расшифровка, СтандартнаяОбработка, ЭтотОбъект, ЭтаФорма, ДопСписок); 
	//
	////ТиповыеОтчеты.СтандартнаяОбработкаРасшифровкиТиповогоОтчета(ОтчетОбъект, ЭтаФорма, Расшифровка, СтандартнаяОбработка);	
//***)	
	Попытка
		Ссылка=ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение;
		Ссылка.ПолучитьФорму().Открыть();	
		СтандартнаяОбработка = Ложь;
	Исключение
		ДопСписок = Новый СписокЗначений;
		//ТиповыеОтчеты.ОбработкаРасшифровкиТиповогоОтчета(Расшифровка, СтандартнаяОбработка, ЭтотОбъект, ЭтаФорма, ДопСписок); 
		ТиповыеОтчеты.СтандартнаяОбработкаРасшифровкиТиповогоОтчета(ОтчетОбъект, ЭтаФорма, Расшифровка, СтандартнаяОбработка);
	КонецПопытки;	
КонецПроцедуры
...Показать Скрыть
50. Ярослав Володимирович (myr4ik07) 11.07.16 13:18
(36) Igor2010, привет, подскажи будь добре, у меня пустой результат после расшифровки выходит
http://www.forum.mista.ru/topic.php?id=776248
51. Роман Кусков (romku) 18.08.16 16:57
(11) coder1cv8, спасибо за пример. Очень помогло.