DellShop B2B
Корзина

Модули 1С: где выполняется код — на клиенте или на сервере

16 марта 2026 г.·12 мин чтения·Алексей РомашовАлексей Ромашов
Модули 1С: где выполняется код — на клиенте или на сервере

Платформа 1С:Предприятие работает по архитектуре «клиент-сервер». Код выполняется в двух местах: на рабочей станции пользователя (клиент) или на сервере приложений. От того, где запускается конкретный фрагмент кода, зависит скорость работы, безопасность и корректность бизнес-логики. Разработчикам важно понимать, какие модули выполняются на клиенте, какие — на сервере, и как управлять этим процессом.

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

Архитектура клиент-сервер в 1С:Предприятие

Платформа 1С разделяет выполнение кода на два контура: клиентский и серверный. Такое разделение называется многоуровневой архитектурой. Клиент отвечает за интерфейс, взаимодействие с пользователем и локальные операции. Сервер управляет бизнес-логикой, данными в базе и выполняет тяжёлые вычисления.

Клиентская сторона

Клиент — это приложение, которое запускается на рабочей станции пользователя. Может быть:

  • Толстый клиент — полноценное приложение для Windows, выполняет код локально, имеет прямой доступ к файловой системе компьютера.
  • Тонкий клиент — облегчённое приложение, бо́льшая часть кода выполняется на сервере, клиент только отрисовывает интерфейс.
  • Веб-клиент — работает в браузере, весь код выполняется на сервере, клиент получает готовый HTML.

На клиенте выполняются операции, которые не требуют обращения к базе данных: валидация введённых данных перед отправкой на сервер, управление элементами формы, обработка событий интерфейса.

Серверная сторона

Сервер приложений — это процесс (или набор процессов), который управляет базой данных, выполняет бизнес-логику и обрабатывает запросы от клиентов. Серверный код имеет доступ к:

  • Базе данных (чтение, запись, транзакции).
  • Файловой системе сервера (не клиента).
  • Внешним системам через HTTP, COM, внешние компоненты.

Типичные серверные операции: сохранение документа, проведение, выполнение запросов, обмен данными с внешними системами.

Когда код выполняется на клиенте, а когда — на сервере

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

Глобальный контекст: встроенные функции платформы

Глобальный контекст — это набор встроенных функций и объектов платформы, доступных в любом месте кода без явного объявления. Например: Сообщить(), Формат(), ТекущаяДата(), Новый Массив.

Важная особенность: не все функции глобального контекста доступны на клиенте и на сервере одновременно. Некоторые работают только на сервере (например, транзакции), другие — только на клиенте (например, ОткрытьФорму()).

Пример: ТекущаяДата() на клиенте и на сервере

Функция ТекущаяДата() возвращает дату и время. Но:

  • На клиенте возвращает дату рабочей станции пользователя.
  • На сервере — дату сервера приложений.

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

Модули приложения: запуск при старте программы

Модуль приложения — это специальный модуль, код которого выполняется один раз при запуске программы. Доступен только в управляемом приложении (тонкий, толстый, веб-клиент).

Существует два типа модуля приложения:

  • Модуль управляемого приложения — выполняется на клиенте.
  • Модуль сеанса — выполняется на сервере.

Модуль управляемого приложения (клиент)

Выполняется на клиентской стороне при старте программы. Используется для:

  • Инициализации клиентских переменных.
  • Подключения внешних компонент, доступных только на клиенте.
  • Настройки интерфейса.

Этот модуль не имеет доступа к базе данных напрямую. Для работы с данными нужно вызвать серверную процедуру.

Модуль сеанса (сервер)

Выполняется на сервере при установке соединения пользователя с базой. Код запускается до открытия первой формы. Типичные задачи:

  • Установка параметров сеанса (например, текущая организация, склад по умолчанию).
  • Проверка прав доступа.
  • Инициализация серверных переменных.

Модуль сеанса блокирует открытие программы до завершения его выполнения. Долгие операции здесь замедляют старт приложения.

Модуль приложения 1С: на клиенте или на сервере?

Ответ зависит от того, какой модуль имеется в виду:

  • Модуль управляемого приложения — на клиенте.
  • Модуль сеанса — на сервере.

Часто путаница возникает из-за названия: «модуль приложения» в документации может означать оба варианта. Смотрите на свойства модуля в конфигураторе: если указано «Клиент» — выполняется на клиенте, если «Сервер» — на сервере.

Общие модули: универсальный инструмент разработчика

Общий модуль — это модуль, доступный из любого места конфигурации. Используется для хранения общих функций, процедур и переменных. Разработчик может настроить, где будет выполняться код модуля: на клиенте, на сервере или в обоих контекстах.

Свойства общего модуля

При создании общего модуля доступны следующие свойства:

Свойство Описание
Сервер Код выполняется на сервере, доступен из серверного контекста
Внешнее соединение Доступен при подключении по COM-соединению
Клиент (управляемое приложение) Код выполняется на клиенте, доступен из клиентского контекста
Клиент (обычное приложение) Доступен в обычных формах (устаревший режим)
Вызов сервера Позволяет клиентскому коду вызвать процедуру на сервере
Глобальный Экспортные функции доступны без указания имени модуля
Привилегированный Выполняется с полными правами, игнорируя RLS

Вызов сервера 1С: что значит в общем модуле

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

Пример: клиентская форма документа должна проверить остаток товара на складе. Остаток хранится в базе данных, доступ к которой есть только на сервере. Клиент не может выполнить запрос напрямую. Решение: создать серверную функцию в общем модуле с установленным флагом «Вызов сервера», которая выполнит запрос и вернёт результат клиенту.

Как создать общий модуль с вызовом сервера

Последовательность действий в конфигураторе:

  1. Создать новый общий модуль (например, РабораСоСкладом).
  2. Установить свойства:
    • «Сервер» — включено.
    • «Вызов сервера» — включено.
    • «Клиент (управляемое приложение)» — выключено (модуль серверный, клиентский код в нём не выполняется).
  3. Написать серверную функцию с директивой &НаСервере или &НаСерверБезКонтекста.

Пример кода общего модуля:

// Общий модуль "РаботаСоСкладом"
// Свойства: Сервер = Да, Вызов сервера = Да

&НаСерверБезКонтекста
Функция ПолучитьОстатокТовара(Номенклатура, Склад)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ОстаткиТоваровОстатки.КоличествоОстаток КАК Остаток
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваров.Остатки(&МоментВремени, Номенклатура = &Номенклатура И Склад = &Склад) КАК ОстаткиТоваровОстатки";

    Запрос.УстановитьПараметр("МоментВремени", ТекущаяДатаСеанса());
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("Склад", Склад);

    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
        Возврат 0;
    КонецЕсли;

    Выборка = Результат.Выбрать();
    Выборка.Следующий();
    Возврат Выборка.Остаток;
КонецФункции

Клиентский код формы вызывает эту функцию так:

&НаКлиенте
Процедура ПроверитьОстаток(Команда)
    Остаток = РаботаСоСкладом.ПолучитьОстатокТовара(Объект.Номенклатура, Объект.Склад);
    Если Остаток < Объект.Количество Тогда
        Сообщить("Недостаточно товара на складе!");
    КонецЕсли;
КонецПроцедуры

Платформа автоматически передаёт вызов на сервер, выполняет функцию и возвращает результат клиенту.

Вызов сервера 1С: общий модуль и производительность

Каждый вызов серверной функции из клиентского кода — это сетевой запрос. Он занимает время: передача данных по сети, выполнение на сервере, возврат результата. Частые вызовы сервера замедляют работу интерфейса.

Рекомендации для оптимизации:

  • Минимизируйте количество обращений к серверу. Лучше один раз вызвать функцию, которая вернёт все нужные данные, чем десять раз вызывать разные функции.
  • Используйте директиву &НаСерверБезКонтекста для функций, которые не зависят от контекста формы. Это ускоряет выполнение.
  • Кэшируйте результаты на клиенте, если данные не меняются часто.
  • Валидируйте данные на клиенте перед отправкой на сервер — сократите количество ошибочных запросов.

Модули объектов: где выполняется код справочников, документов, регистров

Каждый объект метаданных (справочник, документ, регистр) может иметь свой модуль. Код модуля объекта выполняется на сервере. Это жёстко заданная логика платформы.

Модули объектов используются для:

  • Обработки событий объекта: перед записью, при записи, при проведении.
  • Реализации бизнес-логики: расчёты, проверки, заполнение реквизитов.
  • Контроля данных перед сохранением в базу.

Клиентский код не может напрямую вызвать процедуры модуля объекта. Для взаимодействия используются серверные процедуры в модуле формы или общих модулях.

Модули форм: клиент, сервер и взаимодействие

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

Директивы компиляции

