Для чего в СКД нужен режим редактирования Недоступный и как он работает на самом деле

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Три режима редактирования: Быстрый доступ, Обычный и Недоступный

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

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

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

Различие между Пользовательскими настройками и Вариантом отчета

Чтобы понять, почему режим Недоступный «не скрывает» поле в окне «Изменить вариант отчета», нужно разграничить две разные коллекции данных в объекте КомпоновщикНастроекКомпоновкиДанных:

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

Техническая роль режима Недоступный и приоритеты наложения

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

Если элемент помечен как Недоступный, система получает сигнал: данный элемент должен присутствовать в коллекции пользовательских настроек (например, для программного доступа), но его нельзя редактировать в обычных формах настроек. Более того, для таких элементов часто действует правило приоритета: если значение в UserSettings конфликтует с основным вариантом, компоновщик может принудительно использовать значение из схемы, если программный код настроен соответствующим образом.

Проанализируем ситуацию с поэлементным включением. Если вид настроек (например, «Отбор») отмечен как пользовательский не целиком, а только для определенных полей, то:

  1. Элементы с режимом Обычный или Быстрый доступ попадут в результирующий отчет из свойства КомпоновщикНастроек.ПользовательскиеНастройки.
  2. Элементы, отмеченные как Недоступные, будут игнорироваться в пользовательском интерфейсе, и их значения будут браться напрямую из КомпоновщикНастроек.Настройки.

Программная работа с компоновщиком

Для программиста режим Недоступный является маркером. При обходе коллекции пользовательских настроек в коде можно проверить свойство РежимРедактирования. Это полезно при создании собственных форм настроек. Посмотрим на пример логики (псевдокод), как можно обрабатывать такие элементы:


// Пример логики анализа режима редактирования
Для Каждого Элемент Из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
    Если Элемент.РежимРедактирования = РежимРедактированияПользовательскойНастройки.Недоступный Тогда
        // Эта настройка не должна выводиться в нашу самописную форму
        Продолжить; 
    КонецЕсли;
    // Отрисовка элементов Быстрого или Обычного доступа
КонецЦикла;

Также стоит обратить внимание на методы объекта КомпоновщикНастроекКомпоновкиДанных. При использовании метода ПолучитьНастройки() компоновщик собирает воедино все три слоя: фиксированные настройки, основные настройки и пользовательские. Режим Недоступный гарантирует, что на этом этапе «сшивки» пользователь не внес свои коррективы в те параметры, которые вы, как разработчик, решили заблокировать для легкого изменения.

Почему в режиме Такси настройки все равно видны?

В современных конфигурациях, использующих Библиотеку стандартных подсистем (БСП), форма настроек отчета строится динамически. Здесь вступает в силу еще одно правило. В режиме «Все настройки» (расширенный вид) БСП стремится показать пользователю максимум информации.

Недоступный элемент в интерфейсе БСП:

Если вы хотите полностью скрыть настройку от пользователя, чтобы он не видел ее даже в «Изменить вариант», не добавляйте ее в состав пользовательских настроек вовсе. Если же вам нужно, чтобы настройка была «технически» доступна в коллекции UserSettings (например, для передачи параметров между формами или сохранения состояния), но не мешала обычному пользователю — используйте режим Недоступный.

Резюме

Разберем кратко итоги нашего анализа. Разница между Обычным и Недоступным режимами заключается в следующем:

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

Недоступный режим: Это «технический» режим. Настройка включается в коллекцию пользовательских настроек, что позволяет системе отслеживать ее уникальный идентификатор (ID), но она исключается из интерфейсов упрощенного редактирования. Это способ сказать системе: «Эта настройка существует в контексте пользователя, но управлять ей интерактивно в обычном режиме нельзя».

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

← На главную