Как открыть форму обработки при нажатии на элемент или строку табличной части в 1С?

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

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

1. Варианты перехвата клика в табличной части

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

  1. Ячейка в виде гиперссылки. В свойствах поля колонки устанавливаем признак Гиперссылка = Истина. При клике пользователем будет срабатывать событие элемента Нажатие. В обработчике события необходимо сбросить стандартное поведение, присвоив СтандартнаяОбработка = Ложь;.
  2. Кнопка выбора в поле ввода. В свойствах поля таблицы включаем флаг КнопкаВыбора = Истина. При нажатии на кнопку с троеточием или клавишу F4 платформа вызывает событие НачалоВыбора, где также можно прервать стандартное поведение и вызвать обработку.
  3. Двойной клик по строке. Перехватывается в событии самой таблицы формы — Выбор. Обработчик получает параметры текущей строки и выбранной колонки.
  4. Колонка-кнопка. В состав таблицы добавляется элемент с видом «Поле кнопки» или отдельная команда, нажатие которой сразу вызывает назначенный клиентский метод.

2. Открытие формы встроенной обработки в управляемых формах

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


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

Разберем параметры вызова: первым аргументом передается имя формы в формате Обработка.ИмяОбработки.Форма, вторым — структура параметров, которые будут прочитаны в обработке при создании, третьим — форма-владелец.

3. Перехват события «Выбор» таблицы формы

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


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

4. Вызов внешней обработки (.epf) на управляемых формах

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

Разберем по шагам реализацию безопасного подключения и открытия внешней обработки:


&НаСервере
Функция ПодключитьВнешнююОбработкуНаСервере(ПутьКФайлу)
    
    Возврат ВнешниеОбработки.Подключить(ПутьКФайлу, , Истина);
    
КонецФункции

&НаКлиенте
Процедура ОткрытьВнешнююОбработку()
    
    ПутьКФайлу = "C:\Обработки\ПомощникЗаполнения.epf";
    ИмяПодключенной = ПодключитьВнешнююОбработкуНаСервере(ПутьКФайлу);
    
    ИмяФормы = "ВнешняяОбработка." + ИмяПодключенной + ".Форма";
    ОткрытьФорму(ИмяФормы);
    
КонецПроцедуры

5. Реализация в обычном приложении (толстый клиент)

В конфигурациях на обычных формах (ОФ) клик по ячейке часто перехватывается через событие табличного поля ПриНачалеРедактирования или событие ячейки НачалоВыбора:


Процедура ТабличнаяЧастьПриНачалеРедактирования(Элемент, Кнопка, Отказ)
    
    Если Элемент.ТекущаяКолонка.Имя = "Номенклатура" Тогда
        Отказ = Истина; // Предотвращаем стандартный ввод
        
        ФормаОбработки = Обработки.КалькуляторСкидок.ПолучитьФорму("Форма");
        ФормаОбработки.Открыть();
    КонецЕсли;
    
КонецПроцедуры

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


ФормаВнешней = ВнешниеОбработки.ПолучитьФорму("C:\Обработки\ПомощникЗаполнения.epf");
ФормаВнешней.Открыть();

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

  1. Клиентский контекст: процедура ОткрытьФорму() выполняется исключительно на клиенте (директива &НаКлиенте). Попытка вызвать визуальные методы из серверного кода вызовет синтаксическую ошибку платформы.
  2. Запрет модальности: в большинстве современных конфигураций модальные окна запрещены. Метод ОткрытьМодально() использовать не рекомендуется. Если необходимо получить результат работы обработки обратно в документ, следует использовать немодальное открытие с передачей обработчика в параметре ОповещениеОЗакрытии через объект ОписаниеОповещения.
  3. Проверка на пустую строку: перед обращением к данным строки через Элементы.ИмяТаблицы.ТекущиеДанные обязательно проверяйте значение на Неопределено, чтобы избежать падения интерфейса при клике по пустой таблице.
← На главную