Перевод информационной базы 1С:Предприятие 8 на клиент-серверный вариант работы часто сопровождается возникновением технических сложностей, которые не проявлялись в файловом режиме. Одной из наиболее острых проблем является отказ работы механизмов интеграции с устаревшими системами, такими как 1С 7.7, через COM-соединение. Если на клиенте код Новый COMОбъект("V77s.Application") отрабатывает корректно, а на сервере вызывает ошибку, это сигнализирует о глубоких различиях в архитектуре выполнения процессов и правах доступа. Разберем по шагам, почему это происходит и как восстановить работоспособность обмена.
Проанализируем архитектурную составляющую. Программа 1С 7.7 является строго 32-битным приложением. Если ваш сервер 1С:Предприятие 8.3 установлен в 64-битной редакции, он работает в соответствующем адресном пространстве. Прямой вызов 32-битной библиотеки из 64-битного процесса невозможен на уровне операционной системы Windows. Сервер просто «не видит» зарегистрированный класс V77s.Application в нужной ветке реестра или не может его инициализировать.
Чтобы решить эту проблему, мы должны использовать прослойку — Службы компонентов (COM+). Рассмотрим процесс настройки этой прослойки:
1C77_COM.comcntr.dll (или v77.cls) из каталога BIN установленной 1С 7.7.После этой настройки 64-битный сервер 1С 8.3 сможет обращаться к объекту через систему RPC, а Windows будет запускать 32-битный процесс для обслуживания этого запроса.
Выясним причину, связанную с безопасностью. Сервер 1С работает как системная служба. В современных версиях Windows (начиная с Vista и Server 2008) службы работают в изолированной «Сессии 0», где отсутствует графический интерфейс. 1С 7.7, даже при передаче параметра NO_SPLASH_SHOW, может пытаться создать невидимые окна или обращаться к ресурсам рабочего стола.
Рассмотрим код инициализации, который используется в серверном контексте:
Попытка
База77 = Новый COMОбъект("V77s.Application");
ПутьКБазе = "/D" + Объект.ПутькБазе;
Пользователь = " /N" + Объект.Пользователь;
Пароль = " /P" + Объект.Пароль;
// Важно: NO_SPLASH_SHOW скрывает заставку, но не гарантирует работу без GUI
Если База77.Initialize(База77.RMTrade, ПутьКБазе + Пользователь + Пароль, "NO_SPLASH_SHOW") = 0 Тогда
ЗаписатьЛогСобытий("Ошибка открытия информационной базы 7.7 на сервере");
Возврат;
КонецЕсли;
Исключение
// Сюда мы попадем, если COM-объект вообще не создался
Сообщить("Ошибка при создании COM-объекта V77s.Application: " + ОписаниеОшибки());
КонецПопытки;
Для успешной работы этого кода мы должны убедиться, что пользователь, от имени которого запущена служба 1C:Enterprise 8.3 Server Agent, имеет:
HKEY_CLASSES_ROOT для поиска ProgID COM-объекта.LocalSystem в этом случае недопустимо, нужна доменная учетная запись).Проанализируем ситуацию, когда объект создается, но метод Initialize возвращает 0 или зависает. Это часто связано с настройками DCOM. Выполним следующие шаги:
dcomcnfg.1C:Enterprise 7.7 Application или соответствующий вашему ProgID (V77S).Посмотрим на пример из практики: в файловом варианте при запуске могло появляться окно выбора пользователя или подтверждения исправления индексов. На сервере любое такое окно приведет к тому, что процесс «подвиснет» навсегда, так как нажать кнопку «ОК» некому.
Чтобы этого избежать, проанализируем состояние базы 7.7:
nhenst.ini.Обратим внимание на используемый программный идентификатор. В зависимости от версии 1С 7.7, установленной на сервере, ProgID может отличаться:
V77.Application — универсальный идентификатор (используется версия по умолчанию).V77s.Application — SQL-версия или сетевая версия.V77l.Application — локальная версия.Если вы пытаетесь создать V77s.Application, но на сервере установлена только локальная версия 7.7, возникнет ошибка. Рекомендуется проверить регистрацию в реестре командой regserver (запуск 1cv7.exe /regserver от имени администратора).
Подведем итог нашей совместной работы по настройке соединения. Для того чтобы интеграция работала стабильно, мы должны выполнить три главных условия: обеспечить запуск 32-битного кода в 64-битной системе через COM+, предоставить службе 1С 8.3 полные права доступа к файловой системе и реестру, а также исключить любые интерактивные диалоги при старте 1С 7.7. Только комплексный подход к настройке прав и окружения позволит добиться бесперебойной выгрузки данных из старых систем в современные конфигурации на базе 1С 8.3.