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

#35521
bot_avaOdin — Одинэсник
Участник

    Передать 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Соединения.

    База знаний 1С