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

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

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

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

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

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

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

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

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

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

Настройка расшифровки в схеме компоновки данных

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

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

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

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

Программная обработка расшифровки в СКД

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

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

&НаКлиенте

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

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

// Получаем значения полей расшифровки на сервере

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

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

И ЗначениеЗаполнено(ЗначенияПолей.Регистратор) Тогда

ПоказатьЗначение(, ЗначенияПолей.Регистратор);

КонецЕсли;

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

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

Расшифровка в отчете на табличном документе без СКД

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

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

// При выводе результата

ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент;

ОбластьСтрока.Параметры.Сумма = Выборка.Сумма;

Результат.Вывести(ОбластьСтрока);

// В обработчике события табличного документа

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

Если ТипЗнч(Расшифровка) = Тип("СправочникСсылка.Контрагенты") Тогда

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

ОткрытьЗначение(Расшифровка);

КонецЕсли;

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

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

Сравнение подходов к расшифровке

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

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

Программная обработка в СКД

Нужна, когда по щелчку открывается объект или другой отчет с особыми отборами. Требует вывода данных расшифровки и серверного кода.

Расшифровка в табличном документе

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

Расшифровка в типовых конфигурациях

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

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

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

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

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

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

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

Двойной щелчок по ячейке с суммой
Норма

Появляется меню расшифровки или выполняется заданное действие

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

Ничего не происходит или возникает ошибка

Детальный отчет по ячейке
Норма

Сумма в детализации равна исходной ячейке

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

Суммы расходятся — ошибка в запросе или связи наборов

Открытие документа из расшифровки
Норма

Открывается именно тот документ, который формирует показатель

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

Открывается пустая форма или другой объект

Работа под правами рядового пользователя
Норма

Расшифровка работает без ошибок доступа

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

Ошибка нарушения прав доступа при щелчке

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

Итог

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

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

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

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

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

Как расшифровать отчет до конкретных документов?

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

Можно ли по щелчку открыть другой отчет с отбором?

Да. В обработчике расшифровки отключите стандартную обработку, получите значения полей расшифровки (контрагент, период, склад), затем откройте форму нужного отчета с параметрами отбора или сформируйте его программно, передав отбор через настройки компоновщика. Это стандартный прием для связанных отчетов.

Почему сумма расшифровки не сходится с исходной ячейкой?

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

Расшифровка работает у администратора, но не у пользователя. Что делать?

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

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

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