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