Отчеты и Аналитика · 11 мин
Как сделать расшифровку в табличном документе 1С
Как сделать расшифровку в табличном документе 1С: свойство Расшифровка ячейки, обработчик ОбработкаРасшифровки, ДанныеРасшифровки в СКД, примеры кода и типичные ошибки.
Расшифровка в табличном документе 1С — это механизм, который позволяет пользователю кликнуть по ячейке отчёта и получить детальную информацию: открыть документ, перейти к элементу справочника или вывести более подробный отчёт. Без расшифровки табличный документ остаётся «мёртвой» картинкой: цифры видны, но понять, из чего они сложились, невозможно.
Механизм строится на двух элементах: свойстве Расшифровка области табличного документа и событии ОбработкаРасшифровки (или ОбработкаДополнительнойРасшифровки) в модуле формы. В простых случаях достаточно поместить в расшифровку ссылку на объект — платформа сама откроет его форму. Для сложных сценариев, особенно в отчётах на СКД, используется коллекция ДанныеРасшифровки и программная обработка действия пользователя.
Ниже разобраны оба подхода — для обычного табличного документа и для отчёта на системе компоновки данных, а также типичные ошибки, из-за которых расшифровка «не кликается» или показывает не то, что ожидалось.
Как устроен механизм расшифровки в 1С
Каждая область табличного документа имеет свойство Расшифровка. В нём можно хранить произвольное значение: ссылку на документ, структуру с параметрами, строку с именем команды. Когда пользователь кликает по ячейке, платформа проверяет это свойство и либо выполняет стандартное действие (например, открывает ссылку), либо вызывает обработчик события формы, где разработчик сам решает, что делать.
Важно понимать: расшифровка работает только в режиме просмотра табличного документа, когда поле табличного документа на форме находится в режиме «Только просмотр» или используется стандартный просмотр отчёта. Если табличный документ открыт для редактирования, клик по ячейке просто выделяет её.
Простая расшифровка: ссылка на объект
Самый быстрый способ — поместить в расшифровку ссылку на объект базы данных. При выводе области в табличный документ задайте параметр области и одновременно заполните расшифровку:
Область = Макет.ПолучитьОбласть("Строка");
Область.Параметры.Наименование = СтрокаВыборки.Номенклатура;
Область.Параметры.Сумма = СтрокаВыборки.Сумма;
Область.Параметры.Расшифровка = СтрокаВыборки.НоменклатураСсылка;
ТабДок.Вывести(Область);
Чтобы параметр Расшифровка попал в свойство области, в макете у нужной ячейки должно быть установлено свойство «Параметр расшифровки» — укажите там имя параметра. После вывода платформа сама откроет форму элемента при клике, писать обработчик не требуется.
Этот вариант подходит, когда по ячейке нужно просто открыть карточку номенклатуры, контрагента или документ. Ограничение очевидно: одно значение — одно стандартное действие. Выбора из нескольких действий или открытия другого отчёта так не добиться.
Программная обработка события ОбработкаРасшифровки
Когда стандартного открытия объекта недостаточно, логику пишут в модуле формы. Для поля табличного документа на форме назначается обработчик события ОбработкаРасшифровки:
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
Если Расшифровка.Свойство("Документ") Тогда
ОткрытьЗначение(Расшифровка.Документ);
ИначеЕсли Расшифровка.Свойство("Действие")
И Расшифровка.Действие = "ОткрытьДетальныйОтчет" Тогда
ОткрытьДетальныйОтчет(Расшифровка.Отбор);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Ключевая строка — СтандартнаяОбработка = Ложь. Без неё платформа попытается выполнить своё действие со значением расшифровки (например, попробует открыть структуру как объект), и пользователь увидит ошибку или ничего не произойдёт. В расшифровку удобно класть структуру: она позволяет передать и тип действия, и параметры отбора, и ссылку одновременно.
- 1В макете у нужной ячейки задайте параметр расшифровки
- 2При выводе области заполните параметр значением или структурой
- 3В форме назначьте полю табличного документа обработчик ОбработкаРасшифровки
- 4В обработчике установите СтандартнаяОбработка = Ложь и опишите свои действия
- 5Сформируйте отчёт и кликните по ячейке для проверки
Расшифровка в отчёте на СКД
В отчётах на системе компоновки данных расшифровка формируется автоматически: платформа строит дерево ДанныеРасшифровки, где каждой ячейке соответствует элемент с полями группировки и значениями ресурсов. Чтобы это работало при программном формировании, нужно явно создать объект ДанныеРасшифровкиКомпоновкиДанных и передать его в процессор вывода:
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,
ВнешниеНаборыДанных, ДанныеРасшифровки);
ПроцессорВывода.УстановитьОбъект(ДанныеРасшифровки);
Дальше в обработчике по переданному значению Расшифровка (это идентификатор элемента данных расшифровки) получают элементы через ДанныеРасшифровки.Элементы[Расшифровка] и читают поля группировки. На их основе строят отбор для детального отчёта или открывают значение поля.
ЭлементРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка];
Поля = ЭлементРасшифровки.ПолучитьПоля();
Для Каждого Поле Из Поля Цикл
Если Поле.Поле = "Номенклатура" Тогда
ОтборНоменклатуры = Поле.Значение;
КонецЕсли;
КонецЦикла;Стандартная расшифровка типовых отчётов
В типовых конфигурациях на управляемых формах обработка расшифровки уже встроена: пользователь кликает по ячейке, выбирает действие из меню (открыть объект, расшифровать другим отчётом), и платформа выполняет его через ОбработкаРасшифровкиКомпоновкиДанных. Если отчёт формируется стандартно через СкомпоноватьРезультат, ничего программировать не нужно — убедитесь только, что не отключён режим расшифровки в настройках формы отчёта.
Собственное действие вместо стандартного меню
Если нужно своё действие — например, при клике на сумму продаж открывать отчёт «Продажи по документам» с отбором по контрагенту и периоду — используйте событие ОбработкаДополнительнойРасшифровки поля результата. В нём извлеките поля из данных расшифровки, сформируйте структуру параметров и откройте форму другого отчёта с этими параметрами. Не забудьте отменить стандартную обработку, иначе пользователь увидит и ваше действие, и стандартное меню.
Проверка результата и типичные ошибки
После внедрения расшифровки проверьте несколько сценариев: клик по ячейке с итогом на верхнем уровне группировки, клик по детальной строке, клик по ячейке без расшифровки. В первом случае должны передаваться поля группировки, во втором — значения детальных полей, в третьем — ничего не должно происходить без ошибок.
Как проверить результат
Открывается форма нужного объекта
Ничего не происходит или ошибка «Значение не является объектом»
В обработчик приходят поля группировки с отбором
Расшифровка пуста — забыли передать ДанныеРасшифровки в процессор вывода
Ничего не происходит
Ошибка из-за обращения к несуществующему элементу данных расшифровки
Отдельная частая проблема — потеря актуальности данных расшифровки после перезаписи результата. Если табличный документ очищается и формируется заново, старый объект ДанныеРасшифровки нужно пересоздавать, иначе идентификаторы элементов перестанут соответствовать ячейкам.
Ограничения и альтернативные варианты
Расшифровка табличного документа не работает при выводе отчёта на печать или сохранении в файл: в Excel или PDF значения расшифровки не переносятся, документ становится статичным. Если пользователям нужны интерактивные отчёты вне 1С, рассмотрите публикацию через веб-клиент или выгрузку в формат, поддерживающий гиперссылки, с отдельной генерацией ссылок.
Альтернатива классической расшифровке — командный интерфейс: кнопки на форме отчёта, открывающие связанные отчёты с текущими отборами, или контекстное меню поля результата. Это удобнее, когда действий несколько и они разнородные, а также когда отчёт просматривают на мобильном клиенте, где точный клик по мелкой ячейке неудобен.
Сравнение вариантов
Подходит для открытия одного объекта; не даёт выбора действий и не передаёт отборы
Гибкий вариант для обычного табличного документа; требует ручного кодирования всех действий
Стандарт для отчётов на СКД, автоматические поля группировок; требует корректной инициализации при программном формировании
Подходят для нескольких сценариев и мобильного клиента; не привязаны к конкретным ячейкам
Что важно запомнить
Расшифровка = свойство области плюс обработчик события в форме. Для СКД обязательно передавайте ДанныеРасшифровки в процессор вывода. Всегда отключайте стандартную обработку при своей логике и проверяйте расшифровку на итоговых и детальных строках.
Часто задаваемые вопросы
Почему при клике по ячейке ничего не происходит?
Чаще всего у ячейки не заполнено свойство Расшифровка: проверьте, что параметр расшифровки указан в макете и заполняется при выводе. Вторая причина — поле табличного документа находится в режиме редактирования, где клик просто выделяет ячейку. Третья — в отчёте СКД не передан объект данных расшифровки в процессор вывода.
Как открыть другой отчёт с отбором по кликнутой ячейке?
В обработчике расшифровки получите поля из данных расшифровки, сформируйте структуру параметров (например, «Отбор» с нужными значениями и периодом) и откройте форму целевого отчёта через ОткрытьФорму с этими параметрами. В целевом отчёте параметры должны применяться к настройкам компоновки.
Можно ли сделать несколько действий на выбор при клике?
Да. В обработчике сформируйте список значений с вариантами действий и покажите его через ПоказатьВыборИзМеню. По выбранному пункту выполните нужное действие: открытие объекта, детальный отчёт, копирование значения в буфер. Не забудьте предварительно отключить стандартную обработку.
Работает ли расшифровка в файле Excel после сохранения отчёта?
Нет. При сохранении табличного документа в Excel, PDF или другой формат значения расшифровки теряются — файл содержит только видимые данные. Если нужны кликабельные ссылки в выгрузке, формируйте их отдельно как гиперссылки в ячейках файла.
Чем ОбработкаРасшифровки отличается от ОбработкаДополнительнойРасшифровки?
ОбработкаРасшифровки — основное событие, срабатывающее при стандартном действии (обычно двойной клик или выбор пункта «Расшифровать»). ОбработкаДополнительнойРасшифровки предназначено для альтернативного действия и в типовых формах отчётов вызывается отдельной командой. Логику своих сценариев чаще размещают именно в дополнительной обработке, оставляя стандартную нетронутой.
Почему после перезапуска отчёта расшифровка показывает старые данные?
Объект ДанныеРасшифровки продолжает ссылаться на результат предыдущего формирования. При каждом программном формировании создавайте новый объект ДанныеРасшифровкиКомпоновкиДанных и заново передавайте его в процессор вывода, а реквизит формы, хранящий адрес данных расшифровки, обновляйте.