Как открыть отчет на основании данных ячейки отчета СКД без изменения его схемы?

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

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

Использование механизма расшифровки ячейки

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

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

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

Программное добавление команд в интерфейс

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

Мы можем динамически добавлять элементы в КоманднаяПанель или контекстное меню табличного документа. Это позволяет создать контекстно-зависимую команду, которая будет доступна только при выделении определенной области отчета.

Рекомендуем придерживаться следующего алгоритма:

  1. В методе ПриСозданииНаСервере создайте новую команду формы через метод Команды.Добавить().
  2. Привяжите к этой команде обработчик действия, который будет выполняться на клиенте.
  3. В обработчике команды анализируйте свойство Элементы.Результат.ТекущаяОбласть.
  4. Получив значение ячейки, выполните открытие целевого отчета.

Технические нюансы работы с данными СКД

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

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

Рекомендация по реализации

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

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

← На главную