Как передать и обработать параметры при открытии управляемой формы в 1С?

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

В разработке на платформе 1С часто возникает необходимость открыть одну форму из другой, передав в нее определенные исходные данные или контекст. Например, открыть форму документа с уже установленным признаком "Возврат" или форму элемента справочника с предзаполненными реквизитами — ускорить этот процесс поможет обработка автозаполнения реквизитов новых документов по шаблону. Для создания качественного решения важно использовать приемы построения эффективных интерфейсов, которые позволяют грамотно организовать взаимодействие пользователя с данными. Рассмотрим подробно, как реализовать этот механизм с помощью параметров формы.

Проанализируем по шагам, как правильно передать параметры из вызывающего кода и как их принять и обработать внутри открываемой формы.

Шаг 1: Передача параметров при вызове формы

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

Допустим, у нас есть форма документа "РеализацияТоваровУслуг", и нам нужно открыть ее, передав информацию о том, что это операция возврата. Для этого в коде, который вызывает открытие формы (например, в обработчике команды на другой форме), нужно создать новую структуру, заполнить ее и передать в метод.

Посмотрим на пример кода:

Предположим, у нас есть общая команда или кнопка, из которой мы инициируем создание нового документа.


// Создаем новую структуру для хранения параметров
ПараметрыФормы = Новый Структура;

// Вставляем в структуру нужный нам параметр.
// Ключ "ВидОперации" - это имя, по которому мы будем обращаться к параметру в открываемой форме.
// "Возврат" - это значение, которое мы передаем.
ПараметрыФормы.Вставить("ВидОперации", "Возврат");

// Вызываем метод открытия формы, указывая имя формы и нашу структуру с параметрами
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);

В этом коде мы выполнили три простых действия:

  1. Инициализировали переменную ПараметрыФормы как объект типа Структура.
  2. Использовали метод Вставить(), чтобы добавить в структуру элемент с ключом "ВидОперации" и значением "Возврат". Вы можете добавить столько параметров, сколько необходимо, для каждого используя свой уникальный ключ.
  3. Вызвали ОткрытьФорму(), передав в качестве второго аргумента созданную нами структуру.

Таким образом, мы отправили необходимые данные в новую форму. Теперь разберемся, как их там "поймать" и использовать.

Шаг 2: Получение и обработка параметров в открываемой форме

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

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

Рассмотрим пример обработчика ПриСозданииНаСервере в модуле формы документа "РеализацияТоваровУслуг":


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

КонецПроцедуры

Важные нюансы и лучшие практики

Чтобы код был надежным и не вызывал ошибок, давайте разберем несколько важных моментов.

1. Всегда проверяйте наличие параметра

Форма может быть открыта не только из вашего кода, но и стандартными средствами платформы (например, из списка документов). В этом случае никаких параметров передано не будет, и попытка обратиться к Параметры.ВидОперации вызовет ошибку "Поле объекта не обнаружено". Для оперативной настройки интерфейса без внесения изменений в код иногда удобно использовать редактор форм в режиме предприятия (см. динамический редактор управляемых форм в режиме предприятия).

Поэтому перед использованием параметра обязательно проверяйте его существование с помощью метода Свойство():


Если Параметры.Свойство("ИмяНужногоПараметра") Тогда
    // Теперь мы уверены, что параметр существует, и можно безопасно работать с его значением
    Переменная = Параметры.ИмяНужногоПараметра;
КонецЕсли;

2. Какие данные можно передавать?

В качестве значения параметра можно передавать данные практически любого типа:

3. Параметры формы и реквизиты формы

Важно понимать разницу. Параметры — это данные, которые существуют только в момент создания формы на сервере. Они используются для ее первоначальной инициализации. Реквизиты (атрибуты) формы — это данные, с которыми форма "живет" на протяжении всего своего жизненного цикла.

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

Пример инициализации реквизита из параметра:

Допустим, на форме есть реквизит ТекущийКонтрагент.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если Параметры.Свойство("КонтрагентДляЗаполнения") Тогда
        // Читаем параметр и записываем его значение в реквизит формы
        ТекущийКонтрагент = Параметры.ContragentДляЗаполнения;
    КонецЕсли;

КонецПроцедуры

Для более продвинутой

Таким образом, механизм параметров формы — это простой, но мощный инструмент для создания гибких и взаимосвязанных пользовательских интерфейсов. Он позволяет значительно улучшить юзабилити системы, автоматизируя заполнение данных и настраивая внешний вид форм в зависимости от контекста их вызова.

← На главную