![]() |
|
Программное добавление параметров в СКД | ☑ | ||
---|---|---|---|---|
0
Желтый домик
30.09.13
✎
03:22
|
Встречал ветки на форуме, но решения в них нет. Может, кто набрался опыта, поделится?
//1. Необходимо получить нужный макет СКД СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); //2. Проинициализировать компоновщик настроек. //КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных); КомпоновщикНастроек.Инициализировать(ИсточникНастроек); //3. Установить параметры компоновщика настроек номерПериода = 1; Для Каждого стрПериод из спПериодов Цикл ПараметрКомпоновки = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Добавить(); ПараметрКомпоновки.Параметр = Новый ПараметрКомпоновкиДанных("парамПериодБюджетирования" + номерПериода); ПараметрКомпоновки.Использование = Истина; ПараметрКомпоновки.Значение = стрПериод; номерПериода = номерПериода + 1; КонецЦикла; Ошибка при вызове метода контекста (Добавить) ПараметрКомпоновки = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Добавить(); по причине: Коллекция значений параметров не может изменять свой состав, так как она связана с доступными параметрами. |
|||
1
Бертыш
30.09.13
✎
04:58
|
Они как то сами добавляются вроде в зависимости от запроса
|
|||
2
Defender aka LINN
30.09.13
✎
05:57
|
(0) И что же ты с ним делать будешь, если добавишь?
|
|||
3
Желтый домик
30.09.13
✎
11:20
|
Мне нужно сделать отчет по выполнению бюджета
-------------------------------| | январь | Статья |---------------| | план | факт | -------------------------------| Если в СКД сделать группировки по колонкам, то лезут итоги вначале по Периоду, потом по Сценарию. В общем - не комильфо. Поэтому решил просто сделать столько колонок, сколько нужно пользователю (месяц, квартал, год). В СКД запрос подменяю, остается задать параметры. Сделать это нужно программно, в уже существующую схему. Для Каждого стрПериод из спПериодов Цикл НомерСценария = 1; Для Каждого стрСценарий из спСценариев Цикл //ТекстПараметрПериод = "&"+стрПериод; ИмяКолонки = "ПериодСценарий_"+НомерПериода+"_"+НомерСценария; ТекстКолонки = ТекстКолонки + " | СУММА(ВЫБОР | КОГДА БюджетОбороты.ПериодБюджетирования = &парамПериодБюджетирования" + номерПериода + " | И БюджетОбороты.Сценарий = &парамСценарий" + НомерСценария + " | ТОГДА БюджетОбороты.СуммаОборот | ИНАЧЕ 0 | КОНЕЦ) КАК " + ИмяКолонки + ", "; НомерСценария = НомерСценария + 1; КонецЦикла; ТекстКолонки = Лев(ТекстКолонки, СтрДлина(ТекстКолонки)-2); //убрали последнюю запятую |
|||
4
Желтый домик
30.09.13
✎
11:23
|
Ну так, на всякий случай, потом, конечно, абракадабру типа "ПериодСенарий_1_1" меняю в заголовке отчета на "Январь 2013, План"
|
|||
5
Желтый домик
30.09.13
✎
12:27
|
(1) Это только, если интерактивно.
|
|||
6
Другая
30.09.13
✎
12:30
|
"v8: Программное добавление параметров в СКД"
" В СКД запрос подменяю, остается задать параметры" Так задать параметр или добавить? |
|||
7
Желтый домик
30.09.13
✎
13:05
|
(6) Именно добавить. Этих параметров в схеме раньше не было, после измененния текста запроса набора данных появились новые параметры. С ними и воюю
|
|||
8
Желтый домик
30.09.13
✎
13:25
|
Вот решение
ТекстЗапросаИерархия = ПолучитьТекстЗапросаИерархия(); ТекстЗапросаРегистр = ПолучитьТекстЗапросаРегистр(); Схема = ЭтотОбъект.СхемаКомпоновкиДанных; Схема.НаборыДанных.ИерархияСтатьи.Запрос = ТекстЗапросаИерархия; Схема.НаборыДанных.Регистр.Запрос = ТекстЗапросаРегистр; СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема); Настройки = Схема.НастройкиПоУмолчанию; ИойКомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; номерПериода = 1; Для Каждого стрПериод из спПериодов Цикл ПараметрКомпоновки = ИойКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Добавить(); ПараметрКомпоновки.Параметр = Новый ПараметрКомпоновкиДанных("парамПериодБюджетирования" + номерПериода); ПараметрКомпоновки.Использование = Истина; ПараметрКомпоновки.Значение = стрПериод; ПараметрСхемы = Схема.Параметры.Добавить(); ПараметрСхемы.Значение = стрПериод; ПараметрСхемы.Имя = "парамПериодБюджетирования" + номерПериода; номерПериода = номерПериода + 1; КонецЦикла; НомерСценария = 1; Для Каждого стрСценарий из спСценариев Цикл ПараметрКомпоновки = ИойКомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Добавить(); ПараметрКомпоновки.Параметр = Новый ПараметрКомпоновкиДанных("парамСценарий" + НомерСценария); ПараметрКомпоновки.Использование = Истина; ПараметрКомпоновки.Значение = стрСценарий; ПараметрСхемы = Схема.Параметры.Добавить(); ПараметрСхемы.Значение = стрСценарий; ПараметрСхемы.Имя = "парамСценарий" + НомерСценария; НомерСценария = НомерСценария + 1; КонецЦикла; ИойКомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек); ИойКомпоновщикНастроек.ЗагрузитьНастройки(Настройки); СхемаКомпоновкиДанных = Схема; Настройки = КомпоновщикНастроек.Настройки; |
|||
9
Другая
30.09.13
✎
14:08
|
(7) а в процессе чего изменяется текст запроса? от каких-то настроек? может не менять его программно, а использовать средства СКД, или создать несколько схем и использовать необходимую.
Я так поняла не добавлять, после изменения запроса, а просто установить значение не вышло? |
|||
10
Желтый домик
30.09.13
✎
14:16
|
(9) Не так.
Колонка это СуммаОборот по Периоду и Сценарию за этот период. Таких периодов и сценариев - произвольное множество. В общем случае - 12 периодов и 2 сценария. Но в зависимости от желания пользователя период отчета, соответственно и количество колонок может меняться. Поэтому я и добавляю колонки программно (3). |
|||
11
Другая
30.09.13
✎
15:32
|
эмм, произвольное количество периодов??? что-то явно идет не так)
а чем вас не устраивает группировка по колонкам? запрос без изменения текста с одним периодом, нужно только помучиться над настройками СКД. Там практически все можно настроить. В крайнем случае - нарисовать свой макет. ну а так... попробуйте добавить параметры интерактивно, и управлять их использованием программно. Должно сработать. Но мне кажется выбранный вами путь - не самый лучший для решения задачи... |
|||
12
Желтый домик
01.10.13
✎
15:14
|
(11) Может и не самый лучший, конечно. Но он позволяет мне не перерисовывать макет, не выводить итоги по колонкам Период и Сценарий, если бы они были группировками.
Программно добавить параметры - лишний 20 строк кода. знаю, что прорисовка группировок (2-х) в колонках сильно тормозила вывод макета в построителе. Думаю, в СКД наблюдалась бы та же картина с производительностью. А так - вывод обычных колонок - при выводе макета, ничего не рассчитывается. Достаточно быстро. Я уверенно говорю, потому что перепробывал все варианты колонок с замером производительности. |
|||
13
banco
01.10.13
✎
15:39
|
(0) может в схему компоновки данных надо параметры добавить?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |