Отправка данных на сайт post — запросом в формате JSON

Пример использования стандартных механизмов платформы 1С, начиная с версии 8.3.6.1977.

JSON (JavaScript Object Notation) это текстовый формат обмена данными, широко используемый в веб-приложениях. По сравнению с XML он является более лаконичным и занимает меньше места. Кроме этого все браузеры имеют встроенные средства для работы с JSON.

Необходимость работы с этим форматом на уровне платформы обусловлена не только тем, что это «модный современный» формат, который прикладные решения 1С:Предприятия сами по себе могут использовать для интеграции со сторонними приложениями. Другая причина заключается ещё и в том, что JSON активно используется в HTTP интерфейсах. А в 1С:Предприятии как раз есть такие механизмы, в которых хочется использовать этот формат. Это REST интерфейс приложения, автоматически генерируемый платформой, и HTTP-сервисы, которые вы можете создавать самостоятельно. (источник: http://v8.1c.ru/o7/201410json/index.htm). 

 

Простой код отправки данных выглядит так:

//здесь выполняем запрос, в котором есть данные о нашых товарах (код товара (sku),
//Наименование товара(name), цена(price) и остаток(qty))
Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();


//Создали запись ЗаписьJSON
ЗаписьJSON = Новый ЗаписьJSON;
//Задаем параметры без переноса строк, можно и с переносом, как кому нравится
тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);
ЗаписьJSON.УстановитьСтроку(тПараметрыJSON);


МассивДанныхJSON = Новый Массив;
СтруктураДанныхJSON = Новый Структура;

//Выбираем данные из запроса и записываем в массив "МассивДанныхJSON"

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Каждая запись товара у нас отдельная структура...
тДанные = Новый Структура;
тДанные.Вставить("sku", ВыборкаДетальныеЗаписи.sku);
тДанные.Вставить("name", ВыборкаДетальныеЗаписи.name);
тДанные.Вставить("price", ВыборкаДетальныеЗаписи.price);
тДанные.Вставить("qty", ВыборкаДетальныеЗаписи.qty);
//Добавляем структуру с информацией о товаре в наш массив "МассивДанныхJSON"
МассивДанныхJSON.Добавить(тДанные);

КонецЦикла;
// вставляем наш массив в ещеодну структуру
СтруктураДанныхJSON.Вставить("test", МассивДанныхJSON);

ЗаписатьJSON(ЗаписьJSON, СтруктураДанныхJSON);
//Здесь нам платформа переделала нашу сложную структуру в строку данных в формате JSON
СтрокаJS = ЗаписьJSON.Закрыть();
//В этот файл для примера наш сайт сформирует ответ после отправки на него данных методом POST
ФайлОтвета = КаталогВременныхФайлов()+ "answer.txt";

//здесь надо указать путь к сайту
HTTPСоединение = Новый HTTPСоединение("mysite.com/download.php");
//создаем запрос данных методом POST
запросPOST = Новый HTTPЗапрос("POST");

//это обязательный заголовок тела запроса
запросPOST.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
//Здесь задаем текст нашей отформатированной строки + задаем формат сроки
запросPOST.УстановитьТелоИзСтроки("mData="+СтрокаJS,"windows-1251",ИспользованиеByteOrderMark.НеИспользовать);



Попытка
//Отправляем для обрааботки на наш сервер
HTTPСоединение.ОтправитьДляОбработки(запросPOST, ФайлОтвета);

Исключение
#Если клиент Тогда
Сообщить(ОписаниеОшибки());
#КонецЕсли
КонецПопытки;

 

9 Comments

  1. webester

    Ни одного комментария, ни в самом коде, не после. Ну да мы же программисты можем сами открыть СП и разобраться, что ты написал и почему. Но как бы смысл тогда в статье, если все равно надо лезть в СП?

    Reply
  2. kirillkr

    Зачем сохранять ответ от сервера в файле? Не надо захламлять сервер временными файлами. У него и без Вас полно мусора от самой системы.

    Reply
  3. vaniiok

    (1)Извините, исправил

    Reply
  4. vaniiok

    (2)это пример, можно и без этого

    Reply
  5. Идальго

    (2) Как вариант, результат сохраняют в файл для того, чтобы затем его последовательно прочитать (чтоб память пожалеть) или переслать/сохранить. Первый случай особенно полезен, если ответ мегадлинный(большой), или вообще состоит из нескольких частей, которые затем можно «склеить».

    Reply
  6. kirillkr

    (5) А есть системы с маленьким жестким диском для сервера приложений, но большим объемом памяти.

    А в данном примере не показано удаление этого файла после обработки результата.

    Reply
  7. kaps22

    //создаем запрос данных методом POST

    запросPOST = Новый HTTPЗапрос(«POST»);

    хорошо бы пометить, что здесь вместо «POST» должен быть адрес ресурса.

    Новый HTTPЗапрос(АдресРесурса,Заголовки)

    Reply
  8. darkmessiahan
    СтрокаJS = ЗаписьJSON.Закрыть();

    если поставить точку останова тут, то ЗаписьJSON.Закрыть() будет строкой, а СтрокаJS Неопределенно

    И если дальше шагнуть, то то и то станет Неопределенно

    1С:Предприятие 8.3 (8.3.13.1513)

    Reply
  9. xabigv

    (8)

    СтрокаJS = ЗаписьJSON.Закрыть();

    попробуй убрать строку

    ЗаписьJSON.ОткрытьФайл

    если имеется

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *