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