СКД: программное создание колонок-групп

1. succub1_5 89 09.07.19 09:49 Сейчас в теме
Здравствуйте, в СКД программно создаю колонки - все ок. А можно как-то создать "групповую колонку" со своим заголовком, объединив 3 колонки, вот кусок кода:
	Для Сч = 1 По КолПериодов Цикл
		
		ИмяКолонки = Формат(Сч,"ЧН=0; ЧГ=");
		
		ИмяКолонки = "Остаток_" + Формат(Сч,"ЧН=0; ЧГ=");
		Поле = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		Поле.Заголовок = ИмяКолонки;
		Поле.ПутьКДанным = ИмяКолонки;
		Поле.Поле = ИмяКолонки;
		Поле.ТипЗначения = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 2));

		ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
		ПолеРесурса.Выражение = "СУММА("+ИмяКолонки+")";
		ПолеРесурса.ПутьКДанным = ИмяКолонки;
		
		ВыбранноеПоле = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле.Заголовок = ИмяКолонки;
		ВыбранноеПоле.Использование = Истина;
		ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонки);
		
		
		ИмяКолонки = "Себестоимость_" + Формат(Сч,"ЧН=0; ЧГ=");
		Поле = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		Поле.Заголовок = ИмяКолонки;
		Поле.ПутьКДанным = ИмяКолонки;
		Поле.Поле = ИмяКолонки;
		Поле.ТипЗначения = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 2));

		ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
		ПолеРесурса.Выражение = "СРЕДНЕЕ("+ИмяКолонки+")";
		ПолеРесурса.ПутьКДанным = ИмяКолонки;
		
		ВыбранноеПоле = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле.Заголовок = ИмяКолонки;
		ВыбранноеПоле.Использование = Истина;
		ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонки);
		
		
		ИмяКолонки = "Сумма_" + Формат(Сч,"ЧН=0; ЧГ=");
		Поле = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		Поле.Заголовок = ИмяКолонки;
		Поле.ПутьКДанным = ИмяКолонки;
		Поле.Поле = ИмяКолонки;
		Поле.ТипЗначения = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 2));

		ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
		ПолеРесурса.Выражение = "СУММА("+ИмяКолонки+")";
		ПолеРесурса.ПутьКДанным = ИмяКолонки;
		
		ВыбранноеПоле = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле.Заголовок = ИмяКолонки;
		ВыбранноеПоле.Использование = Истина;
		ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонки);
	КонецЦикла;
Показать
Найденные решения
3. dhurricane 09.07.19 11:02 Сейчас в теме
Если речь идет лишь о группировке полей в настройках отчета, а не в наборах данных, то проще так:
ГруппаПолей = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
ГруппаПолей.Заголовок = "Моя группа";

...

ВыбранноеПоле = ГруппаПолей.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Заголовок = ИмяКолонки;
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонки);
Показать
succub1_5; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 09.07.19 10:58 Сейчас в теме
Думаю, что как-то так:
ИмяГруппы = "МояГруппа";

ИмяКолонки = "Остаток_" + Формат(Сч,"ЧН=0; ЧГ=");
Поле = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
Поле.Заголовок = ИмяКолонки;
Поле.ПутьКДанным = ИмяГруппы + "." + ИмяКолонки;
Поле.Поле = ИмяКолонки;

...

ИмяКолонки = "Себестоимость_" + Формат(Сч,"ЧН=0; ЧГ=");
Поле = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
Поле.Заголовок = ИмяКолонки;
Поле.ПутьКДанным = ИмяГруппы + "." + ИмяКолонки;
Поле.Поле = ИмяКолонки;

...

ГруппаПолей = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПапкаПолейНабораДанныхСхемыКомпоновкиДанных"));
ГруппаПолей.Заголовок = "Моя группа";
ГруппаПолей.ПутьКДанным = ИмяГруппы;
Показать
Выражения полей ресурсов только нужно не забыть поправить.
4. succub1_5 89 09.07.19 11:05 Сейчас в теме
6. dhurricane 09.07.19 11:08 Сейчас в теме
(4) Вероятнее всего Вы не везде пути в полях компоновки поправили пути. Попробуйте вариант из [3].
3. dhurricane 09.07.19 11:02 Сейчас в теме
Если речь идет лишь о группировке полей в настройках отчета, а не в наборах данных, то проще так:
ГруппаПолей = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
ГруппаПолей.Заголовок = "Моя группа";

