Всем доброго здоровия!
Нужен ответ, совет, идея или любая другая информация от знатоков СКД.
Началось с того, что делал форму выбора записи регистра сведений с использованием динамического списка на произвольном запросе. И... ничего. Ни списка, ни отбора. Думал туплю (ну бывает). Ан нет - на другом регистре все работает. Вернулся - не работает. Стал разбираться. Упуская подробности добрался до обработки со следующим кодом:

```1c
    &НаСервереБезКонтекста
    Процедура ТестНаСервере()

    МассивКоллекцийМД = Новый Массив;
    МассивКоллекцийМД.Добавить(Метаданные.Справочники);
    МассивКоллекцийМД.Добавить(Метаданные.Документы);
    МассивКоллекцийМД.Добавить(Метаданные.ЖурналыДокументов);
    МассивКоллекцийМД.Добавить(Метаданные.ПланыВидовХарактеристик);
    МассивКоллекцийМД.Добавить(Метаданные.ПланыСчетов);
    МассивКоллекцийМД.Добавить(Метаданные.ПланыВидовРасчета);
    МассивКоллекцийМД.Добавить(Метаданные.ПланыОбмена);
    МассивКоллекцийМД.Добавить(Метаданные.БизнесПроцессы);
    МассивКоллекцийМД.Добавить(Метаданные.Задачи);
    МассивКоллекцийМД.Добавить(Метаданные.РегистрыСведений);
    МассивКоллекцийМД.Добавить(Метаданные.РегистрыНакопления);
    МассивКоллекцийМД.Добавить(Метаданные.РегистрыРасчета);
    МассивКоллекцийМД.Добавить(Метаданные.РегистрыНакопления);

    Для каждого Тек_КоллекцияМД Из МассивКоллекцийМД Цикл
    Для Каждого ОбъектМД Из Тек_КоллекцияМД Цикл
    Схема = Новый СхемаКомпоновкиДанных;
    ИсточникДанных = Схема.ИсточникиДанных.Добавить();
    ИсточникДанных.Имя = "ИсточникДанных1";
    ИсточникДанных.ТипИсточникаДанных = "Local";
    НаборДанных = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    НаборДанных.Имя = "Набор1";
    НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
    НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
    ПолноеИмяТаблицыБД = ОбъектМД.ПолноеИмя();
    ТекстЗапроса = "ВЫБРАТЬ Т.* ИЗ " + ПолноеИмяТаблицыБД + " КАК Т";
    НаборДанных.Запрос = ТекстЗапроса;
    Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
    Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
    Если Компоновщик.Настройки.ДоступныеПоляВыбора.Элементы.Количество() = 1 Тогда
    Сообщить("Нет доступных полей: " + ПолноеИмяТаблицыБД);
    Иначе
    //Сообщить("Есть доступные поля для регистра - " + ПолноеИмяТаблицыБД);
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;

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

    &НаКлиенте
    Процедура Тест(Команда)
    ТестНаСервере();
    КонецПроцедуры
```

В итоге получил список КУЧИ таблиц у которых КомпоновщикНастроекКомпоновкиДанных не видит НИКАКИХ полей. То же самое происходит, если к этим таблицам обращаться через консоль СКД из пользовательского режима.

Прав достаточно. Простой запрос всё видит. Настройка СКД через конфигуратор работает нормально. Проблемы в получении компоновщика программно и, как следствие, в пользовательском режиме.

Какие есть идеи? Кто, что сможет подсказать? Как с этим бороться?
---
Экспериментировал со справочником НомераГТД. Этот же запрос реально возвращает только системные поля.
Не уверен про роли и права, Полные права дают все права, значит прав достаточно. Но включил ФО Торговля импортным товаром и сразу все появилось как надо
---
> Прав достаточно. Простой запрос всё видит.

Права на таблицы, требуемые СКД

требуется право Просмотр на сам объект -- и также право Просмотр на его реквизиты.

Галочка "Устанавливать права для реквизитов и табличных частей по умолчанию" призвана обеспечить второе, но для ролей в расширениях она в данный момент сломана, и права для реквизитов нужно выставлять руками.
---
Как-то я не совсем понял посыл. Всё описанное мной в вопросе выполняется под полными правами. Какие галочки надо добавлять полным правам?
---
Экспериментировал со справочником НомераГТД. Этот же запрос реально возвращает только системные поля.
Не уверен про роли и права, Полные права дают все права, значит прав достаточно. Но включил ФО Торговля импортным товаром и сразу все появилось как надо
---
Полные права дают все права, значит прав достаточно
Уточнение, не всегда.
Полные права, это обычная роль. Соответственно, если объекту не дать эту роль, то пользователь с полными правами не сможет работать с этим объектом.
Единственное отличие, что обычно именно эта роль автоматически добавляется ко всем объектам.
---
ФО немного проливают свет, но после модификации тестовой процедуры обнаружил, СтрокиСПроблемамиБезФО (см. код) тоже не пустые. Что тогда включать, если ФО нет?

```1c
    &НаСервереБезКонтекста
    Процедура ТестНаСервере()

    МассивКоллекцийМД = Новый Массив;
    МассивКоллекцийМД.Добавить(Метаданные.Справочники);
    МассивКоллекцийМД.Добавить(Метаданные.Документы);
    МассивКоллекцийМД.Добавить(Метаданные.ЖурналыДокументов);
    МассивКоллекцийМД.Добавить(Метаданные.ПланыВидовХарактеристик);
    МассивКоллекцийМД.Добавить(Метаданные.ПланыСчетов);
    МассивКоллекцийМД.Добавить(Метаданные.ПланыВидовРасчета);
    МассивКоллекцийМД.Добавить(Метаданные.ПланыОбмена);
    МассивКоллекцийМД.Добавить(Метаданные.БизнесПроцессы);
    МассивКоллекцийМД.Добавить(Метаданные.Задачи);
    МассивКоллекцийМД.Добавить(Метаданные.РегистрыСведений);
    МассивКоллекцийМД.Добавить(Метаданные.РегистрыНакопления);
    МассивКоллекцийМД.Добавить(Метаданные.РегистрыРасчета);
    МассивКоллекцийМД.Добавить(Метаданные.РегистрыНакопления);

    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("ИмяМД");
    ТЗ.Колонки.Добавить("ИмяФО");
    ТЗ.Колонки.Добавить("ЗначениеФО");
    ТЗ.Колонки.Добавить("ХранениеФО");
    ТЗ.Колонки.Добавить("Проблема");

    Для каждого Тек_ФО Из Метаданные.ФункциональныеОпции Цикл
    Для каждого Тек_Состав Из Тек_ФО.Состав Цикл
    НоваяСтрока = ТЗ.Добавить();
    НоваяСтрока.ИмяМД = ?(Тек_Состав.Объект = Неопределено, Неопределено, Тек_Состав.Объект.ПолноеИмя());
    НоваяСтрока.ИмяФО = Тек_ФО.ПолноеИмя();
    НоваяСтрока.ЗначениеФО = ПолучитьФункциональнуюОпцию(Тек_ФО.Имя);
    НоваяСтрока.ХранениеФО = Тек_ФО.Хранение.ПолноеИмя();
    НоваяСтрока.Проблема = Ложь;
    КонецЦикла;
    КонецЦикла;

    Для каждого Тек_КоллекцияМД Из МассивКоллекцийМД Цикл
    Для Каждого ОбъектМД Из Тек_КоллекцияМД Цикл
    Схема = Новый СхемаКомпоновкиДанных;
    ИсточникДанных = Схема.ИсточникиДанных.Добавить();
    ИсточникДанных.Имя = "ИсточникДанных1";
    ИсточникДанных.ТипИсточникаДанных = "Local";
    НаборДанных = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    НаборДанных.Имя = "Набор1";
    НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
    НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
    ПолноеИмяТаблицыБД = ОбъектМД.ПолноеИмя();
    ТекстЗапроса = "ВЫБРАТЬ Т.* ИЗ " + ПолноеИмяТаблицыБД + " КАК Т";
    НаборДанных.Запрос = ТекстЗапроса;
    Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
    Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
    Если Компоновщик.Настройки.ДоступныеПоляВыбора.Элементы.Количество() = 1 Тогда
    Сообщить("Нет доступных полей: " + ПолноеИмяТаблицыБД);
    СтрокиФО = ТЗ.НайтиСтроки(Новый Структура("ИмяМД", ПолноеИмяТаблицыБД));
    Для каждого Тек_СтрокиФО Из СтрокиФО Цикл
    Тек_СтрокиФО.Проблема = Истина;
    КонецЦикла;
    Если СтрокиФО.Количество() = 0 Тогда
    НоваяСтрока = ТЗ.Добавить();
    НоваяСтрока.ИмяМД = ПолноеИмяТаблицыБД;
    НоваяСтрока.ИмяФО = "Не обнаружено";
    НоваяСтрока.ЗначениеФО = ";
    НоваяСтрока.ХранениеФО = ";
    НоваяСтрока.Проблема = Истина;
    КонецЕсли;
    Иначе
    //Сообщить("Есть доступные поля для регистра - " + ПолноеИмяТаблицыБД);
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;

    ТЗ.Сортировать("ИмяМД, ИмяФО");
    //Точка останова для просмотра
    СтрокиСПроблемами = ТЗ.НайтиСтроки(Новый Структура("Проблема", Истина));
    СтрокиСПроблемамиБезФО = ТЗ.НайтиСтроки(Новый Структура("Проблема, ИмяФО", Истина, "Не обнаружено"));

    КонецПроцедуры
```
---
Если объекту не дать эту роль, то и запрос не будет его "видеть". А запрос видит (да и роль у него есть, проверено) и даже результат не пустой, а вот компоновщик не хочет.

см (6)
---
(6) PS
Разобрался. Некоторые объекты отключаются не непосредственно, а опосредовано через подсистемы, но тоже через ФО.
---
Теперь бы еще понять почему так, как проверяется в СКД вкл/выкл ФО, где об этом в документации и что делать, если понадобится подобное решение