При разработке отчетов на системе компоновки данных (СКД) часто возникает задача создать интерактивный интерфейс, где пользователь мог бы быстро перейти к документу, связанному с данными в строке. Рассмотрим по шагам, как перехватить событие двойного клика и выполнить необходимые действия.
В СКД каждая ячейка отчета обладает уникальным идентификатором, который позволяет системе понять, какие именно данные скрываются за визуальным представлением. Когда пользователь взаимодействует с ячейкой, вызывается событие РезультатОбработкаРасшифровки. Чтобы реализовать собственную логику (например, открытие документа, который не связан напрямую с СКД), нам нужно отключить стандартное поведение системы и обработать переданный идентификатор.
На форме отчета необходимо создать обработчик события ОбработкаРасшифровки для поля табличного документа Результат. Важным моментом является передача управления на сервер, так как именно там мы будем искать документ с помощью запроса. Рассмотрим пример реализации:
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
// Отключаем стандартную расшифровку СКД
СтандартнаяОбработка = Ложь;
// Передаем управление на сервер для поиска данных
РезультатОбработкаРасшифровкиНаСервере(Расшифровка);
КонецПроцедуры
На сервере нам необходимо извлечь содержимое расшифровки. Поскольку объект ДанныеРасшифровки является сложным и хранится во временном хранилище, мы используем метод ПолучитьИзВременногоХранилища. После получения объекта ДанныеРасшифровкиКомпоновкиДанных мы анализируем переданный идентификатор Расшифровка.
&НаСервере
Процедура РезультатОбработкаРасшифровкиНаСервере(Расшифровка)
// Получаем объект данных расшифровки из временного хранилища
ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
// Получаем массив полей, соответствующих ячейке, по которой кликнули
МассивПолей = БухгалтерскиеОтчетыВызовСервера.ПолучитьМассивПолейРасшифровки(Расшифровка, ДанныеРасшифровкиОбъект, , Ложь);
// Здесь мы анализируем МассивПолей, находим нужный нам идентификатор
// и выполняем поиск документа запросом к базе данных
КонецПроцедуры
Когда мы извлекли необходимые значения из расшифровки (например, код клиента или номер договора), переходим к поиску документа. Разберем основные рекомендации:
ВЫБРАТЬ ПЕРВЫЕ 1.ОткрытьЗначение(СсылкаНаНайденныйДокумент). Этот метод автоматически подберет нужную форму и отобразит объект.При работе с расшифровкой обязательно учитывайте следующие моменты:
ТипЗнч(), чтобы избежать ошибок, если пользователь кликнул в пустое место отчета или заголовок.Родитель у объекта расшифровки, чтобы «подняться» на уровень выше и получить контекст всей строки целиком.СтандартнаяОбработка = Ложь — это ключевой шаг. Если этого не сделать, система 1С параллельно с вашим кодом попытается открыть стандартное окно расшифровки, что вызовет путаницу у пользователя.Следуя этим шагам, вы сможете создать гибкую систему навигации прямо из отчета, значительно повысив удобство работы пользователей с данными. Помните, что архитектурно правильный подход заключается в максимальном выносе логики поиска на сервер, оставляя клиентской части только вызов методов открытия форм.