644 документа
← К списку

Контекст модуля формы

страница

Контекст модуля формы

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

Контекст модуля определяет набор доступных во время выполнения модуля объектов, переменных, процедур и функций.

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

Контекст модуля формы образуется:

  • локальным контекстом самого модуля формы;
  • реквизитами формы, которой «принадлежит» модуль;
  • свойствами и методами объекта УправляемаяФорма встроенного языка;
  • свойствами и методами расширения формы, определяемого типом того объекта, данные которого содержатся в основном реквизите формы;
  • глобальным контекстом, в том числе неглобальными общими модулями и экспортируемыми функциями и процедурами глобальных общих модулей;
  • экспортируемыми переменными, процедурами и функциями модуля управляемого приложения.

Рассмотрим подробнее, что собой представляет каждая из перечисленных составляющих.

  1. Локальный контекст модуля формы.

Локальный контекст модуля формы — это переменные, процедуры и функции, объявленные в этом модуле.

Например, внутри модуля формы можно непосредственно обращаться по имени к процедуре ПолучитьСумму(), объявленной в этом же модуле (листинг 5.2):

Листинг 5.2. Модуль формы

&НаКлиенте

Процедура Команда1()

 

ПолучитьСумму();

 

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

 

&НаСервереБезКонтекста

Процедура ПолучитьСумму()

…

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

Или внутри модуля формы можно непосредственно обращаться по имени к переменной СлужебнаяПеременная, объявленной в этом модуле (листинг 5.3):

Листинг 5.3. Модуль формы

&НаКлиенте

Перем СлужебнаяПеременная;

 

&НаКлиенте

Процедура Команда1()

 

СлужебнаяПеременная = 3;

 

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

  • Реквизиты формы, которой «принадлежит» модуль.

Например, если у формы существует реквизит СлужебныйРеквизит (рис. 5.8), то к нему можно непосредственно обращаться по имени (листинг 5.4):

Рис. 5.8. Реквизит формы — «Служебный реквизит»

Листинг 5.4. Модуль формы

&НаКлиенте

Процедура Команда1()

 

СлужебныйРеквизит = 3;

 

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

  • Свойства и методы объекта «УправляемаяФорма».

Свойства и методы объекта встроенного языка УправляемаяФорма описаны в синтакс-помощнике: Интерфейс (управляемый) > УправляемаяФорма (рис. 5.9).

Рис. 5.9. Свойства управляемой формы в синтакс-помощнике

К ним можно обращаться непосредственно по имени. Например, можно задать заголовок формы (листинг 5.5).

Листинг 5.5. Модуль формы

&НаКлиенте

Процедура Команда1()

 

Заголовок = "Новый заголовок формы";

 

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

Или можно закрыть форму (листинг 5.6).

Листинг 5.6. Модуль формы

&НаКлиенте

Процедура Команда1()

 

Закрыть();

 

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

  • Свойства и методы расширения формы, определяемого типом того объекта, данные которого содержатся в основном реквизите формы.

Один из реквизитов формы может быть основным, в списке реквизитов он выделяется жирным. Как правило, основной реквизит формы содержит данные того объекта, который отображается в форме. Например, если это форма справочника, то основной реквизит будет содержать данные объекта СправочникОбъект.<имя> (рис. 5.10).

Рис. 5.10. Основной реквизит формы

А если это форма документа, то основной реквизит формы будет содержать данные объекта ДокументОбъект.<имя> (рис. 5.11).

Рис. 5.11. Основной реквизит формы

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

Рис. 5.12. Тип объекта основного реквизита формы

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

От типа объекта, данные которого содержатся в основном реквизите формы, зависят некоторые особенности в поведении формы.

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

В зависимости от того, какой тип имеет объект, данные которого содержатся в основном реквизите, к контексту программного объекта УправляемаяФорма добавляется контекст соответствующего расширения.

