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