Как вызвать процедуру или функцию при нажатии на ячейку макета в 1С?

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

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

Принцип работы расшифровки в табличном документе

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

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

Шаг 1. Размещение элемента на форме и вывод данных

Выясним, как подготовить форму для вывода печатной формы или отчета:

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

Посмотрим на пример программного заполнения и вывода макета в элемент формы:


Макет = ПолучитьМакет("Макет");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

// Заполняем параметр расшифровки структуры или произвольного значения
СтруктураДействия = Новый Структура;
СтруктураДействия.Вставить("Действие", "ОткрытьДополнительнуюОбработку");
СтруктураДействия.Вставить("КодКлиента", ТекСтрока.Код);

ОбластьСтрока.Параметры.Заполнить(ТекСтрока);
ОбластьСтрока.Параметры.Детализация = СтруктураДействия;

Элементы.ПолеТабличногоДокумента.Вывести(ОбластьСтрока);

Шаг 2. Перехват события ОбработкаРасшифровки

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

Важный момент: чтобы отключить стандартное контекстное меню 1С и предотвратить стандартное открытие формы, в начале обработчика следует установить параметр СтандартнаяОбработка = Ложь.

Проанализируем пример кода обработчика события на клиенте:


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

КонецПроцедуры

Шаг 3. Использование гиперссылок (альтернативный вариант)

Разберем еще один способ вызова процедур из макета — использование свойства ячейки Гиперссылка. При такой настройке ячейка визуально оформляется как ссылка (синий текст с подчеркиванием), а при клике срабатывает событие ОбработкаПереходаПоГиперссылке.

Посмотрим, как настраивается этот механизм:

  1. В макете у нужной ячейки или в коде устанавливаем свойство Гиперссылка = Истина.
  2. В свойство ячейки ЗначениеЗначения или Расшифровка записываем идентифицирующие данные.
  3. Создаем на форме обработчик события ОбработкаПереходаПоГиперссылке для поля табличного документа.

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

КонецПроцедуры

Важные особенности и ограничения

  1. Контекст выполнения: События расшифровки и перехода по гиперссылке выполняются на клиенте (директива &НаКлиенте). Если процедура требует работы с базой данных или вызова серверных функций, необходимо делать явный вызов серверной процедуры (&НаСервере или &НаСервереБезКонтекста).
  2. Сохранение файлов: Все интерактивные обработчики кликов и расшифровки работают только внутри платформы 1С. При сохранении или экспорте табличного документа в сторонние форматы (Excel, PDF) интерактивные вызовы процедур недоступны.
← На главную