|
v8: 8.2 Вопрос по СКД. Как обработать расшифровку, для разных схем в одном отчете. | ☑ | ||
---|---|---|---|---|
0
DSSS
22.09.11
✎
11:51
|
Доброго дня!
Ситуация следующая: Есть внешняя обработка, у нее есть 2 СКД, на базе которых формируется 2 отчета, и эти отчеты выводятся в один табличный документ на форме обработки. Все формируется программно. Вопрос вот в чем: вот после того как отчеты сформированы, как сделать разную расшифровку, в зависимости от того, по какой ячейке кликает пользователь: по ячейке, которая относится к СКД 1 или по ячейке, которая относится к СКД 2? Вот как это выглядит: &НаКлиенте Процедура Сформировать(Команда) СформироватьНаСервере(); КонецПроцедуры &НаСервере Процедура СформироватьНаСервере() // Первая схема СхемаКомпоновкиДанных = ПолучитьСКДНаСервере(7); Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки, ДанныеРасшифровки); ПроцессорКомпоновки=Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки); АдресДанныхРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, УникальныйИдентификатор); // Дальше вывод в таб. документ первой половины отчета // Вторая схема СхемаКомпоновкиДанных = ПолучитьСКДНаСервере(8); Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки, ДанныеРасшифровки); ПроцессорКомпоновки=Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки); АдресДанныхРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, УникальныйИдентификатор); // Дальше вывод в таб. документ второй половины отчета Результат = ТабличныйДокумент; КонецПроцедуры &НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) Перем ВыполненноеДействие; Перем ПараметрВыполненногоДействия; СхемаКомпоновкиДанных = ПолучитьСКДНаСервере(7); СтандартнаяОбработка = Ложь; ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(АдресДанныхРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); ДоступныеДействия = Новый Массив; ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Сгруппировать); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить); ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыполненноеДействие,ПараметрВыполненногоДействия,ДоступныеДействия); Если ВыполненноеДействие=ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда ОткрытьЗначение(ПараметрВыполненногоДействия); КонецЕсли; КонецПроцедуры Вот в процедуре РезультатОбработкаРасшифровки сейчас написано: СхемаКомпоновкиДанных = ПолучитьСКДНаСервере(7); И соотв. расшифровка для обоих половинок отчета работает одинаково. Подскажите, светлую мысль, откуда взять СКД в обработке расшифровки, если все что известно это ячейка по которой кликает пользователь? Спасибо. |
|||
1
Axel2009
22.09.11
✎
11:57
|
в макетах СКД можно задать вручную значение расшифровок.. и к ним привязываться
|
|||
2
DSSS
22.09.11
✎
12:05
|
(1) Спасибо. Можно подробней?
У меня нет макетов СКД. СКД 1 и СКД 2 получаются из xml-файлов. |
|||
3
DSSS
22.09.11
✎
12:12
|
Можно, например, между половинками отчета вывести какой-нить разделитель, и при расшифровке шерстить вверх весь отчет и проверять ячейки на то, какой внутри текст:) но это жесть)))
|
|||
4
Axel2009
22.09.11
✎
12:17
|
задай переменную в которую после вывода 1го скд запоминай колво строк. при расшифровке сверяй
|
|||
5
DSSS
22.09.11
✎
12:22
|
(4) Да, согласен, это тоже вариант. Только вот смущает, что если отчетов будет не 2 а 32.. что-то вроде структуры наверно придется клепать.
А у табличного документа, точнее у ячейки, нет никаких таких свойств, которые можно было бы заполнить при выводе, ну например ИндексСКД для всех ячеек - или 1 или 2..) |
|||
6
Axel2009
22.09.11
✎
12:23
|
расшифровка
|
|||
7
DSSS
22.09.11
✎
12:26
|
(6) Расшифровка это как я понимаю, какой-то внутренний идентификатор ячейки для механизмов СКД. его наверно не стоит менять.
|
|||
8
Axel2009
22.09.11
✎
12:27
|
другого идентификатора ячейки нет
|
|||
9
DSSS
22.09.11
✎
12:38
|
Обнаружил интересное сво-во у ячейки: маска
ОбластьЯчеекТабличногоДокумента (SpreadsheetDocumentRange) Маска (Mask) Использование: Чтение и запись. Описание: Тип: Строка. Содержит маску, которая используется при вводе значения ячейки. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Кто-нибудь знает, как можно добраться до области ячеек при выводе отчета в ПроцессорВывода.НачатьВывод(); Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Если ЭлементРезультата= Неопределено Тогда Прервать; КонецЕсли; ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); |
|||
10
DSSS
22.09.11
✎
12:55
|
Хотя может можно как-то разом установить эту самую маску при выводе половинки отчета, не обращаясь к ячейкам, а так, чтобы на всю область сразу.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |