На форме в конфигураторе создан и инициализирован реквизит КомпоновщикНастроекКомпоновкиДанных.
Но как ЭЛЕМЕНТ формы - он создаётся - ПРОГРАММНО:

```1c
    НастройкаКомпоновщика = Элементы.Добавить("Компоновщик00", Тип("ТаблицаФормы"), Элементы.ГруппаШапкаПравая);
    НастройкаКомпоновщика.ПутьКДанным = "Компоновщик0.ПользовательскиеНастройки";
```

Проблема в том, что на форме он не отображается, но при нажатии на "Изменить форму" он существует, но без вспомогательных элементов.

При этом, если в конфигураторе добавить таблицу формы и прописать путь к данным, тогда он отображается корректно.
В этом и вопрос. Как создать и проинициализировать этот элемент формы программно?
---
В результате экспериментов выяснилось, что действительно, если скопировать существующий элемент со всеми его подчиненными элементами рекурсивно, то взлетит. Следующий код будет работать для любого объекта Компоновщика при условии, что есть элемент для копирования. Для примера взял Отбор:
```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    КоличествоКопий = 3;

    МассивРеквизитов = Новый Массив;
    ТипРеквизита = Новый ОписаниеТипов("КомпоновщикНастроекКомпоновкиДанных");
    Для Сч = 1 По КоличествоКопий Цикл
    Индекс = XMLСтрока(Сч + 1);
    НовыйРеквизит = Новый РеквизитФормы("Компоновщик" + Индекс, ТипРеквизита);
    МассивРеквизитов.Добавить(НовыйРеквизит);
    КонецЦикла;

    ИзменитьРеквизиты(МассивРеквизитов);

    Для Сч = 1 По КоличествоКопий Цикл
    Индекс = XMLСтрока(Сч + 1);
    НовыйЭлемент = СкопироватьЭлементРекурсивно(Элементы.Компоновщик1НастройкиОтбор, ЭтотОбъект, Индекс);
    КонецЦикла;

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

    Функция СкопироватьЭлементРекурсивно(Элемент, Родитель, Индекс)

    НовоеИмя = СтрЗаменить(Элемент.Имя, "1", Индекс);
    ТипЭлемента = Тип(Элемент);
    НовыйЭлемент = Элементы.Добавить(НовоеИмя, ТипЭлемента, Родитель);

    // копируем свойства элемента
    Если ТипЭлемента = Тип("ТаблицаФормы") Тогда
    НовыйЭлемент.ПутьКДанным = СтрЗаменить(Элемент.ПутьКДанным, "1", Индекс);
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент, ,"Имя,ПутьКДанным,ДополнительныеПараметрыСоздания");
    ИначеЕсли ТипЭлемента = Тип("ГруппаФормы") Тогда
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент, ,"Имя,ПутьКДаннымШапки");
    ИначеЕсли ТипЭлемента = Тип("ПолеФормы") Тогда
    НовыйЭлемент.ПутьКДанным = СтрЗаменить(Элемент.ПутьКДанным, "1", Индекс);
    Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент, ,"Имя,ПутьКДанным,ВыделенныйТекст");
    Иначе
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент, ,"Имя,ПутьКДанным");
    КонецЕсли;
    Иначе
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент, ,"Имя");
    КонецЕсли;

    // Проверяем наличие подчиненных элементов
    Структура = Новый Структура("ПодчиненныеЭлементы");
    ЗаполнитьЗначенияСвойств(Структура, Элемент);

    Если Структура.ПодчиненныеЭлементы <> Неопределено Тогда

    Для Каждого ПодчиненныйЭлемент Из Элемент.ПодчиненныеЭлементы Цикл
    СкопироватьЭлементРекурсивно(ПодчиненныйЭлемент, НовыйЭлемент, Индекс)
    КонецЦикла;

    КонецЕсли;

    Возврат НовыйЭлемент

    КонецФункции
```
---
Никак. Меняйте логику решения.
---
Это прям точно?) Или есть метод?
---
Я пробовал создавать программно – безрезультатно. Элементы формы, связанные с компоновщиком, видимо, генерируются только в конфигураторе.
---
Я пробовал создавать программно
Вы пробовали именно компоновщик? Программно? Это хорошо, что есть кто-то, кто это тоже пробовал))

