При разработке отчетов на системе компоновки данных (СКД) в конфигурациях на обычных формах (таких как УПП 1.3 или Комплексная автоматизация 1.1) программисты часто сталкиваются с тем, что технические параметры, предназначенные для внутренних расчетов, неожиданно «выплывают» на форму. Особенно это актуально, если в отчете используется горизонтальная панель пользователя, формируемая динамически подсистемой ТиповыеОтчеты.
В этой статье мы подробно разберем, почему стандартные галочки в конструкторе СКД могут не срабатывать, и рассмотрим наиболее эффективные методы управления видимостью параметров, включая расширение языка запросов СКД.
Рассмотрим типичную ситуацию: вы добавили в запрос виртуальную таблицу, например, РегистрСведений.РаботникиОрганизации.СрезПоследних(&ДатаСреза). Система компоновки данных автоматически распознает &ДатаСреза как параметр данных. Даже если вы установите флаг «Ограничение доступности» на закладке параметров в СКД, параметр может продолжать отображаться на форме отчета.
Это происходит по нескольким причинам:
(&ДатаСреза) делает его обязательным элементом структуры запроса с точки зрения платформы.Проанализируем самый действенный метод, который решает проблему на уровне самого запроса. В СКД существует специальный синтаксис — фигурные скобки {}, которые позволяют управлять параметрами более гибко. Рассмотрим разницу.
Обычный запрос выглядит так:
ВЫБРАТЬ
Работники.Сотрудник,
Работники.Подразделение
ИЗ
РегистрСведений.РаботникиОрганизации.СрезПоследних(&ДатаСреза) КАК Работники
В этом случае параметр &ДатаСреза становится «жестким». Чтобы сделать его управляемым исключительно системой компоновки и скрыть от глаз пользователя, мы применим расширение языка запросов:
ВЫБРАТЬ
Работники.Сотрудник,
Работники.Подразделение
ИЗ
РегистрСведений.РаботникиОрганизации.СрезПоследних({&ДатаСреза}) КАК Работники
Почему это работает? Когда мы заключаем параметр в фигурные скобки, мы говорим СКД: «Этот параметр управляется механизмом компоновки». Если в настройках компоновщика данный параметр не выбран для редактирования пользователем или на него установлено ограничение доступности, СКД просто не будет выводить его на панель, но при этом сможет использовать его значение для фильтрации виртуальной таблицы в фоновом режиме.
Иногда недостаточно просто ограничить доступность на вкладке «Параметры». Нужно проверить, не включен ли параметр в состав пользовательских настроек конкретного варианта отчета. Проанализируем шаги:
Если этот флаг установлен, параметр будет принудительно выводиться на панель быстрых настроек, игнорируя общие запреты из вкладки «Параметры» основной схемы.
Если вы работаете в УПП или другой типовой конфигурации, за формирование панели пользователя отвечает программный модуль формы отчета. Посмотрим на типовой код в процедуре ПриОткрытии или ОбновлениеОтображения:
ТиповыеОтчеты.ОбновитьФормуТиповогоОтчетаПоКомпоновщику(ЭтотОбъект, ЭтаФорма);
ТиповыеОтчеты.УстановитьВидимостьПанелиПользователяПоУмолчанию(ЭтотОбъект, ЭтаФорма);
Метод ОбновитьФормуТиповогоОтчетаПоКомпоновщику динамически отрисовывает элементы управления. Если вы хотите программно вмешаться в этот процесс, вы можете обратиться к элементам пользовательских настроек непосредственно перед вызовом этих процедур. Например, можно принудительно установить режим редактирования параметра:
// Пример программного скрытия элемента
ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаСреза");
Если ПараметрСКД <> Неопределено Тогда
ПараметрСКД.РежимРедактирования = РежимРедактированияПараметраКомпоновкиДанных.Недоступный;
КонецЕсли;
Важно помнить, что в обычных формах объект КомпоновщикНастроек имеет две коллекции: Настройки (основные) и ПользовательскиеНастройки. Подсистема типовых отчетов чаще всего отрисовывает именно то, что находится в ПользовательскиеНастройки.Элементы.
Часто программист выполняет все верные действия (ставит фигурные скобки, убирает галочки), но параметр все равно висит на форме. Выясним причину: сохраненные настройки пользователя. Система запомнила состояние формы до ваших правок.
Чтобы изменения вступили в силу гарантированно, необходимо:
Для надежного скрытия параметра СКД в отчетах на обычных формах придерживайтесь следующего алгоритма:
СрезПоследних({&ИмяПараметра}).Соблюдение этих шагов позволит вам создавать чистые и удобные интерфейсы отчетов, где пользователю видны только те поля, которые действительно требуют его внимания.