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