Как присоединить область справа и заполнить строки снизу

1. Gaudamus 19.04.24 03:36 Сейчас в теме
Уважаемые коллеги, помогите с головоломкой уже 3 дня бьемся:
УФ 8.3.17
Запросом получили ТЗ (рис. Исходная ТЗ)
А в макете надо путем присоединения областей, справа добавлять продукты, чтобы получить на выходе (рис. Макет)
Пробовал сделать на СКД, не получается вывести данные в таком виде.
Пробую сделать отчет - не выходит.

ТабДок = Новый ТабличныйДокумент;    
 
Макет = УправлениеПечатью.МакетПечатнойФормы("Отчет.ОтчетПоЛидамИПродуктам.Макет");  
 
ШапкаИсточников = Макет.ПолучитьОбласть("Шапка|ОбластьИсточники");    
ТабДок.Вывести(ШапкаИсточников); 
 
Запрос = Новый Запрос 
 ("ВЫБРАТЬ
    |	СУММА(ВЫБОР
	|		КОГДА Лиды.ВариантЗавершения = ЗНАЧЕНИЕ(Перечисление.ВариантЗавершенияРаботыСЛидом.НекачественныйЛид)
	|			ТОГДА 1
	|		ИНАЧЕ 0
	|	КОНЕЦ) КАК Некач,
	|СУММА(ВЫБОР
	|		КОГДА Лиды.ВариантЗавершения = ЗНАЧЕНИЕ(Перечисление.ВариантЗавершенияРаботыСЛидом.ПереведенВПокупателя)
	|			ТОГДА 1
	|		ИНАЧЕ 0
	|	КОНЕЦ) КАК Квалиф,
	|СУММА(ВЫБОР
	|		КОГДА Лиды.ВариантЗавершения <> ЗНАЧЕНИЕ(Перечисление.ВариантЗавершенияРаботыСЛидом.ПереведенВПокупателя)
	| И Лиды.ВариантЗавершения <> ЗНАЧЕНИЕ(Перечисление.ВариантЗавершенияРаботыСЛидом.НекачественныйЛид)
	|			ТОГДА 1
	|		ИНАЧЕ 0
	|	КОНЕЦ) КАК Лид,
	|КОЛИЧЕСТВО(Лиды.Ссылка) КАК Лиды,
	|СпрИсточникиПривлеченияПокупателей.Наименование КАК Источники,
	|СпрКатегорииНоменклатуры.Родитель КАК ГруппаПродукта
    |ИЗ
	|Справочник.Лиды КАК Лиды
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИсточникиПривлеченияПокупателей КАК СпрИсточникиПривлеченияПокупателей
	|	ПО Лиды.ИсточникПривлечения = СпрИсточникиПривлеченияПокупателей.Ссылка
	|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КатегорииНоменклатуры КАК СпрКатегорииНоменклатуры
	|	ПО Лиды.КатегорииНоменклатуры = СпрКатегорииНоменклатуры.Ссылка
    |СГРУППИРОВАТЬ ПО
	|СпрИсточникиПривлеченияПокупателей.Наименование,
	|СпрКатегорииНоменклатуры.Родитель
	|
	|УПОРЯДОЧИТЬ ПО
	|	СпрКатегорииНоменклатуры.Родитель");
	РезультатЗапросаГр=Запрос.Выполнить().Выгрузить();   
	РезультатЗапросаИст=Запрос.Выполнить().Выгрузить();
	РезультатЗапросаСтр=Запрос.Выполнить().Выгрузить();

	// обходим результат запроса
	РезультатЗапросаГр.Свернуть("ГруппаПродукта");
	Для каждого СтрокаЗапросаГр из РезультатЗапросаГр  Цикл
	
		//Выводим шапку продуктов
		ШапкаГрупп = Макет.ПолучитьОбласть("Шапка|ОбластьГруппаПродукта");    
		ШапкаГрупп.Параметры.ГруппаПродукта = СтрокаЗапросаГр.ГруппаПродукта;
		ТабДок.Присоединить(ШапкаГрупп);
	КонецЦикла;
	
	РезультатЗапросаИст.Свернуть("Источники");
	Для каждого СтрокаЗапросаИст из РезультатЗапросаИст Цикл
		СтрокиИст = Макет.ПолучитьОбласть("ОбластьИсточники|Строки"); 
		СтрокиИст.Параметры.Источники = СтрокаЗапросаИст.Источники;
		ТабДок.Вывести(СтрокиИст);
		
	КонецЦикла;
	
			Для каждого СтрокаЗапросаСтр из РезультатЗапросаСтр Цикл
					СтрокиТабДок = Макет.ПолучитьОбласть("ОбластьГруппаПродукта|Строки"); 
					СтрокиТабДок.Параметры.Некач = СтрокаЗапросаСтр.Некач;
					СтрокиТабДок.Параметры.Квалиф = СтрокаЗапросаСтр.Квалиф;
					СтрокиТабДок.Параметры.Лид = СтрокаЗапросаСтр.Лид;
					СтрокиТабДок.Параметры.лиды = СтрокаЗапросаСтр.Некач + СтрокаЗапросаСтр.Квалиф + СтрокаЗапросаСтр.Лид;
					ТабДок.Вывести(СтрокиТабДок);
			КонецЦикла;
	Возврат(ТабДок);         
             
 ПодвалТД = Макет.ПолучитьОбласть("Подвал");
 ТабДок.Вывести(ПодвалТД);

Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
2. jmw 60 19.04.24 04:45 Сейчас в теме
Примерно так:
тПродукты = Новый ТаблицаЗначений;
тПродукты.Колонки.Добавить("Продукт");
тПродукты.Колонки.Добавить("Источники");

тИсточники = Новый ТаблицаЗначений;
тИсточники.Колонки.Добавить("Источник");
тИсточники.Колонки.Добавить("Статусы");

заготовкаИсточники = ЗначениеВСтрокуВнутр(тИсточники);

масИсточники = Новый Массив;

выб = Запрос.Выполнить().Выбрать();
Пока выб.Следующий() Цикл
	
	стрПродукты = тПродукты.Найти(выб.Продукт, "Продукт";
	Если стрПродукты = Неопределено Тогда
		стрПродукты = тПродукты.Добавить();
		стрПродукты.Продукт = выб.Продукт;
		стрПродукты.Источники = ЗначениеИзСтрокиВнутр(заготовкаИсточники);
	КонецЕсли;
	
	стрИсточники = стрПродукты.Источники.Найти(выб.Источник, "Источник");
	Если стрИсточники = Неопределено Тогда
		стрИсточники = стрПродукты.Источники.Добавить();
		стрИсточники.Источник = выб.Источник;
		стрИсточники.Статусы  = Новый Структура("Неудачно, Отремонтировано, ВРемонте, Всего", 0, 0, 0, 0);
	КонецЕсли;
	
	стрИсточники.Статусы.Неудачно = стрИсточники.Статусы.Неудачно        + выб.Неудачно;
	стрИсточники.Статусы.Неудачно = стрИсточники.Статусы.Отремонтировано + выб.Отремонтировано;
	стрИсточники.Статусы.Неудачно = стрИсточники.Статусы.ВРемонте        + выб.ВРемонте;
	стрИсточники.Статусы.Неудачно = стрИсточники.Статусы.Всего           + выб.Всего;
	
	Если масИсточники.Найти(выб.Источник) = Неопределено Тогда
		масИсточники.Добавить(выб.Источник);
	КонецЕсли;
	
КонецЦикла;

// шапка

обл = Макет.ПолучитьОбласть("Шапка|ОбластьИсточники");
таб.Вывести(обл);
обл = Макет.ПолучитьОбласть("Шапка|ОбластьГруппаПродукта");
Для каждого стрПродукты из тПродукты Цикл
	обл.Параметры.ГруппаПродукта = стрПродукты.Продукт;
	таб.Присоединить(обл);
КонецЦикла;

// строки

Для каждого Источник из масИсточники Цикл
	обл = Макет.ПолучитьОбласть("Строки|ОбластьИсточники");
	обл.Параметры.Источник = Источник;
	таб.Вывести(обл);
	
	обл = Макет.ПолучитьОбласть("Строки|ОбластьГруппаПродукта");
	Для каждого стрПродукты из тПродукты Цикл
		стрИсточники = стрПродукты.Источники.Найти(Источник, "Источник");
		обл.Параметры.Установить(стрИсточники);
		таб.Присоединить(обл);
	КонецЦикла;
	
КонецЦикла;
Показать
Gaudamus; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. jmw 60 19.04.24 04:45 Сейчас в теме
Примерно так:
тПродукты = Новый ТаблицаЗначений;
тПродукты.Колонки.Добавить("Продукт");
тПродукты.Колонки.Добавить("Источники");

тИсточники = Новый ТаблицаЗначений;
тИсточники.Колонки.Добавить("Источник");
тИсточники.Колонки.Добавить("Статусы");

заготовкаИсточники = ЗначениеВСтрокуВнутр(тИсточники);

масИсточники = Новый Массив;

выб = Запрос.Выполнить().Выбрать();
Пока выб.Следующий() Цикл
	
	стрПродукты = тПродукты.Найти(выб.Продукт, "Продукт";
	Если стрПродукты = Неопределено Тогда
		стрПродукты = тПродукты.Добавить();
		стрПродукты.Продукт = выб.Продукт;
		стрПродукты.Источники = ЗначениеИзСтрокиВнутр(заготовкаИсточники);
	КонецЕсли;
	
	стрИсточники = стрПродукты.Источники.Найти(выб.Источник, "Источник");
	Если стрИсточники = Неопределено Тогда
		стрИсточники = стрПродукты.Источники.Добавить();
		стрИсточники.Источник = выб.Источник;
		стрИсточники.Статусы  = Новый Структура("Неудачно, Отремонтировано, ВРемонте, Всего", 0, 0, 0, 0);
	КонецЕсли;
	
	стрИсточники.Статусы.Неудачно = стрИсточники.Статусы.Неудачно        + выб.Неудачно;
	стрИсточники.Статусы.Неудачно = стрИсточники.Статусы.Отремонтировано + выб.Отремонтировано;
	стрИсточники.Статусы.Неудачно = стрИсточники.Статусы.ВРемонте        + выб.ВРемонте;
	стрИсточники.Статусы.Неудачно = стрИсточники.Статусы.Всего           + выб.Всего;
	
	Если масИсточники.Найти(выб.Источник) = Неопределено Тогда
		масИсточники.Добавить(выб.Источник);
	КонецЕсли;
	
КонецЦикла;

// шапка

обл = Макет.ПолучитьОбласть("Шапка|ОбластьИсточники");
таб.Вывести(обл);
обл = Макет.ПолучитьОбласть("Шапка|ОбластьГруппаПродукта");
Для каждого стрПродукты из тПродукты Цикл
	обл.Параметры.ГруппаПродукта = стрПродукты.Продукт;
	таб.Присоединить(обл);
КонецЦикла;

// строки

Для каждого Источник из масИсточники Цикл
	обл = Макет.ПолучитьОбласть("Строки|ОбластьИсточники");
	обл.Параметры.Источник = Источник;
	таб.Вывести(обл);
	
	обл = Макет.ПолучитьОбласть("Строки|ОбластьГруппаПродукта");
	Для каждого стрПродукты из тПродукты Цикл
		стрИсточники = стрПродукты.Источники.Найти(Источник, "Источник");
		обл.Параметры.Установить(стрИсточники);
		таб.Присоединить(обл);
	КонецЦикла;
	
КонецЦикла;
Показать
Gaudamus; +1 Ответить
4. Gaudamus 23.04.24 13:23 Сейчас в теме
Уважаемый, jmw. Отдельно Благодарю Вас за предложенный вариант. Вы лучший!
(2)
3. starjevschik 19.04.24 08:56 Сейчас в теме
Учебные задачи логичнее спрашивать у преподавателя, им за это платят... иначе за что деньги берут?
Оставьте свое сообщение

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