|
расшифровка строки отчёта СКД | ☑ | ||
---|---|---|---|---|
0
supervk
24.02.16
✎
20:11
|
Здравствуйте.
Есть отчёт на СКД, в котором пара десятков полей, каждая строка отчёта соответствет отдельному документу (грубо говоря, регистратору). Группировок нет, только детальные записи. Надо при клике на любое поле открывать документ этой строки. Есть варианты решения этой задачи без прописывания в макете расшифровки для каждого реквизита и без изменения генерации отчёта (надо, чтобы он генерировался СКД стандартно)? Подскажите, пожалуйста. В идеале хочется обойтись обработкой расшифровки табличного документа. До чего добрался: добавил в макет одну расшифровку, где прописал ссылку, которая должна открываться. Данные расшифровки отчёта получаю, там все ссылки есть. Но не могу понять, как добраться до данных именно текущей "кликнутой" строки. Это вообще возможно? |
|||
1
Cyberhawk
24.02.16
✎
21:32
|
&НаСервере
Функция ПолучитьЗначенияПолейИзЭлементаРасшифровкиКомпоновки(ЭлементРасшифровкиПоля) Результат = Новый Соответствие; РодительскиеЭлементыРасшифровки = ЭлементРасшифровкиПоля.ПолучитьРодителей(); Для Каждого РодительскийЭлементРасшифровки Из РодительскиеЭлементыРасшифровки Цикл РезультатСнизу = ПолучитьЗначенияПолейИзЭлементаРасшифровкиКомпоновки(РодительскийЭлементРасшифровки); ЗагрузитьКоллекцию(РезультатСнизу, Результат); КонецЦикла; Если ТипЗнч(ЭлементРасшифровкиПоля) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда ЗначенияПолей = ЭлементРасшифровкиПоля.ПолучитьПоля(); Для Каждого ЗначениеПоля Из ЗначенияПолей Цикл Результат.Вставить(ЗначениеПоля.Поле, ЗначениеПоля); КонецЦикла; КонецЕсли; Возврат Результат; КонецФункции |
|||
2
Cyberhawk
24.02.16
✎
21:33
|
&НаСервере
Процедура ЗагрузитьКоллекцию(КоллекцияИсточник, КоллекцияПриемник, ОчиститьПриемник = Ложь) Сам напишешь уже |
|||
3
supervk
25.02.16
✎
04:21
|
(2) Спасибо, Cyberhawk.
Но не выходит, возвращается только значение расшифровки текущей ячейки. Что я не так делаю? Вызываю: Данные_Расшифровки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); Рез = ПолучитьЗначенияПолейИзЭлементаРасшифровкиКомпоновки(Данные_Расшифровки.Элементы[Расшифровка]); После такого вызова функция получает значение поля и вызывает получение расшифровки для родителей, но оттуда ничего не извлекает, т.к. ЭлементРасшифровкиПоля = ЭлементРасшифровкиКомпоновкиДанныхГруппировка поэтому не заходит в условие Если ТипЗнч(ЭлементРасшифровкиПоля) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда ЗначенияПолей = ЭлементРасшифровкиПоля.ПолучитьПоля(); ... В итоге функция возвращает лишь значение расшифровки текущей ячейки |
|||
4
SFilchakov
25.02.16
✎
07:22
|
Процедура МакетДереваПланОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // ОбработкаРасшифорки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); ЭлементРасшифровкиДанных = ДанныеРасшифровки.Элементы[Расшифровка]; ЭлементРасшифровкиДанныхПоля = ЭлементРасшифровкиДанных.ПолучитьПоля()[0]; ОбработкаРасшифорки.ОткрытьЗначение(ЭлементРасшифровкиДанных.Идентификатор, новый ПолеКомпоновкиДанных(ЭлементРасшифровкиДанныхПоля.Поле)); КонецПроцедуры |
|||
5
supervk
25.02.16
✎
08:51
|
(4) Спасибо, SFilchakov, но это тоже ничего кроме расшифровки текущей ячейки не даст.
|
|||
6
supervk
25.02.16
✎
08:53
|
Сделал такую "корягу": прохожу по всем ячейкам текущей строки, беру из них расшифровки.
Из полученных расшифровок беру поля, ну а по из нужного мне поля, например, "ДокументСсылка" беру ссылку для обработки. Как-то шибко замороченно получилось и много всяких "но" и "если". Умнее ничего не придумал, если есть соображения, подскажите, пожалуйста. ТабДок = ЭтаФорма.ОтчетТабличныйДокумент; ТекНиз = Элемент.ТекущаяОбласть.Верх; ТекВерх = Элемент.ТекущаяОбласть.Низ; ДанныеСтроки = новый Соответствие; // Проходим по всей строке и собираем даные из областей ТекЛево = 1; ТекПраво = 1; Пока ТекЛево<ТабДок.ШиринаТаблицы Цикл ТекЛево = ТекЛево+1; ТекПраво = ТекПраво+1; ТекОбласть = ЭтаФорма.ОтчетТабличныйДокумент.Область(ТекНиз, ТекЛево, ТекВерх, ТекПраво); Расшифровка = ТекОбласть.Расшифровка; ДанныеРасшифровки = ПолучитьДанныеРасшифровкиПоИдентификатору(ЭтаФорма.ОтчетДанныеРасшифровки, Расшифровка); Для Каждого Элемент Из ДанныеРасшифровки Цикл ДанныеСтроки.Вставить(Элемент.Ключ, Элемент.Значение); КонецЦикла; КонецЦикла; ИмяПоля = "СсылкаРасшифровки"; Значение = ДанныеСтроки.Получить(ИмяПоля); Если ЗначениеЗаполнено(Значение) Тогда СтандартнаяОбработка = Ложь; ПоказатьЗначение(,Значение); КонецЕсли; Оптимизировать ещё надо, но общий смысл такой. |
|||
7
Cyberhawk
25.02.16
✎
11:11
|
(3) Ну, либо дедовским методом - перебирать ячейки табличного документа, либо все-таки добавить в макеты СКД в макет каждого поля, куда можно кликать, в выражение расшифровки необходимые поля
|
|||
8
supervk
25.02.16
✎
11:47
|
(7)
Ясно, спасибо, Cyberhawk. Я сперва и делал макеты. Первый десяток отчётов. Но потом мне пришёл ещё десяток заданий на такие отчёты, в каждом по полтора - два десятка колонок и везде прописано одно и тоже - при клике на строку открывать её документ. Вот и надоело - прописал стандартную расшифровку. Правда, как минимум одно поле всё-таки надо делать с макетом, чтобы ссылка была в расшифровке. :-) |
|||
9
supervk
25.02.16
✎
15:28
|
Да, ещё один вариант тут подсказали. Добавить реквизит расшифровки в группировку, но не выводить его. Тогда до него можно добраться через:
ЭлементРасшифровки.ПолучитьРодителей()[0].ПолучитьПоля() И можно ячейки строки не перебирать. |
|||
10
Новиков
25.02.16
✎
17:14
|
(9) если у тебя только детальные записи, без группировок то не покатит. Если сделал группировку, то покатит. Это и есть, кста, единственный нормальный вариант (без макета), как это можно сделать в принципе. Перебор ТабДок'а - лютый адъ. Лучше уж макеты нарисовать.
|
|||
11
FIXXXL
25.02.16
✎
17:49
|
(0) как вариант - через вычисляемые поля:
путь к данным - имя поля выражение - путь к документу расшифровки |
|||
12
FIXXXL
25.02.16
✎
17:52
|
(11) + при этом самого дока(ссылки) в выдодимых данных может и не быть, он должен присутствовать в выборке только
|
|||
13
Tateossian
25.02.16
✎
18:06
|
(8) Помнится есть такой параметр расшифровки в макете - "Использование расшифровки" - Строка (для всей строки). Это поможет?
|
|||
14
supervk
26.02.16
✎
03:38
|
(11) FIXXXL
Да, насчёт этого варианта я в курсе, но редко использую. Эдакий "хакерский" способ. С ним тяжело работать, когда полей больше десятка, вносит путаницу. Кроме того, возникают проблемы с отборами и группировками у пользователя, т.к. он не понимает, что там на самом деле. |
|||
15
supervk
26.02.16
✎
03:40
|
(13) Tateossian
Мне не удалось в СКД заставить его работать на всю строку. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |