К статье
Практический материал

Отчеты и Аналитика · 11 мин

Как добавить расшифровку в отчет СКД в 1С 8

Подробная инструкция по добавлению расшифровки в отчет на СКД в 1С 8: настройка через конструктор, программная обработка расшифровки, типовые ошибки и примеры кода.

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

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

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

Как работает стандартная расшифровка СКД

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

Чтобы стандартная расшифровка была доступна, в настройках отчета должны быть заполнены поля группировок и выбранные поля, а в схеме компоновки на закладке «Настройки» у полей не должно быть запрета расшифровки. Если отчет выводится программно, данные расшифровки нужно явно сохранить — об этом ниже.

Настройка расшифровки без программирования

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

Для управления доступными действиями у отдельных полей используется закладка «Наборы данных» → кнопка настройки поля либо закладка «Поля» в настройках. Там можно, например, ограничить расшифровку для служебных колонок. Также полезно проверить параметр «Использование» у группировок: отключенная группировка исключается и из цепочки расшифровки.

Простой способ проверить стандартную механику: сформируйте отчет в режиме предприятия, дважды щелкните по ячейке с суммой и выберите «Расшифровать» → одно из доступных полей. Платформа построит тот же отчет с дополнительной группировкой по выбранному полю и отбором по значению ячейки.

Включение стандартной расшифровки
  1. 1
    Откройте основную схему компоновки данных отчета в конфигураторе
  2. 2
    На закладке «Набор данных» убедитесь, что поля для расшифровки присутствуют в запросе
  3. 3
    На закладке «Настройки» добавьте нужные поля в группировки и выбранные поля
  4. 4
    Сохраните схему и сформируйте отчет в режиме предприятия
  5. 5
    Дважды щелкните по ячейке и проверьте пункты «Открыть» и «Расшифровать»

Программная обработка расшифровки в форме отчета

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

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

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

&НаКлиенте

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

ЗначенияПолей = ПолучитьЗначенияРасшифровки(Расшифровка);

Если ЗначенияПолей.Свойство("Контрагент") Тогда

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("Отбор", Новый Структура("Контрагент", ЗначенияПолей.Контрагент));

ОткрытьФорму("Отчет.ПродажиПоДокументам.Форма", ПараметрыФормы);

КонецЕсли;

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

&НаСервере

Функция ПолучитьЗначенияРасшифровки(КлючРасшифровки)

Результат = Новый Структура;

Элемент = ПолучитьИзВременногоХранилища(ДанныеРасшифровки)

.Элементы.Получить(КлючРасшифровки);

Для Каждого Поле Из Элемент.ПолучитьПоля() Цикл

Результат.Вставить(Поле.Поле, Поле.Значение);

КонецЦикла;

Возврат Результат;

КонецФункции

Обратите внимание: данные расшифровки хранятся во временном хранилище, а в реквизите формы лежит адрес. Поэтому чтение значений выполняется в серверной процедуре через ПолучитьИзВременногоХранилища. В типовых конфигурациях на БСП вместо ручной обработки часто используют модуль ОтчетыКлиент и переопределяемые процедуры — это сокращает объем собственного кода.

Расшифровка другим отчетом с передачей отбора

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

Порядок действий: в обработчике расшифровки получите значения полей и параметры родительского отчета (период, организацию — они хранятся в настройках, доступных через элементы расшифровки верхнего уровня). Затем создайте новый объект настроек целевого отчета, добавьте в отбор элементы по полученным значениям и откройте форму отчета с параметром СформироватьПриОткрытии = Истина и переданными настройками.

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

Способы реализации расшифровки

Стандартная (без кода)

Подходит для типовой детализации по полям отчета. Ограничение: нельзя открыть произвольный отчет или изменить состав действий.

ОбработкаРасшифровки в форме

Полный контроль: свой отчет, свои отборы, открытие объектов. Требует кода и аккуратной работы с данными расшифровки.

Механизмы БСП (ОтчетыКлиент)

Готовая инфраструктура в типовых конфигурациях. Подходит, если отчет встроен в подсистему вариантов отчетов; для самописных решений требует изучения API БСП.

Проверка результата и типичные ошибки

После внедрения расшифровки проверьте три сценария: щелчок по ячейке с ссылочным значением (должен открываться объект), щелчок по числовой ячейке внутри группировки (должна строиться детализация с корректным отбором) и щелчок по итоговой строке (отбор не должен «ломаться» из-за пустых значений полей группировки).

Наиболее частая ошибка — пустое меню расшифровки или сообщение об ошибке при двойном щелчке. Обычно причина в том, что данные расшифровки не сохранены при программном формировании отчета либо отчет выведен методом, не предполагающим расшифровку (например, вывод в обычный табличный документ через Вывести без компоновщика). Вторая типичная проблема — в обработчике забыли установить СтандартнаяОбработка = Ложь, из-за чего выполняются сразу два действия.

Типичные ошибки
01
Не передан объект ДанныеРасшифровки в процессор компоновки — меню расшифровки пустое или выдает ошибку
02
Не установлено СтандартнаяОбработка = Ложь — срабатывает и платформа, и свой код
03
Поле для расшифровки отсутствует в запросе набора данных — его нет в списке доступных действий
04
Чтение данных расшифровки на клиенте без серверного вызова — ошибка доступа к временному хранилищу
05
Расшифровка по итоговой строке без проверки пустых значений — некорректный отбор в детальном отчете
Контрольные точки

Как проверить результат

Двойной щелчок по ссылке (контрагент, документ)
Норма

Открывается карточка объекта

Тревожный признак

Ничего не происходит или ошибка «Поле не найдено»

Расшифровка суммы по полю
Норма

Строится детализация с отбором по значению ячейки

Тревожный признак

Детализация без отбора — суммы не сходятся со сводным отчетом

Контроль итогов
Норма

Сумма детального отчета равна значению ячейки сводного

Тревожный признак

Расхождение — значит, отбор передается не полностью

Ограничения и безопасные границы доработки

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

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

Итог

Что важно запомнить

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

Частые вопросы

Почему при двойном щелчке по ячейке ничего не происходит?

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

Как запретить расшифровку для отдельных колонок?

В схеме компоновки на закладке настроек выбранных полей можно ограничить доступные действия, а программно — в обработчике ОбработкаРасшифровки анализировать имя поля из данных расшифровки и просто не выполнять действие, установив СтандартнаяОбработка = Ложь.

Можно ли расшифровать ячейку сразу до документов, минуя промежуточный отчет?

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

Расшифровка работает в толстом клиенте, но не работает в тонком. В чем причина?

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

Как передать в расшифровку период из настроек основного отчета?

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