Как открыть форму создания объекта и вернуть результат в вызывающую форму в 1С?

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

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

Разбор проблемы и первый вариант решения

Когда мы просто используем метод ОткрытьФорму, система открывает окно, но не знает, что нужно делать после того, как пользователь нажмет кнопку «Записать и закрыть». Программа выполняет ровно то, что ей передали: открывает форму. Чтобы данные вернулись обратно, необходимо настроить процесс взаимодействия между формами. В сообщении 2 было предложено решение, использующее параметры открытия формы:


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

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

Принцип работы через механизм оповещений

Наиболее гибким и архитектурно правильным способом обмена данными между формами в управляемом приложении является использование метода Оповестить и обработчика ОбработкаОповещения. Разберем этот алгоритм по шагам:

  1. Вызывающая форма: При открытии новой формы вы можете передать описание оповещения, либо, если форма открывается как подчиненная, просто дождаться события закрытия.
  2. Вызываемая форма (форма элемента): После выполнения записи объекта в базе данных, внутри модуля формы необходимо вызвать метод Оповестить(\"ИмяСобытия\", Параметры). В параметрах обычно передается ссылка на свежесозданный объект.
  3. Обработка события: В вызывающей форме в модуле добавляется процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник), которая проверяет ИмяСобытия и обновляет данные на форме, присваивая полученную ссылку нужному реквизиту.

Использование стандартных подсистем

Профессиональные разработчики всегда стремятся использовать готовые решения. В типовых конфигурациях 1С (УТ, ERP, БП) существует подсистема, отвечающая за работу с диалогами и подбор значений. В сообщении 5 упоминается механизм РаботаСДиалогами.

Рекомендуем присмотреться к общим модулям, содержащим функции вида ОбновитьПараметрыИФормуПодбора. Реализация через стандартные механизмы БСП (Библиотеки Стандартных Подсистем) позволяет:

Помните, что «велосипеды» в программировании на 1С часто приводят к проблемам при обновлении конфигурации или переносе кода в другие проекты. Анализируйте типовой код, смотрите, как реализованы процедуры открытия форм справочников в вашей конфигурации, и старайтесь перенимать этот опыт.

Подведем итог

Чтобы успешно передать созданный объект обратно на форму, проанализируем следующие рекомендации:

Во-первых, убедитесь, что вы правильно используете контекст владельца формы. Если вы используете стандартное поле ввода с установленным свойством Данные, часто достаточно просто передать его в качестве владельца при вызове ОткрытьФорму.

Во-вторых, если стандартного поведения недостаточно (например, нужно выполнить дополнительные действия или заполнить данные в сложной табличной части), обязательно реализуйте схему Оповестить — ОбработкаОповещения. Это стандарт «чистого» кода.

В-третьих, не забывайте о том, что модальные окна в веб-клиенте работают нестабильно, поэтому использование ОткрытьФорму с асинхронными оповещениями — это ваш единственный надежный выбор в современной разработке на 1С.

Надеемся, что этот разбор поможет вам структурировать подход к работе с формами и сделать ваш код профессиональнее!

← На главную