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