Директива Место выполнения Применение
&НаКлиенте Клиент Обработка событий интерфейса, валидация, работа с элементами формы
&НаСервере Сервер Работа с базой данных, выполнение запросов, расчёты
&НаСерверБезКонтекста Сервер Функции без доступа к форме, быстрее выполняются
&НаКлиентеНаСервере Клиент и сервер Универсальные функции (форматирование, вычисления без обращения к базе)

Пример смешанного кода в модуле формы:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Клиентский код: настройка интерфейса
    ЭлементыФормы.ПолеКомментарий.Видимость = Истина;

    // Вызов серверной процедуры для получения данных
    ЗаполнитьДанныеФормы();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьДанныеФормы()
    // Серверный код: запрос к базе
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ * ИЗ Справочник.Контрагенты";
    Результат = Запрос.Выполнить();

    СписокКонтрагентов.Загрузить(Результат.Выгрузить());
КонецПроцедуры

&НаКлиентеНаСервере
Функция ФорматироватьСумму(Сумма)
    // Универсальный код: выполняется и на клиенте, и на сервере
    Возврат Формат(Сумма, "ЧДЦ=2; ЧН=0,00");
КонецФункции

Когда использовать каждую директиву

  • &НаКлиенте: события интерфейса (нажатие кнопки, изменение поля), работа с элементами формы, показ сообщений пользователю.
  • &НаСервере: запросы к базе, запись объектов, вызов внешних систем, расчёты на основе данных из базы.
  • &НаСерверБезКонтекста: вспомогательные функции, которые не зависят от формы (получение настройки, расчёт по формуле).
  • &НаКлиентеНаСервере: форматирование, простые вычисления, проверки без обращения к базе.

Практическое применение: типовые задачи и решения

Задача 1: Получить текущую дату сервера на клиенте

Клиентский код не должен использовать ТекущаяДата() для бизнес-логики — дата может отличаться от серверной. Решение: вызвать серверную функцию.

// Общий модуль "ОбщегоНазначения"
// Свойства: Сервер = Да, Вызов сервера = Да

&НаСерверБезКонтекста
Функция ПолучитьТекущуюДатуСервера()
    Возврат ТекущаяДатаСеанса();
КонецФункции

// Клиентский код формы

&НаКлиенте
Процедура УстановитьДатуДокумента(Команда)
    Объект.Дата = ОбщегоНазначения.ПолучитьТекущуюДатуСервера();
КонецПроцедуры

Задача 2: Проверить уникальность значения перед записью

Клиент не может выполнить запрос к базе. Серверная функция проверяет уникальность и возвращает результат.

// Общий модуль "Проверки"
// Свойства: Сервер = Да, Вызов сервера = Да

&НаСерверБезКонтекста
Функция ПроверитьУникальностьАртикула(Артикул, ТекущийЭлемент)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    Номенклатура.Ссылка
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Артикул = &Артикул
    |    И Номенклатура.Ссылка <> &ТекущийЭлемент";

    Запрос.УстановитьПараметр("Артикул", Артикул);
    Запрос.УстановитьПараметр("ТекущийЭлемент", ТекущийЭлемент);

    Результат = Запрос.Выполнить();
    Возврат Результат.Пустой();
КонецФункции

// Клиентский код формы

&НаКлиенте
Процедура АртикулПриИзменении(Элемент)
    Если НЕ Проверки.ПроверитьУникальностьАртикула(Объект.Артикул, Объект.Ссылка) Тогда
        Сообщить("Артикул уже используется!");
        Объект.Артикул = "";
    КонецЕсли;
КонецПроцедуры

Задача 3: Заполнить табличную часть данными из регистра

Табличная часть документа заполняется данными из регистра остатков. Операция выполняется на сервере, результат передаётся форме.

// Модуль формы документа

&НаСервере
Процедура ЗаполнитьТабличнуюЧастьОстатками()
    Объект.Товары.Очистить();

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ОстаткиТоваровОстатки.Номенклатура,
    |    ОстаткиТоваровОстатки.КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваров.Остатки(&МоментВремени, Склад = &Склад) КАК ОстаткиТоваровОстатки";

    Запрос.УстановитьПараметр("МоментВремени", Объект.Дата);
    Запрос.УстановитьПараметр("Склад", Объект.Склад);

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        НоваяСтрока = Объект.Товары.Добавить();
        НоваяСтрока.Номенклатура = Выборка.Номенклатура;
        НоваяСтрока.Количество = Выборка.КоличествоОстаток;
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПоОстаткам(Команда)
    ЗаполнитьТабличнуюЧастьОстатками();
