Как добавить кнопку или интерактивное действие в строки табличного документа 1С?

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

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

Особенности платформы: управляемые и обычные формы

В обычном приложении (толстый клиент) платформа позволяла динамически встраивать элементы управления непосредственно в ячейки табличного документа. Посмотрим, как это выглядело в обычном режиме:


ПолеТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;
тдОбл = ПолеТабДок.Область("R2C3");
Элф = ЭлементыФормы.Добавить(Тип("Кнопка"), "КнопкаСоздать", Истина, ПолеТабДок);
Элф.Расположить(тдОбл); 
Элф.ВстроенВЯчейку = Истина;
Элф.Заголовок = "Добавить в справочник"; 
Элф.Видимость = Истина; 
Элф.Доступность = Истина;

В управляемом приложении (УФ) концепция клиент-серверного взаимодействия изменилась: динамически внедрять элементы формы внутрь ячеек табличного документа через Элементы.Добавить() с позиционированием по ячейкам нельзя. Однако платформа предоставляет штатные механизмы, позволяющие полностью повторить поведение кнопки с помощью оформления ячеек, гиперссылок и механизма расшифровки.

Способ 1. Имитация кнопки через гиперссылку и расшифровку ячейки

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

Шаг 1. Формирование области в макете и программное заполнение

При выводе строки табличного документа на сервере настраиваем внешний вид и свойства целевой ячейки:

  1. Устанавливаем свойство ячейки Гиперссылка = Истина. Это меняет курсор мыши при наведении на указатель и включает реакцию на одинарный клик.
  2. Задаем визуальный стиль: цвет фона, рамку со всех сторон и выравнивание текста по центру, чтобы ячейка выглядела как кнопка.
  3. В свойство ячейки Расшифровка помещаем структуру с данными, необходимыми для создания нового элемента справочника (например, наименование, артикул, ИНН).

Посмотрим на пример серверного кода вывода строки:


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

// Заполняем данные строки
ОбластьСтрока.Параметры.Номенклатура = ДанныеСтроки.Наименование;
ОбластьСтрока.Параметры.Количество = ДанныеСтроки.Количество;

// Оформляем ячейку-кнопку
ЯчейкаКнопка = ОбластьСтрока.Область("R1C3");
ЯчейкаКнопка.Текст = "Создать";
ЯчейкаКнопка.Гиперссылка = Истина;

// Помещаем структуру параметров в расшифровку
ДанныеРасшифровки = Новый Структура;
ДанныеРасшифровки.Вставить("Действие", "СоздатьЭлемент");
ДанныеРасшифровки.Вставить("Наименование", ДанныеСтроки.Наименование);
ДанныеРасшифровки.Вставить("Артикул", ДанныеСтроки.Артикул);

ЯчейкаКнопка.Расшифровка = ДанныеРасшифровки;

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

Шаг 2. Перехват нажатия на клиенте

В модуле формы отчета создаем обработчик события РезультатОбработкаРасшифровки для поля табличного документа:


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

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

Способ 2. Использование элементов «Таблица формы»

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

В этом случае задача решается стандартными средствами управляемых форм:

  1. Добавляем в таблицу колонку с видом Поле надписи и свойством Гиперссылка = Истина.
  2. В обработчике нажатия на гиперссылку получаем текущие данные через Элементы.ТаблицаДанных.ТекущиеДанные.
  3. Также можно добавить стандартную кнопку в командную панель формы или контекстное меню строки, привязав к ней клиентскую команду.

Способ 3. Использование Поля HTML-документа

Если требуется нестандартный дизайн отчета со сложной версткой и полноценными кнопками с анимацией и эффектами наведения, можно сформировать отчет в виде HTML-страницы и отобразить его в элементе формы ПолеHTMLДокумента.

В HTML-разметку добавляются стандартные теги кнопок или ссылок, а обработка нажатий выполняется через перехват событий HTML-документа или обработку переходов по ссылкам с собственной схемой URL.

Таким образом, для классических управляемых форм в 1С наиболее простым и надежным решением является комбинация свойств Гиперссылка, структуры в Расшифровка и обработчика ОбработкаРасшифровки.

← На главную