При интеграции между различными базами 1С через веб-сервисы часто возникает вопрос, как правильно сформировать запрос, передать параметры аутентификации и, главное, как «заставить» принимающую сторону создать нужный документ. Разберем эту задачу пошагово.
Метод ВызватьHTTPМетод является низкоуровневым инструментом платформы для работы с REST API. В нем параметры передаются не через строку адреса, а через объект HTTPЗапрос. Важное уточнение по поводу параметра ИмяВыходногоФайла: он не является обязательным. Если вы его не заполняете, тело ответа будет доступно непосредственно в объекте HTTPОтвет, откуда его можно считать методом ПолучитьТелоКакСтроку().
Для создания документа в другой базе чаще всего используется 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 работает со строго определенными сущностями. Чтобы создать документ, например, РеализацияТоваровУслуг, вам нужно отправить корректный JSON-объект, содержащий ключи (GUID) всех ссылочных типов данных.
Ключевые моменты при работе с OData:
_Key. Без передачи правильного идентификатора сервер вернет ошибку 400.ЗаписатьДатуJSON с параметром ФорматДатыJSON.ISO. OData не понимает другие форматы дат.ВызватьHTTPМетод часто удобнее использовать ОтправитьДляОбработки объекта HTTPСоединение.Пример функции для отправки данных через OData:
Функция ЗапоститьОбъектОДата(ДанныеОбъекта, АдресРесурса)
HTTPСоединение = Новый HTTPСоединение(Сервер, 80, Пользователь, Пароль);
Адрес = "/odata/standard.odata/" + АдресРесурса + "?&$format=json";
HTTPЗапрос = Новый HTTPЗапрос(Адрес);
HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
// Преобразуем структуру в JSON
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, ДанныеОбъекта);
HTTPЗапрос.УстановитьТелоИзСтроки(Запись.Закрыть());
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Возврат Ответ;
КонецФункции
Если OData кажется слишком сложной или избыточной, вы всегда можете разработать собственный HTTP-сервис в базе-приемнике. Это наиболее гибкий путь:
HTTP-сервисе конфигурации.Документы.ПеремещениеТоваров.СоздатьДокумент()).Использование расширения конфигурации для создания таких сервисов позволяет избежать изменения типовой конфигурации, сохраняя её на поддержке. Такой подход признан стандартом в современной разработке на 1С при решении задач интеграции.