Клиент и сервер 1С: кто что делает и как они общаются
Содержание
Частое заблуждение: «сервер 1С — это просто компьютер, где лежит база». На деле сервер 1С:Предприятия — отдельная программа, которая выполняет код конфигурации и сама ходит в СУБД. Клиент 1С — другая программа: она рисует окна, принимает ввод и просит сервер сделать работу.
Коротко: клиент отвечает за интерфейс и взаимодействие с пользователем, сервер — за выполнение серверного кода, блокировки и доступ к данным. Разница важна при выборе режима работы, расчёте железа и поиске причин «тормозов».
Две роли в одной платформе
Платформа 1С 8.3 состоит из нескольких частей, и «клиент против сервера» — это разделение обязанностей между ними.
| Часть | Что делает | Где живёт |
|---|---|---|
| Клиентское приложение | Формы, ввод, печать, локальные файлы | Компьютер пользователя или браузер |
| Сервер 1С:Предприятия | Выполняет серверный код, управляет сеансами и блокировками | Серверная машина |
| СУБД | Хранит таблицы базы | На том же сервере или на отдельном |
Есть и файловый режим: база лежит в файле 1Cv8.1CD в папке, а каждый клиент сам читает и пишет в неё. Сервера приложений тут нет, вся логика выполняется на компьютере пользователя. Для 2-3 человек это нормально, для десятка и больше уже тесно.
Файловый и клиент-серверный режим — это разные способы хранения и обработки, а не разные программы для пользователя. Интерфейс в обоих случаях один и тот же.
Что на самом деле делает сервер приложений
Сервер 1С — это не одна программа, а набор процессов, объединённых в кластер.
- 🧠 Агент сервера (
ragent) — служба, которая запускает и контролирует остальное. Порт по умолчанию — 1540. - 🧭 Менеджер кластера (
rmngr) — раздаёт сеансы по рабочим процессам и держит служебную информацию кластера. Порт по умолчанию — 1541. - ⚙️ Рабочие процессы (
rphost) — исполняют код конфигурации и обращаются к СУБД. Порты по умолчанию — из диапазона 1560-1591.
Основная нагрузка ложится на рабочие процессы. Именно они проводят документы, формируют отчёты и выполняют регламентные задания.
Что ещё берёт на себя сервер:
- Исполнение процедур с директивой
&НаСервереи серверных общих модулей. - Управляемые блокировки: пользователь не затирает чужие данные.
- Фоновые и регламентные задания: обмены, закрытие месяца по расписанию.
- Единое подключение к СУБД вместо сотни подключений от каждого клиента.
- Масштабирование: несколько рабочих процессов, а при необходимости несколько серверов в одном кластере.
Сама база при этом остаётся в СУБД: PostgreSQL, Microsoft SQL Server и других поддерживаемых. Сервер 1С — прослойка между пользователем и СУБД.
Клиентские приложения: толстый, тонкий, веб
Клиент — это не одно приложение, а три варианта запуска.
| Клиент | Исполняемый файл | Когда выбирают |
|---|---|---|
| Тонкий | 1cv8c | Основной вариант для рабочих мест при клиент-серверной работе |
| Толстый | 1cv8 | Конфигуратор, работа с файловой базой, редкие задачи |
| Веб-клиент | Браузер | Работа без установки платформы, доступ из дома |
Тонкий клиент подключается к серверу по сети и выполняет только клиентскую часть. Он легче и быстрее ставится, но работает с управляемыми формами и не открывает Конфигуратор.
Толстый клиент умеет больше: открывает файловые базы напрямую, работает с обычными формами и запускает Конфигуратор. Конфигуратор запускается через него. Нагрузка на машину пользователя выше.
Веб-клиент работает через опубликованную на веб-сервере базу. На компьютере нужен только браузер. Публикация делается на Apache или IIS, подробности — в разделе про администрирование.
Клиент всегда отвечает за:
- отрисовку форм и обработку нажатий;
- локальные операции: диалоги выбора файла, печать, работу с оборудованием;
- вызовы сервера и показ его ответов.
Если пользователю нужен Конфигуратор, тонкий клиент не подойдёт. Режим «Конфигуратор» запускается из толстого клиента.
Как клиент и сервер обмениваются данными
Каждое обращение к серверу — это вызов по сети. Пользователь нажал кнопку, клиентская процедура отправила запрос, сервер выполнил код и вернул результат.
В управляемых формах код делится по контекстам:
&НаКлиенте— выполняется на машине пользователя;&НаСервере— выполняется на сервере, контекст формы передаётся целиком;&НаСервереБезКонтекста— выполняется на сервере, но без передачи данных формы.
Разница между последними двумя заметна по скорости. Вызов с контекстом тащит в запрос все реквизиты формы, а вызов без контекста передаёт только явные параметры.
Пример: нужно получить курс валюты на дату.
&НаКлиенте
Процедура ПолучитьКурс(Команда)
Курс = ПолучитьКурсНаСервере(Объект.Валюта, Объект.Дата);
Сообщить("Курс: " + Курс);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьКурсНаСервере(Валюта, Дата)
Возврат РаботаСКурсамиВалют.ПолучитьКурсВалюты(Валюта, Дата).Курс;
КонецФункции
Что стоит помнить про передачу данных:
- 📦 Через границу клиент-сервер проходят примитивные типы, ссылки, структуры, массивы и соответствия из них. Объекты базы целиком (например,
ДокументОбъект) через эту границу не передаются. - 🐌 Каждый вызов сервера стоит времени сети. Сто вызовов в цикле заметно медленнее одного вызова с массивом.
- 🔁 Лучше собрать данные на клиенте в структуру, одним вызовом отправить на сервер и там обработать.
Типичный признак плохой архитектуры — медленная форма списка, где при открытии строки по одной читаются данные с сервера. Решение: читать пачкой в одном серверном вызове.
Ресурсы: что нагружает клиента, а что сервер
Нагрузка делится по ролям, и это определяет, на чём экономить, а на чём нет.
| Параметр | Клиент | Сервер приложений |
|---|---|---|
| Память | Хватает умеренного объёма, нагрузка растёт с числом открытых окон | Основной расход: каждый сеанс держит данные в рабочем процессе |
| Процессор | Отрисовка форм | Исполнение кода, проведение, отчёты |
| Диск | Кэш и временные файлы | Быстрые диски нужны СУБД, а не самому серверу 1С |
| Сеть | Задержка важнее пропускной способности | Нужен быстрый канал до СУБД |
Практические ориентиры, они приблизительные и зависят от конфигурации:
- на рабочее место с тонким клиентом хватает обычного офисного компьютера;
- для сервера ориентируйтесь на несколько сотен мегабайт памяти на активный сеанс плюс запас под СУБД;
- сервер 1С и СУБД лучше развести по разным машинам, когда пользователей больше нескольких десятков;
- главное для скорости работы — быстрая связь между сервером 1С и СУБД.
Если «тормозит» у одного пользователя, а у остальных нормально, смотрите на клиента и его сеть. Если медленно у всех одновременно — на сервер, СУБД и блокировки.
Установка: что ставить на клиент, а что на сервер
Платформа 1С ставится одним установщиком, но компоненты выбираются в окне установки.
На сервере ставят компонент «Сервер 1С:Предприятия». После установки появляется служба «Агент сервера 1С:Предприятия 8.3», которую нужно запустить. СУБД ставится отдельно.
На рабочем месте нужен клиент: тонкий или толстый, в зависимости от задач. Серверный компонент пользователю не нужен.
Порядок для нового сервера:
- Установите СУБД и убедитесь, что она принимает подключения.
- Установите на сервер платформу с серверным компонентом.
- Запустите службу агента сервера.
- Создайте кластер и информационную базу в консоли администрирования серверов.
- Подключите клиентов, указав имя сервера и имя базы.
Строка подключения тонкого клиента
к серверной базе выглядит так: имя сервера, затем имя базы в кластере. Например, srv-1c и buh.
Клиент и сервер должны быть одной версии платформы по первым трём числам номера: у 8.3.24.1548 и 8.3.24.1700 это 8.3.24, они совместимы. Клиент с другой веткой, например 8.3.25, к такому серверу не подключится, и платформа предложит обновить клиентскую часть.
Администрирование: на что смотреть
Администрирование сервера и администрирование клиента — разные задачи.
На стороне сервера:
- консоль кластера: сеансы, соединения, блокировки, рабочие серверы;
- утилита
racи сервисrasдля работы из командной строки (подробнее —rac help); - ограничения на память рабочих процессов;
- резервное копирование через средства СУБД, а не копированием файлов;
- права доступа к кластеру и базам.
На стороне клиента:
- список баз в окне запуска;
- очистка локального кэша при странном поведении форм (параметр командной строки
/ClearCache); - настройки веб-публикации, если используется браузер.
Завершение сеансов, перезапуск службы агента сервера или сброс кэша кластера обрывают работу пользователей. Выполняйте такие действия вне рабочего времени и заранее предупредите людей, иначе несохранённые документы пропадут.
Для веб-клиента на сервере публикации нужен веб-сервер (Apache или IIS). Публикацию выполняют из Конфигуратора через меню администрирования, там же выбирается папка и имя виртуального каталога.
Что выбрать: файловый режим или клиент-сервер
Подсказка по выбору:
Мини-кейс: форма открывается 12 секунд
Бухгалтер жалуется, что список документов открывается долго. Администратор первым делом проверяет, где тратится время: на клиенте или на сервере.
Порядок диагностики:
- Откройте ту же форму под другим пользователем с другого компьютера. Если медленно только у одного, дело в его машине или сети.
- Проверьте, нет ли у пользователя огромного кэша и десятков открытых окон. Закройте лишние и перезапустите клиент.
- Если медленно у всех, посмотрите в консоли кластера, сколько сеансов висит на рабочем процессе и нет ли долгих блокировок.
- Проверьте задержку между сервером 1С и СУБД. Даже небольшая задержка на каждом из сотен мелких запросов складывается в секунды.
- Если форма читает данные построчно, ищите в коде вызовы сервера внутри цикла.
В этом примере причина оказалась в цикле: на каждую строку списка форма вызывала сервер за остатком товара. Сто строк, сто обращений по сети. После переноса расчёта в один серверный вызов с массивом на выходе форма открылась за секунду.
Где граница: что можно и нельзя переносить на сервер
Соблазн «выполнить всё на сервере» понятен, но у серверного кода есть ограничения.
- 🚫 Сервер не показывает диалоги и не вызывает окна пользователю. Вопросы пользователю задаёт только клиентский код.
- 🚫 Серверный код не работает
с файлами на компьютере пользователя: путь
C:\Users\...на сервере указывает на диск самого сервера. - 🚫 Оборудование (сканеры, фискальные регистраторы) подключено к рабочему месту, поэтому им управляет клиент.
- ✅ Запросы к базе, проведение, расчёты, формирование отчётов, обмены — это работа сервера.
Если коротко: всё, что связано с экраном, клавиатурой и устройствами пользователя, — клиент. Всё, что работает с данными базы, — сервер.
Хорошее правило при разработке: клиентский код пишите как можно тоньше, а тяжёлую логику выносите в серверные процедуры и вызывайте их одним обращением.