При переносе информационной базы 1С в облачный сервис многие разработчики сталкиваются с проблемой: привычный механизм COM-соединения (v83.COMConnector) перестает работать. Выясним причину этого ограничения и подробно разберем современные альтернативы для получения данных из облачной базы.
Разберем основные технические причины, по которым COM-технология недоступна при работе с облачными сервисами 1С:
Рассмотрим наилучший вариант в ситуации, когда облачная конфигурация типовая и её нельзя менять или снимать с поддержки. Платформа 1С 8.3 содержит встроенный автоматический REST-интерфейс (OData).
Преимущества подхода:
Для работы по интерфейсу OData необходимо, чтобы в облаке была включена публикация HTTP-сервисов, а учетной записи 1С были назначены права на чтение соответствующих объектов.
Проанализируем ситуация, когда штатных возможностей OData недостаточно или требуется выполнять сложные запросы с предварительной обработкой данных на стороне облачной базы. В этом случае создается расширение конфигурации.
Использование расширения позволяет оставить основной типовой программный продукт на полной поддержке. Разберем порядок действий по шагам:
GET).Посмотрим на пример кода обработки HTTP-запроса внутри расширения облачной базы:
Функция ПолучитьОстатки(Запрос)
// Выполняем запрос к остаткам
Запрос1С = Новый Запрос;
Запрос1С.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура.Наименование КАК Товар,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";
ТаблицаДанных = Запрос1С.Выполнить().Выгрузить();
// Преобразуем результат в массив структур для JSON
МассивРезультата = Новый Массив;
Для Каждого Стр Из ТаблицаДанных Цикл
СтруктураСтр = Новый Структура;
СтруктураСтр.Вставить("Товар", Стр.Товар);
СтруктураСтр.Вставить("Количество", Стр.Количество);
МассивРезультата.Добавить(СтруктураСтр);
КонецЦикла;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, МассивРезультата);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;
КонецФункции
Посмотрим, как переписать код в локальной базе, которая ранее подключалась через COMConnector. Для выполнения HTTP-запросов используются встроенные объекты 1С: HTTPСоединение, HTTPЗапрос и HTTPОтвет.
Разберем пример кода для получения данных из облачного HTTP-сервиса:
// Параметры подключения к облаку
Сервер = "cloud.1c.ru"; // Адрес облачного сервера
ИмяПользователя = "Интеграция";
Пароль = "SecretPassword123";
// Настройка SSL-соединения для HTTPS
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(Сервер, 443, ИмяПользователя, Пароль, , 30, ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос("/my_base/hs/custom_api/v1/get_balances");
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
ДанныеОстатков = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Обработка полученных данных
Для Каждого Элемент Из ДанныеОстатков Цикл
Сообщить("Товар: " + Элемент.Товар + " | Остаток: " + Строка(Элемент.Количество));
КонецЦикла;
Иначе
Сообщить("Ошибка получения данных: " + Строка(Ответ.КодСостояния));
КонецЕсли;
Если прямой доступ по HTTP/HTTPS ограничен политикой безопасности облачного провайдера, можно настроить фоновый обмен файлами:
Переход базы в облако требует отказа от устаревшего COM-соединения. Для интеграции следует выбирать **REST API (OData)**, если конфигурацию нельзя редактировать, либо разрабатывать **HTTP-сервис в расширении**, если требуется высокая скорость работы и точный контроль передаваемых данных.