Отчет на СКД с запросом из РС с измерением типа ХранилищеЗначений

1. vlad636 4 22.02.19 10:51 Сейчас в теме
Приветствую, Уважаемые. Еще раз обращаюсь к сообществу.
Есть задача написать простенький отчет на СКД с выборкой из РС с измерением типа ХранилищеЗначений.
1. Набросал запрос:
ВЫБРАТЬ
	РС.Номер,
	РС.Дата,
	РС.Значение
ИЗ
	РегистрСведений.РС КАК РС
ГДЕ
	РС.Дата МЕЖДУ &НачПериода И &КонПериода

РС.Значение - измерение типа ХранилищеЗначений, где хранится много чего в виде структуры.
2. В общем модуле набросал функцию:
Функция ПолучитьИзХранилищаТовары(ХранилищеОбъекта) Экспорт
	Хранилище = ХранилищеОбъекта.Получить();
	Если Хранилище = Неопределено Тогда
		Возврат "";
	КонецЕсли;
	Возврат Хранилище.Товары;
КонецФункции

3. и добавил ее в вычисляемые поля.
Но возвращаемое значение функции в этом общем модуле - тоже структура (туда записывается ТЗ Товары из соответствующей обработки).
А теперь вопрос: как в СКД вытащить строки из этой структуры Товары?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Release 22.02.19 11:04 Сейчас в теме
Вопрос из разряда "как мне запросом выбрать фото, где я молодец". Это кто тому, что само условие задачи с извращением - хранить ТЗ в ХранилищеЗначений, чтобы потом обращаться к ней запросом.
А вообще, смотрите в сторону ПриКомпоновкеРезультата().
3. vlad636 4 22.02.19 11:06 Сейчас в теме
(2) Согласен, что извращение, но так пишут наши известные разработчики 1С (хранят ТЗ в ХранилищеЗначений), не буду разглашать название, ибо пост не ради рекламы этой организации.
6. Release 22.02.19 11:17 Сейчас в теме
(3) Вы намекаете, что это какое-то типовое решение? К счастью, мне таких не попадалось.
А вообще, если вам нужно часто работать с данным массивом данных, можно написать код, который будет писать код в какой-нибудь регистр, и работать запросом уже с ним. Это, конечно, при условии, что конфу можно "трогать".
Если нет, тогда один вариант, как я уже писал, ПриКомпоновкеРезультата() в два этапа.
Запросом выбираем данные из РС в ТЗ, далее дополняем или формируем новую ТЗ с разворачиванием в эту ТЗ значений из РС.Значение.
И полученную ТЗ передаем параметром в основной запрос СКД.
8. vlad636 4 22.02.19 11:20 Сейчас в теме
(6) Да типовое решение. Трогать конфу не желательно. Спасибо за совет, попробую ПриКомпановкеРезультата().
9. vlad636 4 22.02.19 12:56 Сейчас в теме
(6) С СКД работаю недавно, можете объяснить как это сделать по шагам:
Запросом выбираем данные из РС в ТЗ, далее дополняем или формируем новую ТЗ с разворачиванием в эту ТЗ значений из РС.Значение.
И полученную ТЗ передаем параметром в основной запрос СКД.
, хотя бы в общих чертах
10. Release 22.02.19 13:02 Сейчас в теме
(9) А может вы скажете, что конкретно вам непонятно? Как выбрать данные запросом в ТЗ? Или как создать новую ТЗ и заполнить ее? Или еще что?
12. vlad636 4 22.02.19 13:06 Сейчас в теме
(10) Как я понимаю, мне необходимо добавить новый набор данных - Объект и его заполнить товарами программно, но в какой процедуре это делается?
14. Vida 15 22.02.19 22:29 Сейчас в теме
(6)И мне и мне пожалуйста поясните как
И полученную ТЗ передаем параметром в основной запрос СКД.

у меня внешняя обработка (не отчет!) поэтому ПриКомпоновкеРезультата() нету. Без этого никак?
5. vlad636 4 22.02.19 11:17 Сейчас в теме
(2) Как в процедуре ПриКомпоновкеРезультата() выйти на нужную группировку? В отчете хочу сделать 2 группировки: "Номер, Дата" и "Товары".
4. singlych 22.02.19 11:16 Сейчас в теме
Ну тогда уж напиши в самой функции возврат того что нужно.
7. vlad636 4 22.02.19 11:18 Сейчас в теме
(4) Ну вернет она мне 1 товар, а мне надо все. Вот я и сделал чтобы возвращала ТЗ.
11. oleg-x 27 22.02.19 13:04 Сейчас в теме
Без использования СКД, Вы же можете получить нужную Вам таблицу из хранилища?
Если да, то в СКД сделайте не набор данных - запрос, а набор данных - объект и подключите эту таблицу к СКД. Придется описать все поля, но скомпоновать сможете как пожелаете.
13. oleg-x 27 22.02.19 13:12 Сейчас в теме
Пример кода подключения любой таблицы к СКД
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	Таблица = ВыпускБлюд.Выгрузить();
	СгруппироватьТаблицу(Таблица);
	
	СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	//Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;  
	// - Если сделать так, как показано выше(рекомендуют на некоторых ресурсах), то при изменении настроек в режиме клиента
	// этих изменений Вы не увидите, потому что настройки всегда будут по умолчанию. Как правильно - вариант ниже
	Настройки = КомпоновщикНастроек.ПолучитьНастройки(); 
 	
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; 
    
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;	
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);	
	
	ВнешнийНаборДанных = Новый Структура("Таблица", Таблица); 
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; 
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки); 
	
	ДокументРезультат.Очистить();
	
 	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; 
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат); 
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	
КонецПроцедуры
Показать
Оставьте свое сообщение

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