7.4 KiB
sidebar_position, sidebar_label, title
| sidebar_position | sidebar_label | title |
|---|---|---|
| 2 | Клиент-серверное взаимодействие | Клиент-серверное взаимодействие |
Клиент-серверная архитектура 1С — трехуровневая модель: Клиент (интерфейс), Кластер 1С (логика), СУБД (хранение данных).
Ключевой принцип: "Тяжелый сервер, легкий клиент". Максимальная нагрузка — на кластере, клиент занимается только интерфейсом.
Архитектура в деталях
| Уровень | Компоненты | Назначение | Ограничения |
|---|---|---|---|
| Клиент | Толстый (1cv8.exe), Тонкий (1cv8c.exe), Веб-клиент |
Интерфейс пользователя, валидация ввода | Нет доступа к базе данных |
| Кластер 1С | Рабочие процессы, менеджер сеансов | Обработка бизнес-логики, подготовка форм и отчетов, управление сеансами | Клиенты не имеют прямого доступа к БД |
| СУБД | MS SQL, PostgreSQL, Oracle | Хранение и обработка данных на SQL-уровне | Доступ только через кластер 1С |
- Толстый клиент: «Тяжелый», выполняет логику локально, поддерживает Конфигуратор.
- Тонкий клиент: «Легкий», только отображение, вся логика на сервере.
Кластер серверов 1С:
- Промежуточное звено между клиентами и СУБД.
- Состоит из рабочих процессов, агентов и менеджеров кластера.
- На него вынесена вся основная работа: выполнение прикладной логики, подготовка форм, формирование отчетов.
- Обеспечивает масштабируемость, отказоустойчивость и одновременную работу большого числа пользователей.
Директивы компиляции и их использование
| Директива | Где выполняется | Доступ к данным формы | Доступ к БД | Оптимальное использование |
|---|---|---|---|---|
&НаКлиенте |
Только на клиенте | ✅ | ❌ | Обработка событий интерфейса, локальная валидация |
&НаСервере |
Только на сервере | ✅ | ✅ | Действия, требующие и данных формы, и работы с БД |
&НаСервереБезКонтекста |
Только на сервере | ❌ | ✅ | Получение данных по параметрам без передачи формы |
&НаКлиентеНаСервереБезКонтекста |
И на клиенте, и на сервере | ❌ | ❌ | Вспомогательные методы, которые нужные в обоих контекстах. |
Правило вызовов: Можно вызывать только методы под той же или более ограничивающей директивой (сверху вниз по таблице).
Общие модули
| Флаг модуля | Назначение | Важные нюансы |
|---|---|---|
| Клиент/Сервер | Определяет, в каких средах будет существовать скомпилированный код | |
| Вызов сервера | Позволяет вызывать экспортные функции напрямую из клиентского кода | Только для безопасных функций. Не ставить всем серверным модулям! |
| Глобальный | Функции доступны без указания имени модуля | Риск конфликтов имен. Использовать осторожно |
Правила оптимизации
Главная цель: Минимизировать количество и объем серверных вызовов.
Критическое правило: Одно действие пользователя = один серверный вызов (где возможно).
Главные принципы:
- Меньше данных: Используйте
&НаСервереБезКонтекста, передавайте только нужные параметры, а не всю форму. - Разделяйте ответственность: Бизнес-логика — на сервере. Интерфейс — на клиенте.
- Избегайте вызовов в циклах: Не делайте серверный вызов для каждой строки таблицы. Соберите данные на клиенте и обработайте пакетом за один вызов.
- Задача разработчика — минимизировать количество и объем серверных вызовов. Код нужно явно разделять между клиентом и сервером.
Сетевое взаимодействие с кластером «1С»
-
Протокол и адресация: Все компоненты (клиенты, рабочие процессы, менеджеры) общаются по TCP/IP. Каждый процесс имеет уникальный адрес: имя сервера + номер порта.
-
Порты по умолчанию:
- Агент сервера:
1540 - Менеджер кластера:
1541 - Рабочие процессы и доп. менеджеры: динамически из диапазона
1560:1591
- Агент сервера:
-
Процесс подключения клиента:
- Клиент обращается к Менеджеру кластера (пример:
сервер:1541). - Менеджер выбирает свободный Рабочий процесс и сообщает его адрес клиенту (пример:
сервер:1561). - Клиент переподключается напрямую к выделенному Рабочему процессу, который и обслуживает всю его сессию.
- Клиент обращается к Менеджеру кластера (пример: