Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Десериализация прикладных типов с помощью функции восстановления
Дальше: HTTP-сервисы (REST)

Смешанная техника работы

Для упрощения работы с JSON можно совмещать различные техники при формировании одного документа. Например, необходимо сформировать документ, который содержит некоторый набор структур и массив. В этом случае можно все оформление документа выполнять с помощью потоковой техники, а уже готовые структуры и массив записывать с помощью объектной техники.

Например, нам нужно записать в JSON-документ список оплат поставщикам за поступившие товары. Этот список должен содержать дату формирования и набор оплат (соответствующий некоторому критерию).

Каждая оплата поставщику характеризуется следующими параметрами:

Процедура, которая формирует JSON-документ, может иметь следующий вид (листинг 1.54).

Листинг 1.54. Пример сериализации в JSON-документ с применением смешанной техники

&НаСервереБезКонтекста

Процедура СовмещениеТехникНаСервере()

 

СписокОплат = Документы.ОплатаПоставщикам.Выбрать();

 

// Создать настройки сериализации для записи дат.

НастройкиСериализации = Новый НастройкиСериализацииJSON;

НастройкиСериализации.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата;

НастройкиСериализации.ФорматСериализацииДаты = ФорматДатыJSON.ISO;

НастройкиСериализации.СериализовыватьМассивыКакОбъекты = Истина;

 

// Задать параметры записи JSON.

ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);

 

// Создать объект записи и открыть файл, в который будет выполняться запись.

Запись = Новый ЗаписьJSON;

Запись.ПроверятьСтруктуру = Истина;

Запись.ОткрытьФайл("c:\temp\combinedWrite.json", , , ПараметрыJSON);

 

// Выполнить запись значений с помощью объекта записи (Запись).

// Записать начало корневого объекта.

Запись.ЗаписатьНачалоОбъекта();

 

Запись.ЗаписатьИмяСвойства("ДатаФормирования");

Запись.ЗаписатьЗначение(ЗаписатьДатуJSON(ТекущаяДата(), ФорматДатыJSON.ISO, ВариантЗаписиДатыJSON.УниверсальнаяДата));

 

Запись.ЗаписатьИмяСвойства("Оплаты");

 

// Создать массив структур с данными документа ОплатаПоставщикам.

Оплаты = Новый Массив;

Пока СписокОплат.Следующий() Цикл

ОплатаПоставщику = Новый Структура("Ссылка, Номер, Дата, Поставщик, Сумма");

ОплатаПоставщику.Ссылка = Строка(СписокОплат.Ссылка);

ОплатаПоставщику.Номер = СписокОплат.Номер;

ОплатаПоставщику.Дата = СписокОплат.Дата;

ОплатаПоставщику.Поставщик = Строка(СписокОплат.Поставщик);

ОплатаПоставщику.Сумма = СписокОплат.Сумма;

 

Оплаты.Добавить(ОплатаПоставщику);

КонецЦикла;

 

// Выполнить запись данных (Оплаты) с помощью объекта записи (Запись).

ЗаписатьJSON(Запись, Оплаты, НастройкиСериализации);

 

// Записать конец корневого объекта.

Запись.ЗаписатьКонецОбъекта();

 

// Завершить работу с файлом.

Запись.Закрыть();

 

КонецПроцедуры

В процедуре сначала создается объект Запись, который открывает файл для низкоуровневой записи. Затем с помощью потоковой техники в файл записывается дата формирования списка оплат как универсальная дата в формате ISO.

После этого создается массив Оплаты. Выборка документов ОплатаПоставщикам обходится в цикле, и на каждом шаге цикла структура ОплатаПоставщику, заполненная данными этой выборки, добавляется в массив Оплаты.

Затем с помощью объектной техники методом ЗаписатьJSON() массив Оплаты записывается в JSON-документ.

В результате сформированный JSON-документ будет иметь следующий вид (листинг 1.55).

Листинг 1.55. Содержимое JSON-документа

{

"ДатаФормирования": "2019-03-22T15:06:10Z",

"Оплаты": {

"0": {

"Ссылка": "Оплата поставщикам 000000003 от 05.03.2019 12:00:00",

"Номер": "000000003",

"Дата": "2019-03-05T09:00:00Z",

"Поставщик": "ООО \"Топаз\"",

"Сумма": 500500

},

"1": {

"Ссылка": "Оплата поставщикам 000000001 от 13.03.2019 12:00:00",

"Номер": "000000001",

"Дата": "2019-03-13T09:00:00Z",

"Поставщик": "ООО \"Стиль\"",

"Сумма": 300300

},

"2": {

"Ссылка": "Оплата поставщикам 000000002 от 20.03.2019 12:00:00",

"Номер": "000000002",

"Дата": "2019-03-20T09:00:00Z",

"Поставщик": "ОАО \"Фонтан\"",

"Сумма": 700700

}

}

}

Назад: Десериализация прикладных типов с помощью функции восстановления
Дальше: HTTP-сервисы (REST)