Как правильно передавать параметры и создавать документы в другой базе 1С через HTTP-запросы и OData?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции между различными базами 1С через веб-сервисы часто возникает вопрос, как правильно сформировать запрос, передать параметры аутентификации и, главное, как «заставить» принимающую сторону создать нужный документ. Разберем эту задачу пошагово.

Понимание работы метода ВызватьHTTPМетод

Метод ВызватьHTTPМетод является низкоуровневым инструментом платформы для работы с REST API. В нем параметры передаются не через строку адреса, а через объект HTTPЗапрос. Важное уточнение по поводу параметра ИмяВыходногоФайла: он не является обязательным. Если вы его не заполняете, тело ответа будет доступно непосредственно в объекте HTTPОтвет, откуда его можно считать методом ПолучитьТелоКакСтроку().

Формирование POST-запроса с JSON-данными

Для создания документа в другой базе чаще всего используется POST-запрос, в теле которого передаются данные в формате JSON. Рассмотрим, как подготовить такой запрос:


МетодHTTP = "POST";
РесурсHTTP = "/api/v4/contacts/?type=json";
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("id", 123);
СтруктураПараметры.Вставить("charged", 0);

JSONЗапись = Новый ЗаписьJSON;
JSONЗапись.УстановитьСтроку();
ЗаписатьJSON(JSONЗапись, СтруктураПараметры);
JSONСтрока = JSONЗапись.Закрыть();

ЗапросHTTP = Новый HTTPЗапрос(РесурсHTTP);
ЗапросHTTP.УстановитьТелоИзСтроки(JSONСтрока);
ЗапросHTTP.Заголовки.Вставить("Content-type", "application/json");

СоединениеHTTP = Новый HTTPСоединение("адрес_сервера", 80, "логин", "пароль");
ОтветHTTP = СоединениеHTTP.ВызватьHTTPМетод(МетодHTTP, ЗапросHTTP);

Интеграция через OData: создание документов

Если ваша задача — создание документов в другой базе с использованием встроенного механизма OData, подход немного меняется. OData работает со строго определенными сущностями. Чтобы создать документ, например, РеализацияТоваровУслуг, вам нужно отправить корректный JSON-объект, содержащий ключи (GUID) всех ссылочных типов данных.

Ключевые моменты при работе с OData:

  1. Идентификаторы (GUID): Все ссылки (склады, номенклатура, организации) передаются с суффиксом _Key. Без передачи правильного идентификатора сервер вернет ошибку 400.
  2. Формат даты: Используйте функцию ЗаписатьДатуJSON с параметром ФорматДатыJSON.ISO. OData не понимает другие форматы дат.
  3. Метод отправки: Вместо ВызватьHTTPМетод часто удобнее использовать ОтправитьДляОбработки объекта HTTPСоединение.

Пример функции для отправки данных через OData:


Функция ЗапоститьОбъектОДата(ДанныеОбъекта, АдресРесурса)
    HTTPСоединение = Новый HTTPСоединение(Сервер, 80, Пользователь, Пароль);
    Адрес = "/odata/standard.odata/" + АдресРесурса + "?&$format=json";
    HTTPЗапрос = Новый HTTPЗапрос(Адрес);
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
    
    // Преобразуем структуру в JSON
    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, ДанныеОбъекта);
    HTTPЗапрос.УстановитьТелоИзСтроки(Запись.Закрыть());
    
    Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    Возврат Ответ;
КонецФункции

Альтернативный вариант: HTTP-сервис

Если OData кажется слишком сложной или избыточной, вы всегда можете разработать собственный HTTP-сервис в базе-приемнике. Это наиболее гибкий путь:

Использование расширения конфигурации для создания таких сервисов позволяет избежать изменения типовой конфигурации, сохраняя её на поддержке. Такой подход признан стандартом в современной разработке на 1С при решении задач интеграции.

← На главную