Урок по треку Разработка на 1С 5 мин

Обмены данными и интеграции

Планы обмена, EnterpriseData, HTTP-сервисы, OData, HTTPСоединение и JSON.

Ни одна 1С не живёт одна: сайт, банк, маркетплейсы, другие базы 1С. На собесе спрашивают, какие механизмы есть и как сделать интеграцию надёжной.

Механизмы

  • HTTP-сервисы: свой REST API в конфигурации.
  • Web-сервисы: SOAP, для старых интеграций и госсистем.
  • Стандартный интерфейс OData: готовый REST-доступ к объектам без программирования.
  • HTTPСоединение: вызов внешних API из 1С.
  • Планы обмена: обмен между базами с регистрацией изменений.
  • Форматы обмена: EnterpriseData (универсальный формат типовых), правила Конвертации данных.
  • Файлы (XML, JSON, CSV), COM-соединение (только Windows), внешние источники данных.

HTTP-сервис

Объект конфигурации с корневым URL, шаблонами (/orders/{id}) и методами. Адрес: https://сервер/база/hs/<корневой URL>/orders/15. Обработчик получает запрос и возвращает HTTPСервисОтвет:

Функция ЗаказGET(Запрос)
	Ид = Запрос.ПараметрыURL["id"];
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
	Ответ.УстановитьТелоИзСтроки(ПолучитьЗаказJSON(Ид));
	Возврат Ответ;
КонецФункции

ПараметрыURL из шаблона, ПараметрыЗапроса из строки после «?», тело через ПолучитьТелоКакСтроку().

Вызов внешнего API

Соединение = Новый HTTPСоединение("api.example.ru", 443, , , , 30,
	Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/v1/rates");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
	Текст = Ответ.ПолучитьТелоКакСтроку();
КонецЕсли;

GET через Получить, POST через ОтправитьДляОбработки, прочие методы через ВызватьHTTPМетод. Таймаут обязателен, секреты не в коде и не в URL.

JSON

Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Текст);
Данные = ПрочитатьJSON(Чтение, Истина); // Соответствие
Чтение.Закрыть();

Без второго параметра объекты читаются в Структуру, и ключ вроде "order-id" вызовет ошибку. Запись: ЗаписьJSON, УстановитьСтроку, ЗаписатьJSON(Запись, Значение), Закрыть() возвращает строку. Для объектов конфигурации есть сериализатор XDTO.

Планы обмена

План обмена хранит узлы. При изменении объекта он регистрируется для узлов (авторегистрация или ПланыОбмена.ЗарегистрироватьИзменения). При выгрузке уходят зарегистрированные изменения, номера сообщений подтверждают приём, и регистрация снимается.

РИБ (распределённая информационная база): узлы с одинаковой конфигурацией, обмен переносит данные и изменения конфигурации от главного узла.

При загрузке объект пишут с ОбменДанными.Загрузка = Истина, а обработчики ПередЗаписью и ПриЗаписи по стандарту в начале проверяют флаг и пропускают бизнес-логику.

Надёжность

  • Идемпотентность: повтор запроса не создаёт дубль. Храните внешний идентификатор и ищите по нему.
  • Ошибки: проверка кода ответа и формата, понятные коды в своих сервисах (400, 404, 409), логирование обменов.
  • Короткие транзакции: обмен порциями, внешние вызовы вне транзакции.
  • Нагрузка: кеш на стороне сайта, выгрузка по расписанию вместо запроса на каждый просмотр.
  • Безопасность: HTTPS, отдельный пользователь с минимальными правами.

Что спросят на собесе

  • Какие способы интеграции 1С вы знаете?
  • Как устроен HTTP-сервис и как получить параметр из URL?
  • Как защититься от дублей при повторной отправке?
  • Зачем ОбменДанными.Загрузка?
  • Что такое РИБ и EnterpriseData?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.