При разработке механизмов обмена данными часто возникает ситуация, когда две базы 1С изначально находятся на одном сервере или компьютере, и COM-соединение работает безупречно. Однако при масштабировании бизнеса или разделении инфраструктуры базы могут «разъехаться» по разным машинам, находящимся в одной локальной сети или даже в разных городах. В этой статье мы подробно разберем, как адаптировать ваш код, какие технологии связи использовать и с какими техническими сложностями вы можете столкнуться.
Если обе ваши базы являются файловыми (имеют расширение .1CD), самый простой способ — предоставить доступ к папке с базой через стандартные средства Windows. Рассмотрим, как изменить строку подключения.
Для начала необходимо создать на удаленном компьютере «Общий ресурс» (Share) и дать права на чтение и запись пользователю, под которым запускается служба 1С на основном сервере. После этого путь к базе в коде должен принять вид UNC-пути.
Проанализируем пример кода для подключения к сетевой папке:
// Определяем параметры подключения
ИмяCOM = "V83.COMConnector";
Пользователь = "Администратор";
Пароль = "123";
// Путь к базе через сетевое имя компьютера
Каталог = "\\\\ServerName\\1c_base_folder";
// Создаем объект-коннектор
БД = Новый COMObject(ИмяCOM);
// Формируем строку соединения для файлового варианта
СтрокаПодключения = "File='" + СокрЛП(Каталог) + "';Usr='" + Пользователь + "';pwd='" + Пароль + "';";
Попытка
СоединениеБД = БД.Connect(СтрокаПодключения);
Сообщить("Соединение успешно установлено!");
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
Важный нюанс: при работе через протокол SMB (сетевые папки) критически важна стабильность сети. Если компьютеры находятся в разных городах и соединены через VPN, любые микросбои связи могут привести к «вылету» программы или, в худшем случае, к повреждению файла базы данных 1Cv8.1CD. Мы рекомендуем использовать этот метод только внутри высокоскоростной локальной сети.
Если базы данных работают в клиент-серверном режиме, физическое расположение файлов баз не имеет значения. Программа будет обращаться не к файлу, а к кластеру серверов 1С. Это гораздо более надежный вариант для работы между городами.
Разберем, как меняется логика формирования строки Connect:
V8 = Новый COMОбъект("V83.ComConnector");
// Параметры для серверной базы
Сервер = "192.168.1.10"; // IP или имя сервера 1С
ИмяБазы = "Trade_Base"; // Имя базы в кластере
Пользователь = "Admin";
Пароль = "qwerty";
Открытие = "srvr='" + Сервер + "'; ref='" + ИмяБазы + "'; usr='" + Пользователь + "'; pwd='" + Пароль + "';";
Попытка
БазаПриемник = V8.Connect(Открытие);
// Теперь можно работать с объектами удаленной базы
// Например: СправочникСсылка = БазаПриемник.Справочники.Номенклатура.НайтиПоКоду("00001");
Исключение
Сообщить("Не удалось подключиться к серверу: " + ОписаниеОшибки());
КонецПопытки;
В этом случае компьютеры должны быть объединены в единую виртуальную сеть (VPN). Необходимо убедиться, что порты кластера 1С (по умолчанию 1540, 1541, 1560-1591) открыты в брандмауэре.
Часто в обсуждениях путают V83.Application и V83.ComConnector. Выясним причину, почему для обмена данными между компьютерами лучше использовать второй вариант:
Одной из главных причин, почему код работает на одном компьютере, но не работает на другом, является несовпадение разрядности. Если ваш сервер 1С 64-битный, а вы пытаетесь создать объект V83.ComConnector, который зарегистрирован как 32-битный, вы получите ошибку «Класс не зарегистрирован».
Рассмотрим шаги по решению этой проблемы:
comcntr.dll (находится в папке bin установленной платформы 1С).Это создаст «прослойку», которая позволит 64-битному процессу 1С успешно вызывать 32-битные методы COM-объекта.
Если ваши базы находятся в разных городах, помните: каждое обращение через точку (например, Соединение.Справочники.Товары.НайтиПоНаименованию()) — это отдельный сетевой запрос. Если вы делаете это в цикле по 1000 товаров, обмен будет длиться вечно.
Рекомендуемая стратегия: Вынесите логику сбора данных в экспортную функцию в модуле удаленной базы. Вызовите эту функцию один раз через COM, чтобы она вернула вам готовый массив структур или таблицу значений, сериализованную в строку (JSON или XML). Таким образом, вы совершите всего один «тяжелый» сетевой запрос вместо тысяч мелких.
Проанализируем ситуацию: если VPN настроить невозможно или связь крайне нестабильна, технологию COM/OLE лучше заменить на HTTP-сервисы или встроенный механизм OData.
Для этого база-источник публикуется на веб-сервере (IIS или Apache). База-приемник обращается к ней через стандартный HTTPЗапрос. Это не требует постоянного «живого» соединения, работает через обычный порт 80 или 443 и гораздо устойчивее к задержкам интернета.