Имя: Пароль:
1C
 
Программная перестановка группировок СКД
0 jk3
 
02.06.10
14:26
Настройки схемы компоновки -> Группировки

Юзер сам может переставить группировки как ему хочется с помощью dran'n'drop-а.

Например, из группировок Организация - Подразделение
http://s56.radikal.ru/i153/1006/bf/b26b1779397a.png
сделать Подразделение - Организация
http://s55.radikal.ru/i149/1006/00/67f5d8d30332.png

Вопрос: Как это сделать программно?

Думал использовать свойства объекта ГруппировкаКомпоновкиДанных
Родитель и Структура.
Но у них Использование: Только чтение.
1 jk3
 
02.06.10
14:55
Уже и скриншоты есть.
Идеи?
2 IronDemon
 
02.06.10
14:59
Пусть ручками и тягает ;)
3 johnbay
 
02.06.10
14:59
смотри в отладчике
КомпоновщикНастроек.Настройки.Структура
и переделывай как тебе надо
4 jk3
 
02.06.10
15:04
(2) Если бы можно было, то этой темы не появилось бы.
(3) Дык там и ковыряюсь:
КомпоновщикНастроек.Настройки.Структура[0]
говорю ж
ни родителя просто так не поменяешь
ни всю низлежащую структуру не скопируешь
5 cViper
 
02.06.10
15:33
(4) Как варинта сделай 2 группировки и переключайся между ними. Это несложно.
6 johnbay
 
02.06.10
15:39
ЭлементСтруктуры.Значение.Строки
или
ЭлементСтруктуры.Значение.Колонки

Строки    КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных    


КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных (DataCompositionTableStructureItemCollection)
Элементы коллекции:

ГруппировкаТаблицыКомпоновкиДанных
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются группировки.
Возможно обращение к группировке посредством оператора [...]. В качестве аргумента передается индекс (нумерация с 0).

Свойства:

ИдентификаторПользовательскойНастройки (UserSettingID)
ПредставлениеПользовательскойНастройки (UserSettingPresentation)
РежимОтображения (ViewMode)

Методы:

Вставить (Insert)
Добавить (Add)
Индекс (IndexOf)
Количество (Count)
Очистить (Clear)
Получить (Get)
Сдвинуть (Move)
Удалить (Delete)

Описание:

Содержит элементы структуры настроек, вложенных в таблицу или в группировку таблицы.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
См. также:

ТаблицаКомпоновкиДанных, свойство Колонки
ТаблицаКомпоновкиДанных, свойство Строки
ГруппировкаТаблицыКомпоновкиДанных, свойство Структура
7 johnbay
 
02.06.10
15:41
Если их можно ранить, значит их можно убить © Хищник
8 jk3
 
02.06.10
16:10
(5) это не вариант
Нужно сделать универсально, чтобы, например, можно было сделать
из такой иерархии
http://s004.radikal.ru/i207/1006/1e/896a8d65b0b8.png
сделать такую
http://s39.radikal.ru/i083/1006/d5/ec5deb1eea67.png

т.е. облегчая себе задачу так, что группировки идут по дереву "в струнку"

(6) ну и.. хелп я тоже умею читать
хотя бы метод Добавить раскрывал?
Добавить(<Тип>)
Параметры:
<Тип> (обязательный)
Тип: Тип. Тип добавляемого элемента. Элементами коллекции могут быть
ГруппировкаКомпоновкиДанных

т.е. при вызове этого метода вот так
КомпоновщикНастроек.Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"))
добавляется девственно чистая группировка

А нужно чтобы как и в drag'n'drope переносились группировки целиком, со всеми
настройками, т.е. чтобы только менялся их родитель.
9 Dzenn
 
гуру
02.06.10
16:16
(8) Евгений, открывай отладчик при выполнении и смотри структуру компоновщика. Там туева хуча полей, но в общем и целом, потеряв пару часиков, можно разобраться. У меня например для <выключения> (не твой случай, но рядом) полей такой код:




Процедура КнопкаВыключитьТоварыНажатие(Элемент)

   МассивПолей = Новый Массив;
   МассивПолей.Добавить("ТоварНачОст");
   МассивПолей.Добавить("ТоварПриход");
   МассивПолей.Добавить("ТоварРасход");
   МассивПолей.Добавить("ТоварКонОст");
   
   ВыбранныеПоля = КомпоновщикНастроек.Настройки.Выбор.Элементы;
   УстановитьПоля(ВыбранныеПоля, МассивПолей, Ложь);
   
КонецПроцедуры


Процедура УстановитьПоля(ВыбранныеПоля, МассивПолей, ВыбИспользование)
   
   Для Каждого ВыбранноеПоле Из ВыбранныеПоля Цикл
       
       Если ТипЗнч(ВыбранноеПоле) = Тип("ВыбранноеПолеКомпоновкиДанных") Тогда
           Если МассивПолей.Найти(Строка(ВыбранноеПоле.Поле)) <> Неопределено Тогда
               ВыбранноеПоле.Использование = ВыбИспользование;
           КонецЕсли;            
       ИначеЕсли ТипЗнч(ВыбранноеПоле) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда
           УстановитьПоля(ВыбранноеПоле.Элементы, МассивПолей, ВыбИспользование);
       КонецЕсли;        
       
   КонецЦикла;

КонецПроцедуры




10 Stim
 
02.06.10
16:18
имхо, лучше сделать несколько вариантов настроек отчета и сохранить эти настройки в файл на юзерском компе. Экономя трудозатраты
11 jk3
 
02.06.10
16:22
(9) Ха, ну включить/выключить не проблема
еще могу тебе посоветовать использовать не свойство Использование, а Состояние.
В отличие от Использование = Ложь, состояние группировки Отключен не влияет на вложенные в нее группировки.

Т.е. такой строкой
КомпоновщикНастроек.Настройки.Структура[0].Состояние = СостояниеЭлементаНастройкиКомпоновкиДанных.Отключен;
мы отключаем самую верхнюю иерархию, но выводятся все остальные.
В то время как если бы использовали Использование = Ложь, все низлежащие группировки не выводились бы.

Ну это так, к слову.
Задача в оригинале такая: произвольно включать/отключать группировки и переставлять их (при условии, что на каждом уроне только одна группировка)

Т.е. половину с включением/выключением я уже решил.

Теперь помогите пожалуйста решить проблему с программной перестановкой группировок местами.
Визуально то всё как-то работает.
12 Andry888
 
02.06.10
16:26
(11) Ну сделай функцию swap(Gr1,Gr2) , а внутри перемещай содержимое группировок (а не сами группировки)... т.е. выбранные поля переставь, поля группировки, отборы и т.п.
13 jk3
 
02.06.10
16:33
(12) угу, неужели это еще никто не делал?
Может есть проще вариант, слишком уж дофига в себя группировка включает, чтобы все эти Отборы, Порядки и поля переносить.

Да, и нужно тащить за собой всю низлежащую иерархию...
14 Andry888
 
02.06.10
16:36
(13) тащить иерархию... отставить! Зачем, если ты две группировки меняешь местами, структуру оставляй прежнюю + основное это не так много - группировки да выбранные поля...
15 jk3
 
02.06.10
16:50
(14) Ну да, в простейшем случае, это 1 поле группировки. Оно же в выбранных полях + ресурсы.
Это если не использовать Отборы, Сортировки, Условное оформление и Другие настройки для группировок.
Надо попробовать.

Всё же перестановка группировок целиком мне больше нравится.
Но то ли это не реализуемо, то ли я пойму как это осуществить слишком поздно.