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