Пытаюсь присвоить родителя у группы отбора в компоновщике настроек (КомпоновщикНастроек здесь это лишь значение реквизита справочника), но выдает ошибку

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

Вот код:

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

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

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

Кто-нибудь может подсказать как это сделать?
---
У Вас не получится просто присвоить родительскую группировку. Потребуется добавить новую группировку, скопировать туда элементы отбора рекурсивно, а затем удалить исходные.

Посмотрите повнимательнее на общие модули "ОбщегоНазначенияКлиентСервер" и "КомпоновкаДанных...". Вроде там должны быть процедуры копирования настроек.
---
Спасибо за оба ваших ответа, получилось. Взял метод СкопироватьЭлементы из КомпоновкаДанныхКлиентСервер - он рекурсивно все дочерние группы и элементы у верхней группы засунул куда надо.

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

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

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

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

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

    КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(ГруппаОтбора3, СуществующийОтбор, ложь);

    ХрЗн = Новый ХранилищеЗначения(НовыйКН);

    э_П.КомпоновщикНастроек = ХрЗн;
```
---
Следует добавлять сразу в нужную группу:

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

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

    ГруппаОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
    ГруппаОтбора2.Использование = Истина;
```
---
Это ежику понятно...
Вы объясните как сформировать двойную группировку
типа
( (А =В) И (С=Д)) ИЛИ ( (Е =И) И (К=М))

Вопрос автора то именно о двойной группировке
---
Вы объясните как сформировать двойную группировкуИнтересно даже, как Вы об этом догадались. :) Ну если и действительно вопрос об этом, то вот ответ:

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

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

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

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

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

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

    Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Элемент.ЛевоеЗначение = К;
    Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    Элемент.ПравоеЗначение = М;
```
---
конкретику я привел для ясности, а автор пытается получить в общем виде как я понимаю, то есть без А, Б и тд, то есть типа формулу группировок отбора
---
Что Вы подразумеваете под "формулой группировок отбора"?
---
Ну вы посмотрите тему...
У автора же нету левого и правого значения в принципе
---
Ну он привел лишь кусок кода, где возникает ошибка. Сами элементы отбора, вероятно, добавляются где-то ниже.
---
Он к сожалению молчит, а мы можем тут изгаляться фантазировать, пока пар не пойдет....
давайте отложим... )))))
---
Есть группа в отборе - на верхнем уровне. Нужно создать группу уровнем еще выше и сделать текущую группу дочерней. Пока ломаю мозг решением из БСП как один из членов форума посоветовал - не смог сделать это с первым ответом dhurricane-а, проанализирую сейчас его второй ответ.
---
Так а почему не получилось с первым ответом ?
Вроде как при
```1c
    ГруппаОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
```

И создастся именно дочерняя группа.
Нет?
---
Да, но нужно еще и засунуть все подгруппы и элементы изначальной группы в момент времени 0 туда. А это "черная коробка".
---
У Вас не получится просто присвоить родительскую группировку. Потребуется добавить новую группировку, скопировать туда элементы отбора рекурсивно, а затем удалить исходные.

Посмотрите повнимательнее на общие модули "ОбщегоНазначенияКлиентСервер" и "КомпоновкаДанных...". Вроде там должны быть процедуры копирования настроек.
---
Спасибо, посмотрю
---
Спасибо за оба ваших ответа, получилось. Взял метод СкопироватьЭлементы из КомпоновкаДанныхКлиентСервер - он рекурсивно все дочерние группы и элементы у верхней группы засунул куда надо.

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

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

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

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

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

    КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(ГруппаОтбора3, СуществующийОтбор, ложь);

    ХрЗн = Новый ХранилищеЗначения(НовыйКН);

    э_П.КомпоновщикНастроек = ХрЗн;
```
---
да кстати я вернулся, проанализировал ваш первый ответ - он скорее всего должен удовлетворить автора....
---
ГруппаИли = Отбор.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
ГруппаЭлементовОтбораКомпоновкиДанных
---
посмотрите в общих модулях БСП как это делать правильно
потом лепите свои костыли

```1c
    ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора()
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора()
```

и пр.
---
Не работает из-за отсутствия представления у массива м:

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

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

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

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

    м = новый массив;

    м.Добавить(ГруппаОтбора2);

    ГруппаОтбора3 = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(Отбор, "представление", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ);
    м.Добавить(ГруппаОтбора3);

    ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(м, "представление", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);
```
---
эта ветка вызвала у меня ассоциацию по диалогу из палаты травмпунка

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