Программно установить родителя группы отбора

1. user1050439 7 24.09.19 12:01 Сейчас в теме
Пытаюсь присвоить родителя у группы отбора в компоновщике настроек (КомпоновщикНастроек здесь это лишь значение реквизита справочника), но выдает ошибку

{ВнешнийОтчет.копировщикстатейбюджета.Форма.ФормаОтчета.Форма(146)}: Поле объекта недоступно для записи (Родитель)
ГруппаОтбора2.Родитель = ГруппаОтбора;


Вот код:

		Отбор = э.КомпоновщикНастроек.получить().отбор.элементы;

		ГруппаОтбора = Отбор.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
		ГруппаОтбора.Использование = Истина;

		ГруппаОтбора2 = Отбор.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
		ГруппаОтбора2.Использование = Истина;
		ГруппаОтбора2.Родитель = ГруппаОтбора;
Показать


Кто-нибудь может подсказать как это сделать?
По теме из базы знаний
Найденные решения
15. dhurricane 24.09.19 16:49 Сейчас в теме
(12) У Вас не получится просто присвоить родительскую группировку. Потребуется добавить новую группировку, скопировать туда элементы отбора рекурсивно, а затем удалить исходные.

Посмотрите повнимательнее на общие модули "ОбщегоНазначенияКлиентСервер" и "КомпоновкаДанных...". Вроде там должны быть процедуры копирования настроек.
user1050439; +1 Ответить
19. user1050439 7 24.09.19 18:00 Сейчас в теме
(15) Спасибо за оба ваших ответа, получилось. Взял метод СкопироватьЭлементы из КомпоновкаДанныхКлиентСервер - он рекурсивно все дочерние группы и элементы у верхней группы засунул куда надо.

		СуществующийОтбор = э.КомпоновщикНастроек.получить().отбор;
		НовыйКН = э.КомпоновщикНастроек.получить();
		НовыйОтбор = НовыйКН.отбор;
		НовыйОтбор.Элементы.Очистить();
		
		ГруппаОтбора = НовыйОтбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
		ГруппаОтбора.Использование = Истина;
		
		ГруппаОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
		ГруппаОтбора2.Использование = Истина;
		
		ГруппаОтбора3 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора3.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
		ГруппаОтбора3.Использование = Истина;
		
		для каждого э2 из отчет.ТабличнаяЧасть2 цикл
			НО = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
			НО.Использование = Истина;
			НО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(э2.ЛЗ);
			НО.ВидСравнения = ?(э2.ТС = "Равно", ВидСравненияКомпоновкиДанных.Равно, ВидСравненияКомпоновкиДанных.НеРавно);
			если э2.ЛЗ = "Контрагент" тогда 
				НО.ПравоеЗначение = Справочники.Партнеры.НайтиПоНаименованию(э2.ПЗ);
			иначеесли
				э2.ЛЗ = "Статья движения денежных средств" тогда
				НО.ПравоеЗначение = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоНаименованию(э2.ПЗ);
			конецесли;
		конеццикла;
		
		КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(ГруппаОтбора3, СуществующийОтбор, ложь);
		
		ХрЗн = Новый ХранилищеЗначения(НовыйКН);
		
		э_П.КомпоновщикНастроек = ХрЗн;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. dhurricane 24.09.19 12:58 Сейчас в теме
(1) Следует добавлять сразу в нужную группу:
Отбор = э.КомпоновщикНастроек.получить().отбор.элементы;

        ГруппаОтбора = Отбор.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
        ГруппаОтбора.Использование = Истина;

        ГруппаОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
        ГруппаОтбора2.Использование = Истина;
Показать
user1050439; +1 Ответить
4. YannikAlx 43 24.09.19 13:29 Сейчас в теме
(3) Это ежику понятно...
Вы объясните как сформировать двойную группировку
типа
( (А =В) И (С=Д)) ИЛИ ( (Е =И) И (К=М))

Вопрос автора то именно о двойной группировке
5. dhurricane 24.09.19 15:59 Сейчас в теме
(4)
Вы объясните как сформировать двойную группировку
Интересно даже, как Вы об этом догадались. :) Ну если и действительно вопрос об этом, то вот ответ:
ГруппаИли = Отбор.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
ГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

Группа1 = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
Группа1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

Элемент = Группа1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = А;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = В;

Элемент = Группа1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = С;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = Д;

Группа2 = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
Группа2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = Е;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = И;

Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = К;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = М;
Показать
creatermc; +1 Ответить
6. YannikAlx 43 24.09.19 16:05 Сейчас в теме
(5) конкретику я привел для ясности, а автор пытается получить в общем виде как я понимаю, то есть без А, Б и тд, то есть типа формулу группировок отбора
7. dhurricane 24.09.19 16:16 Сейчас в теме
(6) Что Вы подразумеваете под "формулой группировок отбора"?
8. YannikAlx 43 24.09.19 16:19 Сейчас в теме
(7) Ну вы посмотрите тему...
У автора же нету левого и правого значения в принципе
9. dhurricane 24.09.19 16:23 Сейчас в теме
(8) Ну он привел лишь кусок кода, где возникает ошибка. Сами элементы отбора, вероятно, добавляются где-то ниже.
10. YannikAlx 43 24.09.19 16:28 Сейчас в теме
(9) Он к сожалению молчит, а мы можем тут изгаляться фантазировать, пока пар не пойдет....
давайте отложим... )))))
12. user1050439 7 24.09.19 16:41 Сейчас в теме
(10) Есть группа в отборе - на верхнем уровне. Нужно создать группу уровнем еще выше и сделать текущую группу дочерней. Пока ломаю мозг решением из БСП как один из членов форума посоветовал - не смог сделать это с первым ответом dhurricane-а, проанализирую сейчас его второй ответ.
13. YannikAlx 43 24.09.19 16:44 Сейчас в теме
(12) Так а почему не получилось с первым ответом ?
Вроде как при
        ГруппаОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;

