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