Реалізація розшифровки в системі компонування даних

У СКД розшифровка є спливаюче меню (по подвійному кліку на комірці), що містять доступні користувачеві дії, такі як відкриття посилання на елемент, упорядкування, групування, оформлення та ін. Тут я приведу приклади розв'язання найбільш поширених завдань, пов'язаних з розшифровкою, таких як :

1. Обмеження доступних дій;

2. Додавання в меню свого довільного дії;

3. Додавання в меню різних дій, в залежності від осередку, для якої виконується розшифровка.

Вся робота з розшифровкою, виконується в подію ОбработкаРасшіфровкі. Що б отримати доступ до цієї події, необхідно спочатку згенерувати основну форму звіту. Потім ПолеТаблічногоДокумента> Властивості> Події.

Отже, завдання №1. Постановка: Необхідно доступні дії для користувача обмежити тільки: відкриттям елемента, упорядкуванням і оформленням.

Завдання №2. Постановка: Необхідно додати в меню свою дію, що відкриває основну форму елементів, що містяться в осередку, для якої виконується розшифровка.

У процедурі ВиполнітьДействіе1 (Розшифровка) отримуємо ПараметрРасшіфровкі для вибраної комірки і відкриває основну форму:

Завдання №3. Постановка: Необхідно в залежності від колонки, для якої виконується розшифровка, додавати свої дії: для «Поле1» - «Действіе1», для «Поле2» - «Действіе2».

Як бачите, нічого складного тут немає. )

11. Андрій Скляров (coder1cv8) 3301 13.04.09 13:27 Зараз в темі

(10) Хм. Ну ось видер приклад зі свого звіту, де по розшифровці виводяться руху по товару / складу за допомогою вкладеної схеми:

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

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

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

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

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

ось так все працює, 100%

12. kadr (kadr) 36 13.04.09 15:25 Зараз в темі

передбачає, що у Вас заповнена основна СКД для звіту і Ви використовуєте розширення ОтчетОб'ект.СхемаКомпоновкіДанних.

Подивіться як відпрацює той же код якщо очистити основну СКД звіту і завантажити макет в коді

СхемаКомпоновкіДанних1 = ПолучітьМакет (ІмяВашегоМакетаСКД)
СКД_Расшіфровка = СхемаКомпоновкіДанних1.ВложенниеСхемиКомпоновкіДанних [0] Схеми;

13. Андрій Скляров (coder1cv8) 3301 13.04.09 17:19 Зараз в темі

(12) Наскільки я розумію, між схемою отриманої з макета і вкладеної схемою, не повинно бути принципових відмінностей.

14. Андрій Скляров (coder1cv8) 3301 13.04.09 17:22 Зараз в темі

Взагалі, є в СКД деякі глюки. Зокрема, зауважив, що може "відвалюватися" як сама схема, так і форма налаштувань. В такому випадку допомагає тільки пересозданіе звіту.

15. kadr (kadr) 36 13.04.09 20:25 Зараз в темі

(13) також звернув увагу, що при заповненому властивості основна СКД звіту все працює нормально, а при програмній обробці залишається тільки відбір і вибрані поля

16. kadr (kadr) 36 23.04.09 10:04 Зараз в темі

Ось де собака порилася.
перед завантаженням налаштувань до новоствореного КомпоновщікНастроек його треба ініціалізувати

25. katzo (katzo) 16.06.09 17:09 Зараз в темі

Люди, рятуйте! Ну ніяк не можу налаштувати відбір вкладеної схеми, щоб деталізувати загальний звіт. У мене процидурку, яка дані для відбору виглядає так:

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

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

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

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


Викликається вона так:

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

В результаті значення полів (рядків і колонок) отримую спокійно, а з угруповань не можу ніяк витягнути ні назва угруповання (мені потрібно саме отримати шлях до даних, а не нічого не значуще "ГруппіровкаN"), ні значення, які потім треба встановити в відбір у вкладеній схемою. Може я що не так роблю? Я тільки-тільки почав програму під СКД, 100 грам не допомогли, а важкі наркотики я не хочу вживати, щоб в цьому розібратися :(