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