И создастся именно дочерняя группа.
Нет?
user1050439; +1 Ответить
14. user1050439 7 24.09.19 16:46 Сейчас в теме
(13) Да, но нужно еще и засунуть все подгруппы и элементы изначальной группы в момент времени 0 туда. А это "черная коробка".
15. dhurricane 24.09.19 16:49 Сейчас в теме
(12) У Вас не получится просто присвоить родительскую группировку. Потребуется добавить новую группировку, скопировать туда элементы отбора рекурсивно, а затем удалить исходные.

Посмотрите повнимательнее на общие модули "ОбщегоНазначенияКлиентСервер" и "КомпоновкаДанных...". Вроде там должны быть процедуры копирования настроек.
user1050439; +1 Ответить
17. user1050439 7 24.09.19 16:51 Сейчас в теме
19. user1050439 7 24.09.19 18:00 Сейчас в теме
(15) Спасибо за оба ваших ответа, получилось. Взял метод СкопироватьЭлементы из КомпоновкаДанныхКлиентСервер - он рекурсивно все дочерние группы и элементы у верхней группы засунул куда надо.

		СуществующийОтбор = э.КомпоновщикНастроек.получить().отбор;
		НовыйКН = э.КомпоновщикНастроек.получить();
		НовыйОтбор = НовыйКН.отбор;
		НовыйОтбор.Элементы.Очистить();
		
		ГруппаОтбора = НовыйОтбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
		ГруппаОтбора.Использование = Истина;
		
		ГруппаОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
		ГруппаОтбора2.Использование = Истина;
		
		ГруппаОтбора3 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора3.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
		ГруппаОтбора3.Использование = Истина;
		
		для каждого э2 из отчет.ТабличнаяЧасть2 цикл
			НО = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
			НО.Использование = Истина;
			НО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(э2.ЛЗ);
			НО.ВидСравнения = ?(э2.ТС = "Равно", ВидСравненияКомпоновкиДанных.Равно, ВидСравненияКомпоновкиДанных.НеРавно);
			если э2.ЛЗ = "Контрагент" тогда 
				НО.ПравоеЗначение = Справочники.Партнеры.НайтиПоНаименованию(э2.ПЗ);
			иначеесли
				э2.ЛЗ = "Статья движения денежных средств" тогда
				НО.ПравоеЗначение = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоНаименованию(э2.ПЗ);
			конецесли;
		конеццикла;
		
		КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(ГруппаОтбора3, СуществующийОтбор, ложь);
		
		ХрЗн = Новый ХранилищеЗначения(НовыйКН);
		
		э_П.КомпоновщикНастроек = ХрЗн;
Показать
11. YannikAlx 43 24.09.19 16:36 Сейчас в теме
(9) да кстати я вернулся, проанализировал ваш первый ответ - он скорее всего должен удовлетворить автора....
20. novice 24.04.20 10:59 Сейчас в теме
(5)
ГруппаИли = Отбор.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
ГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

Группа1 = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
Группа1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

Элемент = Группа1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = А;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = В;

Элемент = Группа1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = С;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = Д;

Группа2 = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
Группа2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = Е;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = И;

Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = К;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = М;
Показать
21. creatermc 27 24.11.23 17:39 Сейчас в теме
(5)
ГруппаИли = Отбор.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));

ГруппаЭлементовОтбораКомпоновкиДанных
2. VmvLer 24.09.19 12:42 Сейчас в теме
посмотрите в общих модулях БСП как это делать правильно
потом лепите свои костыли
ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора()
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора()

и пр.
16. user1050439 7 24.09.19 16:51 Сейчас в теме
(2) Не работает из-за отсутствия представления у массива м:

Отбор = э.КомпоновщикНастроек.получить().отбор.элементы;
		
		ГруппаОтбора2 = Отбор.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
		ГруппаОтбора2.Использование = Истина;
		
		ГруппаОтбора3 = Отбор.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
		ГруппаОтбора3.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
		ГруппаОтбора3.Использование = Истина;
		
		для каждого э2 из отчет.ТабличнаяЧасть2 цикл
			НО = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
			НО.Использование = Истина;
			НО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(э2.ЛЗ);
			НО.ВидСравнения = ?(э2.ТС = "Равно", ВидСравненияКомпоновкиДанных.Равно, ВидСравненияКомпоновкиДанных.НеРавно);
			если э2.ЛЗ = "Контрагент" тогда 
				НО.ПравоеЗначение = Справочники.Партнеры.НайтиПоНаименованию(э2.ПЗ);
			иначеесли
				э2.ЛЗ = "Статья движения денежных средств" тогда
				НО.ПравоеЗначение = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоНаименованию(э2.ПЗ);
			конецесли;
		конеццикла;
		
		м = новый массив;
		
		м.Добавить(ГруппаОтбора2);
		
		ГруппаОтбора3 = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(Отбор, "представление", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ); 
		м.Добавить(ГруппаОтбора3);
		
		ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(м, "представление", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);
Показать
18. VmvLer 24.09.19 17:37 Сейчас в теме
эта ветка вызвала у меня ассоциацию по диалогу из палаты травмпунка

- Я сломал пальчик на ноге и посмотрите правильно ли я его замотал?
- Скачи в операционную - там тебе гипс наложат.
- Простите юноша, могу вам предложить свой костыль.
- Он точно пальчик сломал, у него же шишка на лбу?
- Да точно пальчик, не верите - ша второй сломаю!
Оставьте свое сообщение

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