При интеграции и обмене данными между несколькими информационными базами 1С часто применяется прямое программное подключение. Разберем подробнее, как корректно сформировать строку соединения для файловой и клиент-серверной базы, какой COM-объект выбрать и как избежать распространенных ошибок при обращении к метаданным внешней базы.
Для подключения к сторонней информационной базе 1С платформы 8.3 доступны два основных COM-объекта. Проанализируем их различия:
V83.COMConnector (рекомендуется): создает внутрипроцессный легковесный COM-коннектор. Он не инициализирует клиентский графический интерфейс, формы и глобальные обработчики интерфейсных событий. За счет этого соединение устанавливается быстрее и потребляет значительно меньше оперативной памяти.V83.Application: выполняет запуск полноценного экземпляра клиентского приложения 1С. Требуется только в редких случаях, когда необходимо интерактивно открыть пользователю интерфейс внешней базы или вызвать экспортные методы клиентских модулей.Синтаксис строки подключения зависит от варианта развертывания целевой базы (файловая или клиент-серверная). Рассмотрим оба варианта.
Для файловой информационной базы используется параметр File:
СтрокаПодключения = "File=""C:\1c-star-baza""; Usr=""Фамилия Имя""; Pwd=""МойПароль"";";
Для клиент-серверной базы (SQL / кластер серверов 1С) вместо параметра File обязательно указываются параметры Srvr (адрес или имя сервера 1С) и Ref (имя базы в кластере):
СтрокаПодключения = "Srvr=""192.168.1.10""; Ref=""ИмяИнформационнойБазы""; Usr=""Фамилия Имя""; Pwd=""МойПароль"";";
Важное замечание по синтаксису: если имя пользователя (Usr) или пароль (Pwd) содержат пробелы, спецсимволы или кавычки, их необходимо обязательно оборачивать во внутренние двойные кавычки (""Имя Пользователя""), иначе платформа выдаст ошибку о неверных параметрах соединения.
Разберем по шагам рабочий пример, в котором создается подключение к клиент-серверной базе с помощью V83.COMConnector и выполняется перебор документов РеализацияТоваровУслуг:
Попытка
// Создаем COM-соединитель
Соединитель = Новый COMОбъект("V83.COMConnector");
// Формируем параметры подключения к серверной базе
СтрокаПодключения = "Srvr=""192.168.1.10""; Ref=""БухгалтерияПредприятия""; Usr=""Администратор""; Pwd=""Secret123"";";
// Устанавливаем соединение
ВнешняяБаза = Соединитель.Connect(СтрокаПодключения);
// Получаем менеджер документов внешней базы
МенеджерРеализаций = ВнешняяБаза.Документы.РеализацияТоваровУслуг;
// Выбираем документы за период
ДатаНачала = '20230101';
ДатаОкончания = '20231231235959';
Выборка = МенеджерРеализаций.Выбрать(ДатаНачала, ДатаОкончания);
Пока Выборка.Следующий() Цикл
// Считываем реквизиты примитивных типов
НомерДокумента = Выборка.Номер;
ДатаДокумента = Выборка.Дата;
СуммаДокумента = Выборка.СуммаДокумента;
КонецЦикла;
Исключение
Сообщить("Ошибка при работе с COM-соединением: " + ОписаниеОшибки());
КонецПопытки;
// Обязательно освобождаем COM-объекты для закрытия сеанса на сервере
ВнешняяБаза = Неопределено;
Соединитель = Неопределено;
Srvr и Ref.Connect() объекта базы) или если соединение не было успешно установлено.comcntr.dll. Для решения регистрируют соответствующую разрядность через regsvr32 либо настраивают приложение в COM+ (Службы компонентов Windows).Неопределено.Перебор через Выбрать() порождает множество сетевых обращений между процессами на каждый читаемый реквизит. Для ускорения работы рекомендуется выполнять запрос в контексте внешней базы через ВнешняяБаза.NewObject("Запрос") и передавать готовые результаты пакетом в виде примитивных типов данных или структурированных строк JSON/XML.
Если требуется регулярный обмен между современными конфигурациями, также стоит рассмотреть альтернативные технологии без использования COM: HTTP-сервисы, Web-сервисы (SOAP/REST) или стандартный интерфейс OData, которые работают на любых операционных системах (включая Linux) и не зависят от разрядности платформы.