Разработка отчетов на Системе Компоновки Данных (СКД) в конфигурациях на обычных формах часто ставит перед разработчиком задачу организации интерактивной расшифровки данных. Когда пользователю необходимо при нажатии на итоговую сумму получить детальный список документов, номенклатуры или иных аналитик, стандартного функционала СКД может оказаться недостаточно. Давайте разберем, как подойти к решению этой задачи, обеспечив удобный пользовательский интерфейс.
Прежде всего, важно понимать, что отчет на базе СКД в конечном итоге выводится в объект ТабличныйДокумент. Именно с этим объектом на форме мы и будем взаимодействовать. В обычных формах механизм расшифровки не работает «автоматически» так, как в управляемых, поэтому нам необходимо взять управление процессом на себя.
Для активации возможности клика по ячейкам необходимо выполнить предварительную настройку свойств табличного документа на форме:
Защита в значение Истина. Это необходимо для того, чтобы ячейки стали доступны для интерактивного выделения и анализа.ТолькоПросмотр в значение Истина, чтобы исключить возможность редактирования текста ячеек пользователем.ОбъектРасшифровки, либо настроено СоединениеСДанными.Ключевым инструментом для реализации вашей логики является процедура ОбработкаРасшифровки. В тот момент, когда пользователь кликает по ячейке отчета, платформа передает управление в этот обработчик. Наша задача — перехватить этот вызов и определить, по какой именно ячейке был совершен клик.
Рассмотрим структуру действий в обработчике:
Процедура ТабличныйДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
// Отключаем стандартную расшифровку, если она нам не нужна или мы переопределяем логику
СтандартнаяОбработка = Ложь;
// Анализируем содержимое переменной Расшифровка
// Здесь мы можем получить идентификатор ячейки и данные, которые в ней зашиты
ДанныеРасшифровки = ПолучитьДанныеИзРасшифровки(Расшифровка);
// В зависимости от контекста, открываем форму или другой отчет
ОткрытьФормуДетальныхДанных(ДанныеРасшифровки);
КонецПроцедуры
Основная сложность заключается в извлечении параметров (дата, склад, контрагент), по которым была сформирована ячейка. При использовании СКД данные расшифровки упакованы в специальную структуру. Вы можете использовать объект ДанныеРасшифровкиКомпоновкиДанных.
Разберем, как эффективно передать отборы в детальный отчет:
Расшифровки, вы фактически получаете ссылку на структуру данных СКД.КомпоновщикНастроек для программного наложения отборов на детальный отчет:
// Пример наложения отбора программно
КомпоновщикНастроекДетальногоОтчета.Настройки.Отбор.Элементы.Очистить();
ЭлементОтбора = КомпоновщикНастроекДетальногоОтчета.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ЗначениеКонтрагентаИзРасшифровки;
ЭлементОтбора.Использование = Истина;
Часто возникает соблазн попытаться «вытащить» данные из уже сформированной таблицы, однако это технически сложный и ненадежный путь. Профессиональный подход — это перегенерация отчета или открытие формы с детальными записями. Это позволяет:
Для успешной реализации задачи в обычных формах придерживайтесь следующего алгоритма:
ТабличныйДокумент в модуле формы, обеспечив его интерактивность.ОбработкаРасшифровки для захвата контекста клика.Расшифровка, который предоставляет СКД.КомпоновщикНастроек.Такой подход позволит вам создать надежный и функциональный механизм расшифровки, который будет работать стабильно даже в сложных отчетах с большими объемами данных.