У нас есть обработка с вот такой основной формой:

Из этой формы нам нужно открыть некоторую дополнительную форму, при этом текст из поля формы должен передаваться в открываемую форму. Дополнительная форма имеет следующий вид:

Таким образом, при на нажатии на кнопку "Выполнить открывается дополнительная форма с уже введенным текстом в поле:

Рассмотрим способ решения подобной задачи.

Решение

Для передачи параметров между обычными формами можно либо воспользоваться глобальной экспортной переменной модуля формы, либо создать реквизит формы. Рассмотрим оба способа для в рамках нашей задачи.

1. Использование глобальной экспортной переменной модуля формы.

В основную форму для процедуры-обработчика кнопки "Выполнить" добавим следующий программный код:

Процедура КнопкаВыполнитьНажатие(Кнопка) Форма = ПолучитьФорму(" ДополнительнаяФорма " ) ; // "Текст" - это глобальная экспортная переменная модуля открываемой формы Форма. Текст = ЭлементыФормы. Текст. Значение; Форма. Открыть() ; КонецПроцедуры

Переменная текст добавлена в модуль открываемой формы вместе с обработчиком события "ПередОткрытием":

Перем Текст Экспорт ; // Переменная, в которую передается значение из другой формы Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) ЭлементыФормы. ПереданныйТекст. Значение = Текст; КонецПроцедуры

Задача решена, причем достаточно просто!

2. Использование реквизита формы.

Для второго способа нам даже не нужно переписывать обработчики кнопки "Выполнить" и "ПередОткрытием". Все, что необходимо - это добавить в открываемую форму реквизит "Текст" с типом строка.

Выводы

В управляемых формах передавать параметры намного проще. В обычных формах в большинстве случаев используется описанный подход.

Обработку с примером из статьи Вы можете скачать по ссылке .

Данная статья описывает, как штатными средствами передать в качестве параметра значение при открытии управляемой формы 8.2 в сравнении с тем, как аналогичную операцию получалось реализовать в обычных формах.

Как передаются параметры в обычных формах

В обычных формах для передачи параметра было 2 возможности:
1) менее распространенный способ: в форме объекта на вкладке «Реквизиты» добавлялся реквизит, при необходимости определялся доступ визуальными средствами
2) более распространенный способ: в модуле формы объявлялась экспортная переменная и в обработчике «ПередОткрытием» значение обрабатывалось

в обоих случаях вызов формы выглядел примерно так:

Форма = Объект.ПолучитьФорму("ФормаВыбора",ВладелецФормы, КлючУникальности);
Форма.Параметр = ЗначениеПараметра;
Форма.Открыть();

Как передаются параметры в управляемых формах

В управляемых формах теперь есть возможность сразу передавать параметры при получении формы. Параметры передаются в виде структуры:

Параметры = Новый Структура("ТекущееЗначение",ПоследнийЭлемент);
ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",Параметры);
НайденыйЭлемент = ФормаВыбора.ОткрытьМодально();

Также у управляемой формы появились «расширения формы» (объект, справочник, документ, отчет). В зависимости от типа объекта определяется состав доступных параметров. Например, если в форме выбора справочника нужно позиционироваться на определенном элементе, то используется параметр «ТекущееЗначение». Большим плюсом является, что в самой форме не требуется писать обработчиков для предопределенных параметров, сокращает количество кода.

Также у разработчика появилась возможность определять свои параметры (в конструкторе управляемой формы вкладка «Параметры»). Время жизни параметров ограничено обработчиком ПриСозданииНаСервере, что логично т.к. параметры требуются только при создании формы, но если данный параметр определяет уникальность формы (установлен флаг «ключевой параметр» в свойствах параметра) он будет доступен и в других обработчиках.

Для передачи специфического параметра манипуляций требуется сделать немного больше:

1) Определить в управляемой форме параметр.
В обработчике ПриСозданииНаСервере определить обработку данного параметра (обращение к переданным параметрам через свойство «Параметры», имеющее тип ДанныеФормыСтруктура)
2)Описать получение формы и передать значение нового параметра в параметрах функции ПолучитьФорму.
Таким образом код будет иметь вид:
- В месте получения формы

Параметры = Новый Структура("НовыйПараметр",ПоследнийЭлемент);
ФормаВыбора = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора",Параметры);

В модуле управляемой формы

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

Заключение

Возможно данная статья кому-то пригодится, с экономит время и убережет от лишнего кода. Для более детальной информации о полном списке параметров управляемой формы рекомендуется посмотреть справку «Интерфейс управляемый \ Управляемая форма».

[необходимо зарегистрироваться для просмотра ссылки]

Печать (Ctrl+P)

Параметры формы

1. Общая информация

