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


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