При переходе с обычных форм или платформы 1С:Предприятие 7.7 на управляемые формы разработчики нередко сталкиваются с ситуацией, когда написанный код в процедурах ПриСозданииНаСервере или ПриОткрытии не выполняется, а точки останова при отладке не срабатывают. Разберем подробно, где именно должны находиться эти процедуры, как правильно связать их с событиями формы и как избежать распространенных ошибок.
Процедуры ПриСозданииНаСервере и ПриОткрытии являются обработчиками событий самой формы. Они должны располагаться исключительно в модуле формы. Размещение этих процедур в модуле объекта, модуле менеджера или общем модуле не приведет к их автоматическому вызову при открытии интерфейса.
В отличие от обычных форм (в 1С 7.7 и 1С 8.2), в управляемом приложении недостаточно просто объявить процедуру с предопределенным именем в тексте модуля. Требуется явное связывание события формы с конкретным методом модуля через свойства формы в конфигураторе.
Управляемая форма разделена на клиентский и серверный контексты. Каждый обработчик должен иметь строго определенную директиву компиляции и точный набор параметров:
&НаСервере и параметры Отказ, СтандартнаяОбработка:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Серверная инициализация реквизитов, настройка элементов формы
КонецПроцедуры
Если пропустить один из параметров (например, написать только Отказ), платформа выдаст критическую ошибку несоответствия параметров при попытке открыть форму.
&НаКлиенте и параметр Отказ:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Клиентская логика, интерактивные действия, открытие зависимых окон
КонецПроцедуры
Разберем по шагам, как правильно привязать процедуры к событиям формы в конфигураторе:
ПриСозданииНаСервере и ПриОткрытии.Проанализируем очередность вызовов при инициализации управляемой формы:
ПриСозданииНаСервере. Если объект уже существует в базе, перед этим отрабатывает событие ПриЧтенииНаСервере.ПриСозданииНаСервере параметр СтандартнаяОбработка = Ложь позволяет отключить стандартное первичное заполнение и автогенерацию заголовка формы.ПриСозданииНаСервере установить Отказ = Истина, процесс создания формы немедленно прерывается, форма не передается клиенту, а процедура ПриОткрытии даже не будет вызвана.ПриОткрытии. Установка Отказ = Истина на этом этапе отменяет вывод формы на экран.Важно помнить о различиях клиентского и серверного выполнения:
ПриСозданииНаСервере категорически недоступны интерактивные методы: диалоги выбора файлов, вопросы пользователю, предупреждения. Все интерактивные действия следует выполнять в ПриОткрытии или до вызова команды открытия формы.ПриОткрытии не рекомендуется вызывать тяжелые серверные функции без необходимости, так как это увеличивает время отклика интерфейса для пользователя.Если обработчики привязаны правильно, но конфигуратор не останавливается внутри ПриСозданииНаСервере, выясним причину такого поведения в клиент-серверной базе:
-debug или включенная отладка по протоколу HTTP).