Параметры формы (закладка Параметры ) служат двум целям:
● Описать набор данных, которые будут влиять на открытие формы (параметризация формы). Для этого нужно перечислить все необходимые параметры и указать их типы.
● Определить параметры, которые будут влиять на ключ уникальности формы. Для этого необходимо установить свойство Ключевой параметр у тех параметров, которые должны участвовать в формировании ключа уникальности формы. При попытке открыть форму система производит поиск существующей формы с помощью сформированного ключа уникальности формы. Если в системе существует форма с полученным ключом
уникальности, возвращается именно эта форма; если нет – создается новая форма.
При вызове формы значения параметров, созданных разработчиком, можно указывать в структуре параметров наряду с системными параметрами форм (если таковые имеются).
Параметры формы можно передать в форму в момент ее создания. Анализ переданных параметров можно выполнить в событии ПриСозданииНаСервере() (коллекция Параметры является свойством объекта УправляемаяФорма ):

// В месте вызова.
// Формируем параметр формы .
Параметры = Новый Структура ();
Параметры.Вставить (“Важность”, ПредопределенноеЗначение (“Перечисление.Важность.Важно”));
// Открываем форму с указанием параметров.
ОткрытьФорму (“ОбщаяФорма.ФормаПросмотра”, Параметры );

// В модуле формы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Важность = Перечисления.Важность.Важн о Тогда

КонецЕсли;
КонецПроцедуры

ВНИМАНИЕ ! После вызова обработчика события ПриСозданииНаСервере все неключевые параметры формы удаляются из коллекции Параметры .
Совет. Неключевые параметры формы, необходимые для дальнейшей работы, нужно сохранять в данных формы.

2. Стандартные параметры формы

Для того чтобы поддерживать автоматическое взаимодействие между формами, система предоставляет ряд стандартных параметров, которые используются для управления формами при их открытии. С помощью этих параметров системой реализуется в полях форм выбор из форм выбора, открытие форм объектов, работа стандартных команд и т. д. То есть они обеспечивают различные заложенные в систему сценарии работы интерфейса.
Но разработчик также может использовать эти параметры во встроенном языке, передавая их при вызове метода ОткрытьФорму().
Перечень стандартных параметров форм в зависимости от вида расширения формы можно посмотреть в разделах Встроенный язык – Интерфейс
(управляемый) – Управляемая форма – Расширение… встроенной справки.

3. Пример работы с параметрами формы

Для демонстрации работы параметров формы рассмотрим реализацию выбора элемента в поле ввода. Сутью примера будет реализация механизма выбора элемента из списка на встроенном языке.
К моменту начала работы с примером нужно иметь конфигурацию, обладающую следующими свойствами:
● имеется справочник Товары с иерархией групп и элементов;
● имеется справочник Аналоги с реквизитом ВыбранныйТовар типа СправочникСсылка.Товары ;
● оба справочника имеют формы элементов.
Теперь реализуем в этой конфигурации все механизмы, которые использует платформа для выбора элемента из списка, на встроенном языке. При этом мы увидим:
● как происходит использование стандартных параметров формы;
● каким образом их использует сама система;
● как их может использовать разработчик.
Добавим дополнительный параметр, который будет управлять закрытием формы выбора после выбора элемента. Назовем этот параметр ЗакрыватьПослеВыбора (тип Булево ). Добавим его в качестве параметра формы ФормаВыбора справочника Товары .
Для того чтобы открыть форму выбора элемента, необходимо в форме элемента справочника Аналоги создать обработчик события НачалоВыбора у элемента формы ВыбранныйТовар .

&НаКлиенте
Процедура ВыбранныйТоварНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь ;
ПараметрыВыбора = Новый Структура ;
ПараметрыВыбора.Вставить (“РежимВыбора”, Истина );
ПараметрыВыбора.Вставить (“ВыборГруппИЭлементов”, ИспользованиеГруппИЭлементов.Элементы );
ПараметрыВыбора.Вставить (“РазрешитьВыборКорня”, Ложь );
ПараметрыВыбора.Вставить (“ТекущаяСтрока”, Объект.ВыбранныйТовар );
ПараметрыВыбора.Вставить (“ЗакрыватьПослеВыбора”, Ложь );
ОткрытьФорму(“Справочник.Товары.ФормаВыбора”, ПараметрыВыбора , Элементы.ВыбранныйТовар );
КонецПроцедуры
Следует отдельно остановиться на третьем параметре метода ОткрытьФорму() . Этот параметр определяет, кто будет владельцем формы выбора и кому будет приходить оповещение о сделанном выборе. В данном случае мы указали владельцем формы выбора сам элемент формы, но также мы можем указать этим параметром и саму форму. В этом случае будет необходимо реализовывать обработчик ОбработкаВыбора модуля формы и в нем решать, в какой реквизит формы помещать выбранные данные.
ПРИМЕЧАНИЕ . Если мы не будем реализовывать обработчик события НачалоВыбора , то его действия выполнит сама система. Это справедливо и для всех дальнейших обработчиков, которые использованы в примере.
Теперь необходимо обработать переданные параметры в форме выбора. Сделаем это в обработчике ПриСозданииНаСервере () модуля формы выбора.

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

