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