Например, если основной реквизит — СправочникОбъект.<имя>, то в модуле формы становятся доступны свойства, методы объекта встроенного языка Расширение управляемой формы для справочника (синтакс-помощник — Интерфейс (управляемый) > Управляемая форма > Расширение справочника), рис. 5.13.

Рис. 5.13. Описание объектов в синтакс-помощнике

А если основной реквизит — ДинамическийСписок (рис. 5.14), то в модуле формы становятся доступны свойства, методы объекта встроенного языка Расширение управляемой формы для динамического списка (синтакс-помощник — Интерфейс (управляемый) > Управляемая форма > Расширение динамического списка), рис. 5.15.

Рис. 5.14. Основной реквизит формы

Рис. 5.15. Описание объектов в синтакс-помощнике

Таким образом, в модуле формы, где основной реквизит содержит данные документа (рис. 5.16), можно обратиться к свойству расширения управляемой формы для документа АвтоВремя (листинг 5.7).

Рис. 5.16. Основной реквизит формы

Листинг 5.7. Модуль формы

&НаКлиенте

Процедура Команда1()

 

АвтоВремя = РежимАвтоВремя.Первым;

 

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

Или записать документ с помощью метода расширения управляемой формы для документа Записать(), листинг 5.8:

Листинг 5.8. Модуль формы

&НаКлиенте

Процедура Команда1()

 

Записать(РежимЗаписиДокумента.Проведение);

 

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

  • Глобальный контекст, в том числе неглобальные общие модули и экспортируемые функции и процедуры глобальных общих модулей.

В модуле формы можно получить системную дату, обратившись к встроенной функции ТекущаяДата(), листинг 5.9.

Листинг 5.9. Модуль формы

&НаКлиенте

Процедура Команда1()

 

Сообщить(ТекущаяДата(****));

 

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

Или получить историю работы пользователя, обратившись к свойству глобального контекста ИсторияРаботыПользователя (листинг 5.10).

Листинг 5.10. Модуль формы

&НаКлиенте

Процедура Команда1()

 

История = ИсторияРаботыПользователя.Получить();

 

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

Если в глобальном общем модуле (например, ОбменДанными) определена экспортная процедура ПолучитьПрефиксНомера() (листинг 5.11), то в модуле формы можно обращаться к ней по имени (листинг 5.12).

Листинг 5.11. Глобальный общий модуль

Функция ПолучитьПрефиксНомера() Экспорт

 

Возврат Константы.ПрефиксНумерации.Получить();

 

КонецФункции

Листинг 5.12. Модуль формы

&НаКлиенте

Процедура Команда1(Префикс)

 

Префикс = ПолучитьПрефиксНомера();

 

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

Если такой общий модуль — неглобальный (например, РаботаСДокументами), то при обращении к процедуре ее имя нужно указывать через точку от имени модуля (листинг 5.13).

Листинг 5.13. Модуль формы

&НаКлиенте

Процедура КоличествоПриИзменении(Элемент)

 

РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

 

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

Второй способ предпочтительнее, так как неглобальные общие модули компилируются по мере обращения к ним, а не при запуске системы, как глобальные.

Естественно, при этом нужно обеспечивать согласованность того, как описана процедура в модуле формы (&НаКлиенте, &НаСервере и т. д.), и того, какие флажки проставлены у общего модуля (клиент (управляемое приложение), сервер и т. д.).

  • Экспортируемые переменные, процедуры и функции модуля управляемого приложения.

Если в модуле приложения определена экспортная процедура ТестовоеСообщение() (листинг 5.14), то в модуле формы можно обращаться к ней по имени (листинг 5.15).

Листинг 5.14. Модуль приложения

Процедура ТестовоеСообщение() Экспорт

 

Сообщить("Тестовое сообщение");

 

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

Листинг 5.15. Модуль формы

&НаКлиенте

Процедура Команда1()

 

ТестовоеСообщение();

 

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