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