Интеграция различных баз данных 1С — это классическая задача, с которой рано или поздно сталкивается любой разработчик. В данной статье мы подробно разберем, как наладить связь между самописной конфигурацией и типовым решением (например, 1С:ERP 2.4) через технологию COM. Мы пройдем путь от первой строки кода до решения проблем с разрядностью и оптимизацией записи объектов.
Для начала работы нам необходимо создать объект-соединитель, который позволит одной базе «увидеть» программную среду другой. Самый простой и эффективный способ сделать это — использовать V83.COMConnector. В отличие от V83.Application, данный метод не запускает полноценное клиентское приложение с графическим интерфейсом, что значительно экономит ресурсы сервера и ускоряет работу.
Рассмотрим базовый пример кода для подключения:
// Создаем объект-соединитель
Соединитель = Новый COMОбъект("V83.COMConnector");
// Формируем строку подключения (для файловой базы)
СтрокаПодключения = "File=""C:\Bases\ERP_Base""; Usr=""Admin""; Pwd=""123"";";
// Для серверной базы строка будет выглядеть иначе:
// СтрокаПодключения = "Srvr=""ServerName""; Ref=""BaseName""; Usr=""Admin""; Pwd=""123"";";
Попытка
Соединение = Соединитель.Connect(СтрокаПодключения);
Сообщить("Соединение успешно установлено!");
Исключение
Сообщить("Не удалось подключиться: " + ОписаниеОшибки());
КонецПопытки;
После выполнения метода Connect() переменная Соединение становится своего рода «окном» во внешнюю базу. Через нее мы можем обращаться к менеджерам справочников, документов и вызывать экспортные процедуры модулей.
Часто возникает вопрос: имеет ли значение, на какой платформе или с использованием каких библиотек (например, БСП — Библиотека Стандартных Подсистем) написана база? Проанализируем ситуацию: COM-технология работает на уровне платформы 1С. Это значит, что если в вашей самописной базе нет БСП, это никак не ограничит возможности COM-соединения. Вам будут доступны все объекты метаданных и экспортные методы, помеченные ключевым словом Экспорт в глобальных модулях или модулях менеджеров.
Одной из самых частых причин ошибок типа «Класс не зарегистрирован» является проблема с библиотекой comcntr.dll. Разберем по шагам, как обеспечить стабильную работу:
regsvr32 "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll".comcntr.dll должна быть доступна в 64-битной версии. Важно, чтобы вызывающее приложение и библиотека имели одинаковую разрядность. Если базы находятся на разных серверах, проверьте соответствие версий платформы.COMConnector не получится. В таком случае стоит рассмотреть переход на HTTP-сервисы.Проанализируем типичную ошибку новичков: попытку передать ссылку на объект напрямую. Важно понимать, что ссылка из внешней базы — это не то же самое, что ссылка во внутренней базе. Это разные адресные пространства.
Правильная схема обмена данными:
Строка, Число, Дата, Булево.Посмотрим на пример создания документа в ERP из внешней базы:
// В базе-источнике получаем строковое представление GUID
Идентификатор = Строка(ДокументОбъект.УникальныйИдентификатор());
// Во внешней базе (через переменную Соединение) ищем объект
ВнешнийGUID = Соединение.NewObject("UUID", Идентификатор);
СсылкаВERP = Соединение.Документы.СписаниеНаРасходы.ПолучитьСсылку(ВнешнийGUID);
Если СсылкаВERP.Пустая() Тогда
НовыйДок = Соединение.Документы.СписаниеНаРасходы.СоздатьДокумент();
// Заполняем реквизиты, передавая примитивные типы
НовыйДок.Дата = ТекущаяДата();
НовыйДок.Комментарий = "Передано из самописной базы через COM";
// Важный момент для ERP: режим загрузки
НовыйДок.ОбменДанными.Загрузка = Истина;
НовыйДок.Записать();
КонецЕсли;
Работа через COM требует внимательного отношения к ресурсам. Каждое активное соединение занимает одну сеансовую лицензию 1С. Чтобы избежать дефицита лицензий, мы рекомендуем:
Соединение = Неопределено;. Это позволит платформе корректно завершить сеанс во внешней базе.Объект.ОбменДанными.Загрузка = Истина отключает тяжелые проверки и подписки на события. Это критично для производительности, так как через COM выполнение кода в разы медленнее, чем внутри базы.Несмотря на то что COM-соединение — это проверенный временем инструмент, у него есть современные альтернативы. Если вам необходимо связать ERP с другими системами или вы планируете масштабировать решение, рассмотрите следующие варианты:
Подводя итог, можно сказать: для разовых задач или простых кнопок «Передать в ERP» внутри закрытой Windows-сети COM-соединение остается отличным и быстрым в реализации инструментом. Главное — следить за разрядностью и не забывать освобождать лицензии после работы.