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