При эксплуатации информационных систем 1С часто возникает ситуация, когда две базы (например, «Управление автотранспортом» и «Бухгалтерия предприятия») должны обмениваться данными в автоматическом режиме. Если ранее базы находились на одном физическом сервере, прямой обмен через УниверсальныйОбменВФорматеXML работал без нареканий. Однако после разнесения баз на разные серверы или при обновлении платформы на одном из них механизм часто «ломается». Рассмотрим причины возникновения этой проблемы и разберем по шагам способы ее решения.
Проанализируем ситуацию: когда мы используем прямое подключение, база-инициатор пытается создать объект V83.COMConnector. Для успешного создания этого объекта в операционной системе должна быть зарегистрирована соответствующая библиотека comcntr.dll. Основные сложности возникают в следующих случаях:
Выясним, как обойти эти ограничения, используя проверенные технические методы.
Это наиболее технически грамотный способ, если вы хотите сохранить работу через V83.COMConnector. Мы создадим специальный «контейнер» в Windows, который позволит принудительно использовать нужную версию библиотеки comcntr.dll, независимо от того, какая версия платформы установлена основной.
Рассмотрим алгоритм настройки:
dcomcnfg в строке выполнения).USR1CV8).comcntr.dll из конкретной папки установленной платформы (например, C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll).Важный момент: Такая настройка позволяет запускать dllhost.exe в отдельном процессе, что решает проблемы разрядности и конфликта версий библиотек в реестре Windows. Проанализируем, как это влияет на код: в самой 1С программный код вызова остается прежним, но система теперь будет брать библиотеку из нашего настроенного контейнера.
Современным стандартом считается отказ от COM в пользу веб-технологий. Это «убивает двух зайцев»: решается проблема версий и снимается вопрос сетевого доступа между серверами. Рассмотрим, как это реализовать.
Если мы используем типовой «Универсальный обмен данными», мы можем опубликовать базу-приемник на веб-сервере (IIS или Apache). Вместо строки соединения COM нам потребуется URL опубликованной базы. Несмотря на то что стандартная обработка заточена под COM, многие специалисты используют эмуляцию COM-передачи данных через HTTP-сервисы.
Посмотрим на пример логики, которая реализуется при переходе на веб-сервисы:
// Пример структуры вызова обмена через веб-сервис (вместо COM)
ОпределениеСервиса = Новый WSОпределения(URL_ВебСервиса, ИмяПользователя, Пароль);
Прокси = Новый WSПрокси(ОпределениеСервиса, "http://www.site.ru/exchange", "ExchangeService", "ExchangeSoap");
Результат = Прокси.ВыполнитьЗагрузкуДанных(ДанныеВФорматеXML);
Хотя этот метод требует модификации правил или использования специализированных расширений, он является самым стабильным в долгосрочной перспективе, так как компания 1С постепенно сокращает поддержку COM-технологий.
Если бюджет на разработку ограничен, а настроить COM+ не удается, проанализируем вариант с промежуточным файлом. Многие недооценивают этот метод, считая его «медленным», однако для регламентных заданий это не критично.
Разберем этапы реализации:
USR1CV8 (от имени которого работает агент сервера 1С) на обоих серверах должен иметь полные права (чтение и запись) на эту папку.Пример кода для проверки наличия файла в регламентном задании:
ФайлНаДиске = Новый Файл("\\ServerName\ExchangeFolder\data.xml");
Если ФайлНаДиске.Существует() Тогда
// Запускаем стандартную обработку загрузки XML
УниверсальныйОбменДанными = Обработки.УниверсальныйОбменДаннымиВФорматеXML.Создать();
УниверсальныйОбменДанными.ИмяФайлаОбмена = ФайлНаДиске.ПолноеИмя;
УниверсальныйОбменДанными.РежимОбмена = "Загрузка";
УниверсальныйОбменДанными.ВыполнитьЗагрузку();
// После загрузки файл нужно удалить или переместить в архив
УдалитьФайлы(ФайлНаДиске.ПолноеИмя);
КонецЕсли;
Проанализируем перспективу: если вы планируете масштабное обновление систем, стоит рассмотреть переход на формат EnterpriseData (Конвертация данных 3.0). В отличие от старого «Универсального обмена», этот механизм:
Подведем итоги нашего анализа. Если нужно починить обмен «здесь и сейчас» без изменения кода — используйте настройку COM+ приложения в службах компонентов Windows. Это позволит изолировать нужную версию comcntr.dll. Если же вы смотрите в сторону стабильности и планируете переход на Linux или облачные инфраструктуры — единственным верным решением будет публикация баз и переход на обмен через HTTP-сервисы или формат EnterpriseData.