Как реализовать открытие документа при двойном клике по ячейке отчета СКД?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов на системе компоновки данных (СКД) часто возникает задача создать интерактивный интерфейс, где пользователь мог бы быстро перейти к документу, связанному с данными в строке. Рассмотрим по шагам, как перехватить событие двойного клика и выполнить необходимые действия.

Понимание механизма расшифровки

В СКД каждая ячейка отчета обладает уникальным идентификатором, который позволяет системе понять, какие именно данные скрываются за визуальным представлением. Когда пользователь взаимодействует с ячейкой, вызывается событие РезультатОбработкаРасшифровки. Чтобы реализовать собственную логику (например, открытие документа, который не связан напрямую с СКД), нам нужно отключить стандартное поведение системы и обработать переданный идентификатор.

Шаг 1: Настройка обработчика события на клиенте

На форме отчета необходимо создать обработчик события ОбработкаРасшифровки для поля табличного документа Результат. Важным моментом является передача управления на сервер, так как именно там мы будем искать документ с помощью запроса. Рассмотрим пример реализации:


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

Шаг 2: Получение данных на сервере

На сервере нам необходимо извлечь содержимое расшифровки. Поскольку объект ДанныеРасшифровки является сложным и хранится во временном хранилище, мы используем метод ПолучитьИзВременногоХранилища. После получения объекта ДанныеРасшифровкиКомпоновкиДанных мы анализируем переданный идентификатор Расшифровка.


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

Шаг 3: Поиск документа и открытие формы

Когда мы извлекли необходимые значения из расшифровки (например, код клиента или номер договора), переходим к поиску документа. Разберем основные рекомендации:

  1. Используйте запросы для поиска документа по выбранным в отчете реквизитам.
  2. Если документов может быть несколько, ограничивайте выборку конструкцией ВЫБРАТЬ ПЕРВЫЕ 1.
  3. Для открытия формы найденного объекта используйте метод ОткрытьЗначение(СсылкаНаНайденныйДокумент). Этот метод автоматически подберет нужную форму и отобразит объект.

Важные нюансы реализации

При работе с расшифровкой обязательно учитывайте следующие моменты:

Следуя этим шагам, вы сможете создать гибкую систему навигации прямо из отчета, значительно повысив удобство работы пользователей с данными. Помните, что архитектурно правильный подход заключается в максимальном выносе логики поиска на сервер, оставляя клиентской части только вызов методов открытия форм.

← На главную