Расшифровка в группировке СКД

1. Adrenal1n 4 16.06.20 15:34 Сейчас в теме
Ребят, написал отчет, осталось пару штрихов, бьюсь уже целый день, не могу придумать как сделать. Вообщем есть отчет, как на скрине, под заказом выводятся ордера (это было обязательное условие для клиента). И нужно чтобы при нажатии на заказ/ордер открывалась ссылка. Ордера - это ресурс, чтобы по группировке выводить заказ. При нажатии на ордер выводится окно, как на скрине, оттуда есть возможность открывать ордер, а вот при нажатии на заказ выводится другое поле (как на другом скрине), как сделать, чтобы заказ открывался?
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
11. gelotus 18.06.20 10:28 Сейчас в теме +0.25 $m
Для управляемых форм тоже самое. перехватывает расшифровку не обработчик формы, а обработчик табличного документа на форме. ( на форме выделить таблицу и там будут обработчики)

и код немного изменится.


ОбДанныеРасшифровки = ПолучитьИзВременногоХранилища(Данныерасшифровки);

Значение = ОбДанныеРасшифровки .Элементы[Расшифровка].ПолучитьПоля()[0].Значение; // текущее значение на котором щелкнули
ИмяПоля = ОбДанныеРасшифровки .Элементы[Расшифровка].ПолучитьПоля()[0].Поле; // имя текущего поля

Если ИмяПоля = "Ордер" Тогда
СтандартнаяОбработка = Ложь;
ОткрытьЗначение(Значение );
КонецЕсли;
12. Adrenal1n 4 18.06.20 16:08 Сейчас в теме
(11) Да вы, батюшка, гений. Красивое и элегантное решение. Единственное, что оно не работало для обычных форм из-за того, что нет отображения на клиенте для расшифровки, поэтому переделал на клиент-серверный вариант и сделал немодальный вызов функции, вот уже готовы код:

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

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

&НаСервере
Функция РасшифроватьНаСервере(ДанныеРасшифровки, Расшифровка)
	
	ОбДанныеРасшифровки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
	СтруктураВозврата = Новый Структура;
	СтруктураВозврата.Вставить("Значение", ОбДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение);
	СтруктураВозврата.Вставить("Поле", ОбДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле);
	Возврат СтруктураВозврата;
	
КонецФункции
Показать


Я позаимствовал типовую форму отчета, чтобы не менялось расположение кнопок (так пользователям спокойнее) и туда встроил этот код. Спасибо за помощь!
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Adrenal1n 4 16.06.20 16:30 Сейчас в теме
6. lmnlmn 69 17.06.20 22:13 Сейчас в теме
(2) Была как-то публикация по расшифровке ячейки не тем что в ней есть. Это не ваш случай, но вдруг на мысли натолкнет. http://forum.infostart.ru/forum9/topic213815/message2248810/#message2248810
3. soft_wind 16.06.20 17:36 Сейчас в теме
отчет сами писали или допиливаете?
проверьте по коду нет ли перехвата формирования меню расшифровки, очень на это похоже.

т.к. в нормальном СКД отчете открывает и группы и элементы группы, без ошибок
8. Adrenal1n 4 18.06.20 05:50 Сейчас в теме
(3) Допиливаю, в модуле объекта только программная установка параметров, больше никаких изменений в коде.
4. toypaul 63 16.06.20 17:41 Сейчас в теме
Если отчет допускает использование макетов, то сделать свой макет и в нем параметр расшифровки
Или писать свой обработчик расшифровки
Veetavas; +1 Ответить
7. Adrenal1n 4 18.06.20 05:50 Сейчас в теме
(4) Нет, создания макетов не допускает отчет(
5. gelotus 17.06.20 17:32 Сейчас в теме
Попробуй создать на форме процедуру Обработки расшифровки и написать там следующие строки

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

Значение = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение; // текущее значение на котором щелкнули
ИмяПоля = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле; // имя текущего поля

Если ИмяПоля = "Ордер" Тогда
СтандартнаяОбработка = Ложь;
ОткрытьЗначение(Значение );
КонецЕсли;


КонецПроцедуры
9. Adrenal1n 4 18.06.20 05:52 Сейчас в теме
(5)
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

Значение = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение; // текущее значение на котором щелкнули
ИмяПоля = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле; // имя текущего поля

Если ИмяПоля = "Ордер" Тогда
СтандартнаяОбработка = Ложь;
ОткрытьЗначение(Значение );
КонецЕсли;


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


Может это для обычных форм? Потому что у управляемой СКД формы вообще нет ни одного обработчика, который перехватывает расшифровку (добавил все обработчики и проверил). Ну и соответственно этот код не может быть вызван из формы.
10. toypaul 63 18.06.20 09:38 Сейчас в теме
(9) не у формы а у табличного документа
11. gelotus 18.06.20 10:28 Сейчас в теме +0.25 $m
Для управляемых форм тоже самое. перехватывает расшифровку не обработчик формы, а обработчик табличного документа на форме. ( на форме выделить таблицу и там будут обработчики)

и код немного изменится.


ОбДанныеРасшифровки = ПолучитьИзВременногоХранилища(Данныерасшифровки);

Значение = ОбДанныеРасшифровки .Элементы[Расшифровка].ПолучитьПоля()[0].Значение; // текущее значение на котором щелкнули
ИмяПоля = ОбДанныеРасшифровки .Элементы[Расшифровка].ПолучитьПоля()[0].Поле; // имя текущего поля

Если ИмяПоля = "Ордер" Тогда
СтандартнаяОбработка = Ложь;
ОткрытьЗначение(Значение );
КонецЕсли;
12. Adrenal1n 4 18.06.20 16:08 Сейчас в теме
(11) Да вы, батюшка, гений. Красивое и элегантное решение. Единственное, что оно не работало для обычных форм из-за того, что нет отображения на клиенте для расшифровки, поэтому переделал на клиент-серверный вариант и сделал немодальный вызов функции, вот уже готовы код:

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

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

&НаСервере
Функция РасшифроватьНаСервере(ДанныеРасшифровки, Расшифровка)
	
	ОбДанныеРасшифровки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
	СтруктураВозврата = Новый Структура;
	СтруктураВозврата.Вставить("Значение", ОбДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Значение);
	СтруктураВозврата.Вставить("Поле", ОбДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0].Поле);
	Возврат СтруктураВозврата;
	
КонецФункции
Показать


Я позаимствовал типовую форму отчета, чтобы не менялось расположение кнопок (так пользователям спокойнее) и туда встроил этот код. Спасибо за помощь!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот