Имя: Пароль:
1C
1С v8
СКД: Как программно разобрать текущую настройку отчета?
0 ignorant
 
27.02.13
20:09
Хочу ПРИ а м.б. правильнее ПЕРЕД компоновкой результата программно анализировать текущие настройки отчета, как-то: список группировок по строкам и колонкам,выводится ли при текущих настройках детальные записи...

Камрады, подскажите куда рыть?
1 Maxus43
 
27.02.13
20:12
КомпоновщикНастроекКомпоновкиДанных (DataCompositionSettingsComposer)
Настройки (Settings)
Использование:

Только чтение.
Описание:

Тип: НастройкиКомпоновкиДанных.
Содержит настройки компоновки данных.

не то?
2 ignorant
 
27.02.13
20:16
не то :(
КомпоновщикНастроек.Настройки.ДоступныеПоляГруппировок
показывает ВСЕ Доступные Поля Группировок,
а меня интересуют только выбранные пользователем.
3 Maxus43
 
27.02.13
20:17
а кто сказал про Досутпные?

НастройкиКомпоновкиДанных (DataCompositionSettings)
Структура (Structure)
Использование:

Только чтение.
Описание:

Тип: КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных.
Коллекция элементов структуры.
4 GANR
 
27.02.13
20:24
(0) см. сообщение №5 в ветке v8: СКД: изсчезают ВыранныеПоля
5 ignorant
 
27.02.13
20:32
(3) м.б. не туда смотрю :(
ЭтотОБъект.КомпоновщикНастроек.Настройки.Структура
тип
КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных
содержит только
ИдентификаторПользовательскойНастройки = ""
ПредставлениеПользовательскойНастройки = ""
РежимОтображения = Быстрый доступ


(4) спасибо, для общего образования будет полезно.
НО мне нужно _програмно_ проаназировать структуру отчета, а не визуально посмотреть, где что лежит
6 Maxus43
 
27.02.13
20:34
(5) у меня написано в СП:
КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных (DataCompositionSettingStructureItemCollection)

Элементы коллекции:

ГруппировкаКомпоновкиДанных, ТаблицаКомпоновкиДанных, ДиаграммаКомпоновкиДанных, НастройкиВложенногоОбъектаКомпоновкиДанных
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются группировки.
Возможно обращение к группировке посредством оператора [.
7 GANR
 
27.02.13
20:42
(5) программно...
КомпоновщикНастрое.Настройки.Структура - вот здесь она и лежит. Она представляет собой коллекцию, некое дерево, возможен обход циклом в сочетании с рекурсией

Для Каждого ЭлементСтруктуры Из КомпоновщикНастрое.Настройки.Структура Цикл
...
КонецЦикла

Подробнее - отладчик
8 ignorant
 
27.02.13
20:48
(7) я же и показываю что говорит отладчик.
КомпоновщикНастрое.Настройки МОЖЕТ содержать
ГруппировкаКомпоновкиДанных, ТаблицаКомпоновкиДанных и все, что процитировал Maxus43 в (6), но у меня он реально ПУСТ.
м.б., проблема в том, что в отладчике я смотрю в событии
ПриКомпоновкеРезультата
а нужно смотреть в другом месте?
9 ignorant
 
27.02.13
20:49
(7) и в D:/Настройки.xml
группировок не видно, толлько доступные поля
10 ignorant
 
27.02.13
20:56
(7) (9) НЕ читать!  я плохо смотрел!
Есть в D:/Настройки.xml и таблица отчета
item xsi:type="StructureItemTable"
и правильные поля группировок
item xsi:type="GroupItemField"
11 GANR
 
27.02.13
21:06
(8) КомпоновщикНастроек.Настройки.Структура[0] содержит что-то ? Просто КомпоновщикНастроек.Настройки.Структура в отладчике ничего не покажет, либо КомпоновщикНастроек.Настройки.Структура[0], либо "показать в отдельном окне".
12 GANR
 
27.02.13
21:07
>проблема в том, что в отладчике я смотрю в событии
ПриКомпоновкеРезультата

тоже возможно
13 GANR
 
27.02.13
21:11
Если (11) не помогает, то, скорее всего (12)
14 ignorant
 
27.02.13
21:13
(12) вряд ли. D:/Настройки.xml я вывожу в этом же месте,
таблица и группировки там ЕСТЬ.

(11) уже ТЕПЛЕЕ
КомпоновщикНастроек.Настройки.Структура[0]
содержит КомпоновщикНастроек.Настройки.Структура[0]    ТаблицаКомпоновкиДанных
15 GANR
 
27.02.13
21:15
(14) Воооот! А теперь можно обойти структуру рекурсией - там, по-сути, дерево.
16 GANR
 
27.02.13
21:19
Далее нужно что-то вроде

Процедура Команда1()
  ОбойтиСтруктуру(КомпоновщикНастроек.Настройки.Структура)
КонецПроцедуры

Процедура ОбойтиСтруктуру(Коллекция)
  Для Каждого ЭлементСтруктуры Из Коллекция Цикл
     ОбойтиСтруктуру(Коллекция.Элементы)
  КонецЦикла;
КонецПроцедуры
17 GANR
 
27.02.13
21:22
ОбойтиСтруктуру(Коллекция.Структура) для Группировки для Таблицы - Колонки и Строки.
18 ignorant
 
27.02.13
21:24
(15) Спасибо, круто! что-то начинаю понимать в этом зверьке

КомпоновщикНастроек.Настройки.Структура[0].Строки[0]
содержит верхний уровень групировки строк
КомпоновщикНастроек.Настройки.Структура[0].Строки[0].Структура[0]
второй сверху уровень
КомпоновщикНастроек.Настройки.Структура[0].Строки[0].Структура[0].Структура[0]
третий уровень и т.д.

рекурсия
19 ignorant
 
27.02.13
21:37
в ОБЩЕМ случае много нужно предусмотреть,
но для моего ЧАСТНОГО - достаточно.
Спасибо!

Остался последний вопрос: как оценить глубину рекурсии?
Как понять: это _самый_ нижний уровень группировки и ЧТО он содежит: детальные данные или группу ТОЛЬКО?

В продолжение темы, раз уж ты, GANR, хорошо знаешь СКД ;)
То, что порешали - это часть задачи
В принципе, нужно на основе анализа пользовательских настроек отчета подменить СКД и вывести _немного_ другой отчет.
Думаешь, это решаемо за конечное время?
Что ещё в свойствах отчетов / СКД посмотреть на эту тему?
20 GANR
 
28.02.13
00:51
> Как оценить глубину рекурсии?
Не вижу необходимости. Если коллекция КомпоновщикНастроек.Структура[0].Структура[0]...Структура[0] не содержит элементов, то цикл не сделает ни одного повтора. Как следствие, рекурсия не пойдет вглубь и, в конце-концов, вернется.

> Что ещё в свойствах отчетов / СКД посмотреть на эту тему?

В 1С:Предприятие в настройках варианта отчета видно, что пользователь может настраивать. В отладчике это отображается одноименно. Вот например:

1. Отборы - также возможна рекурсия, поскольку СКД поддерживает группы условий.
2. Условное оформление, пользовательские поля - также могут содержать п.1 => может понадобится рекурсия.
3. Поля могут быть свернуты в группы, опять рекурсия.

Слова "рекурсия" бояться не стоит. Не припоминаю, чтобы с СКД на моем веку был связан рекурсивный алгоритм, требующий от меня сильного навыка работы со спуском/возвратом.
AdBlock убивает бесплатный контент. 1Сергей