В процессе разработки часто возникает задача интеграции, когда одна информационная база (в нашем случае файловая) должна получить данные или вызвать функцию в другой базе, расположенной на сервере. В среде 1С:Предприятие 8.3 существует несколько способов решения этой задачи, начиная от классического COM-соединения и заканчивая современными сервис-ориентированными подходами. В данной статье мы подробно разберем каждый из методов, их преимущества и технические нюансы реализации.
Проанализируем самый быстрый способ «из коробки», который не требует написания сложного программного кода в базе-источнике. Интерфейс OData позволяет обращаться к объектам базы данных (справочникам, документам, регистрам) через стандартные HTTP-запросы.
Для реализации этого метода нам потребуется выполнить следующие шаги в серверной базе:
УстановитьСоставСтандартногоИнтерфейсаOData().Рассмотрим пример кода для открытия доступа к справочнику Номенклатура:
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(Метаданные.Справочники.Номенклатура);
УстановитьСоставСтандартногоИнтерфейсаOData(МассивОбъектов);
После этого из файловой базы мы сможем получать данные, отправляя HTTPЗапрос. Данные возвращаются в формате JSON или XML, что очень удобно для последующей обработки. Этот метод наиболее современный и безопасный, так как работает через стандартные порты веб-сервера (80 или 443).
Разберем классический способ взаимодействия — использование COM-соединения. Этот метод позволяет создать «невидимый» сеанс серверной базы внутри файловой и обращаться к её методам и данным напрямую, как если бы они были локальными объектами.
Для подключения используем объект V83.COMConnector. Важно помнить, что этот метод работает только в среде ОС Windows. Рассмотрим пример функции подключения:
Попытка
COMСоединитель = Новый COMОбъект("V83.COMConnector");
ПараметрыСвязи = "Srvr='ServerName';Ref='BaseName';Usr='Login';Pwd='Password';";
БазаСервер = COMСоединитель.Connect(ПараметрыСвязи);
Сообщить("Соединение успешно установлено!");
Исключение
Сообщить("Не удалось подключиться: " + ОписаниеОшибки());
КонецПопытки;
Выделим важные нюансы этого подхода:
comcntr.dll.Если стандартный интерфейс OData кажется слишком избыточным или небезопасным, мы можем разработать собственные HTTP-сервисы в серверной базе. Это позволит нам определить конкретные «точки входа» (URL) и описать логику обработки запросов на языке 1С.
Проанализируем процесс создания такого сервиса:
HTTP-сервис.Шаблон URL и Метод (GET, POST, PATCH).HTTPСервисЗапрос и возвращать HTTPСервисОтвет.Пример простейшего обработчика в серверной базе, который возвращает приветствие:
Функция ПолучитьДанные(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки("Запрос успешно обработан на сервере");
Возврат Ответ;
КонецФункции
В файловой базе для обращения к этому сервису мы будем использовать объект HTTPСоединение. Этот метод является наиболее гибким, так как позволяет передавать сложные структуры данных и выполнять произвольный код на стороне сервера.
Технология Web-сервисов (протокол SOAP) во многом похожа на HTTP-сервисы, но является более строго типизированной. При импорте веб-сервиса в файловую базу через WS-ссылку, 1С автоматически создает типизированные объекты, что упрощает разработку за счет подсказок в конфигураторе.
Для работы с веб-сервисом в файловой базе мы используем следующий подход:
Определение = Новый WSОпределения("http://server/base/ws/Service?wsdl", "Login", "Password");
Прокси = Новый WSПрокси(Определение, "http://www.uri.com", "ServiceName", "EndpointName");
Результат = Прокси.ВыполнитьОперацию(Параметры);
Этот метод отлично подходит для интеграции, где важна строгая структура передаваемых данных (XDTO-пакеты).
Выясним еще одну интересную возможность — прямое подключение к базе данных (SQL) через механизм Внешних источников данных. Если серверная база 1С работает на MS SQL Server или PostgreSQL, файловая база может «подцепиться» к таблицам SQL напрямую через ODBC-драйвер.
Важный момент: Имена таблиц и полей в SQL-базе не соответствуют именам в конфигураторе (например, справочник может называться _Reference45). Поэтому данный метод требует хорошего знания структуры БД 1С или использования специальных обработок для сопоставления имен.
Рассмотрим несколько правил, которые помогут сделать интеграцию надежной:
Попытка...Исключение, так как сетевое соединение может быть нестабильным.Таким образом, выбор метода зависит от ваших задач. Если нужен быстрый доступ к данным — выбирайте OData. Если требуется сложная логика взаимодействия — HTTP-сервисы. Если вы работаете в закрытой локальной сети на Windows и нужно полное управление объектами — используйте COM-соединение.