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

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

Как задать параметр расшифровки в отчёте 1С

Как задать параметр расшифровки в 1С: настройка расшифровки в СКД, обработчик РасшифровкаОтчета, передача параметров и типичные ошибки.

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

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

Что такое расшифровка и параметр расшифровки в 1С

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

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

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

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

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

Порядок действий в конструкторе схемы компоновки данных:

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

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

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

Программная обработка расшифровки в модуле объекта отчёта

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

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

bsl
Процедура ОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ЭлементРасшифровки = ДанныеРасшифровки.Элементы.Получить(Расшифровка);
    Поля = ЭлементРасшифровки.ПолучитьПоля();
    Отбор = Новый Структура;
    Для Каждого Поле Из Поля Цикл
        Отбор.Вставить(Поле.Поле, Поле.Значение);
    КонецЦикла;
    ОткрытьФорму("Отчет.ПродажиДетально.Форма", Новый Структура("Отбор", Отбор));
КонецПроцедуры

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

Передача параметров в расшифровывающий отчёт

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

Типовые параметры, которые передают в расшифровку:

  • Период — начало и конец периода основного отчёта, чтобы детализация показывала тот же интервал;
  • Значения группировок — контрагент, номенклатура, склад, организация, подразделение;
  • Ресурс — какой именно показатель расшифровывается (сумма, количество), если в дочернем отчёте несколько вариантов детализации;
  • Отборы верхнего уровня — условия, заданные пользователем в основном отчёте, чтобы расшифровка не показала лишнего.

При передаче параметров проверяйте типы значений. Типичная ситуация: в данных расшифровки поле хранит ссылку на справочник, а в дочернем отчёте параметр объявлен как строка — отбор молча не сработает. Сверяйте типы параметров в обеих схемах компоновки.

Расшифровка в управляемой форме отчёта

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

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

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

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

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

Контрольные точки

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

Сумма детализации
Норма

Сумма строк расшифровки равна значению ячейки основного отчёта

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

Сумма больше или меньше — отборы переданы не полностью

Период дочернего отчёта
Норма

Совпадает с периодом основного отчёта

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

Период пустой или другой — параметр не связан

Отбор по группировке
Норма

В дочернем отчёте установлен отбор по значению из ячейки

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

Отбор пустой — показываются все данные

Типичные ошибки
01
Поле группировки не выведено в выбранные поля — значение не попадает в данные расшифровки, отбор остаётся пустым.
02
Не сброшен флаг СтандартнаяОбработка — открывается и ваше окно, и стандартное меню расшифровки.
03
Расхождение типов параметров в основной и дочерней схеме — отбор молча не применяется.
04
Игнорирование родительских элементов расшифровки — передаётся только поле текущей группировки, без значений вышестоящих уровней.
05
В управляемой форме данные расшифровки не сохранены в хранилище — после серверного вызова расшифровка недоступна.

FAQ

Почему при щелчке по ячейке расшифровка не открывается?

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

Как расшифровать ячейку до документов-регистраторов?

Добавьте в дочерний вариант отчёта детальные записи с полем «Регистратор» и передайте в него значения группировок и период основного отчёта. Либо в программном обработчике открывайте форму списка документов с отбором по значениям полей из данных расшифровки.

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

Да. В обработчике расшифровки параметр «ДополнительныеПунктыМеню» (в типовых механизмах БСП) позволяет добавить собственные варианты: открыть другой отчёт, форму документа или обработку. В самописном отчёте меню формируется вручную через список значений и метод ВыбратьИзМеню.

Почему в расшифровке пустой отбор, хотя ячейка заполнена?

Наиболее вероятная причина — поле, по которому строится группировка, не включено в выбранные поля варианта отчёта, поэтому его значение отсутствует в данных расшифровки. Вторая причина — несовпадение имён или типов параметров в основной и дочерней схемах.

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

Пользовательские отборы не входят в данные расшифровки автоматически. Их нужно прочитать из настроек компоновщика основного отчёта (КомпоновщикНастроек.Настройки.Отбор) и программно добавить в настройки дочернего отчёта при открытии расшифровки.

Итог

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

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