КонецПроцедуры

Требования к серверу для работы 1С:Предприятие

Производительность серверного кода напрямую зависит от мощности сервера приложений. Для комфортной работы 10-50 пользователей рекомендуется использовать серверное оборудование с процессорами Intel Xeon или AMD EPYC, минимум 16 ГБ оперативной памяти (лучше 32 ГБ и выше), быстрые SSD-накопители для базы данных.

Сервер приложений 1С активно использует процессор для выполнения запросов, расчётов, обработки транзакций. Многопоточность платформы позволяет распределить нагрузку между ядрами процессора. Чем больше ядер — тем больше одновременных пользователей сможет обслужить сервер.

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

Дисковая подсистема критична для СУБД (SQL Server, PostgreSQL). База данных постоянно читает и записывает данные. SSD-накопители ускоряют операции в десятки раз по сравнению с HDD.

Частые ошибки при работе с модулями

Ошибка 1: Попытка выполнить запрос к базе на клиенте

Клиентский код не имеет прямого доступа к базе данных. Попытка выполнить Новый Запрос в процедуре с директивой &НаКлиенте приведёт к ошибке выполнения.

Решение: переместить код запроса в серверную процедуру.

Ошибка 2: Использование контекста формы в функции &НаСерверБезКонтекста

Директива &НаСерверБезКонтекста означает, что функция не имеет доступа к переменным формы (Объект, ЭлементыФормы). Обращение к ним вызовет ошибку.

Решение: использовать &НаСервере или передать нужные значения параметрами функции.

Ошибка 3: Частые вызовы сервера в цикле

Код, который вызывает серверную функцию для каждой строки табличной части, замедляет работу. Каждый вызов — сетевой запрос.

Решение: передать все строки одним вызовом, обработать на сервере, вернуть результат.

Ошибка 4: Использование ТекущаяДата() на клиенте для бизнес-логики

Дата клиента может отличаться от даты сервера. Документы записываются с датой клиента, что приводит к путанице в отчётах.

Решение: всегда получать дату с сервера через ТекущаяДатаСеанса().

FAQ: ответы на частые вопросы

Можно ли выполнить серверный код в толстом клиенте?

Да. Толстый клиент выполняет серверный код локально, если работает в режиме «файловая база». При подключении к серверной базе (клиент-сервер) серверный код выполняется на сервере приложений, как и в тонком клиенте.

Как узнать, где выполняется конкретная процедура?

Смотрите на директиву компиляции перед объявлением процедуры: &НаКлиенте — на клиенте, &НаСервере — на сервере. Если директивы нет, проверьте свойства модуля (для общих модулей) или тип модуля (модули объектов всегда серверные).

Что быстрее: &НаСервере или &НаСерверБезКонтекста?

&НаСерверБезКонтекста быстрее, потому что платформа не передаёт контекст формы на сервер. Используйте эту директиву для вспомогательных функций, которые не зависят от данных формы.

Можно ли вызвать клиентскую процедуру из серверного кода?

Нет, напрямую нельзя. Серверный код не может обратиться к клиенту. Решение: использовать механизм оповещений (ОписаниеОповещения) или передать управление клиенту после завершения серверной процедуры.

Зачем нужно свойство «Вызов сервера» в общем модуле?

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

Поделиться статьёй:

TelegramVKWhatsApp

Об авторе

Алексей Ромашов
Алексей Ромашов

Виртуализация · Сложные системы

Системный администратор, mass shootу виртуализации. 10 лет строит и обслуживает серверную инфраструктуру на VMware и Proxmox. Любит сложные задачи и понятные инструкции.

Все статьи автора →

Похожие материалы

Dell PowerEdge MX760c

Dell PowerEdge MX760c

Dell PowerEdge MX760c — модульный вычислительный блок для ЦОД с поддержкой DDR5 и PCIe Gen5. Обзор архитектуры, конфигураций и сценариев применения.

28.03.20268 мин
Топ серверных процессоров Intel: производительность и применение

Топ серверных процессоров Intel: производительность и применение

Intel Xeon Scalable 3-го и 4-го поколений — основа серверной инфраструктуры для корпоративных задач. Разбираем линейки от Bronze до Platinum, сравниваем производительность, показываем характеристики топовых моделей и рассказываем, на какие сценарии рассчитан каждый процессор: виртуализация, базы данных, AI/ML, веб-серверы.

28.03.202612 мин