При разработке сложных систем часто возникает задача получения данных из одной базы 1С в другую в режиме реального времени. При этом часто ставится условие: не загромождать базу-приемник лишними данными через регулярные обмены и избежать использования устаревших или платформенно-зависимых технологий, таких как V83.ComConnector. В рамках данной статьи мы подробно разберем, как реализовать подключение к удаленной базе 1С, используя внешние источники данных, протокол OData и веб-сервисы.
Проанализируем наиболее современный и простой в настройке способ — стандартный интерфейс OData. Платформа 1С:Предприятие позволяет опубликовать базу таким образом, что любой её объект станет доступен по HTTP-протоколу. Это решение идеально подходит, если нам нужно просто "читать" данные без сложной логики на стороне источника.
Разберем по шагам, как активировать и использовать этот механизм:
Номенклатура:
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(Метаданные.Справочники.Номенклатура);
УстановитьСоставСтандартногоИнтерфейсаOData(МассивОбъектов);
Для обращения к данным мы используем простые HTTP-запросы. Например, чтобы получить данные о номенклатуре, достаточно отправить GET-запрос по адресу: http://server/base/odata/standard.odata/Catalog_Номенклатура?$format=json.
Преимущества OData:
Важные нюансы: Помните, что OData возвращает данные постранично (обычно по 1000 записей). Если вам нужно прочитать огромный объем данных, придется реализовать механизм обработки ссылок "next", которые приходят в ответе.
Если нам требуется максимальная скорость при работе с огромными таблицами, рассмотрим использование механизма Внешние источники данных. Этот метод позволяет подключиться напрямую к таблицам SQL базы-источника.
Проанализируем ситуацию: работа через ВИД идет в обход программного слоя 1С. Это дает колоссальный прирост в скорости, но накладывает ряд ограничений:
_Reference45. Выясним причину такого именования: 1С хранит метаданные в своей внутренней структуре, и соответствие имен можно найти через консоль запросов или программно через метод ПолучитьСтруктуруХраненияБазыДанных().Пример настройки подключения к внешней таблице через код:
ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения.СтрокаСоединения = "Driver={SQL Server};Server=MyServer;Database=WorkBase;Uid=sa;Pwd=password;";
ВнешниеИсточникиДанных.ИмяВашегоИсточника.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
Когда стандартного функционала OData недостаточно или требуется сложная фильтрация данных на стороне источника, оптимально создать собственный HTTP-сервис. Это позволяет инкапсулировать логику получения данных внутри базы-источника.
Разберем преимущества этого подхода:
Рассмотрим пример простейшего HTTP-сервиса, возвращающего остаток товара:
Функция ПолучитьОстаток(Запрос)
ТоварСсылка = Справочники.Номенклатура.НайтиПоКоду(Запрос.ПараметрыURL.Получить("Код"));
Остаток = РегистрыНакопления.ТоварыНаСкладах.Остаток(ТоварСсылка);
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(Строка(Остаток));
Возврат Ответ;
КонецФункции
Выясним, какой метод выбрать в зависимости от ваших задач:
Важное замечание по лицензированию: Помните, что каждое активное соединение через Web-сервис или OData потребляет одну сессию (и, соответственно, одну клиентскую лицензию) в момент выполнения запроса. Если вы планируете массовое использование таких запросов от многих пользователей, заранее проанализируйте объем доступных лицензий на сервере 1С.
Подводя итог, можно сказать, что для современных систем на базе 1С 8.3 наиболее предпочтительным является использование OData для простых задач и HTTP-сервисов для сложных интеграций. Это полностью снимает зависимость от операционной системы и необходимости регистрации библиотек типа comcntr.dll.