Программно получить список номенклатуры в скидках

1. xlink 26.03.24 13:44 Сейчас в теме
В скидках(наценках) установлено:
Предоставляется на: "Номенклатура по отбору" и указан отбор - Номенклатура из такой-то группы или списка групп.
В справочнике "СкидкиНаценки", судя по гуглу, этот отбор хранится в реквизите "ХранилищеНастроекКомпоновкиДанных". Не могу найти как извлечь этот набор и по нему вывести сам список номенклатуры.

Делаю так:
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СкидкиНаценки.Ссылка КАК Ссылка,
		|	СкидкиНаценки.ЗначениеСкидкиНаценки КАК ЗначениеСкидкиНаценки,
		|	СкидкиНаценки.ВариантОтбораНоменклатуры КАК ВариантОтбораНоменклатуры,
		|	СкидкиНаценки.ХранилищеНастроекКомпоновкиДанных КАК ХранилищеНастроекКомпоновкиДанных
		|ИЗ
		|	Справочник.СкидкиНаценки КАК СкидкиНаценки
		|ГДЕ
		|	СкидкиНаценки.СпособПредоставления = &СпособПредоставления
		|	И СкидкиНаценки.ВариантОтбораНоменклатуры = &ВариантОтбораНоменклатуры";
	
	Запрос.УстановитьПараметр("ВариантОтбораНоменклатуры", Перечисления.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.ОтборКомпоновкиДанных);
	Запрос.УстановитьПараметр("СпособПредоставления", Перечисления.СпособыПредоставленияСкидокНаценок.Процент);
	
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	СпрСкидки = Справочники.СкидкиНаценки.Выбрать();
	Пока Выборка.Следующий() Цикл
		Настройки = Выборка.ХранилищеНастроекКомпоновкиДанных.Получить();
       
               //как дальше сделать выборку?
		
	КонецЦикла;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Vadim-SH 27.03.24 11:23 Сейчас в теме
(1) Нужно использовать ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений
Примерно вот так:

//Насчет макета не уверен, возможно подойдет "ОтборСтрок" или "ОтборСтрокНоменклатура"
	СхемаКомпоновкиДанных = Справочники.СкидкиНаценки.ПолучитьМакет("ОтборСтрок");
	
	ВыборкаХранилищеНастроекКомпоновкиДанных = Выборка.ХранилищеНастроекКомпоновкиДанных; // ХранилищеЗначения
	НастройкиКомпоновкиДанных = ВыборкаХранилищеНастроекКомпоновкиДанных.Получить();


	// Подготовка компоновщика макета компоновки данных, загрузка настроек
	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

	Если НастройкиКомпоновкиДанных <> Неопределено Тогда
		КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновкиДанных);
		КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);
	Иначе
		КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
	КонецЕсли;

//Устанавливаем параметры
	Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Параметр1");
	Если Параметр <> Неопределено Тогда
		Параметр.Использование = Истина;
		Параметр.Значение = Параметр1;
	КонецЕсли;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(
		СхемаКомпоновкиДанных,
		КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"), Ложь);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,,Истина);
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

	ТЗРезультат = Новый ТаблицаЗначений();
	ПроцессорВывода.УстановитьОбъект(ДанныеОтчета);
	ТЗРезультат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);


Показать
3. xlink 29.03.24 13:50 Сейчас в теме
(2) Благодарю. Прочел и остро ощутил нехватку квалификации ))
Очень нетривиальное решение.
Попроще точно это не решается?
4. Vadim-SH 01.04.24 06:28 Сейчас в теме
(3) Наверно нет, если предложений больше не поступает.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот