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


&НаКлиенте
Процедура ВыполнитьВыгрузку(Команда)
	
	// Получаем сформированные строки JSON с сервера
	СтрокаJSONКонтрагенты = СформироватьJSONКонтрагентов();
	СтрокаJSONНоменклатура = СформироватьJSONНоменклатуры();
	
	// Вызываем диалоги сохранения файлов
	СохранитьТекстВФайл(СтрокаJSONКонтрагенты, "Контрагенты");
	СохранитьТекстВФайл(СтрокаJSONНоменклатура, "Номенклатура");
	
	Сообщить("Выгрузка успешно завершена!");
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьТекстВФайл(Текст, ИмяПоУмолчанию)
	
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Диалог.Фильтр = "Файл JSON (*.json)|*.json";
	Диалог.ПолноеИмяФайла = ИмяПоУмолчанию + ".json";
	Диалог.Заголовок = "Выберите файл для сохранения: " + ИмяПоУмолчанию;
	
	Если Диалог.Выбрать() Тогда
		ТекстовыйДокумент = Новый ТекстовыйДокумент;
		ТекстовыйДокумент.УстановитьТекст(Текст);
		ТекстовыйДокумент.Записать(Диалог.ПолноеИмяФайла, КодировкаТекста.UTF8);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция СформироватьJSONНоменклатуры()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Ссылка КАК Ссылка,
		|	Номенклатура.Наименование КАК Наименование,
		|	ЕСТЬNULL(Номенклатура.Артикул, """") КАК Артикул,
		|	ПРЕДСТАВЛЕНИЕ(Номенклатура.ЕдиницаИзмерения) КАК ЕдиницаИзмерения
		|ПОМЕСТИТЬ ВТ_Номенклатура
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ГДЕ
		|	НЕ Номенклатура.ПометкаУдаления
		|	И НЕ Номенклатура.ЭтоГруппа
		|;
		|ВЫБРАТЬ
		|	ВТ_Номенклатура.Ссылка КАК Ссылка,
		|	ВТ_Номенклатура.Наименование КАК Наименование,
		|	ВТ_Номенклатура.Артикул КАК Артикул,
		|	ВТ_Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
		|	ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
		|ИЗ
		|	ВТ_Номенклатура КАК ВТ_Номенклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
		|		ПО ВТ_Номенклатура.Ссылка = ШтрихкодыНоменклатуры.Номенклатура
		|ИТОГИ ПО
		|	Ссылка";
		
	МассивДанных = Новый Массив;
	Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока Выборка.Следующий() Цикл
		Данные = Новый Структура;
		Данные.Вставить("Наименование", Выборка.Наименование);
		Данные.Вставить("Артикул", Выборка.Артикул);
		Данные.Вставить("ЕдиницаИзмерения", Выборка.ЕдиницаИзмерения);
		
		Штрихкоды = Новый Массив;
		ДетальнаяВыборка = Выборка.Выбрать();
		Пока ДетальнаяВыборка.Следующий() Цикл
			Если ЗначениеЗаполнено(ДетальнаяВыборка.Штрихкод) Тогда
				Штрихкоды.Добавить(ДетальнаяВыборка.Штрихкод);
			КонецЕсли;
		КонецЦикла;
		Данные.Вставить("Штрихкоды", Штрихкоды);
		
		МассивДанных.Добавить(Данные);
	КонецЦикла;
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб));
	ЗаписатьJSON(ЗаписьJSON, МассивДанных);
	
	Возврат ЗаписьJSON.Закрыть();
	
КонецФункции

&НаСервере
Функция СформироватьJSONКонтрагентов()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Контрагенты.Ссылка КАК Ссылка,
		|	Контрагенты.Наименование КАК Наименование,
		|	ЕСТЬNULL(Контрагенты.ИНН, """") КАК ИНН,
		|	ЕСТЬNULL(Контрагенты.КПП, """") КАК КПП
		|ПОМЕСТИТЬ ВТ_Контрагенты
		|ИЗ
		|	Справочник.Контрагенты КАК Контрагенты
		|ГДЕ
		|	НЕ Контрагенты.ПометкаУдаления
		|;
		|ВЫБРАТЬ
		|	ВТ_Контрагенты.Ссылка КАК Ссылка,
		|	ВТ_Контрагенты.Наименование КАК Наименование,
		|	ВТ_Контрагенты.ИНН КАК ИНН,
		|	ВТ_Контрагенты.КПП КАК КПП,
		|	КонтактнаяИнформация.Вид.Наименование КАК ВидКИ,
		|	КонтактнаяИнформация.Представление КАК ПредставлениеКИ
		|ИЗ
		|	ВТ_Контрагенты КАК ВТ_Контрагенты
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация
		|		ПО ВТ_Контрагенты.Ссылка = КонтактнаяИнформация.Ссылка
		|ИТОГИ ПО
		|	Ссылка";
		
	МассивДанных = Новый Массив;
	Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока Выборка.Следующий() Цикл
		Данные = Новый Структура;
		Данные.Вставить("Наименование", Выборка.Наименование);
		Данные.Вставить("ИНН", Выборка.ИНН);
		Данные.Вставить("КПП", Выборка.КПП);
		
		Контакты = Новый Массив;
		ДетальнаяВыборка = Выборка.Выбрать();
		Пока ДетальнаяВыборка.Следующий() Цикл
			Если ЗначениеЗаполнено(ДетальнаяВыборка.ПредставлениеКИ) Тогда
				Контакт = Новый Структура("Вид, Значение", ДетальнаяВыборка.ВидКИ, ДетальнаяВыборка.ПредставлениеКИ);
				Контакты.Добавить(Контакт);
			КонецЕсли;
		КонецЦикла;
		Данные.Вставить("КонтактнаяИнформация", Контакты);
		
		МассивДанных.Добавить(Данные);
	КонецЦикла;
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб));
	ЗаписатьJSON(ЗаписьJSON, МассивДанных);
	
	Возврат ЗаписьJSON.Закрыть();
	
КонецФункции