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