А если я создам эти недостающие элементы программно? Напишу отдельную большую функцию?
---
Создавал элемент и на основе существующего компоновщика и на основе программно созданного реквизита.
Вы пробовали именно компоновщик? Разные его элементы, отборы, например. Но не торопитесь, это только моё мнение, возможно, появится кто-то, у кого получилось.
А если я создам эти недостающие элементы программно? Там очень сложная система элементов. Даже если вы каждый будете создавать программно, вряд ли это всё заработает.
---
Да, я видел эту систему. У меня не хватает 25 элементов (кнопки, поля, группы, декорации, группы и прочее). Ладно, буду дальше думать.
---
Трудно представить задачу, когда на форме требуется несколько компоновщиков. Попробуйте использовать один и тот же компоновщик, добавленный в конфигураторе для разных задач.
---
Трудно представить задачу, когда на форме требуется несколько компоновщиков
Мне бы такое и не приснилось, если бы не попалась такая задача. Если не найдём решение, будем менять логику.
---
Магия тут Screenshot_1

Можно руками создать вот эти Screenshot_2
КомпоновщикНастроек.ПользовательскиеНастройки.ВидСравнения и т д
---
Ваши ссылки (или это скрины) - не работают.
---
скриншотер заблокировали))))))))))) Обновил там картинки
---
Интересную наводку дали "Автозаполнение колонок". Вот только я не могу программно установить этот признак. Вопрос. А могу ли я программно скопировать элемент формы, который был создан интерактивно?
---
В результате экспериментов выяснилось, что действительно, если скопировать существующий элемент со всеми его подчиненными элементами рекурсивно, то взлетит. Следующий код будет работать для любого объекта Компоновщика при условии, что есть элемент для копирования. Для примера взял Отбор:
```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    КоличествоКопий = 3;

    МассивРеквизитов = Новый Массив;
    ТипРеквизита = Новый ОписаниеТипов("КомпоновщикНастроекКомпоновкиДанных");
    Для Сч = 1 По КоличествоКопий Цикл
    Индекс = XMLСтрока(Сч + 1);
    НовыйРеквизит = Новый РеквизитФормы("Компоновщик" + Индекс, ТипРеквизита);
    МассивРеквизитов.Добавить(НовыйРеквизит);
    КонецЦикла;

    ИзменитьРеквизиты(МассивРеквизитов);

    Для Сч = 1 По КоличествоКопий Цикл
    Индекс = XMLСтрока(Сч + 1);
    НовыйЭлемент = СкопироватьЭлементРекурсивно(Элементы.Компоновщик1НастройкиОтбор, ЭтотОбъект, Индекс);
    КонецЦикла;

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

    Функция СкопироватьЭлементРекурсивно(Элемент, Родитель, Индекс)

    НовоеИмя = СтрЗаменить(Элемент.Имя, "1", Индекс);
    ТипЭлемента = Тип(Элемент);
    НовыйЭлемент = Элементы.Добавить(НовоеИмя, ТипЭлемента, Родитель);

    // копируем свойства элемента
    Если ТипЭлемента = Тип("ТаблицаФормы") Тогда
    НовыйЭлемент.ПутьКДанным = СтрЗаменить(Элемент.ПутьКДанным, "1", Индекс);
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент, ,"Имя,ПутьКДанным,ДополнительныеПараметрыСоздания");
    ИначеЕсли ТипЭлемента = Тип("ГруппаФормы") Тогда
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент, ,"Имя,ПутьКДаннымШапки");
    ИначеЕсли ТипЭлемента = Тип("ПолеФормы") Тогда
    НовыйЭлемент.ПутьКДанным = СтрЗаменить(Элемент.ПутьКДанным, "1", Индекс);
    Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент, ,"Имя,ПутьКДанным,ВыделенныйТекст");
    Иначе
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент, ,"Имя,ПутьКДанным");
    КонецЕсли;
    Иначе
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, Элемент, ,"Имя");
    КонецЕсли;

    // Проверяем наличие подчиненных элементов
    Структура = Новый Структура("ПодчиненныеЭлементы");
    ЗаполнитьЗначенияСвойств(Структура, Элемент);

    Если Структура.ПодчиненныеЭлементы <> Неопределено Тогда

    Для Каждого ПодчиненныйЭлемент Из Элемент.ПодчиненныеЭлементы Цикл
    СкопироватьЭлементРекурсивно(ПодчиненныйЭлемент, НовыйЭлемент, Индекс)
    КонецЦикла;

    КонецЕсли;

    Возврат НовыйЭлемент

    КонецФункции
```
---
Завтра буду пробовать! Отпишусь по результату!)
---
Успешно! Ваш код я почти даже не менял, он работает. И сам код меня устраивает)
---
Как вариант Предопределить 5-10 компановщиков и отражать их на форме скрытыми, если они требуются показывать, если больше, чем 10, то выводить сообщение, что 10 это ограничение системы - меняйте логику)