...

ВыбранноеПоле = ГруппаПолей.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Заголовок = ИмяКолонки;
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонки);
Показать
succub1_5; +1 Ответить
5. succub1_5 89 09.07.19 11:07 Сейчас в теме
(3) ничего не изменилось - также выводит
7. dhurricane 09.07.19 11:09 Сейчас в теме
(5) Не смотря на изменения в этой инструкции?
ВыбранноеПоле = ГруппаПолей.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
8. succub1_5 89 09.07.19 11:15 Сейчас в теме
(7)да, я когда гуглил, находил похожие задачи с похожим кодом, но тоже решения рабочего не было.
*https://forum.infostart.ru/forum9/topic136752/
*http://wiki.programstore.ru/1s-skd-programmnoe-sozdanie-skd/
- не делает.

P.S. у меня 4 периода по 3 колонки (остаток, себ, сумма) - все ок, хочу в шапке объединить по периодам и заголовки у групповых колонок типа 31.03.2019, 30.06.2019 и т.п.
9. succub1_5 89 09.07.19 11:42 Сейчас в теме
(3) спасибо за направление, чуть подправил, буквально одну строчку и все стало как надо.
	Для Сч = 1 По КолПериодов Цикл		
		
		ИмяГруппы = СпВыбрДаты[Сч-1].Значение;
		
		ГруппаПолей = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных"));
		ГруппаПолей.Заголовок = ИмяГруппы;
		ГруппаПолей.Расположение = РасположениеПоляКомпоновкиДанных.Горизонтально; //<-
		
		ИмяКолонки = "Остаток_" + Формат(Сч,"ЧН=0; ЧГ=");
		Поле = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		Поле.Заголовок = ИмяКолонки;
		Поле.ПутьКДанным = ИмяКолонки;
		Поле.Поле = ИмяКолонки;
		Поле.ТипЗначения = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 2));

		ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
		ПолеРесурса.Выражение = "СУММА("+ИмяКолонки+")";
		ПолеРесурса.ПутьКДанным = ИмяКолонки;
		
		//ВыбранноеПоле = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле = ГруппаПолей.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле.Заголовок = ИмяКолонки;
		ВыбранноеПоле.Использование = Истина;
		ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонки);
		
		
		ИмяКолонки = "Себестоимость_" + Формат(Сч,"ЧН=0; ЧГ=");
		Поле = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		Поле.Заголовок = ИмяКолонки;
		Поле.ПутьКДанным = ИмяКолонки;
		Поле.Поле = ИмяКолонки;
		Поле.ТипЗначения = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 2));

		ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
		ПолеРесурса.Выражение = "СРЕДНЕЕ("+ИмяКолонки+")";
		ПолеРесурса.ПутьКДанным = ИмяКолонки;
		
		//ВыбранноеПоле = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле = ГруппаПолей.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле.Заголовок = ИмяКолонки;
		ВыбранноеПоле.Использование = Истина;
		ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонки);
		
		
		ИмяКолонки = "Сумма_" + Формат(Сч,"ЧН=0; ЧГ=");
		Поле = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		Поле.Заголовок = ИмяКолонки;
		Поле.ПутьКДанным = ИмяКолонки;
		Поле.Поле = ИмяКолонки;
		Поле.ТипЗначения = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 2));

		ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
		ПолеРесурса.Выражение = "СУММА("+ИмяКолонки+")";
		ПолеРесурса.ПутьКДанным = ИмяКолонки;
		
		//ВыбранноеПоле = НастройкиСКД.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле = ГруппаПолей.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПоле.Заголовок = ИмяКолонки;
		ВыбранноеПоле.Использование = Истина;
		ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяКолонки);
		
	КонецЦикла;
Показать
10. dhurricane 09.07.19 11:54 Сейчас в теме
(9) Интересно, а без этой инструкции, как именно отображались в отчете колонки? И каково значение расположения по умолчанию? Если Вас не затруднит, покажите, пожалуйста.
Оставьте свое сообщение

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