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