Загрузка данных


&НаКлиенте
Процедура Сгенерировать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 = Запись.Закрыть();
	
КонецПроцедуры