Skip to main content

Клиент-серверное взаимодействие

Клиент-серверная архитектура 1С — трехуровневая модель: Клиент (интерфейс), Кластер 1С (логика), СУБД (хранение данных).

Ключевой принцип: "Тяжелый сервер, легкий клиент". Максимальная нагрузка — на кластере, клиент занимается только интерфейсом.

Архитектура в деталях

УровеньКомпонентыНазначениеОграничения
КлиентТолстый (1cv8.exe), Тонкий (1cv8c.exe), Веб-клиентИнтерфейс пользователя, валидация вводаНет доступа к базе данных
Кластер 1СРабочие процессы, менеджер сеансовОбработка бизнес-логики, подготовка форм и отчетов, управление сеансамиКлиенты не имеют прямого доступа к БД
СУБДMS SQL, PostgreSQL, OracleХранение и обработка данных на SQL-уровнеДоступ только через кластер 1С
  • Толстый клиент: «Тяжелый», выполняет логику локально, поддерживает Конфигуратор.
  • Тонкий клиент: «Легкий», только отображение, вся логика на сервере.

Кластер серверов 1С:

  • Промежуточное звено между клиентами и СУБД.
  • Состоит из рабочих процессов, агентов и менеджеров кластера.
  • На него вынесена вся основная работа: выполнение прикладной логики, подготовка форм, формирование отчетов.
  • Обеспечивает масштабируемость, отказоустойчивость и одновременную работу большого числа пользователей.

Директивы компиляции и их использование

ДирективаГде выполняетсяДоступ к данным формыДоступ к БДОптимальное использование
&НаКлиентеТолько на клиентеОбработка событий интерфейса, локальная валидация
&НаСервереТолько на сервереДействия, требующие и данных формы, и работы с БД
&НаСервереБезКонтекстаТолько на сервереПолучение данных по параметрам без передачи формы
&НаКлиентеНаСервереБезКонтекстаИ на клиенте, и на сервереВспомогательные методы, которые нужные в обоих контекстах.

Правило вызовов: Можно вызывать только методы под той же или более ограничивающей директивой (сверху вниз по таблице).

Общие модули

Флаг модуляНазначениеВажные нюансы
Клиент/СерверОпределяет, в каких средах будет существовать скомпилированный код
Вызов сервераПозволяет вызывать экспортные функции напрямую из клиентского кодаТолько для безопасных функций. Не ставить всем серверным модулям!
ГлобальныйФункции доступны без указания имени модуляРиск конфликтов имен. Использовать осторожно

Правила оптимизации

Главная цель: Минимизировать количество и объем серверных вызовов.

Критическое правило: Одно действие пользователя = один серверный вызов (где возможно).

Главные принципы:

  • Меньше данных: Используйте &НаСервереБезКонтекста, передавайте только нужные параметры, а не всю форму.
  • Разделяйте ответственность: Бизнес-логика — на сервере. Интерфейс — на клиенте.
  • Избегайте вызовов в циклах: Не делайте серверный вызов для каждой строки таблицы. Соберите данные на клиенте и обработайте пакетом за один вызов.
  • Задача разработчика — минимизировать количество и объем серверных вызовов. Код нужно явно разделять между клиентом и сервером.

Сетевое взаимодействие с кластером

  1. Протокол и адресация: Все компоненты (клиенты, рабочие процессы, менеджеры) общаются по TCP/IP. Каждый процесс имеет уникальный адрес: имя сервера + номер порта.

  2. Порты по умолчанию:

    • Агент сервера: 1540
    • Менеджер кластера: 1541
    • Рабочие процессы и доп. менеджеры: динамически из диапазона 1560:1591
  3. Процесс подключения клиента:

    1. Клиент обращается к Менеджеру кластера (пример: сервер:1541).
    2. Менеджер выбирает свободный Рабочий процесс и сообщает его адрес клиенту (пример: сервер:1561).
    3. Клиент переподключается напрямую к выделенному Рабочему процессу, который и обслуживает всю его сессию.

Материалы