Компиляция общих модулей
Экземпляры общих модулей компилируются в соответствии со значениями свойств Клиент, Сервер и Внешнее соединение этих модулей. Если для общего модуля установлено только свойство Клиент, то экземпляр этого модуля будет скомпилирован только на стороне клиента. Если установлено только свойство Сервер — то только на стороне сервера (рис. 3.12).
Рис. 3.12. Компиляция общего модуля для исполнения на сервере или на клиенте
Если для общего модуля установлены свойства Клиент и Сервер одновременно, то экземпляры этого общего модуля будут скомпилированы как на стороне клиента, так и на стороне сервера (рис. 3.13).
Рис. 3.13. Компиляция общего модуля для исполнения на сервере и клиенте
Если для общего модуля установлено свойство Внешнее соединение, то экземпляр этого модуля будет скомпилирован на стороне клиента только в случае запуска 1С:Предприятия в сеансе внешнего соединения (при обращении к нему как к COM-серверу) (рис. 3.14).
Рис. 3.14. Компиляция общего модуля для исполнения в сеансе внешнего соединения
Если для общего модуля установлены свойства Сервер и Внешнее соединение, то на стороне сервера всегда будет компилироваться экземпляр этого модуля, а на стороне клиента — только в сеансе внешнего соединения (рис. 3.15).
Рис. 3.15. Компиляция общего модуля для исполнения на сервере и в сеансе внешнего соединения
Если для общего модуля установлены свойства Клиент и Внешнее соединение, то экземпляр этого модуля будет всегда компилироваться на стороне клиента (рис. 3.16).
Рис. 3.16. Компиляция общего модуля для исполнения на стороне клиента и в сеансе внешнего соединения
Если для общего модуля установлены свойства Сервер, Клиент и Внешнее соединение, то экземпляр этого модуля всегда будет компилироваться как на стороне сервера, так и на стороне клиента (рис. 3.17).
Рис. 3.17. Компиляция модуля для исполнения на сервере, клиенте и в сеансе внешнего соединения
Компиляция модуля приложения и модуля внешнего соединения
Модуль приложения и модуль внешнего соединения всегда компилируются только на стороне клиента. Модуль приложения компилируется в случае, если выполняется запуск конфигурации в режиме 1С:Предприятие или приложение запускается в качестве Automation-сервера. Модуль внешнего соединения компилируется в случае, если приложение запускается в качестве COM-сервера (рис. 3.18).
Рис. 3.18. Компиляция модуля приложения и модуля внешнего соединения
Таким образом, можно сказать, что модуль внешнего соединения выполняет функции модуля приложения в сеансе COM-соединения.
Компиляция модуля объекта
Экземпляр модуля объекта компилируется в процессе работы прикладного решения, и компиляция может быть выполнена как на стороне клиента, так и на стороне сервера. Это определяется тем, в каком контексте происходит обращение к объекту.
Если обращение к объекту выполняется, например, в модуле приложения, то экземпляр объекта будет создан на стороне клиента и, соответственно, экземпляр модуля объекта будет также скомпилирован на стороне клиента (рис. 3.19).
Если же обращение к объекту выполняется в процедуре общего модуля, для которого установлено свойство Сервер, то объект будет создан на сервере и там же будет скомпилирован экземпляр модуля этого объекта (рис. 3.20).
Рис. 3.19. Компиляция модуля объекта на стороне клиента
Рис. 3.20. Компиляция модуля объекта на стороне сервера
Чтобы убедиться в том, что объект действительно создается на сервере или клиенте, можно добавить в модуль объекта справочника Номенклатура следующие строки (листинг 3.4).
Листинг 3.4. Использование инструкций условной компиляции
#Если Сервер Тогда
Сообщить("Объект создан на сервере");
#ИначеЕсли Клиент Тогда
Сообщить("Объект создан на клиенте");
#КонецЕсли
В этом примере использованы инструкции препроцессору
Следует помнить, что не все объекты могут быть использованы на сервере или в сессии COM-соединения. Точная информация о возможности использования объектов, процедур и функций на сервере и в модуле внешнего соединения находится в документации, в описании конкретных объектов, процедур и функций.
Компиляция модуля формы
Модуль формы всегда компилируется только на стороне клиента и только в режиме 1С:Предприятие, поскольку объект форма не доступен на сервере и в режиме внешнего соединения.
Использование инструкций препроцессору
В тексте модулей конфигурации, которые могут компилироваться как на стороне сервера, так и на стороне клиента (общие модули и модули объектов), допускается использование инструкций препроцессору. Инструкции препроцессору позволяют указывать, в каком контексте будет скомпилирован тот или иной фрагмент кода (на сервере, на клиенте, во внешнем соединении).
Например, если в модуле объекта разместить предыдущий текст (листинг 3.4), то в том случае, когда экземпляр модуля объекта компилируется на клиенте, он будет содержать текст:
Сообщить("Объект создан на клиенте");
Если же этот объект будет создаваться на стороне сервера, тогда модуль объекта будет содержать следующий текст:
Сообщить("Объект создан на сервере");
Таким образом, например, можно получить информацию о том, на какой стороне (сервера или клиента) выполняется данный участок кода.
Если используется неглобальный общий модуль, для которого установлено использование на клиенте и на сервере, то методы, заключенные в условие