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