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