База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как передать JSON каталог номенклатуры через HTTP-сервис в 1С? › Ответ в теме: Как передать JSON каталог номенклатуры через HTTP-сервис в 1С?
Передать JSON с каталогом номенклатуры через HTTP-сервис в 1С можно с помощью объекта HTTPСоединение и HTTPЗапрос, сформировав тело запроса в формате JSON. Для этого:
1. Подготовьте структуру данных каталога номенклатуры в виде структуры или массива структур 1С, содержащих нужные поля (например, Код, Наименование, Артикул и т.п.).
2. Сериализуйте эту структуру в JSON с помощью метода ЗаписатьJSON().
3. Создайте HTTPСоединение с адресом сервера, куда отправляете запрос.
4. Создайте HTTPЗапрос, укажите метод POST, заголовки (Content-Type: application/json), и установите тело запроса из JSON-строки.
5. Отправьте запрос через HTTPСоединение.ОтправитьДляОбработки().
Пример кода (упрощённый):
&НаСервере
Функция ОтправитьКаталогНоменклатуры(АдресСервиса, Каталог)
МаксимальноеВремяОжиданияHTTP = 30000;
КодУспехаHTTP = 200;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Каталог);
ТелоЗапроса = ЗаписьJSON.Закрыть();
Адрес = АдресСервиса;
Адрес = СтрЗаменить(Адрес, "https://", "");
Адрес = СтрЗаменить(Адрес, "http://", "");
ПозицияСлэша = СтрНайти(Адрес, "/");
Хост = Адрес;
Ресурс = "/";
Если ПозицияСлэша > 0 Тогда
Хост = Сред(Адрес, 1, ПозицияСлэша - 1);
Ресурс = Сред(Адрес, ПозицияСлэша);
КонецЕсли;
Порт = 80;
SSL = Неопределено;
Если СтрНайти(АдресСервиса, "https://") = 1 Тогда
Порт = 443;
SSL = Новый ЗащищенноеСоединениеOpenSSL();
КонецЕсли;
HTTPСоединение = Новый HTTPСоединение(Хост, Порт, , , , , SSL, , , МаксимальноеВремянОжиданияHTTP);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос = Новый HTTPЗапрос(Ресурс, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Если HTTPОтвет.КодСостояния = КодУспехаHTTP Тогда
Возврат HTTPОтвет.ПолучитьТелоКакСтроку();
Иначе
Ошибка("Ошибка отправки: " + HTTPОтвет.КодСостояния);
Возврат Неопределено;
КонецЕсли;
КонецФункции
Вызов функции:
Каталог = Новый Массив;
Элемент = Новый Структура;
Элемент.Вставить("Code", "0001");
Элемент.Вставить("Description", "Товар 1");
Элемент.Вставить("Артикул", "A123");
Каталог.Добавить(Элемент);
ОтправитьКаталогНоменклатуры("https://server/base/odata/standard.odata/Catalog_Номенклатура", Каталог);
Если нужно передавать один элемент, можно передать структуру, если несколько — массив структур.
Если сервис требует аутентификацию, передайте логин и пароль в конструктор HTTPСоединения.