Где должны располагаться процедуры ПриОткрытии и ПриСозданииНаСервере в управляемой форме 1С?

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

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

В каком модуле размещаются обработчики событий формы

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

В отличие от обычных форм (в 1С 7.7 и 1С 8.2), в управляемом приложении недостаточно просто объявить процедуру с предопределенным именем в тексте модуля. Требуется явное связывание события формы с конкретным методом модуля через свойства формы в конфигураторе.

Директивы компиляции и правильные сигнатуры процедур

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

  1. Обработчик ПриСозданииНаСервере выполняется на стороне сервера до того, как форма передана клиенту. Для него обязательна директива &НаСервере и параметры Отказ, СтандартнаяОбработка:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Серверная инициализация реквизитов, настройка элементов формы
КонецПроцедуры

Если пропустить один из параметров (например, написать только Отказ), платформа выдаст критическую ошибку несоответствия параметров при попытке открыть форму.

  1. Обработчик ПриОткрытии выполняется на стороне клиента непосредственно перед отображением формы пользователю. Для него обязательна директива &НаКлиенте и параметр Отказ:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Клиентская логика, интерактивные действия, открытие зависимых окон
КонецПроцедуры

Пошаговое подключение обработчиков к событиям формы

Разберем по шагам, как правильно привязать процедуры к событиям формы в конфигураторе:

  1. Открываем нужную форму объекта (документа, справочника или отчета) в конфигураторе.
  2. В левом верхнем окне (дерево элементов формы) выбираем самый верхний корневой элемент — саму форму.
  3. Открываем панель свойств (нажатием правой кнопки мыши → Свойства или клавишей F4).
  4. Прокручиваем панель свойств до самого низа к разделу События.
  5. Находим события ПриСозданииНаСервере и ПриОткрытии.
  6. Нажимаем на кнопку с изображением лупы (или кнопку выбора) рядом с нужным событием. Платформа автоматически сгенерирует процедуру с правильной сигнатурой и директивой компиляции в модуле формы, либо предложит выбрать уже существующую процедуру.

Порядок выполнения событий и управление открытием формы

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

  1. Первым на сервере вызывается обработчик ПриСозданииНаСервере. Если объект уже существует в базе, перед этим отрабатывает событие ПриЧтенииНаСервере.
  2. Внутри ПриСозданииНаСервере параметр СтандартнаяОбработка = Ложь позволяет отключить стандартное первичное заполнение и автогенерацию заголовка формы.
  3. Если в ПриСозданииНаСервере установить Отказ = Истина, процесс создания формы немедленно прерывается, форма не передается клиенту, а процедура ПриОткрытии даже не будет вызвана.
  4. После успешного создания на сервере управление возвращается на клиент, где вызывается процедура ПриОткрытии. Установка Отказ = Истина на этом этапе отменяет вывод формы на экран.

Ограничения контекстов вызова

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

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

Почему точка останова не срабатывает при отладке

Если обработчики привязаны правильно, но конфигуратор не останавливается внутри ПриСозданииНаСервере, выясним причину такого поведения в клиент-серверной базе:

  1. Служба сервера 1С:Предприятия должна быть запущена с параметром отладки (флаг -debug или включенная отладка по протоколу HTTP).
  2. В конфигураторе необходимо проверить настройки подключения: перейти в главное меню Сервис → Параметры → Отладка → Подключение и убедиться, что установлены флаги автоматического подключения к серверным предметам отладки.
← На главную