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