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

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

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

Способ 1. Использование выражения расшифровки в наборе данных

Это самый элегантный и "чистый" метод, который не требует написания кода и использования сложных макетов. Он позволяет оставить в ячейке числовое значение, но "подложить" под него другую ссылку для действия пользователя. Рассмотрим этот метод пошагово.

Проанализируем ситуацию: у нас есть поле СуммаПродаж (число) и поле ДокументОснование (ссылка). Мы хотим, чтобы в отчете отображалась сумма, но при двойном клике открывался документ. Выполним следующие действия:

  1. Перейдем в схему компоновки данных на закладку Наборы данных.
  2. Найдем в списке полей наше числовое поле (например, Поле2 из обсуждения).
  3. В этой же строке найдем колонку Выражение расшифровки.
  4. Введем в это поле имя того реквизита, который должен открываться. В нашем примере это ПервоначальныйДокументСсылка.
  5. Убедимся, что поле-ссылка включено в набор данных, даже если оно не выбрано для отображения пользователем.

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

Новый Структура("Ссылка", ПервоначальныйДокументСсылка)

В этом случае платформа поймет, что расшифровка должна вести к объекту, указанному в структуре.

Способ 2. Условное оформление и подмена текста

Этот метод часто упоминался в обсуждении на форуме. Суть его заключается в том, что мы выводим в колонку саму ссылку на документ, но с помощью настроек оформления заставляем систему отображать вместо заголовка документа числовое значение.

Разберем алгоритм настройки:

  1. В настройках СКД (на уровне всего отчета или конкретной группировки) перейдем на закладку Выбранные поля.
  2. Добавим поле ПервоначальныйДокументСсылка (именно ссылку, так как она обеспечит стандартное открытие документа).
  3. Перейдем на закладку Условное оформление.
  4. Добавим новый элемент оформления.
  5. В области Оформление найдем параметр Текст. Нажмем на кнопку выбора, очистим текстовое значение и выберем Поле компоновки данных — наше числовое поле (например, Сумма).
  6. В закладке Условие ничего не указываем (если оформление должно применяться ко всем строкам) или задаем фильтр.
  7. В закладке Оформляемые поля выберем только ПервоначальныйДокументСсылка.

Таким образом, в колонке отчета система будет видеть ссылку (и отрабатывать клик по ней), но визуально пользователь будет видеть число. Это простой и эффективный обходной путь.

Способ 3. Создание макета поля

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

Выясним, как это работает:

  1. В схеме компоновки данных переходим на закладку Макеты.
  2. Добавляем Макет поля.
  3. Выбираем поле, для которого создаем макет (наше числовое поле).
  4. В ячейке макета пишем параметр, например [ЧисловойПоказатель].
  5. В свойствах ячейки табличного документа макета находим параметр Расшифровка. Указываем там имя параметра, например П1.
  6. Ниже, в таблице параметров макета, для П1 прописываем выражение: ПервоначальныйДокументСсылка.

Теперь система будет брать оформление из макета, а данные для перехода (расшифровки) — из указанного нами поля ссылки.

Способ 4. Программная обработка события (для сложных случаев)

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

Рассмотрим пример кода для обработки события РезультатОбработкаРасшифровки:


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

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

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

В этом примере мы полностью берем управление на себя. Мы анализируем, какие данные связаны с текущей ячейкой, и программно открываем нужную форму. Обратите внимание на использование СтандартнаяОбработка = Ложь — это критически важно, чтобы не появлялось стандартное окно выбора действий СКД.

Дополнительные рекомендации по оформлению

Чтобы пользователь понимал, что на число можно нажать, рекомендуем использовать свойство Гиперссылка в условном оформлении. Если установить Оформление.Гиперссылка = Истина, текст в ячейке станет синим и подчеркнутым при наведении (или постоянно, в зависимости от настроек платформы). Это значительно повышает удобство интерфейса (UX).

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

← На главную