При работе с базами данных 1С, опубликованными на веб-сервере (Apache или IIS), системные администраторы и разработчики часто сталкиваются со специфической проблемой. Тонкий клиент 32-разрядной архитектуры запускается без нареканий, однако при попытке форсировать запуск 64-разрядного клиента той же версии возникает критическая ошибка: "HTTP: Conflict. Несоответствие версий клиента и сервера 1С:Предприятия". При этом версии, указанные в ошибке, могут явно свидетельствовать о том, что система пытается запустить совершенно другой релиз платформы, установленный на компьютере пользователя.
В этой статье мы подробно проанализируем, почему стандартный механизм запуска 1cestart.exe может давать сбой, разберем причины возникновения конфликта версий через веб-сервер и предложим несколько эффективных способов решения этой задачи.
Для начала проанализируем ситуацию, описанную в обращении. На сервере установлена платформа 8.3.19.1522, база опубликована через 64-битный Apache. На клиентском компьютере установлены две версии платформы: 8.3.19.1522 (нужная) и более свежая 8.3.21.1302. Когда пользователь выбирает в настройках запуска разрядность "64 (x86_64)", стартер вместо того, чтобы запустить 8.3.19.1522 x64, по какой-то причине инициирует запуск 8.3.21.1302 x64.
В момент обращения к веб-серверу происходит следующее: клиентское приложение сообщает свою версию (8.3.21.1302), а серверное расширение 1С (wsap24.dll), работающее на платформе 8.3.19.1522, видит несоответствие и возвращает статус 409 Conflict. Это стандартное поведение системы защиты целостности данных 1С: версии ядра клиента и сервера при работе через веб-сервер должны совпадать до последнего знака.
Выясним причину, почему стартер игнорирует настройки. Проблема кроется в алгоритме выбора версии внутри 1cestart.exe. При подключении через http:// стартер сначала опрашивает веб-сервер, получает информацию о требуемой версии, а затем ищет ее на локальном диске. В ряде релизов платформы 8.3 наблюдается баг: при наличии нескольких установленных версий и явном указании разрядности x64, стартер может ошибочно отдавать приоритет самому последнему установленному в системе 64-битному релизу, игнорируя ответ от веб-сервера.
Прежде чем вносить изменения в настройки, проанализируем, корректно ли установлены сами компоненты платформы. Нам необходимо убедиться, что 64-разрядный тонкий клиент нужной версии вообще работоспособен. Для этого выполним запуск исполняемого файла напрямую, минуя программу выбора баз.
C:\Program Files\1cv8\8.3.19.1522\bin\.1cv8c.exe (это исполняемый файл тонкого клиента).Если же прямой запуск из папки Program Files (не x86!) выдает ту же ошибку, следует проверить, действительно ли у вас установлена 64-битная версия тонкого клиента для данного релиза. Часто пользователи устанавливают "Тонкий клиент" по умолчанию, который в старых дистрибутивах был только 32-битным.
Если мы хотим продолжать использовать стандартное окно 1cestart.exe, мы можем попробовать переопределить поведение стартера через дополнительные параметры командной строки. Рассмотрим этот метод подробнее.
В окне списка информационных баз выделите нужную базу, нажмите "Изменить" и перейдите на последнюю вкладку. В поле "Дополнительные параметры запуска" введите следующую строку:
/RunModeThinClient /AppArchitecture x86_64
Параметр /RunModeThinClient жестко указывает системе использовать тонкий клиент, а /AppArchitecture x86_64 заставляет стартер искать именно 64-разрядную версию. Однако, как показывает практика, при багах в логике стартера даже это не всегда помогает при работе через веб-сервер, так как приоритет поиска версий в реестре Windows может быть искажен.
Это самый надежный способ обойти ошибки "умного" выбора версий. Мы создаем ярлык, который сразу обращается к нужному двоичному файлу конкретной версии и передает ему адрес веб-публикации. Проанализируем пример строки запуска для ярлыка:
"C:\Program Files\1cv8\8.3.19.1522\bin\1cv8c.exe" ENTERPRISE /S "server.com\my_base" /AppArchitecture x86_64
Разберем параметры этого метода:
Используя такой подход, вы полностью исключаете участие 1cestart.exe в процессе выбора версии, что гарантирует стабильность подключения.
В некоторых случаях, например, для автоматизации работы или обхода ограничений прав доступа, можно использовать запуск через встроенный язык 1С. Рассмотрим пример кода, который позволяет запустить клиентское приложение с нужными параметрами. Этот метод часто применяется в административных целях.
Процедура ЗапуститьТонкийКлиентХ64()
Кавычка = """";
КаталогBIN = "C:\Program Files\1cv8\8.3.19.1522\bin\"; // Путь к нужной версии
СтрокаСоединения = "http://webserver/base_name";
СтрокаЗапуска = Кавычка + КаталогBIN + "1cv8c.exe" + Кавычка
+ " ENTERPRISE /WS " + Кавычка + СтрокаСоединения + Кавычка
+ " /AppArchitecture x86_64";
ЗапуститьПриложение(СтрокаЗапуска);
КонецПроцедуры
Здесь мы используем метод ЗапуститьПриложение. Обратите внимание на использование параметра /WS, который предназначен именно для указания адреса веб-сервиса (Web Service/Web Station). Это позволяет жестко связать конкретный исполняемый файл 1cv8c.exe с конкретным URL-адресом базы.
Если проблема носит массовый характер, проанализируем состояние системы. Часто "глюки" стартера связаны с тем, что на компьютере скопилось слишком много версий 1С, установленных в разные каталоги (например, часть в Local AppData, часть в Program Files). Рассмотрим шаги по очистке:
1cescmn.cfg в папке C:\Program Files\1cv8\common\. Убедитесь, что там не прописан параметр DefaultArchitecture=x86, который может принудительно занижать разрядность.%AppData%\1C\1CEStart%LocalAppData%\1C\1cv8Важный момент: При установке 1С убедитесь, что вы выбрали установку 64-битных компонентов. В окне выбора компонентов это отдельный пункт "64-битный тонкий клиент". Если он не установлен, то даже при наличии установленного 64-битного сервера, клиент на этой машине будет пытаться запуститься в 32-битном режиме.
Проанализировав ситуацию, можно прийти к выводу, что это баг механизма автоопределения версии в 1cestart.exe при работе по протоколу HTTP. В обычном режиме (клиент-сервер через порт 1541) стартер работает гораздо стабильнее. При работе через веб-сервер механизм "проброса" требуемой версии от сервера к стартеру иногда отрабатывает раньше, чем стартер успевает применить фильтр по разрядности.
Если вам не критично использование именно 64-разрядного клиента (например, вы не работаете с огромными файлами или сложными внешними компонентами, требующими x64), самым простым решением будет использование 32-разрядного клиента. Он потребляет меньше оперативной памяти и гораздо стабильнее подхватывается стартером при работе через веб-сервер. Если же x64 необходим — используйте прямой запуск через ярлык к конкретной версии bin\1cv8c.exe, это избавит вас от необходимости постоянно бороться с ошибкой несоответствия версий.