Как устроен клиент-серверный вариант 1С:Предприятия 8.3 и что в нём настраивают
Содержание
В клиент-серверном варианте 1С база лежит в СУБД (MS SQL Server или PostgreSQL), а между пользователями и СУБД стоит сервер 1С:Предприятия. Клиент на рабочем месте только показывает формы и шлёт вызовы; запросы, проведение документов и запись данных выполняет сервер. Клиент к СУБД напрямую никогда не подключается.
Отсюда вся разница с файловым режимом, где в роли «сервера» выступает сам клиент, читающий файл 1Cv8.1CD по сети. Клиент-серверная архитектура 1С нужна, когда в базе работают десятки пользователей, база перевалила за несколько гигабайт или нужен доступ из филиалов.
Чем клиент 1С отличается от сервера и где выполняется код
Любой модуль конфигурации на управляемых формах делится директивами компиляции. Код с &НаКлиенте работает на компьютере пользователя, код с &НаСервере и &НаСервереБезКонтекста — в рабочем процессе сервера 1С. Каждый переход с клиента на сервер — это серверный вызов: пакет данных по сети туда и обратно.
Что делает каждая сторона:
- 🖥️ Клиент — рисует интерфейс, хранит данные открытой формы, проверяет заполнение полей до записи, работает с локальными файлами и оборудованием (сканеры, принтеры чеков).
- ⚙️ Сервер 1С — выполняет запросы, проводит документы, держит управляемые блокировки, считает итоги регистров, запускает регламентные и фоновые задания.
- 🗄️ СУБД — хранит таблицы, выполняет SQL-запросы, которые сервер 1С строит из запросов на встроенном языке, ведёт журнал транзакций.
| Признак | Файловый вариант | Клиент-серверный вариант |
|---|---|---|
| Где хранятся данные | Файл 1Cv8.1CD в папке | Отдельная база в СУБД |
| Кто выполняет запросы | Процесс клиента у каждого пользователя | Рабочий процесс rphost на сервере |
| Блокировки | На уровне всей таблицы | Управляемые, на уровне записей |
| Резервная копия | Копия файла или выгрузка .dt | Средства СУБД, без остановки работы |
| Комфортное число пользователей | Примерно до 10–15 | Десятки и сотни |
| Регламентные задания | Только пока открыт клиент | Выполняет сервер, клиенты не нужны |
Перевести базу из файлового режима в клиент-серверный можно без программиста: выгрузить .dt в Конфигураторе (Администрирование → Выгрузить информационную базу), создать базу в кластере и загрузить туда файл. Код конфигурации менять не нужно.
Какие бывают клиенты 1С и когда какой выбрать
Платформа 8.3 ставит на рабочее место несколько исполняемых файлов. Все они умеют работать с базой на сервере, но ведут себя по-разному.
| Клиент | Файл / способ | Что умеет | Когда выбирать |
|---|---|---|---|
| Толстый клиент | 1cv8.exe | Управляемое и обычное приложение, Конфигуратор | Старые конфигурации на обычных формах, работа программиста |
| Тонкий клиент | 1cv8c.exe | Только управляемое приложение | Основной вариант для БП 3.0, ЗУП 3.1, УТ 11 |
| Веб-клиент | Браузер | Управляемое приложение без установки платформы | Удалённые сотрудники, редкий доступ |
| Мобильный клиент | Приложение на телефоне | Управляемые формы, адаптированные под экран | Работа «в поле» |
Толстый клиент
Толстый клиент содержит почти всю платформу. В режиме обычного приложения он исполняет на своей стороне объектную модель: объект справочника можно получить и прочитать прямо в клиентском коде, а платформа сама пересылает нужные обращения на сервер. Из-за этого толстый клиент гоняет по сети больше данных и плохо переносит медленные каналы.
Конфигуратор — это тоже режим толстого клиента: 1cv8.exe DESIGNER.
Тонкий клиент
Тонкий клиент не умеет исполнять серверный код вовсе. Он получает от сервера описание формы и данные, показывает их и отправляет назад действия пользователя. Дистрибутив меньше, трафика меньше, и он нормально работает даже через VPN с задержкой в десятки миллисекунд.
Веб-клиент
Веб-клиенту нужна публикация базы на веб-сервере (IIS или Apache) с модулем расширения веб-сервера 1С. Браузер общается с веб-сервером по HTTP(S), а тот — с кластером 1С. Функциональность почти как у тонкого клиента , но работа с локальными файлами и оборудованием ограничена возможностями браузера.
Версия клиента и сервера должна совпадать до последней цифры сборки. Тонкий клиент 8.3.24.1691 не подключится к серверу 8.3.24.1586. При обновлении сервера сначала решите, как обновятся рабочие места: автоматически при подключении или через общую папку дистрибутива.
Сервер 1С изнутри: агент, менеджер кластера и процессы rphost
Сервер 1С:Предприятия — не одна программа, а набор процессов. Их видно в диспетчере задач Windows или командой ps в Linux.
| Процесс | Порт по умолчанию | Роль |
|---|---|---|
ragent — агент сервера | 1540 | Точка входа: принимает первое подключение, хранит список кластеров, запускает остальные процессы |
rmngr — менеджер кластера | 1541 | Хранит реестр баз и сеансов, распределяет клиентов по рабочим процессам, ведёт службы кластера |
rphost — рабочий процесс | 1560–1591 | Выполняет код конфигурации и запросы, держит соединения с СУБД |
ras — сервер администрирования | 1545 | Нужен для утилиты rac и сторонних консолей |
Путь подключения клиента
- Клиент обращается к агенту сервера по порту 1540.
- Агент передаёт его менеджеру кластера (порт 1541).
- Менеджер выбирает рабочий процесс и сообщает клиенту его адрес и порт из диапазона.
- Дальше клиент общается напрямую с
rphost.
Консоль администрирования тоже ходит через агент. Поэтому, когда «консоль видит сервер, а клиенты не подключаются», почти всегда закрыт диапазон портов рабочих процессов, а не 1540.
Кластер и рабочие серверы
Кластер — логическая единица: в нём регистрируются базы, и он может состоять из нескольких физических машин, рабочих серверов. Диапазон портов рабочих процессов, лимиты памяти и требования назначения функциональности задаются в свойствах рабочего сервера, а не кластера. Требования назначения позволяют, например, вынести регламентные задания на отдельную машину.
Сколько процессов rphost поднимется, сервер решает сам, исходя из настроек рабочего сервера: числа баз и соединений на процесс. Один процесс обслуживает много сеансов, поэтому 50 пользователей не означают 50 процессов.
Служба и её параметры
Сервер ставится как служба Windows (1C:Enterprise 8.3 Server Agent с указанием разрядности) или как сервис systemd в Linux. Параметры запуска агента видны в свойствах службы в строке «Исполняемый файл»:
"C:\Program Files\1cv8\8.3.24.1691\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
Здесь -port — порт агента, -regport — порт главного менеджера кластера, -range — диапазон портов, -d — каталог srvinfo с реестром кластера и сеансовыми данными. Ключ -debug включает отладку на сервере; на боевом сервере без нужды его не держат.
Сервер 1С и СУБД: кто с кем разговаривает
Связь с базой данных держат только рабочие процессы. Когда пользователь проводит документ, rphost превращает запрос встроенного языка в SQL, открывает транзакцию в СУБД, пишет движения и фиксирует транзакцию. Клиенту СУБД не видна вовсе: на рабочем месте не нужны ни драйверы, ни логин к SQL Server.
Что поддерживает платформа 8.3:
- 🟦 Microsoft SQL Server — привычный выбор под Windows;
- 🐘 PostgreSQL — сборки с патчами для 1С (от фирмы 1С и от Postgres Professional);
- 🟧 IBM Db2 и Oracle Database — встречаются редко, в крупных компаниях.
Как регистрируют базу в кластере
В консоли кластера на ветке Информационные базы создают новую базу. Указывают:
- имя базы в кластере — его потом вводят клиенты;
- тип СУБД и адрес сервера СУБД (
localhost, если он на той же машине); - имя базы в СУБД и пользователя СУБД с правом создавать базы;
- смещение дат (для MS SQL обычно 2000) и флажок создания базы, если её ещё нет.
Одна машина или две
Сервер 1С и СУБД можно ставить на одну машину или разнести. На одной машине нет сетевых задержек между rphost и СУБД: для MS SQL это особенно заметно на коротких запросах. Но тогда они делят память — и SQL Server по умолчанию стремится занять почти всю ОЗУ.
Ограничьте память СУБД вручную. В MS SQL это параметр «Максимальный объём памяти сервера» в свойствах экземпляра. Оставьте процессам rphost и системе запас: на машине с 64 ГБ под SQL Server обычно отдают 40–48 ГБ, остальное — серверу 1С и ОС.
Порты, файрвол и строка подключения
Минимальный набор портов на сервере 1С, которые нужно открыть для входящих подключений от клиентов:
| Порт | Кому нужен |
|---|---|
| 1540 | Агент сервера: клиенты и консоль |
| 1541 | Менеджер кластера |
| 1560–1591 | Рабочие процессы (или ваш диапазон из свойств рабочего сервера) |
| 1545 | Только если используете ras/rac удалённо |
| 1433 / 5432 | Порт MS SQL / PostgreSQL — только между сервером 1С и сервером СУБД, клиентам не нужен |
Пример правил Windows Firewall из командной строки администратора:
netsh advfirewall firewall add rule name="1C agent and manager" dir=in action=allow protocol=TCP localport=1540-1541
netsh advfirewall firewall add rule name="1C rphost" dir=in action=allow protocol=TCP localport=1560-1591
Добавление базы на рабочем месте
В окне запуска нажмите «Добавить» → «Добавление в список существующей информационной базы» → вариант «На сервере 1С:Предприятия». Заполните два поля: кластер серверов (имя машины) и имя базы в кластере. В строке подключения это выглядит так:
Srvr="srv-1c";Ref="buh";
Если порт кластера изменён, его пишут через двоеточие: Srvr="srv-1c:1741"; — указывается порт менеджера кластера, а не агента.
Имя сервера должно резолвиться
Это главный приём, который спасает при «необъяснимых» отказах. Менеджер кластера сообщает клиенту адрес рабочего процесса по имени компьютера, а не по IP. Если клиент не может разрешить это имя (нет общего DNS, подключение через VPN, сервер в другом домене), соединение рвётся уже после ответа агента.
Решение — добавить строку в C:\Windows\System32\drivers\etc\hosts на рабочем месте:
10.0.5.20 srv-1c
Имя должно совпадать с тем, под которым рабочий сервер зарегистрирован в кластере, — его видно в консоли в ветке «Рабочие серверы».
Производительность клиент-серверной 1С: где теряется скорость
Тормоза в клиент-серверной базе почти всегда находятся в одном из трёх мест: сеть между клиентом и сервером, сервер 1С или СУБД. Сначала поймите, где именно, и только потом лечите.
- 🌐 Сеть клиент — сервер. Много серверных вызовов на каждое действие. Каждый вызов через VPN с задержкой 40 мс съедает эти 40 мс. Форма, которая делает 15 вызовов при открытии, открывается больше полсекунды только из-за сети.
- 🧠 Сервер 1С. Процессы
rphostупираются в память или процессор, работают долгие фоновые задания, разрастаются сеансовые данные. - 🗄️ СУБД. Устаревшая статистика, фрагментированные индексы, ожидание блокировок, медленный диск под журналом транзакций.
Что делают в первую очередь
- Обслуживание СУБД. Для MS SQL — регулярное обновление статистики и перестроение индексов планом обслуживания (обычно ночью). Для PostgreSQL — проверка работы
autovacuumиANALYZE. - Лимиты памяти рабочего сервера. В свойствах рабочего сервера задают максимальный объём памяти рабочих процессов и безопасный расход памяти за один вызов. Второй параметр не даёт одному тяжёлому отчёту «положить» весь процесс вместе с чужими сеансами.
- Технологический журнал. Файл
logcfg.xmlв каталогеconfплатформы включает сбор событий: долгие запросы (DBMSSQL), ожидания на блокировках (TLOCK,TTIMEOUT), взаимоблокировки (TDEADLOCK). Без журнала поиск тормозов превращается в гадание. - Сокращение серверных вызовов в доработках. Логику, которой не нужна форма, выносят в
&НаСервереБезКонтекста: тогда на сервер не передаются данные формы.
Типичные ошибки подключения к серверу 1С и их причины
| Текст ошибки | Частая причина | Что проверить |
|---|---|---|
Сервер 1С:Предприятия не обнаружен | Служба агента не запущена или закрыт порт 1540 | Статус службы, Test-NetConnection srv-1c -Port 1540 |
Не удается установить соединение, т.к. конечный компьютер отверг запрос на подключение | Закрыт диапазон 1560–1591 или не резолвится имя сервера | Правила файрвола, файл hosts |
Информационная база не обнаружена | Опечатка в имени базы в кластере | Имя в ветке «Информационные базы» консоли |
Различаются версии клиента и сервера | Обновили сервер, но не клиентов | Номер сборки на рабочем месте и на сервере |
Не найдена лицензия | Нет свободных клиентских лицензий на сервере | Число сеансов и выданных лицензий: rac session list --licenses |
Консоль кластера не открывается
Если оснастка «Администрирование серверов 1С Предприятия» пишет, что не может создать объект, после обновления платформы нужно перерегистрировать библиотеку консоли той же версии, что и сервер. Командная строка от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.24.1691\bin\radmin.dll"
Очистка сеансовых данных кластера
При странных зависаниях сеансов практики очищают сеансовые данные в каталоге srvinfo: останавливают службу агента, удаляют папки snccntx* внутри каталога кластера и запускают службу снова. Файлы реестра кластера (1CV8Clst.lst, 1CV8Reg.lst) не трогают.
Остановка службы сервера 1С обрывает все сеансы пользователей и фоновые задания. Несохранённые данные пропадут. Делайте это вне рабочего времени, предупредив пользователей, и только после резервного копирования каталога srvinfo.