Модуль формы
Модуль формы выполняется при создании или открытии формы. В модуле формы может быть тело модуля, раздел описания переменных и процедуры и функции. Процедуры и функции могут быть экспортными, тогда их можно вызывать через программный объект «Форма».
Чтобы открыть модуль формы нужно сначала создать форму. Для этого в окне редактирования свойств объекта нужно перейти на закладку «Формы» и в поле «Элемента» нажать на кнопку с лупой:
Откроется конструктор формы. В нем можно выбрать тип формы, указать имя и синоним:
* Форма элемента - это форма, которая открывается при редактировании элемента справочника.
* Форма списка - это форма, в которой отображаются все элементы справочника.
* Форма выбора - это форма, которая открывается при выборе элемента справочника в поле другого объекта.
Оставим в конструкторе все без изменений и нажмем кнопку «Готово».
Откроется редактор формы. Для открытия модуля формы нужно внизу выбрать закладку «Модуль»:
Добавим в модуль формы код:
Сообщить("Это модуль формы!");
Сохраним конфигурацию базы данных, откроем конфигурацию в пользовательском режиме и создадим новый элемент справочника «Номенклатура». Внизу формы мы увидим два сообщения:
Почему сообщение вывелось дважды? Дело в том, что форма одновременно существует и на клиенте на сервере, поэтому модуль был скомпилирован дважды.
Директивы компиляции
Для того чтобы определить где будет выполняться процедура или функция модуля формы можно использовать директивы компиляции:
* &НаКлиенте
* &НаСервере
* &НаСервереБезКонтекста
* &НаКлиентеНаСервереБезКонтекста
Что такое контекст будет рассмотрено позже, пока можно сказать, что это доступность реквизитов, элементов и параметров формы.
Добавим в модуль формы две процедуры:
&НаСервере
Процедура Серверная()
Сообщить("На сервере");
КонецПроцедуры
&НаКлиенте
Процедура Клиентская()
Сообщить("На клиенте");
КонецПроцедуры
С помощью директив компиляции вверху процедуры мы указали где они будут скомпилированы. Клиентские процедуры недоступны на сервере. Серверные процедуры можно вызывать с клиента. Если директива компиляции не указана, то по умолчанию используется &НаСервере.
Для переменных модуля тоже можно использовать директивы компиляции:
&НаСервере
Перем СервернаяПеременная;
&НаКлиенте
Перем КлиентскаяПеременная;
При этом нужно учитывать, что серверная переменная формы будет инициализироваться при каждом вызове сервера. То есть если мы вызовем с клиента серверную процедуру, в ней изменим серверную переменную, то при следующем серверном вызове значение переменной будет инициализироваться заново, предыдущее значение будет потеряно.
Обработчики событий модуля формы
В модуле формы тоже есть события, для которых можно создавать обработчики:
У обработчиков событий формы нельзя изменить директиву компиляции. Часть из них доступны на клиенте, часть на сервере.
Рассмотрим основные из них:
ПриЧтенииНаСервере - выполняется только для уже существующих в базе данных объектов, есть параметр ТекущийОбъект, через который доступен прикладной объект, можно вызывать его экспортные методы из модуля объекта. Директива компиляции &НаСервере.
ПриСозданииНаСервере - выполняется как для существующих, так и для новых объектов. Если установить параметр Отказ = Истина, то форма не будет создана и не будет открыта. Директива компиляции &НаСервере.
ПриОткрытии - выполняется при непосредственном открытии формы, можно отказаться от открытия, установив параметр Отказ = Истина. Директива компиляции &НаКлиенте.
ПередЗакрытием - выполняется до закрытия формы. Можно отказаться от закрытия, установив параметр Отказ = Истина. Директива компиляции &НаКлиенте.
ПриЗакрытии - выполняется после закрытия формы, уже нельзя отказаться от закрытия формы. Директива компиляции &НаКлиенте.
Для примера добавим в модуль формы 2 обработки событий: ПриСозданииНаСервере и ПередЗакрытием и добавим туда следующий код:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Сообщить("Форма создана");
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Отказ = Истина;
Сообщить("Нельзя закрыть форму");
КонецПроцедуры
При открытии формы выйдет сообщение: «Форма создана». А если попытаться закрыть форму, то выйдет сообщение «Нельзя закрыть форму» и форма не будет закрыта.
Смотрите также:
Электронный учебник по по программированию в 1С Рекомендации по изучению программирования 1С с нуля Программное решение для сдачи и подготовки к экзаменам Программирование в 1С 8.3 с нуля - краткий самоучитель Комплексная подготовка программистов 1С:Предприятие 8.2 Сайты с уроками программирования и со справочниками Youtube-каналы с уроками программирования Сайты для обучения программированию Лекции и уроки