Почему параметры СКД типа Булево выводятся полями ввода вместо галочек и как это исправить?

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

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

Давайте подробно разберем причину такого поведения и рассмотрим несколько надежных способов, как вернуть привычные галочки, а также проанализируем, как можно доработать форму отчета программно без создания пользовательской формы.

Почему булево поле превращается в поле ввода?

Выясним причину. При использовании стандартной генерации формы (когда собственной формы у отчета нет) компоновщик настроек платформы 1С самостоятельно анализирует типы параметров и подбирает наиболее оптимальный вид элемента управления. Для типа Булево это флажок.

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

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

Разберем самый простой и "чистый" способ без изменения элементов на самой форме. Нам потребуется настроить свойства параметра прямо в макете СКД:

  1. Откройте схему компоновки данных вашего отчета и перейдите на вкладку Параметры.
  2. Найдите ваш булевый параметр.
  3. В колонке Использование установите значение Всегда (это делает параметр обязательным, что дает сигнал платформе отображать его флажком).
  4. Альтернативный вариант в этой же вкладке: перейдите в колонку Параметры редактирования. В открывшемся окне настройте Формат редактирования или установите свойство Быстрый выбор.

Также можно использовать именованный отбор вместо параметра: добавьте ваше булево поле в текст запроса, вынесите его в пользовательские настройки отбора и задайте понятное представление. В быстрых настройках оно автоматически отрисуется галочкой.

Способ 2: Принудительное изменение типа элемента на форме

Если вы всё-таки используете свою (пользовательскую) форму отчета, то вернем галочку через свойства элементов формы:

  1. Откройте вашу форму отчета в конфигураторе.
  2. В дереве элементов найдите поле ввода, которое отвечает за вывод булевого параметра из пользовательских настроек.
  3. В палитре свойств измените свойство Вид с Поле ввода на Поле флажка.

Способ 3: Программное изменение типовой формы БСП (без создания своей)

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

БСП позволяет управлять стандартной формой программно. Проанализируем по шагам, как это сделать:

  1. Откройте модуль менеджера вашего отчета. В процедуре НастроитьВариантыОтчета необходимо явно указать, что мы хотим влиять на форму: НастройкиОтчета.ОпределитьНастройкиФормы = Истина;
  2. Затем перейдите в модуль объекта отчета. Добавьте специальную процедуру-перехватчик:
    
    Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
        Настройки.События.ПриСозданииНаСервере = Истина;
    КонецПроцедуры
    
  3. Теперь в том же модуле объекта разместите саму экспортную процедуру события создания формы. В ней вы можете перехватить момент открытия и программно изменить свойства любых полей (включая вид флажков):
    
    Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
        // Здесь химичим с элементами типовой формы
        // Например, находим нужный элемент настроек и меняем его вид
    КонецПроцедуры
    

Важный нюанс: Потеря реквизитов при фоновом формировании отчета БСП

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

Посмотрим, почему это происходит. По умолчанию отчеты в БСП выполняются в фоновом задании. Для этого система на сервере (в фоне) создает совершенно новый экземпляр объекта отчета, который ничего не знает о данных, введенных пользователем в реквизиты формы на клиенте.

Как это исправить? Рассмотрим два пути:

  1. Отказаться от фонового выполнения (не рекомендуется для тяжелых отчетов).
  2. Передавать параметры вручную. Вам необходимо упаковать значения реквизитов формы в структуру ПараметрыФормирования (например, в ДополнительныеСвойства) при вызове длительной операции:

Результат = ДлительныеОперации.ВыполнитьВФоне(
    "ВариантыОтчетов.СформироватьОтчетВФоне",
    ПараметрыФормирования,
    ПараметрыВыполнения
);

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

← На главную