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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как передать JSON каталог номенклатуры через HTTP-сервис в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35520
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        как передать json c каталогом номенклатуры через http сервис

      • #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 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С