Как скрыть параметр СКД на панели пользователя в отчете на обычных формах

Программист 1С v8.3 (Обычные формы)
← На главную

При разработке отчетов на системе компоновки данных (СКД) в конфигурациях на обычных формах (таких как УПП 1.3 или Комплексная автоматизация 1.1) программисты часто сталкиваются с тем, что технические параметры, предназначенные для внутренних расчетов, неожиданно «выплывают» на форму. Особенно это актуально, если в отчете используется горизонтальная панель пользователя, формируемая динамически подсистемой ТиповыеОтчеты.

В этой статье мы подробно разберем, почему стандартные галочки в конструкторе СКД могут не срабатывать, и рассмотрим наиболее эффективные методы управления видимостью параметров, включая расширение языка запросов СКД.

Анализ проблемы: почему параметр не исчезает

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

Это происходит по нескольким причинам:

  1. Особенности подсистемы «Типовые отчеты»: В конфигурациях на обычных формах программный код часто обходит настройки схемы, ориентируясь на наличие параметра в составе доступных полей компоновщика.
  2. Кэширование настроек: 1С сохраняет пользовательские настройки отчетов. Если параметр когда-то был выведен на форму, информация о нем может храниться в системном хранилище настроек или в специализированных регистрах сведений.
  3. Жесткая привязка в запросе: Прямое указание параметра в скобках виртуальной таблицы (&ДатаСреза) делает его обязательным элементом структуры запроса с точки зрения платформы.

Способ 1. Использование расширения языка запросов СКД

Проанализируем самый действенный метод, который решает проблему на уровне самого запроса. В СКД существует специальный синтаксис — фигурные скобки {}, которые позволяют управлять параметрами более гибко. Рассмотрим разницу.

Обычный запрос выглядит так:


ВЫБРАТЬ
    Работники.Сотрудник,
    Работники.Подразделение
ИЗ
    РегистрСведений.РаботникиОрганизации.СрезПоследних(&ДатаСреза) КАК Работники

В этом случае параметр &ДатаСреза становится «жестким». Чтобы сделать его управляемым исключительно системой компоновки и скрыть от глаз пользователя, мы применим расширение языка запросов:


ВЫБРАТЬ
    Работники.Сотрудник,
    Работники.Подразделение
ИЗ
    РегистрСведений.РаботникиОрганизации.СрезПоследних({&ДатаСреза}) КАК Работники

Почему это работает? Когда мы заключаем параметр в фигурные скобки, мы говорим СКД: «Этот параметр управляется механизмом компоновки». Если в настройках компоновщика данный параметр не выбран для редактирования пользователем или на него установлено ограничение доступности, СКД просто не будет выводить его на панель, но при этом сможет использовать его значение для фильтрации виртуальной таблицы в фоновом режиме.

Способ 2. Настройка пользовательских свойств в структуре

Иногда недостаточно просто ограничить доступность на вкладке «Параметры». Нужно проверить, не включен ли параметр в состав пользовательских настроек конкретного варианта отчета. Проанализируем шаги:

  1. Откроем конструктор СКД и перейдем на вкладку «Настройки».
  2. В дереве структуры выберем самый верхний элемент — «Отчет».
  3. В нижней части окна перейдем на вкладку «Параметры данных».
  4. Найдем наш злополучный параметр. Обратим внимание на колонку с иконкой «шестеренки» (Свойства пользовательских настроек).
  5. Нажмем на кнопку выбора в этой колонке и в появившемся окне снимем флаг «Включать в пользовательские настройки».

Если этот флаг установлен, параметр будет принудительно выводиться на панель быстрых настроек, игнорируя общие запреты из вкладки «Параметры» основной схемы.

Способ 3. Управление через программный код (Обычные формы)

Если вы работаете в УПП или другой типовой конфигурации, за формирование панели пользователя отвечает программный модуль формы отчета. Посмотрим на типовой код в процедуре ПриОткрытии или ОбновлениеОтображения:


ТиповыеОтчеты.ОбновитьФормуТиповогоОтчетаПоКомпоновщику(ЭтотОбъект, ЭтаФорма);
ТиповыеОтчеты.УстановитьВидимостьПанелиПользователяПоУмолчанию(ЭтотОбъект, ЭтаФорма);

Метод ОбновитьФормуТиповогоОтчетаПоКомпоновщику динамически отрисовывает элементы управления. Если вы хотите программно вмешаться в этот процесс, вы можете обратиться к элементам пользовательских настроек непосредственно перед вызовом этих процедур. Например, можно принудительно установить режим редактирования параметра:


// Пример программного скрытия элемента
ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаСреза");
Если ПараметрСКД <> Неопределено Тогда
    ПараметрСКД.РежимРедактирования = РежимРедактированияПараметраКомпоновкиДанных.Недоступный;
КонецЕсли;

Важно помнить, что в обычных формах объект КомпоновщикНастроек имеет две коллекции: Настройки (основные) и ПользовательскиеНастройки. Подсистема типовых отчетов чаще всего отрисовывает именно то, что находится в ПользовательскиеНастройки.Элементы.

Важный нюанс: Очистка кэша настроек

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

Чтобы изменения вступили в силу гарантированно, необходимо:

  1. В режиме «1С:Предприятие» открыть отчет.
  2. Нажать кнопку «Установить стандартные настройки» (обычно иконка с желтой папкой и стрелкой или через меню «Варианты отчета»).
  3. Если это не помогло, нужно зайти в меню «Все функции» (или «Сервис») -> «Управление настройками пользователя» и удалить сохраненные настройки для данного отчета.

Резюме

Для надежного скрытия параметра СКД в отчетах на обычных формах придерживайтесь следующего алгоритма:

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

← На главную