Почему при вызове метода ПолучитьФорму открываются две одинаковые формы?

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

Разработчики 1С часто сталкиваются с ситуацией, когда при программном открытии формы выбора через метод ПолучитьФорму вместо ожидания активации уже открытого окна система создает новое. Рассмотрим, почему это происходит и как правильно организовать открытие форм в современных конфигурациях.

Разберем механизм работы ключа уникальности

Ключ уникальности — это специальный параметр метода ПолучитьФорму, предназначенный для управления жизненным циклом окон. Платформа при попытке открытия формы проверяет, существует ли уже окно с таким же ключом и набором параметров.

Почему же форма дублируется?

Пошаговое решение проблемы

Для того чтобы избежать появления двух форм, выполним следующие действия:

  1. Исключите использование ПолучитьФорму для УФ: Перейдите на использование метода ОткрытьФорму. Это глобальный метод, который лучше интегрирован в жизненный цикл управляемого приложения.
  2. Используйте правильный ключ: Если вы все же используете ПолучитьФорму, убедитесь, что в качестве ключа уникальности передается стабильный идентификатор, а не вычислимое выражение, результат которого зависит от текущего состояния данных в строке.
  3. Проверьте обработку событий: Убедитесь, что вы правильно отключаете стандартное поведение системы при вызове своей формы выбора.

Посмотрим на пример правильной организации вызова формы с управлением стандартной обработкой:


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

Анализируем причины появления дублей

Рассмотрим подробнее, почему даже при наличии ключа форма может «двоиться». Ключ уникальности сравнивается платформой строго по значению. Если вы используете конструкцию вроде Номер + Дата, то при изменении даты даже на одну миллисекунду или смене формата строки, платформа 1С воспринимает это как принципиально другой запрос.

Также важно помнить о УникальномИдентификаторе. Если форма, которую вы получаете, имеет сгенерированный системой идентификатор, отличный от того, который вы пытаетесь передать, соответствие не будет установлено. Платформа 1С в управляемом приложении сама управляет УИД форм, поэтому попытка «подменить» его вручную через метод ПолучитьФорму зачастую обречена на провал.

Рекомендация: Если ваша задача — реализовать подбор товаров или элементов справочника, не пытайтесь вручную управлять созданием формы. Используйте метод ОткрытьФорму с передачей параметров в структуру. Платформа сама определит необходимость создания новой формы или активации уже существующей, основываясь на переданных параметрах, таких как Ключ.

Таким образом, отказ от ПолучитьФорму в пользу ОткрытьФорму и корректное использование СтандартнаяОбработка = Ложь в событиях выбора полностью решают проблему дублирования окон в управляемом интерфейсе.

← На главную