Как в отчете СКД заменить параметр "Да/Нет" на флажок (галочку)?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов на Системе Компоновки Данных (СКД) часто возникает задача сделать интерфейс более удобным и интуитивно понятным для пользователя. Стандартное представление параметра с типом Булево — это поле выбора со значениями "Да" и "Нет". Однако для логических параметров гораздо привычнее видеть обычный флажок (галочку). В типовых конфигурациях это работает автоматически, но при создании отчета в пустой или самописной конфигурации разработчики сталкиваются с тем, что параметр отображается по-старому. Рассмотрим, почему так происходит и как добиться нужного вида.

Почему в типовых конфигурациях флажки появляются автоматически?

Основная причина кроется в использовании Библиотеки Стандартных Подсистем (БСП). "Магия" происходит не на уровне настроек самой схемы компоновки данных, а на уровне управляемой формы, которая используется для отображения отчета.

В большинстве типовых решений в свойствах корня конфигурации указана общая форма ФормаОтчета. Эта форма содержит сложную логику по обработке и отображению пользовательских настроек отчета. Когда форма открывается, она анализирует все параметры, выведенные для пользователя. Если система обнаруживает параметр с типом Булево, она не использует стандартный элемент, а программно подменяет его на поле вида "Флажок".

Проанализируем этот механизм подробнее на основе обсуждения:

  1. На общей форме отчета (например, ФормаОтчета) заранее созданы несколько невидимых элементов-флажков (например, Флажок1, Флажок2).
  2. При создании формы на сервере, в таких процедурах как ПриСозданииНаСервере или позже, при обновлении состава настроек (например, в процедуре ПриОбновленииСоставаПользовательскихНастроекНаСервере, которая может вызывать общие модули вроде ОтчетыСервер.ОбновитьЭлементыФормыНастроек), происходит анализ параметров компоновки.
  3. Для каждого булева параметра система берет один из готовых невидимых флажков, делает его видимым и связывает с данными соответствующего параметра.
  4. Если готовых флажков не хватает, форма может создавать новые элементы программно.

Именно поэтому при отладке в типовой конфигурации в процедуре ПриСозданииНаСервере элементы-флажки уже существуют на форме. Попытка просто скопировать общую форму ФормаОтчета в свою конфигурацию, скорее всего, приведет к ошибкам, так как она тесно связана с множеством других объектов и модулей БСП.

Решение 1: Настройка свойств параметра в СКД (простой способ)

В некоторых случаях, в зависимости от версии платформы и наличия базовых библиотек, можно попытаться добиться нужного вида с помощью комбинации настроек самого параметра в схеме компоновки данных. Этот способ не всегда работает в "пустых" конфигурациях, но его стоит проверить в первую очередь из-за простоты.

Выполним следующие шаги:

  1. Откройте схему компоновки данных и перейдите на вкладку "Параметры".
  2. Выберите нужный параметр с типом Булево.
  3. В свойствах параметра установите:
    • Использование: установите значение "Всегда". Это обеспечит постоянное присутствие параметра в настройках.
    • Режим редактирования: выберите "Быстрый выбор".
    • Запрещать незаполненные значения: установите этот флажок. Хотя для булева типа это кажется избыточным, в некоторых случаях это влияет на представление элемента.

После применения этих настроек проверьте, как параметр отображается в режиме "Предприятие". Если флажок не появился, значит, в вашей конфигурации отсутствует необходимый платформенный или библиотечный механизм, и нужно переходить к программному решению.

Решение 2: Программное управление на форме отчета (универсальный способ)

Этот метод является наиболее надежным для нетиповых конфигураций. Он заключается в создании собственной формы отчета и ручном управлении элементом для булева параметра. Мы, по сути, воспроизводим логику БСП в упрощенном виде для нашего конкретного случая.

Разберем по шагам:

  1. Создайте форму для отчета. Если у отчета еще нет своей формы, создайте ее и назначьте основной.
  2. Добавьте реквизит на форму. Создайте на форме новый реквизит с типом Булево, например, назовем его ВыводитьДополнительно.
  3. Разместите элемент на форме. Перетащите новый реквизит на форму. В свойствах созданного элемента управления установите Вид в значение "Поле флажка". Можете также задать ему понятный заголовок.
  4. Скройте стандартный параметр. Чтобы у пользователя не было двух одинаковых настроек, скроем стандартный параметр СКД. Для этого в схеме компоновки данных на вкладке "Настройки" найдите ваш булев параметр в пользовательских настройках и снимите с него флажок "Включать в пользовательские настройки". Теперь он не будет отображаться автоматически, но останется доступным для программного управления.
  5. Свяжите флажок с параметром. Теперь самое главное — перед формированием отчета нужно передать значение из нашего флажка в параметр СКД. Для этого создадим обработчик события формы ПриКомпоновкеРезультата.

Посмотрим на пример кода для обработчика события ПриКомпоновкеРезультата:


&НаСервере
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

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

КонецПроцедуры

Этот подход дает полный контроль над внешним видом и поведением формы отчета. Хоть он и требует написания кода, он гарантированно работает в любой конфигурации и позволяет создавать действительно удобные пользовательские интерфейсы.

← На главную