|
Автоматическое добавление группировки в СКД | ☑ | ||
---|---|---|---|---|
0
chingiz
13.10.11
✎
10:21
|
Итак задача автоматически добавлять группировку Период в настройках последней группировкой. http://savepic.su/287794.jpg
Сложность в том, что мы не знаем точное количество группировок. Может быть 1 уровень, мб 3. Как проверять КомпоновщикНастроек.Настройки.Структура.ПоляГруппировки.Элементы, ведь каждая следующая уже будет КомпоновщикНастроек.Настройки.Структура.Получить(...).Структура и так далее. |
|||
1
Defender aka LINN
13.10.11
✎
10:25
|
(0) Месье не слышал про рекурсию?
З.Ы. А если структура отчета сложная будет, куда побежишь? |
|||
2
chingiz
13.10.11
✎
10:35
|
(1) нет сэр. Печально, что программирование начинаю с 1С. Подозревал, что нужно делать какой-то цикл. Ну группировки будут иметь примерно такой вид всегда, максимум пару группировок или их полей добавится. Ведь обходим Для каждого, так что все норм.
|
|||
3
comp2006
13.10.11
✎
10:52
|
Процедура УстановитьНастройкиКомпоновщика()
КомпоновщикНастроек.Настройки.Структура.Очистить(); Если ГруппироватьПоОрганизациям Тогда КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); Иначе ГруппировкаКонтрагент = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); ГруппировкаКонтрагент.Использование = Истина; ПолеКонтрагент = ГруппировкаКонтрагент.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); ПолеКонтрагент.Использование = Истина; ПолеКонтрагент.Поле = Новый ПолеКомпоновкиДанных("Контрагент"); ВыбранныеПоляДляКонтрагента = ГруппировкаКонтрагент.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); ВыбранныеПоляДляКонтрагента.Использование = Истина; ГруппировкаДетальныеЗаписи = ГруппировкаКонтрагент.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); ГруппировкаДетальныеЗаписи.Использование = Истина; ВыбранныеПоляДляДетальныхЗаписей = ГруппировкаДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); ВыбранныеПоляДляДетальныхЗаписей.Использование = Истина; КонецЕсли; КонецПроцедуры |
|||
4
chingiz
13.10.11
✎
11:41
|
(3) еще раз (1) и поймешь, что твой пост неуместен :)
Сейчас пытаюсь сделать с рекурсией. |
|||
5
chingiz
13.10.11
✎
14:07
|
Получилось! (1) навел на мысль, теперь хоть буду знать что это 8) Думаю кому-нибудь пригодится:
Процедура РекурсияПериод(Уровень) Флаг = Ложь; Для каждого ИндПериод из КомпоновщикНастроек.Настройки.Выбор.ДоступныеПоляВыбора.Элементы Цикл Если ИндПериод.Заголовок = "Период" Тогда ИндексПериод = КомпоновщикНастроек.Настройки.Выбор.ДоступныеПоляВыбора.Элементы.Индекс(ИндПериод); КонецЕсли; КонецЦикла; Для каждого Структура Из Уровень Цикл Если НЕ ТипЗнч(Структура) = Тип("ДиаграммаКомпоновкиДанных") тогда Флаг = Истина; Для Каждого ПолеГруппировки Из Структура.ПоляГруппировки.Элементы Цикл Если ПолеГруппировки.Поле = КомпоновщикНастроек.Настройки.Выбор.ДоступныеПоляВыбора.Элементы.Получить(ИндексПериод).Поле Тогда Возврат; Иначе Если Структура.Структура.Количество() > 0 Тогда РекурсияПериод(Структура.Структура); Иначе НоваяГруппировка = Структура.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); НоваяГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); НоваяГруппировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")).Поле = НоваяГруппировка.ПоляГруппировки.ДоступныеПоляПолейГруппировок.Элементы.Получить(ИндексПериод).Поле; КонецЕсли; КонецЕсли; КонецЦикла; ИначеЕсли НЕ Флаг Тогда НоваяГруппировка = КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); НоваяГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); НоваяГруппировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")).Поле = НоваяГруппировка.ПоляГруппировки.ДоступныеПоляПолейГруппировок.Элементы.Получить(ИндексПериод).Поле; Флаг = Истина; КонецЕсли; КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |