Правила создания модулей форм

#std630

Область применения: управляемое приложение, мобильное приложение.

Область применения (уточнение): управляемое приложение, обычное приложение.

1. В модуле формы размещаются процедуры и функции, которые необходимы только для реализации логики работы этой формы и исполняются в контексте этой формы.

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

1.2. Неправильно использовать экспортные процедуры и функции формы для параметризации формы при открытии. Например, неправильно:

Форма = ПолучитьФорму("ОбщаяФорма.МояФорма");
Форма.Открыть();
Форма.УстановитьПараметрСПомощьюЭтойЭкспортнойФункции(РежимРаботы);

правильно:

ПараметрыФормы = Новый Структура("РежимРаботы", РежимРаботы)
ОткрытьФорму("ОбщаяФорма.МояФорма", ПараметрыФормы)

См. также: Открытие форм

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

1.4. Исключения из этого правила составляют экспортные процедуры-обработчики оповещений (ОписаниеОповещения.ИмяПроцедуры).

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

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

Пример:

&НаСервере
Процедура ПриСозданииНаСервере()
 УстановитьДоступность(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура РазрешитьРедактированиеСуммыПриИзменении(Элемент)
 УстановитьДоступность(ЭтотОбъект);
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступность(Форма)
 Форма.Элементы.ТоварыСумма.Доступность = Форма.Объект.РазрешитьРедактированиеСуммы;
КонецПроцедуры

См. также