Убираем параметры из отбора СКД
Разработка - Универсальные функции
Вкратце, если тяжко продираться через мой стиль изложения: сделали СКД программно, получили в отборе картинку, как на рисунке. Заметка - о том, как такое убрать, и о сопутствующих наблюдениях.
Параметры данных СКД - сущность, равно относимая к "основе" СКД и к её настройкам. Сущность, претерпевающая серьёзные преобразования при компоновке рабочих коллекций СКД. Само понятие "Настройки СКД" неоднозначно - если рассуждать, исходя из интерфейса, то речь может идти о содержимом закладки "Настройки" конструктора СКД, а если исходить из состава свойств объекта "НастройкиКомпоновкиДанных", то также фигурируют и параметры данных. Разумеется, потому, что параметры могут упоминаться во многих конструкциях настроек. Но, параметры также могут применяться помимо настроек - в самых разных выражениях и в самых разных местах СКД. Коллекция параметров данных стоит особняком, она вроде бы и связана с сущностью настроек, и при этом требует независимого объявления/указания, обработки, наладки. Параметры принципиально отличаются от настроек уже хотя бы тем, что их механика (появившаяся ещё во времена Построителя запроса и Построителя отчёта) допускает указание разметкой в тексте исходного запроса, а значит, учитывается первичным компилятором набора схемы, читающим этот запрос.
Про параметры, и "жёсткие", и "мягкие", сказано предостаточно, например, тут. А вот об их инициализации известно мало. Понятно, что никакие настройки СКД к их определению не относятся, и это сугубо механизм самой схемы, будь то первичная декларация набора кодом либо конструктором, или переопределение кодом уже на этапе макета компоновки. Действия платформы по интерпретации параметров не поддаются наладке - все действия с ними возможны лишь уже после создания набора. Объект, отвечающий за чтение входного запроса, т.е. ИсточникДоступныхНастроекКомпоновкиДанных, не предоставляет инструментов, позволяющих повлиять на параметры, в т.ч. даже на уровне AvailableSettingsSource с принудительным behaviour, отличным от 0. Это проявляется, например, в том, чему и посвящена данная заметка.
Будь то конструктор или программное создание, берущее за основу запрос с "жёсткими" параметрами, наблюдается эффект появления в отборе, доступном пользователю как интерфейсная проекция компоновщика настроек, ветки "Параметры", где все эти параметры фигурируют как поля отбора. Темой заметки является принудительное отключение этого эффекта.
Параметры попадают в отбор по умолчанию всегда, как только отработал метод "Инициализировать" компоновщика настроек. При этом никаких собственно "настроек", т.е. ничего, касающегося отборов, в компоновщике ещё может не быть определено, и это не важно. Параметры данных на самом деле не связаны не только с настройками, но даже со свойствами СКД. Они подгружаются и поддерживаются настолько неявно, что их нет в, казалось бы, очевидных коллекциях.
Разберём на примере запроса к справочнику "Контрагенты".
Будем исходить из выключенного автозаполнения.
Обратимся к коллекциям СКД и увидим, что:
рСКД.Параметры // пуста
рСКД.НастройкиПоУмолчанию.Отбор.ДоступныеПоляОтбора.Элементы // пуста
рСКД.НастройкиПоУмолчанию.ПараметрыДанных.Элементы // пуста
Аналогично, ничего нет в сериализованной СКД и её настройках по умолчанию.
Но - в табличном поле отборов 1С предложит пользователю доступное "поле отбора" из папки "Параметры", с именем "Усл ИНН". И это надо убрать.
Пытаться повлиять на это через настройки компоновщика бесполезно, но следует помнить, что сами-то параметры на настройки влияют и, хоть несколько неочевидно, но в них отражаются.
То есть, мы располагаем подробным описанием параметров, т.е. именами, типами, ограничением функц.доступности, хотя не совсем там, где ожидали (в СКД.Параметры). Если попытаться принудительно открыть в толстом клиенте диалог конструктора СКД, то параметры инициализируются при его открытии и на закладке "Параметры", конечно, появятся, а потом появятся и в этой коллекции, но это же не вариант. То есть, СКД неявно "подразумевает" параметры данных, и лишь при декларативном обращении их заносит "в явном виде", а если таковое не случилось, то лишь при компоновке макета в процессе исполнения. И лишь в компоновщике настроек эти неявные сведения находят такое ненужное нам явное отражение.
Вывод прост: чтобы убрать что-то ненужное, надо явным образом добавить это ненужное.
Собственно, всё. Если я изобрёл велосипед и есть более простой способ - тухлые помидоры приветствуются.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.