&НаКлиенте
Процедура СписокВыборЗначения(Элемент, СтандартнаяОбработка, Значение)
СтандартнаяОбработка = Ложь ;
ОповеститьОВыборе(Значение );
КонецПроцедуры
Нам осталось реализовать обработку выбора элемента в самом поле ввода. Для этого необходимо обработать событие ОбработкаВыбора нашего поля ввода ВыбранныйТовар.

&НаКлиенте
Процедура ВыбранныйТоварОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка )
СтандартнаяОбработка = Ложь ;
Объект.ВыбранныйТовар = ВыбранноеЗначение;
КонецПроцедуры
Мы самостоятельно реализовали системный механизм выбора значения в поле ввода на форме.
ВНИМАНИЕ! Данный пример не является законченным. Его единственным назначением является демонстрация механизмов работы с параметрами формы.
Если при создании параметров (обработчик ВыбранныйТоварНачалоВыбора()) заменить строку:

ПараметрыВыбора.Вставить (“ЗакрыватьПослеВыбора”, Истина );
на строку:
ПараметрыВыбора.Вставить (“ЗакрыватьПослеВыбора”, Ложь) ;
то форма выбора перестанет закрываться после того, как будет осуществлен выбор. Это можно использовать, например, для реализации формы подбора (выбор нескольких товаров без закрытия формы выбора).

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

Перечислим предоставляемые системой параметры и их назначение:

  • РежимВыбора – форма открывается в режиме выбора. Предоставляется расширением управляемой формы динамического списка.
  • ТекущаяСтрока – строка, которая будет активизироваться в списке при открытии. Передается значение, идентифицирующее строку. Предоставляется расширением управляемой формы динамического списка.
  • ВыборГруппИЭлементов – по данному параметру устанавливается свойство ВыборГруппИЭлементов таблицы основного реквизита формы. Предоставляется расширением управляемой формы динамического списка.
  • РазрешитьВыборКорня – определяет возможность выбора корня в форме с динамическим списком, отображаемым в виде дерева. Предоставляется расширением управляемой формы динамического списка, отображаемого в виде дерева.
  • Отбор – отбор, устанавливаемый в динамическом списке. Представляет собой структуру. Имена элементов соответствуют именам полей, по которым производится отбор, а значения содержат значения отбора. Предоставляется расширением управляемой формы динамического списка.
  • Ключ – значение, идентифицирующее объект, редактируемый в форме. В случае отсутствия или неверного значения создается новый объект с использованием остальных параметров. Предоставляется расширениями форм объектов и менеджера записи регистра сведений.
  • ЗначениеКопирования – значение, идентифицирующее объект, который будет использован для копирования при создании нового объекта. Предоставляется расширениями форм объектов и менеджера записи регистра сведений.
  • ЗначенияЗаполнения – значения для заполнения реквизитов нового объекта. Представляет собой структуру. Имена элементов соответствуют именам реквизитов, а значения содержат данные, которыми будут заполняться указанные реквизиты. Предоставляется расширениями форм объектов и менеджера записи регистра сведений.
  • Основание – значение, идентифицирующее объект, который будет использован как основание при создании нового объекта вводом на основании. Предоставляется расширениями форм объектов.
  • ЭтоГруппа – определяет вид нового объекта: группа или элемент. Предоставляется расширениями форм объектов.

Пример работы с параметрами формы

Для демонстрации работы параметров формы рассмотрим реализацию выбора элемента в поле ввода. Сутью примера будет реализация механизма выбора элемента из списка на встроенном языке.

К моменту начала работы с примером нужно иметь конфигурацию, обладающую следующими свойствами:

  • Основной режим запуска – Управляемое приложение;
  • имеется справочник Товары с иерархией групп и элементов;
  • имеется справочник Аналоги с реквизитом ВыбранныйТовар типа СправочникСсылка.Товары;
  • оба справочника имеют управляемые формы элементов.

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

Добавим дополнительный флаг, который будет управлять закрытием формы выбора после выбора элемента. Назовем этот флаг ЗакрыватьПослеВыбора (тип Булево). Добавим его параметром формы ФормаВыбора справочника Товары.

Для того чтобы открыть форму выбора элемента, необходимо в форме элемента справочника Аналоги создать обработчик события НачалоВыбора у элемента формы ВыбранныйТовар:

&НаКлиенте

Процедура ВыбранныйТоварНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

ПараметрыВыбора = Новый Структура; ПараметрыВыбора.Вставить(«РежимВыбора», Истина); ПараметрыВыбора.Вставить(«ВыборГруппИЭлементов», ИспользованиеГруппИЭлементов.Элементы); ПараметрыВыбора.Вставить(«РазрешитьВыборКорня», Ложь); ПараметрыВыбора.Вставить(«ТекущаяСтрока», Объект.ВыбранныйТовар); ПараметрыВыбора.Вставить(«ЗакрыватьПослеВыбора», Ложь); ОткрытьФорму(«Справочник.Товары.ФормаВыбора», ПараметрыВыбора, Элементы.ВыбранныйТовар);

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

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


Close