Рассмотрим ситуацию: руководство приняло решение интегрировать корпоративную учетную систему на базе устаревшей конфигурации 1С:УПП 1.3 с сервисом бронирования билетов и гостиниц Smartway. Если в современных типовых конфигурациях (таких как 1С:ERP 2.5, 1С:Бухгалтерия 3.0, УТ 11 или ЗУП 3.1) функционал обмена встроен «из коробки» благодаря Библиотеке стандартных подсистем, то для УПП штатных механизмов не существует. Разберем по шагам, как настроить такую интеграцию с нуля, используя HTTP-запросы и API сервиса. Для перехода с устаревшей программы на современные версии 1С предусмотрен раздел с решениями для подбора переноса данных из УПП.
Проанализируем распространенную ошибку, с которой сталкиваются разработчики при первой попытке работы с API Smartway. Сервис использует протокол JSON-RPC 2.0. Главная особенность этого стандарта заключается в том, что все запросы отправляются методом POST на единый базовый URL-адрес (endpoint), например, /v2. При этом само вызываемое действие (метод API) передается не в адресной строке, а внутри тела формата JSON в параметре method.
В исходном варианте была допущена маршрутизационная ошибка: метод trip.get_by_range подставлялся прямо в URL HTTP-запроса. Кроме того, формирование строки JSON производилось простой конкатенацией текста, что часто приводит к синтаксическим ошибкам, проблемам с экранированием кавычек и неверной передаче вложенных структур.
Посмотрим на пример корректного решения. Для надежного формирования тела запроса мы будем использовать встроенные классы платформы ЗаписьJSON и Структура. Это позволит платформе 1С автоматически обработать все типы данных и корректно расставить кавычки. Для изучения аналогичных механизмов работы с JSON в этой конфигурации подойдёт обработка для выгрузки цен и остатков номенклатуры.
Важное техническое замечание: Объекты ЗаписьJSON и ЧтениеJSON появились в платформе 1С:Предприятие начиная с версии 8.3.6. Убедитесь, что ваша технологическая платформа обновлена. Если вы используете более старую платформу (например, 8.2), вам придется прибегнуть к использованию COM-объектов или внешних компонент.
Разберем рабочий код для получения списка поездок:
Процедура ПолучитьПоездкиНаСервере()
// 1. Формируем структуру запроса
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = Ложь;
ЗаписьJSON.УстановитьСтроку();
СтруктураЗапроса = Новый Структура;
СтруктураЗапроса.Вставить("jsonrpc", "2.0");
СтруктураЗапроса.Вставить("id", "777");
СтруктураЗапроса.Вставить("method", "trip.get_by_range");
// Вложенная структура параметров авторизации и фильтров
СтруктураАвторизации = Новый Структура("username, password", "example@smartway.today", "example");
СтруктураЗапросаПериода = Новый Структура("start_date, end_date", Формат(ТекущаяДата()-864000, "ДФ=yyyy-MM-dd"), Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd"));
СтруктураПараметров = Новый Структура("authorization, query", СтруктураАвторизации, СтруктураЗапросаПериода);
СтруктураЗапроса.Вставить("params", СтруктураПараметров);
ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
СтрокаJSON = ЗаписьJSON.Закрыть();
// 2. Настраиваем защищенное соединение и отправляем POST запрос
СерверПриемник = "api.smartway.today";
HTTPСоединение = Новый HTTPСоединение(СерверПриемник, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
// Обращаемся к базовому endpoint, метод передали в теле
HTTPЗапрос = Новый HTTPЗапрос("/v2");
HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
// 3. Получаем и читаем ответ
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
СтрокаОтветаСервера = HTTPОтвет.ПолучитьТелоКакСтроку();
Сообщить("Код состояния: " + HTTPОтвет.КодСостояния);
// 4. Парсим полученный ответ
Если HTTPОтвет.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаОтветаСервера);
СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Дальнейшая обработка СтруктураОтвета...
Иначе
Сообщить("Ошибка запроса: " + СтрокаОтветаСервера);
КонецЕсли;
КонецПроцедуры
Раз уж мы делаем обмен с нуля, выясним, какие еще рутинные процессы можно закрыть с помощью данной интеграции. Современные API позволяют реализовать практически бесшовную работу между учетной системой и тревел-сервисом. Рассмотрим подробнее основные направления:
АвансовыйОтчет в УПП, автоматически заполняя табличные части.Проанализировав данное решение, мы видим, что интеграция сторонних API в старые конфигурации, такие как УПП, требует ручного написания HTTP-клиентов. Однако использование стандартов JSON-RPC и современных объектов платформы 1С для парсинга делает этот процесс надежным и предсказуемым.