В практике администрирования систем на базе «1С:Предприятие 8» часто возникает классическая дилемма: на сервере работает стабильная, давно не обновлявшаяся конфигурация (например, старая редакция «Управления торговлей»), платформу которой трогать крайне нежелательно во избежание сбоев. В то же время на этом же сервере необходимо развернуть новую или активно обновляемую базу (например, «Бухгалтерию предприятия»), которая регулярно требует установки самых свежих релизов платформы 1С.
В этой статье мы подробно разберем, допускает ли архитектура 1С совместную работу разных версий клиента и сервера, почему возникает иллюзия их совместимости, и как правильно решить эту задачу на практике без вреда для стабильности системы.
Давайте проанализируем базовые принципы взаимодействия компонентов платформы. При прямом клиент-серверном подключении по проприетарному протоколу TCP/IP действует жесткое, не подлежащее обходу архитектурное правило: версии клиентского приложения и сервера 1С должны совпадать абсолютно, вплоть до последнего знака номера сборки (релиза).
Рассмотрим конкретный пример. Если на сервере развернута служба «1С:Предприятия» версии 8.3.22.1709, то подключиться к ней напрямую сможет только клиентское приложение версии 8.3.22.1709. Если вы попытаетесь использовать даже максимально близкую версию, например 8.3.22.1704 или 8.3.22.1812, система незамедлительно заблокирует подключение и выдаст штатную системную ошибку:
«Несоответствие версий клиента и сервера (клиент: X.X.X.X, сервер: Y.Y.Y.Y)»
Никакой обратной или прямой совместимости между различными релизами исполняемых файлов в рамках прямого TCP-соединения разработчиками из компании 1С не заложено. Это обусловлено тем, что при каждом изменении релиза могут меняться внутренние структуры данных, форматы сериализации объектов и механизмы удаленного вызова процедур (RPC) между процессами 1cv8.exe (клиент) и rphost.exe (рабочий процесс сервера).
Иногда у системных администраторов или пользователей возникает ложное ощущение, что разные версии все-таки могут работать вместе. Например, когда на рабочем месте установлена новая платформа (например, 8.3.11), но подключение к серверу со старой платформой (например, 8.3.9) проходит успешно, а в окне «О программе» пользователь видит актуальный новый релиз.
Давайте выясним причину этого феномена. Здесь срабатывает встроенный интеллектуальный механизм утилиты запуска 1С:
1cestart.exe.8.3.9, и новая 8.3.11), стартер анализирует требования сервера, незаметно для пользователя находит на локальном диске исполняемый файл старой версии 8.3.9\bin\1cv8.exe и запускает именно его.8.3.9), а не та, которую администратор установил последней. Запустить исполняемый файл тонкого или толстого клиента версии 8.3.11 и подключить его напрямую к рабочему процессу rphost версии 8.3.9 технически невозможно.Единственным сценарием, позволяющим абстрагироваться от ручной установки нужных версий платформы на компьютеры пользователей, является публикация баз данных на веб-сервере (под управлением Apache или IIS). Здесь возможны два варианта работы:
1. Веб-клиент (запуск через браузер)
Пользователи открывают базу данных через обычный интернет-браузер (Chrome, Firefox, Safari, Edge). В этом случае на компьютере пользователя платформа 1С может вообще отсутствовать. Однако помните, что модуль расширения веб-сервера (например, wsap24.dll для Apache), который осуществляет связь веб-сервера с кластером 1С, должен строго соответствовать версии самого сервера 1С.
2. Автоматическое обновление Тонкого клиента
Если пользователи работают через локально установленный Тонкий клиент, но подключаются к базе по протоколу HTTP/HTTPS через веб-сервер, система умеет автоматически контролировать версии. При обнаружении несоответствия версий Тонкий клиент не просто выдаст ошибку, а автоматически скачает с веб-сервера необходимый дистрибутив нужной версии, установит его в фоновом режиме и перезапустит сеанс. Для реализации этого сценария администратор должен предварительно настроить параметры в файле conf.cfg на сервере, указав путь к дистрибутивам в параметрах PublishDistributiveLocation.
Если вам жизненно необходимо держать на одном физическом сервере (или виртуальной машине) базы данных, требующие принципиально разных версий платформы 1С, единственным надежным техническим решением является параллельный запуск нескольких служб сервера 1С разных версий.
Давайте подробно, по шагам, разберем процесс настройки такой схемы на примере операционной системы Windows.
Предположим, у нас уже успешно работает старая служба сервера 1С (версии 8.3.19.XXXX) на стандартных портах. Нам необходимо параллельно запустить новую службу (версии 8.3.22.XXXX) для баз БП.
Установите новую версию платформы 1С на сервер стандартным установщиком. При установке на этапе выбора компонентов снимите галочку с пункта «Установить сервер 1С:Предприятия как службу Windows», чтобы установщик не затер настройки вашей текущей рабочей службы.
Стандартная служба 1С использует следующие сетевые порты:
Для второй службы нам необходимо выделить другой свободный пул портов. Рекомендуется использовать следующую схему смещения (например, на тысячу вверх):
Для создания новой независимой службы воспользуемся утилитой командной строки Windows sc.exe. Запустите командную строку (cmd) обязательно с правами Администратора и выполните команду создания службы.
Обратите внимание на синтаксис команды: после каждого знака равенства (=) обязательно должен идти пробел!
sc create "1C:Enterprise 8.3.22.1709 Server" binPath= "\"C:\Program Files\1cv8\8.3.22.1709\bin\ragent.exe\" -srvc -agent -regport 2541 -port 2540 -range 2560:2591 -d \"C:\ProgramData\1C\1cv8_custom_cluster\"" start= auto obj= "NT AUTHORITY\SYSTEM"
Разберем ключевые параметры этой команды подробнее:
"1C:Enterprise 8.3.22.1709 Server" — понятное имя службы, которое будет отображаться в консоли services.msc.-srvc — указывает, что процесс запускается именно в режиме службы Windows.-agent — запускает процесс в режиме агента сервера.-regport 2541 — порт главного менеджера кластера (по умолчанию 1541).-port 2540 — порт агента сервера (по умолчанию 1540).-range 2560:2591 — диапазон портов, которые будут динамически выделяться под рабочие процессы rphost.-d "C:\ProgramData\1C\1cv8_custom_cluster" — путь к отдельному каталогу, где новая служба будет хранить список баз, настройки кластера и файлы журналов регистрации. Крайне важно указать отличный от стандартного каталог, иначе службы начнут перезаписывать настройки друг друга!Перед запуском созданной службы убедитесь, что у учетной записи, от имени которой она будет работать (в нашем примере это локальная система SYSTEM, но в продакшене лучше использовать выделенную доменную или локальную учетную запись типа USR1CV8), есть полные права на чтение и запись в каталог реестра новой службы (в нашем примере: C:\ProgramData\1C\1cv8_custom_cluster).
Откройте оснастку «Службы» (services.msc), найдите созданную службу, проверьте тип запуска (должен быть «Автоматически») и нажмите кнопку «Запустить».
Чтобы управлять новым сервером, вам потребуется зарегистрировать его в утилите администрирования серверов 1С:
2540).При добавлении информационной базы в список запуска у пользователей старой конфигурации (УТ) настройки подключения остаются прежними. А для пользователей новой конфигурации (БП) при указании адреса сервера в окне добавления базы необходимо явно прописать порт подключения:
Имя_Сервера_1С:2541
Обратите внимание: мы указываем именно порт главного менеджера кластера (2541), а не порт агента (2540).
Рассматривая совместную работу нескольких версий платформ на одном физическом сервере, нельзя обойти стороной проблему использования COM-соединений. Эта проблема неизбежно возникает, когда настроен прямой автоматический обмен данными между базами разных версий (например, регламентный обмен данными между нашей «Управлением торговлей» на старой платформе и «Бухгалтерией» на новой платформе).
При инициализации COM-соединения Windows обращается к системному реестру для поиска зарегистрированного класса V83.COMConnector. Проблема заключается в том, что в операционной системе Windows в один момент времени может быть зарегистрирована только одна библиотека COM-соединителя (последней установленной вами версии платформы).
Если внешнее соединение пытается подключиться к серверу 1С другой версии, отличной от зарегистрированной в реестре библиотеки, система выдаст ошибку несоответствия версий. Чтобы обойти это ограничение, мы рекомендуем настроить запуск COM-соединения в изолированном режиме «out-of-process» через Службу компонентов Windows (COM+):
dcomcnfg из строки «Выполнить»).comcntr.dll из каталога bin той версии платформы 1С, к которой планируется выполнять подключение.Такой подход позволит корректно маршрутизировать вызовы COM-объектов разных версий без возникновения конфликтов в реестре операционной системы.