Как настроить переход по ссылке (расшифровку) в отчете на обычных формах?

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

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

Понимаем механику работы расшифровки

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

Шаг 1. Настройка ячейки в макете

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

  1. Найдем свойство Заполнение. Вместо значения «Текст» установим «Параметр». В поле ниже (в строке «Параметр») укажем имя, например, НоменклатураТекст. Это то, что пользователь увидит глазами.
  2. Найдем свойство Расшифровка. В это поле также нужно вписать имя параметра, например, НоменклатураСсылка. Именно здесь будет «спрятана» ссылка на объект.
  3. Убедимся, что в свойстве Размещение текста не стоят ограничения, которые могли бы помешать выделению ячейки.

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

Шаг 2. Программное заполнение области макета

Теперь разберем, как правильно передать данные из кода в эти параметры. Проанализируем типичный алгоритм вывода строки отчета. Нам нужно явно присвоить значения обоим параметрам, которые мы создали на предыдущем шаге.

Посмотрим на пример кода:


// Получаем область из макета
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

// Заполняем текстовое представление для пользователя
// Здесь мы передаем строку, которую хотим видеть в отчете
ОбластьСтрока.Параметры.НоменклатураТекст = СтрокаВыборки.Номенклатура.Наименование;

// Заполняем данные для расшифровки
// Сюда мы передаем реальную ссылку на объект (ДокументСсылка или СправочникСсылка)
ОбластьСтрока.Параметры.НоменклатураСсылка = СтрокаВыборки.Номенклатура;

// Выводим область в результирующий табличный документ
ТабДок.Вывести(ОбластьСтрока);

Если мы забудем заполнить НоменклатураТекст, ячейка в отчете будет пустой, хотя ссылка в ней будет присутствовать. Если забудем НоменклатураСсылка — текст будет виден, но клик по нему ничего не даст.

Шаг 3. Настройка поля табличного документа на форме

Даже если макет и код настроены идеально, расшифровка может не заработать из-за свойств самого элемента формы, в который выводится отчет. Рассмотрим ключевые параметры элемента ПолеТабличногоДокумента:

  1. ТолькоПросмотр (ReadOnly): Это свойство должно быть установлено в значение Истина. Это кажется нелогичным, но именно в режиме «Только просмотр» табличный документ начинает обрабатывать двойной клик как команду расшифровки. Если свойство установлено в Ложь, 1С будет пытаться войти в режим редактирования текста в ячейке.
  2. Редактирование (Edit): Рекомендуется установить в Ложь. Это гарантирует, что пользователь не сможет изменить цифры или названия в сформированном отчете.

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


ЭлементыФормы.РезультатОтчета.ТолькоПросмотр = Истина;
ЭлементыФормы.РезультатОтчета.Редактирование = Ложь;

Шаг 4. Использование события «ОбработкаРасшифровки»

В некоторых случаях стандартного открытия документа недостаточно. Например, если в расшифровку вы передаете не ссылку, а структуру данных или простое число (номер строки). В такой ситуации нам поможет обработчик события ОбработкаРасшифровки.

Рассмотрим ситуацию, когда при клике на сумму нам нужно открыть другой отчет — для этого есть инструмент создания интерактивного рабочего стола отчетов. В расшифровку ячейки мы можем поместить Структура, содержащую период и контрагента. Чтобы 1С поняла, что делать с этими данными, напишем следующий код в модуле формы:


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

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

Типичные ошибки и способы их решения

Проанализируем наиболее частые проблемы, с которыми сталкиваются разработчики:

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

← На главную