Как настроить собственную расшифровку для разных колонок в отчете на СКД в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Выясним причину ошибки «Переменная не определена (СхемаКомпоновкиДанных)»

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

Чтобы обратиться к схеме компоновки данных из модуля формы, необходимо либо получить объект отчета из реквизита формы, либо извлечь макет схемы с сервера. Проанализируем правильный способ получения схемы:


&НаСервере
Функция ПолучитьСхемуКомпоновки()
    // Получаем объект отчета из реквизита управляемой формы
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
    // Возвращаем основную схему компоновки данных
    Возврат ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КонецФункции

Если для конструктора ИсточникДоступныхНастроекКомпоновкиДанных требуется передать схему, нужно передавать объект отчета или адрес схемы, помещенной во временное хранилище.

Способ 1. Настройка стандартной детализации в СКД по полю «Регистратор»

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

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

Способ 2. Программный перехват события расшифровки

Если требуется открывать разные формы или применять специфический алгоритм при нажатии на конкретные колонки («Прибыло» или «Убыло»), воспользуемся программной обработкой события расшифровки в форме отчета.

  1. В свойствах поля табличного документа на управляемой форме создадим обработчик события РезультатОбработкаРасшифровки.
  2. В обработчике отключим стандартную обработку, установив СтандартнаяОбработка = Ложь.
  3. Передадим адрес хранилища ДанныеРасшифровки и идентификатор ячейки Расшифровка на сервер для анализа кликнутого поля.

Рассмотрим пример кода обработки клика по ячейке:


&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    ИмяВыбраннойКолонки = ПолучитьИмяКолонкиРасшифровки(Расшифровка, ДанныеРасшифровки);
    
    Если ИмяВыбраннойКолонки = "Прибыло" Тогда
        // Выполняем открытие списка документов поступления
    ИначеЕсли ИмяВыбраннойКолонки = "Убыло" Тогда
        // Выполняем открытие списка документов списания/реализации
    КонецЕсли;

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

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


&НаСервере
Функция ПолучитьИмяКолонкиРасшифровки(Знач ИдентификаторРасшифровки, Знач АдресДанныхРасшифровки)
    
    ОбъектРасшифровки = ПолучитьИзВременногоХранилища(АдресДанныхРасшифровки);
    Элемент = ОбъектРасшифровки.Элементы[ИдентификаторРасшифровки];
    
    Если ТипЗнч(Элемент) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
        Для Каждого Поле Из Элемент.ПолучитьПоля() Цикл
            Возврат Поле.Поле;
        КонецЦикла;
    КонецЕсли;
    
    Возврат "";
КонецФункции

Способ 3. Использование параметров ячеек в макете СКД

Еще один вариант индивидуальной настройки расшифровки ячеек — использование вкладки Макеты в схеме компоновки данных:

  1. Создадим макет оформления для ячейки ресурса «Прибыло» и отдельный макет для ячейки «Убыло».
  2. В свойствах ячейки макета заполним поле ПараметрРасшифровки, указав индивидуальное выражение или параметр.
  3. При наведении мыши и двойном клике платформа будет использовать именно тот параметр расшифровки, который привязан к конкретному макету ячейки.

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

← На главную