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