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