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

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

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

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

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

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

Использование события ОбработкаРасшифровки

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

Рассмотрим структуру действий в обработчике:


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

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

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

Разберем, как эффективно передать отборы в детальный отчет:


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

Почему стоит использовать создание отдельного отчета для расшифровки?

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

Итоги и рекомендации

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

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

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

← На главную