Исполнение модуля
В языке «1С:Предприятия» использовались директивы компиляции &НаКлиенте, &НаСервере, &НаКлиентеНаСервереБезКонтекста, &НаКлиентеНаСервере, чтобы указать, в каком окружении будет исполняться тот или иной модуль.
Теперь в языке «Элемента» аннотации окружения выполняют те же функции, но состав аннотаций отличается.
Модуль существует в том же окружении, что и тип, к которому относится модуль: на клиенте, на сервере или и на клиенте, и на сервере. Однако методы и типы, объявленные в модуле, могут существовать и исполняться в разных окружениях.
Есть стандартные окружения, в которых существуют типы и исполняются методы модуля. Они используются тогда, когда окружение не указано в явном виде. Окружения зависят от вида элемента проекта:
- HttpСервис – все методы этого типа исполняются на сервере;
- КлючДоступа – все методы этого типа исполняются на сервере;
- Пользователи – все методы этого типа исполняются на сервере;
- ПроцессИнтеграции – все методы этого типа исполняются на сервере;
- РегистрСведений – все методы этого типа исполняются на сервере;
- Справочник – все методы этого типа исполняются на сервере;
- ОбщийМодуль – окружение типа такое же, как у элемента проекта, которому принадлежит общий модуль;
- Структура – окружение типа такое же, как у элемента проекта, которому принадлежит структура;
- КомпонентИнтерфейса – все методы этого типа исполняются на клиенте;
- НавигационнаяКоманда – все методы этого типа исполняются на клиенте;
- ОбычнаяКоманда – все методы этого типа исполняются на клиенте;
- ПереключаемаяКоманда – все методы этого типа исполняются на клиенте;
- Перечисление – все методы этого типа исполняются и на клиенте, и на сервере;
- ХранимаяСтруктура – все методы этого типа исполняются на клиенте.
Наряду с этим окружение для метода, структуры, исключения, перечисления, константы можно задать в явном виде с помощью аннотаций окружения:
- @Клиент,
- @Сервер,
- @ДоступноСКлиента.
Аннотации окружения работают следующим образом:
- Если тип существует и на клиенте, и на сервере, то при описании языковых конструкций можно использовать следующие аннотации окружения:
- @Сервер. При этом метод (тип) доступен на сервере. Метод исполняется на сервере.
- @Клиент. При этом метод (тип) доступен на клиенте. Метод исполняется на клиенте.
- @Сервер @Клиент. При этом метод (тип) доступен и на клиенте, и на сервере. Если метод вызывается с клиента, то он исполняется на клиенте. Если метод вызывается с сервера, то он исполняется на сервере.
- @Сервер @ДоступноСКлиента. При этом метод (тип) доступен и на клиенте, и на сервере. Метод исполняется на сервере, а вызвать его можно как с сервера, так и с клиента.
- Если тип существует на клиенте, то при описании языковых конструкций можно использовать те же аннотации, что и для предыдущего случая. Разница только в методах, имеющих аннотацию @Сервер. Они не имеют доступа к экземпляру, то есть у них нет контекста экземпляра и недоступно обращение с помощью ключевого слова этот.
- Если тип существует на сервере, то при описании языковых конструкций можно использовать только одну аннотацию – @Сервер. Однако это окружение является стандартным для таких модулей, поэтому эту аннотацию можно не указывать.