При разработке отчетов на схеме компоновки данных (СКД) в 1С:Предприятии разработчики часто сталкиваются с неочевидным поведением платформы — для этого есть набор инструментов для разработчика с консолью СКД. Когда мы добавляем параметр с типом Булево, на автоматически генерируемой форме он по умолчанию отображается не в виде привычного и удобного флажка (чекбокса), а как выпадающий список со значениями «Да» и «Нет». Более того, рядом с ним выводится дополнительный чекбокс использования параметра. Такое поведение интерфейса кажется избыточным и неудобным для конечного пользователя, которому гораздо привычнее кликнуть один раз по «галке».
Разберем детально, почему так происходит. В системе компоновки данных любой параметр по умолчанию имеет три потенциальных состояния:
Для отображения этих трех состояний стандартный элемент управления «Поле флажка» (который имеет всего два состояния — включен/выключен) физически не подходит без усложнения логики. Поэтому платформа 1С идет по универсальному пути: она создает два связанных элемента. Первый — чекбокс, управляющий свойством Использование параметра. Второй — поле выбора со значениями «Да» / «Нет», управляющее самим булевым значением. Это логично с точки зрения архитектуры СКД, но крайне неудобно с точки зрения юзабилити.
Рассмотрим подробнее, какими способами можно обойти это ограничение и заставить платформу вывести красивый и удобный одиночный флажок.
Проанализируем ситуацию: если логика вашего отчета построена так, что параметр должен быть задействован всегда, то есть состояние «не используется» исключено, мы можем принудительно отключить трехзначную логику. В этом случае платформа автоматически заменит выпадающий список на одиночный флажок.
Разберем по шагам, как это настроить в конструкторе СКД:
Истина).После применения этих настроек запустите отчет в режиме «1С:Предприятие». Вы увидите, что на автоматически генерируемой форме параметр теперь выводится в виде аккуратной «галочки». При этом отдельный флажок использования исчезнет, так как мы жестко зафиксировали его обязательность.
Если вам все же требуется возможность отключать условие (то есть сохранять состояние «не выбрано»), но вы хотите видеть именно флажок, отличным решением станет замена параметра на быстрый отбор СКД — для этого подойдёт удобные визуальные фильтры для отборов СКД. Булевые отборы на стандартных формах всегда отображаются платформой в виде простого флажка, так как управление использованием и значением в отборах изначально лаконично совмещено.
Выполним следующие шаги:
ГДЕ. Вместо этого пропишите виртуальное поле отбора в фигурных скобках. Например:
ВЫБРАТЬ
Продажи.Номенклатура,
Продажи.Сумма
ИЗ
РегистрНакопления.Продажи КАК Продажи
{ГДЕ
Продажи.Номенклатура.Услуга КАК ПоказатьТолькоУслуги}
ПоказатьТолькоУслуги.Посмотрим на результат: на форме отчета появится удобная строка отбора с одной единственной «галкой». Когда флажок снят — отбор не применяется (выводятся и товары, и услуги). Когда флажок установлен — выводятся только услуги.
Если ваш отчет имеет индивидуальный дизайн и вы создали для него собственную управляемую форму, вы можете полностью контролировать отображение элементов интерфейса. В этом случае мы можем напрямую связать флажок на форме с параметром СКД.
Рассмотрим по шагам реализацию этого механизма:
ПоказыватьАрхивные и типом данных Булево.
&НаСервере
Процедура УстановитьПараметрСКДНаСервере()
// Получаем доступ к параметрам компоновщика настроек
ПараметрыДанных = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных;
// Находим нужный параметр по его имени
ПараметрСостояния = ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПоказыватьАрхивные"));
Если ПараметрСостояния <> Неопределено Тогда
// Записываем значение из реквизита формы напрямую в параметр СКД
ПараметрСостояния.Значение = ПоказыватьАрхивные;
// Принудительно включаем использование параметра
ПараметрСостояния.Использование = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриКомпоновкеРезультата(Результат, ДанныеРасшифровки, СтандартнаяОбработка)
// Перед формированием отчета обновляем значения параметров СКД
УстановитьПараметрСКДНаСервере();
КонецПроцедуры
Этот способ является максимально гибким, так как позволяет реализовывать любую сложную логику поведения элементов управления на форме и гарантирует привычный пользователю интерфейс с классическими флажками.
Если вы ведете разработку в современных типовых конфигурациях (таких как 1С:ERP, Управление торговлей 11, ЗУП 3 или Комплексная автоматизация), которые построены на базе БСП, вам зачастую вообще не требуется писать код или менять сложные настройки параметров.
Стандартные механизмы БСП при выводе отчета на общую форму автоматически анализируют типы данных пользовательских настроек. Если система видит булев параметр, программные модули БСП на лету трансформируют элемент формы из выпадающего списка «Да/Нет» в стандартное поле флажка. Если же вы разрабатываете конфигурацию «с нуля» без интеграции БСП, то для получения аналогичного поведения вам придется использовать Способ 1 или Способ 3.
Напоследок проанализируем нестандартный прием, который обсуждался участниками форума. Если по каким-то причинам вы не можете изменять настройки использования параметра или создавать свою форму, можно прибегнуть к визуальной хитрости — подмене стандартного представления булевых величин.
Посмотрим на этот метод в действии:
Истина и Ложь.Ложь укажите обычный пробел или пустую строку, а для значения Истина вставьте специальный Юникод-символ галочки, например, ✔ или ✓.Стоит отметить, что этот метод является компромиссным («костылем»). Визуально в выпадающем списке пользователь увидит галочку вместо слова «Да», однако элемент управления по-прежнему останется выпадающим списком, и для его изменения пользователю придется делать два клика мышкой вместо одного быстрого нажатия на настоящий флажок. Мы рекомендуем использовать этот способ только в самых крайних случаях, отдавая предпочтение штатной настройке обязательности использования параметра.