&НаКлиенте
Процедура СгенерироватьJSON(Команда)
СгенерироватьJSONНаСервере();
КонецПроцедуры
&НаСервере
Процедура СгенерироватьJSONНаСервере()
[span_1](start_span)// 1. Создаем массивы для каждого канала продаж[span_1](end_span)
МассивRetail = Новый Массив;
МассивProf = Новый Массив;
МассивMarketplace = Новый Массив;
// 2. Бежим циклом по нашему "стейту" (визуальной таблице)
Для Каждого СтрокаТаблицы Из ДанныеДляОтправки Цикл
// Создаем объект (аналог dict/словаря) для конкретной продажи
ОбъектПродажи = Новый Структура;
// Заполняем обязательные поля. Уникальный идентификатор преобразуем в строку
ОбъектПродажи.Вставить("id", Строка(СтрокаТаблицы.Документ.УникальныйИдентификатор()));
ОбъектПродажи.Вставить("date", Формат(СтрокаТаблицы.Дата, "ДФ=dd.MM.yyyy")); [span_2](start_span)// Строгий формат даты по ТЗ[span_2](end_span)
ОбъектПродажи.Вставить("customerCrmCode", СтрокаТаблицы.КодCRM);
ОбъектПродажи.Вставить("customerName", Строка(СтрокаТаблицы.Контрагент));
ОбъектПродажи.Вставить("goodsCode", СтрокаТаблицы.КодГотоплекс);
ОбъектПродажи.Вставить("volume", СтрокаТаблицы.Объем);
ОбъектПродажи.Вставить("unit", СтрокаТаблицы.ЕдИзмерения);
ОбъектПродажи.Вставить("amount", СтрокаТаблицы.Сумма);
[span_3](start_span)// Если это ПРОФ-продажа, ТЗ требует добавить номер спецификации[span_3](end_span)
Если СтрокаТаблицы.КаналВыгрузки = "prof" Тогда
ОбъектПродажи.Вставить("specificationId", СтрокаТаблицы.Спецификация);
КонецЕсли;
// Маршрутизируем объект в нужный массив
Если СтрокаТаблицы.КаналВыгрузки = "retail" Тогда
МассивRetail.Добавить(ОбъектПродажи);
ИначеЕсли СтрокаТаблицы.КаналВыгрузки = "prof" Тогда
МассивProf.Добавить(ОбъектПродажи);
ИначеЕсли СтрокаТаблицы.КаналВыгрузки = "marketplace" Тогда
МассивMarketplace.Добавить(ОбъектПродажи);
КонецЕсли;
КонецЦикла;
[span_4](start_span)// 3. Собираем корневой пакет данных[span_4](end_span)
ПакетДанных = Новый Структура;
[span_5](start_span)// ТЗ допускает передавать пустые массивы, если по каналу нет продаж[span_5](end_span)
ПакетДанных.Вставить("retail", МассивRetail);
ПакетДанных.Вставить("prof", МассивProf);
ПакетДанных.Вставить("marketplace", МассивMarketplace);
// Массивы остатков пока объявляем пустыми
ПакетДанных.Вставить("retailStocks", Новый Массив);
ПакетДанных.Вставить("profStocks", Новый Массив);
// 4. Сериализация в JSON
// Задаем параметры, чтобы JSON был с отступами (красивый pretty-print)
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(ПараметрыJSON);
// Платформа сама рекурсивно обойдет все структуры и массивы
ЗаписатьJSON(Запись, ПакетДанных);
// Закрываем запись и выкидываем результат в наше текстовое поле на форме
ТекстJSON = Запись.Закрыть();
КонецПроцедуры