Как подключиться к базе 1С, находящейся на другом сервере в другой сети?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Часто в практике разработки на 1С возникает необходимость собрать данные для единого отчета из нескольких независимых баз данных. Если базы находятся в одной локальной сети или на одном сервере, задача легко решается обычным COM-соединением. Но что делать, если нужная нам база данных (например, 1С:Управление торговлей) находится на совершенно другом сервере, в другой физической сети? Рассмотрим эту ситуацию подробнее и разберем все возможные способы решения данной архитектурной задачи.

Проанализируем ситуацию: у нас есть отчет, который должен в реальном времени получать выборку документов из удаленной базы. Прямой видимости между серверами нет. Разберем по шагам, какие технологии предлагает платформа 1С и смежные IT-инфраструктуры.

1. Организация VPN-канала и COM-соединение на стороне сервера

Самый простой с точки зрения программирования 1С способ — объединить две разные сети с помощью виртуальной частной сети (VPN). Для этого необходимо привлечь системных администраторов обеих сетей.

Важные нюансы:

  1. Настраивать VPN на каждом рабочем месте пользователя, который формирует отчет, не нужно.
  2. Соединение должно устанавливаться на стороне сервера 1С:Предприятия. Сервер, на котором выполняется фоновый код отчета, подключается к удаленному серверу через поднятый VPN-туннель.

Когда сети объединены, удаленный сервер становится виден как локальный, и мы можем использовать стандартное подключение через V83.ComConnector.

В новых версиях платформы также появилась возможность устанавливать COM-соединение по протоколам HTTP/HTTPS. Если опубликовать удаленную базу на веб-сервере (IIS или Apache), мы сможем подключаться к ней напрямую без настройки VPN. Строка подключения в таком случае будет выглядеть как обращение к сайту (например: Srvr="http://1c.site.ru/base"). Трафик идет через стандартные порты, а безопасность обеспечивается сертификатом SSL.

2. Разработка собственных HTTP-сервисов или Web-сервисов

Если нет возможности настраивать VPN, отличным решением станет переход на сервисориентированную архитектуру. Выясним причину: это безопаснее, быстрее работает на медленных каналах связи и не требует прямого доступа к SQL или файлам базы.

Мы создаем в удаленной базе свой HTTP-сервис (или Web-сервис), который принимает параметры для формирования отчета и возвращает готовую таблицу значений в формате JSON или XML.

Посмотрим на пример трансформации логики отчета:


// Было (через COM-соединение локально):
тзДанныеУдаленнойБазы = ПолучитьДанныеИздалекаЧерезComСоединение(ПараметрыОтчета);

// Станет (через HTTP-запрос к удаленному серверу):
тзДанныеУдаленнойБазы = ПолучитьДанныеИздалека(ПараметрыОтчета, "HTTP");

На стороне отчета останется лишь отправить POST-запрос с параметрами, получить ответ от удаленной базы и десериализовать JSON обратно в таблицу для вывода в Систему компоновки данных.

3. Использование стандартного REST API (OData)

Если удаленная база работает на платформе 8.3, мы можем избежать написания дополнительного серверного кода в конфигурации-источнике. Достаточно опубликовать базу на веб-сервере и включить стандартный интерфейс OData.

Платформа автоматически сгенерирует REST-интерфейс ко всем разрешенным объектам конфигурации. В нашем отчете мы просто формируем GET-запросы с нужными фильтрами. Платформа сама вернет ответ в формате JSON или XML, который мы программно распарсим и используем в отчете.

4. Прямое обращение к СУБД (Внешние источники данных и ADO)

Поскольку в нашем примере удаленная база является SQL-версией, можно пойти по пути прямого извлечения данных из базы Microsoft SQL Server или PostgreSQL, минуя сервер 1С:Предприятия. Разберем два варианта такого подхода:

  1. Внешние источники данных в 1С. Этот штатный механизм позволяет подключаться к удаленным СУБД по строке соединения ODBC. Огромный плюс — высочайшая скорость работы и возможность использовать полученные таблицы напрямую в СКД отчета. Минус — придется расшифровывать имена таблиц и полей 1С на уровне SQL (например, таблицы вида _Document123).
  2. Технология Linked Servers (Связанные серверы) и ADO. Системные администраторы могут настроить «Связанный сервер» прямо в MS SQL. Локальный SQL-сервер будет "видеть" удаленный. Альтернативно можно прямо в коде 1С создать COM-объект ADODB.Connection, указать строку подключения к удаленному IP-адресу с логином и паролем SQL-пользователя, и выполнить прямой SELECT запрос.

5. Предварительный обмен данными

Не всегда онлайн-запросы к удаленной базе являются лучшим решением. В процессе формирования отчета выполнение тяжелых запросов через сеть может приводить к задержкам или блокировкам.

Рассмотрим альтернативный подход: соберите потенциально необходимые для построения отчетности данные с помощью обычных регламентных обменов. Данные могут выгружаться раз в несколько минут (или часов) в ту базу, где строится отчет, либо в отдельную центральную управленческую базу. Таким образом, отчет будет строиться локально, избегая в сеансе пользователя длительных обращений к внешним источникам по нестабильной сети. Этот метод особенно хорош, если данные требуются для сложной аналитики, где нужна максимальная производительность отчета.

← На главную