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