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