Программные модули в "1С:Предприятии 8"

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

Общие модули Общие модули принадлежат всей конфигурации в целом, но, в отличие от модуля приложения (см. ниже), их может быть несколько, например, модули РасчетНалогов, ОбработкаДокументов. Общие модули не могут содержать объявлений переменных, и в них нет раздела основной программы, таким образом, они состоят только из процедур и функций
Модуль приложения Это модуль, который относится ко всей конфигурации в целом и может быть только один. Модуль приложения является аналогом глобального модуля в версии 7.7. Он отвечает за пользовательскую сессию (сеанс) работы с "1С:Предприятием 8"
Модуль внешнего соединения Если конфигурация запускается не в режиме клиентской сессии, а через COM-соединение, то вместо модуля приложения используется модуль внешнего соединения, который в конфигурации может быть только один
Модули объектов У некоторых прикладных объектов конфигурации могут быть собственные модули, например, модуль документа РасходнаяНакладная, модуль справочника Номенклатура. Не следует их путать с модулями форм этих объектов
Модули форм У каждой формы есть модуль, в котором определяется поведение формы и действия, выполняемые из нее, например, открытие других форм

На следующем рисунке показано расположение всех этих модулей:

Расположение программных модулей

Разделы программного модуля

Любой программный модуль, за исключением общих модулей, состоит из следующих разделов:

Внимание! У общих модулей есть только раздел процедур и функций.


Контекст

Контекст — очень важное понятие при программировании на любом языке. В "1С:Предприятии 8" контекст обозначает окружение модуля, т. е. какие ему будут доступны переменные, объекты, свойства, методы и события.

Можно выделить следующие виды контекстов, существующих в "1С:Предприятии 8":

 Глобальный контекст, доступный во всех остальных контекстах, состоит из следующих частей:

 В контексте модуля приложения (или модуля внешнего соединения) доступны экспортируемые процедуры и функции общих модулей.

 В контексте общего модуля доступны экспортируемые процедуры и функции других общих модулей. В этом контексте недоступны экспортируемые переменные, процедуры и функции модуля приложения.

 В контексте модуля прикладного объекта есть доступ к реквизитам и табличным частям объекта, а также его методам и событиям. Например, в модуле документа РасходнаяНакладная доступны реквизиты документа и его табличные части, можно вызывать методы документа и обрабатывать события.

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

Необходимо помнить правила видимости экспортируемых переменных, процедур и функций различных модулей:

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

Проиллюстрируем применение первых четырех правил на следующей схеме:

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