Программно установить родителя группы отбора
Пытаюсь присвоить родителя у группы отбора в компоновщике настроек (КомпоновщикНастроек здесь это лишь значение реквизита справочника), но выдает ошибку
Вот код:
Кто-нибудь может подсказать как это сделать?
{ВнешнийОтчет.копировщикстатейбюджета.Форма.ФормаОтчета.Форма(146)}: Поле объекта недоступно для записи (Родитель)
ГруппаОтбора2.Родитель = ГруппаОтбора;
ГруппаОтбора2.Родитель = ГруппаОтбора;
Вот код:
Отбор = э.КомпоновщикНастроек.получить().отбор.элементы;
ГруппаОтбора = Отбор.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ГруппаОтбора.Использование = Истина;
ГруппаОтбора2 = Отбор.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ГруппаОтбора2.Использование = Истина;
ГруппаОтбора2.Родитель = ГруппаОтбора;
ПоказатьКто-нибудь может подсказать как это сделать?
По теме из базы знаний
- Всякие полезности
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Поле "Отбор" в управляемой форме используя СКД
- Обзор полезных методов БСП 3.1.4
- Программное создание элементов в форме при использовании расширения
Найденные решения
(12) У Вас не получится просто присвоить родительскую группировку. Потребуется добавить новую группировку, скопировать туда элементы отбора рекурсивно, а затем удалить исходные.
Посмотрите повнимательнее на общие модули "ОбщегоНазначенияКлиентСервер" и "КомпоновкаДанных...". Вроде там должны быть процедуры копирования настроек.
Посмотрите повнимательнее на общие модули "ОбщегоНазначенияКлиентСервер" и "КомпоновкаДанных...". Вроде там должны быть процедуры копирования настроек.
(15) Спасибо за оба ваших ответа, получилось. Взял метод СкопироватьЭлементы из КомпоновкаДанныхКлиентСервер - он рекурсивно все дочерние группы и элементы у верхней группы засунул куда надо.
СуществующийОтбор = э.КомпоновщикНастроек.получить().отбор;
НовыйКН = э.КомпоновщикНастроек.получить();
НовыйОтбор = НовыйКН.отбор;
НовыйОтбор.Элементы.Очистить();
ГруппаОтбора = НовыйОтбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ГруппаОтбора.Использование = Истина;
ГруппаОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ГруппаОтбора2.Использование = Истина;
ГруппаОтбора3 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора3.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ГруппаОтбора3.Использование = Истина;
для каждого э2 из отчет.ТабличнаяЧасть2 цикл
НО = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НО.Использование = Истина;
НО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(э2.ЛЗ);
НО.ВидСравнения = ?(э2.ТС = "Равно", ВидСравненияКомпоновкиДанных.Равно, ВидСравненияКомпоновкиДанных.НеРавно);
если э2.ЛЗ = "Контрагент" тогда
НО.ПравоеЗначение = Справочники.Партнеры.НайтиПоНаименованию(э2.ПЗ);
иначеесли
э2.ЛЗ = "Статья движения денежных средств" тогда
НО.ПравоеЗначение = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоНаименованию(э2.ПЗ);
конецесли;
конеццикла;
КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(ГруппаОтбора3, СуществующийОтбор, ложь);
ХрЗн = Новый ХранилищеЗначения(НовыйКН);
э_П.КомпоновщикНастроек = ХрЗн;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Следует добавлять сразу в нужную группу:
Отбор = э.КомпоновщикНастроек.получить().отбор.элементы;
ГруппаОтбора = Отбор.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ГруппаОтбора.Использование = Истина;
ГруппаОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ГруппаОтбора2.Использование = Истина;
Показать
(4)
Вы объясните как сформировать двойную группировку
Интересно даже, как Вы об этом догадались. :) Ну если и действительно вопрос об этом, то вот ответ:
ГруппаИли = Отбор.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
ГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
Группа1 = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
Группа1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
Элемент = Группа1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = А;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = В;
Элемент = Группа1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = С;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = Д;
Группа2 = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
Группа2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = Е;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = И;
Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = К;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = М;
Показать
(10) Есть группа в отборе - на верхнем уровне. Нужно создать группу уровнем еще выше и сделать текущую группу дочерней. Пока ломаю мозг решением из БСП как один из членов форума посоветовал - не смог сделать это с первым ответом dhurricane-а, проанализирую сейчас его второй ответ.
(12) Так а почему не получилось с первым ответом ?
Вроде как при
И создастся именно дочерняя группа.
Нет?
Вроде как при
ГруппаОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
И создастся именно дочерняя группа.
Нет?
(12) У Вас не получится просто присвоить родительскую группировку. Потребуется добавить новую группировку, скопировать туда элементы отбора рекурсивно, а затем удалить исходные.
Посмотрите повнимательнее на общие модули "ОбщегоНазначенияКлиентСервер" и "КомпоновкаДанных...". Вроде там должны быть процедуры копирования настроек.
Посмотрите повнимательнее на общие модули "ОбщегоНазначенияКлиентСервер" и "КомпоновкаДанных...". Вроде там должны быть процедуры копирования настроек.
(15) Спасибо за оба ваших ответа, получилось. Взял метод СкопироватьЭлементы из КомпоновкаДанныхКлиентСервер - он рекурсивно все дочерние группы и элементы у верхней группы засунул куда надо.
СуществующийОтбор = э.КомпоновщикНастроек.получить().отбор;
НовыйКН = э.КомпоновщикНастроек.получить();
НовыйОтбор = НовыйКН.отбор;
НовыйОтбор.Элементы.Очистить();
ГруппаОтбора = НовыйОтбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ГруппаОтбора.Использование = Истина;
ГруппаОтбора2 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ГруппаОтбора2.Использование = Истина;
ГруппаОтбора3 = ГруппаОтбора.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора3.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ГруппаОтбора3.Использование = Истина;
для каждого э2 из отчет.ТабличнаяЧасть2 цикл
НО = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НО.Использование = Истина;
НО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(э2.ЛЗ);
НО.ВидСравнения = ?(э2.ТС = "Равно", ВидСравненияКомпоновкиДанных.Равно, ВидСравненияКомпоновкиДанных.НеРавно);
если э2.ЛЗ = "Контрагент" тогда
НО.ПравоеЗначение = Справочники.Партнеры.НайтиПоНаименованию(э2.ПЗ);
иначеесли
э2.ЛЗ = "Статья движения денежных средств" тогда
НО.ПравоеЗначение = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоНаименованию(э2.ПЗ);
конецесли;
конеццикла;
КомпоновкаДанныхКлиентСервер.СкопироватьЭлементы(ГруппаОтбора3, СуществующийОтбор, ложь);
ХрЗн = Новый ХранилищеЗначения(НовыйКН);
э_П.КомпоновщикНастроек = ХрЗн;
Показать
(5)
ГруппаИли = Отбор.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
ГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
Группа1 = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
Группа1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
Элемент = Группа1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = А;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = В;
Элемент = Группа1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = С;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = Д;
Группа2 = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
Группа2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = Е;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = И;
Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = К;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = М;
ПоказатьГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
Группа1 = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
Группа1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
Элемент = Группа1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = А;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = В;
Элемент = Группа1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = С;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = Д;
Группа2 = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовКомпоновкиДанных"));
Группа2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = Е;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = И;
Элемент = Группа2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = К;
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = М;
(2) Не работает из-за отсутствия представления у массива м:
Отбор = э.КомпоновщикНастроек.получить().отбор.элементы;
ГруппаОтбора2 = Отбор.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ГруппаОтбора2.Использование = Истина;
ГруппаОтбора3 = Отбор.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора3.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ГруппаОтбора3.Использование = Истина;
для каждого э2 из отчет.ТабличнаяЧасть2 цикл
НО = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НО.Использование = Истина;
НО.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(э2.ЛЗ);
НО.ВидСравнения = ?(э2.ТС = "Равно", ВидСравненияКомпоновкиДанных.Равно, ВидСравненияКомпоновкиДанных.НеРавно);
если э2.ЛЗ = "Контрагент" тогда
НО.ПравоеЗначение = Справочники.Партнеры.НайтиПоНаименованию(э2.ПЗ);
иначеесли
э2.ЛЗ = "Статья движения денежных средств" тогда
НО.ПравоеЗначение = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоНаименованию(э2.ПЗ);
конецесли;
конеццикла;
м = новый массив;
м.Добавить(ГруппаОтбора2);
ГруппаОтбора3 = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(Отбор, "представление", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ);
м.Добавить(ГруппаОтбора3);
ГруппаОтбора = ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(м, "представление", ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);
Показать
эта ветка вызвала у меня ассоциацию по диалогу из палаты травмпунка
- Я сломал пальчик на ноге и посмотрите правильно ли я его замотал?
- Скачи в операционную - там тебе гипс наложат.
- Простите юноша, могу вам предложить свой костыль.
- Он точно пальчик сломал, у него же шишка на лбу?
- Да точно пальчик, не верите - ша второй сломаю!
- Я сломал пальчик на ноге и посмотрите правильно ли я его замотал?
- Скачи в операционную - там тебе гипс наложат.
- Простите юноша, могу вам предложить свой костыль.
- Он точно пальчик сломал, у него же шишка на лбу?
- Да точно пальчик, не верите - ша второй сломаю!
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот