Вкратце, если тяжко продираться через мой стиль изложения: сделали СКД программно, получили в отборе картинку, как на рисунке. Заметка - о том, как такое убрать, и о сопутствующих наблюдениях.
Параметры данных СКД - сущность, равно относимая к "основе" СКД и к её настройкам. Сущность, претерпевающая серьёзные преобразования при компоновке рабочих коллекций СКД. Само понятие "Настройки СКД" неоднозначно - если рассуждать, исходя из интерфейса, то речь может идти о содержимом закладки "Настройки" конструктора СКД, а если исходить из состава свойств объекта "НастройкиКомпоновкиДанных", то также фигурируют и параметры данных. Разумеется, потому, что параметры могут упоминаться во многих конструкциях настроек. Но, параметры также могут применяться помимо настроек - в самых разных выражениях и в самых разных местах СКД. Коллекция параметров данных стоит особняком, она вроде бы и связана с сущностью настроек, и при этом требует независимого объявления/указания, обработки, наладки. Параметры принципиально отличаются от настроек уже хотя бы тем, что их механика (появившаяся ещё во времена Построителя запроса и Построителя отчёта) допускает указание разметкой в тексте исходного запроса, а значит, учитывается первичным компилятором набора схемы, читающим этот запрос.
Про параметры, и "жёсткие", и "мягкие", сказано предостаточно, например, тут. А вот об их инициализации известно мало. Понятно, что никакие настройки СКД к их определению не относятся, и это сугубо механизм самой схемы, будь то первичная декларация набора кодом либо конструктором, или переопределение кодом уже на этапе макета компоновки. Действия платформы по интерпретации параметров не поддаются наладке - все действия с ними возможны лишь уже после создания набора. Объект, отвечающий за чтение входного запроса, т.е. ИсточникДоступныхНастроекКомпоновкиДанных, не предоставляет инструментов, позволяющих повлиять на параметры, в т.ч. даже на уровне AvailableSettingsSource с принудительным behaviour, отличным от 0. Это проявляется, например, в том, чему и посвящена данная заметка.
Будь то конструктор или программное создание, берущее за основу запрос с "жёсткими" параметрами, наблюдается эффект появления в отборе, доступном пользователю как интерфейсная проекция компоновщика настроек, ветки "Параметры", где все эти параметры фигурируют как поля отбора. Темой заметки является принудительное отключение этого эффекта.
Параметры попадают в отбор по умолчанию всегда, как только отработал метод "Инициализировать" компоновщика настроек. При этом никаких собственно "настроек", т.е. ничего, касающегося отборов, в компоновщике ещё может не быть определено, и это не важно. Параметры данных на самом деле не связаны не только с настройками, но даже со свойствами СКД. Они подгружаются и поддерживаются настолько неявно, что их нет в, казалось бы, очевидных коллекциях.
Разберём на примере запроса к справочнику "Контрагенты".
Всё более чем тривиально.
рСКД = Новый СхемаКомпоновкиДанных;
рИсточникДанных = рСКД.ИсточникиДанных.Добавить();
рИсточникДанных.Имя = "ОсновнойИсточник";
рИсточникДанных.ТипИсточникаДанных = "Local";
рНабор = рСКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
рНабор.Имя = "ОсновнойНабор";
рНабор.Запрос = "ВЫБРАТЬ спр.Ссылка ИЗ Справочник.Контрагенты КАК спр ГДЕ спр.ИНН = &УслИНН";
рНабор.ИсточникДанных = "ОсновнойИсточник";
рНабор.АвтоЗаполнениеДоступныхПолей = Истина;
Обращаем внимание на пресловутое Автозаполнение полей. На, допустим, заполнение для виртуальных таблиц и т.д. - оно влияет, и ровно так же влияет на Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы, т.е. поведение при заполнении всех коллекций - ожидаемое; но вот на Параметры оно не оказывает никакого действия. Этот флаг вообще более важен для последующего поведения СКД, чем для его инициализации - недаром сама по себе сериализованная СКД с этим флагом и без него отличается лишь наличием тега autoFillFields.
Будем исходить из выключенного автозаполнения.
Обратимся к коллекциям СКД и увидим, что:
рСКД.Параметры // пуста
рСКД.НастройкиПоУмолчанию.Отбор.ДоступныеПоляОтбора.Элементы // пуста
рСКД.НастройкиПоУмолчанию.ПараметрыДанных.Элементы // пуста
Аналогично, ничего нет в сериализованной СКД и её настройках по умолчанию.
Но - в табличном поле отборов 1С предложит пользователю доступное "поле отбора" из папки "Параметры", с именем "Усл ИНН". И это надо убрать.
Пытаться повлиять на это через настройки компоновщика бесполезно, но следует помнить, что сами-то параметры на настройки влияют и, хоть несколько неочевидно, но в них отражаются.
Смотрим отладчиком по ранее сделанной схеме:
рИсточник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(рСКД); // или её URL, не принципиально
комп=Новый КомпоновщикНастроекКомпоновкиДанных;
комп.Инициализировать(рИсточник); // именно в этот момент параметры уже вносятся как доступные в отбор
комп.ЗагрузитьНастройки(рСКД.НастройкиПоУмолчанию); // можно вообще не использовать, не принципиально
комп.Настройки.Отбор.ДоступныеПоляОтбора и комп.Настройки.ДоступныеПоляОтбора // рассматриваем как эквивалентные
// В комп.Настройки.Отбор.ДоступныеПоляОтбора.Элементы есть группа-коллекция с полем ПараметрыДанных
// типа КоллекцияДоступныхПолейКомпоновкиДанных, а в ней в коллекции Элементы - видим все параметры
// из запроса. Но - без возможности их отключения.
// Эту же папку "ПараметрыДанных" можно получить как
комп.Настройки.ДоступныеПоляОтбораЭлементовСтруктуры.Элементы.Получить(1); // или какая она там будет по счёту
// Заметим, что "мягкие" параметры (добавляемые в фигурных скобках) НЕ входят в эту группу, а входят просто
// в корень коллекции ДоступныеПоляОтбора, тогда как в комп.Настройки.ПараметрыДанных.ДоступныеПараметры их нет.
// В комп.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы уже всё есть, поле Использование = Авто,
// но надо помнить, что это ИспользованиеПараметраКомпоновкиДанных, а не Булево, и отключить тоже нельзя.
// В комп.Настройки.ПараметрыДанных.Элементы уже всё есть с инициализированными значениями по типам данных,
// но при этом в самих коллекциях комп.Настройки, или в комп.Настройки.Отбор, или
// в комп.Настройки.Отбор.ДоступныеПоляОтбора - ничего нет, равно как нет и в их сериализованном виде.
// У поля типа ДоступноеПолеОтбораКомпоновки данных подходящих свойств или методов нет
// Ничего не даёт и манипуляция со свойствами "верхнего", "пользовательского" уровня:
// этот код повлияет на визуализацию, отразится в сериализации, но не поможет убрать параметры из Отбора:
Для каждого эл Из комп.Настройки.ПараметрыДанных.Элементы Цикл
эл.Использование=Ложь;
эл.РежимОтображения=РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецЦикла;
Вообще замечу, что сериализация и обратная десериализация в плане манипуляции компоновщиком настроек, или самими его настройками, или вообще любой сущностью контура СКД, для решения данной проблемы ничего не даёт.
То есть, мы располагаем подробным описанием параметров, т.е. именами, типами, ограничением функц.доступности, хотя не совсем там, где ожидали (в СКД.Параметры). Если попытаться принудительно открыть в толстом клиенте диалог конструктора СКД, то параметры инициализируются при его открытии и на закладке "Параметры", конечно, появятся, а потом появятся и в этой коллекции, но это же не вариант. То есть, СКД неявно "подразумевает" параметры данных, и лишь при декларативном обращении их заносит "в явном виде", а если таковое не случилось, то лишь при компоновке макета в процессе исполнения. И лишь в компоновщике настроек эти неявные сведения находят такое ненужное нам явное отражение.
Вывод прост: чтобы убрать что-то ненужное, надо явным образом добавить это ненужное.
И нет, конфликта добавления не происходит:
Для каждого элПараметр Из комп.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы Цикл // именно ЭТА коллекция
рПараметр=рСКД.Параметры.Добавить();
ЗаполнитьЗначенияСвойств(рПараметр, элПараметр);
рПараметр.Имя=СокрЛП(Строка(элПараметр.Параметр)); // тут может быть подводный камень локализации и имён
рПараметр.ВключатьВДоступныеПоля = Ложь; // ради чего, собственно, всё и делалось
// Заметим, что рПараметр.ОграничениеИспользования = Истина; в нашем случае не играет никакой роли;
// в этом и разница между ним и включением в доступные - в закладках параметров пользователю может быть
// как разрешено, так и запрещено, и это не связано с общей доступностью для механизма.
КонецЦикла;
Запуская Предприятие, мы видим, что из пользовательских отборов эти параметры, да и вся ветка "Параметры данных", исчезли, но на их работе собственно как параметров, естественно, это не сказалось.
Конечно, такие параметры надо будет устанавливать программно и принудительно.
Специфически ведут себя в отборах параметры, для которых разрешён список; но, поскольку мне известны 2-3 разных поведения, видимо, зависящие от релизов, делать однозначные выводы не рискну, просто укажу, что такие требуют ещё большего внимания.
Собственно, всё. Если я изобрёл велосипед и есть более простой способ - тухлые помидоры приветствуются.