Отчеты и Аналитика · 11 мин
«Недоступно» как условие в СКД 1С: настройка и запрет отборов
Разбираем, что означает «недоступно» в условиях СКД 1С: как сделать отбор недоступным для пользователя, запретить изменение условий и исправить типичные ошибки.
В конструкторе схемы компоновки данных (СКД) 1С у отборов, параметров и полей есть свойства доступности. Фраза «недоступно как условие СКД» обычно означает одну из трёх ситуаций: разработчик хочет сделать отбор недоступным для изменения пользователем, в настройках отчёта условие отображается как недоступное и не редактируется, либо в пользовательском режиме отбор вообще не применяется, хотя задан. Все три случая решаются через свойства элемента отбора и настройки пользовательского интерфейса.
Ключевые инструменты здесь — свойство РежимОтображения элемента отбора (значения «Быстрый доступ», «Обычный», «Недоступный»), галочка «Ограничение доступности» на закладке отборов схемы и программное обращение к коллекции Отбор.Элементы компоновщика настроек. Ниже разобраны оба подхода: декларативный в конструкторе СКД и программный в модуле формы отчёта.
Что означает «недоступно» в условиях отбора СКД
Элемент отбора в СКД имеет несколько независимых состояний, которые часто путают. Использование (флажок) определяет, применяется ли условие к запросу. Режим отображения определяет, где и как элемент виден пользователю: в быстром доступе, в основных настройках или нигде. Доступность поля отбора определяется тем, разрешено ли вообще отбирать по этому полю — это настраивается в самой схеме на закладке «Настройки» в ветке доступных полей отбора.
Когда пользователь открывает настройки отчёта и видит, что условие «недоступно» — серая строка, которую нельзя отредактировать, — чаще всего сработало одно из двух: разработчик отчёта явно запретил изменение этого отбора, либо поле, по которому построено условие, пропало из доступных полей отбора после изменения схемы (например, переименовали поле в наборе данных, а старые пользовательские настройки остались).
Как сделать условие отбора недоступным в конструкторе СКД
Откройте схему компоновки данных отчёта и перейдите на закладку «Настройки». В списке отборов выберите нужный элемент. В нижней части окна настроек (или в свойствах элемента, в зависимости от версии платформы) найдите свойство Режим отображения и установите значение «Недоступный». Элемент останется в настройках, будет применяться, если включён флажок «Использование», но пользователь не сможет его изменить.
Второй способ — ограничить доступность самого поля. На закладке «Настройки» в разделе отборов есть список доступных полей отбора. Если убрать поле из этого списка, пользователь не сможет добавить по нему новое условие, а существующее может стать недоступным. Этот приём подходит, когда по полю отбор задан жёстко в схеме и не должен меняться ни при каких пользовательских настройках.
- 1Откройте схему компоновки данных отчёта, закладка «Настройки»
- 2Добавьте нужный элемент отбора и задайте значение условия
- 3Для элемента установите режим отображения «Недоступный»
- 4Включите флажок «Использование», чтобы условие применялось
- 5Сохраните схему, обновите конфигурацию и проверьте отчёт в пользовательском режиме
Программная установка недоступного условия
Когда условие нужно установить динамически — например, ограничить отчёт данными текущего пользователя при открытии, — используют программную работу с настройками компоновщика в модуле формы отчёта. Элемент отбора ищется по полю компоновки данных, после чего у него задаются значение, использование и режим отображения.
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Настройки = Отчет.КомпоновщикНастроек.Настройки;
ПолеОрганизация = Новый ПолеКомпоновкиДанных("Организация");
Для Каждого Элемент Из Настройки.Отбор.Элементы Цикл
Если Элемент.ЛевоеЗначение = ПолеОрганизация Тогда
Элемент.Использование = Истина;
Элемент.ПравоеЗначение = ТекущаяОрганизация();
Элемент.РежимОтображения =
РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Обратите внимание: если элемент отбора ещё не создан, его нужно добавить через Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")), заполнить ЛевоеЗначение, ВидСравнения и ПравоеЗначение, и только потом задавать режим отображения. Установка режима «Недоступный» скрывает элемент из всех списков настроек, но он продолжает действовать на результат отчёта.
Почему условие стало недоступным само по себе
Частая жалоба: после обновления конфигурации или доработки отчёта в пользовательских настройках условие отбора подсвечено как недоступное, и отчёт работает не так, как раньше. Причины почти всегда одни и те же: поле переименовали в наборе данных схемы, поле убрали из доступных полей отбора, либо изменился тип поля и старое значение условия больше не соответствует ему.
Диагностика начинается со сравнения схемы и пользовательских настроек. Откройте настройки отчёта в режиме «Ещё → Изменить вариант», найдите проблемный отбор и проверьте его поле. Затем в конструкторе СКД на закладке «Настройки» убедитесь, что это поле присутствует среди доступных полей отбора. Если поле переименовано — исправьте имя в схеме или попросите пользователей сбросить настройки варианта отчёта к стандартным.
Как проверить результат
Условие применяется, но не редактируется (режим «Недоступный»)
Условие существует, но не влияет на результат — проверьте флажок «Использование»
Поле есть в наборе данных и в списке доступных полей отбора
Поле отсутствует или переименовано — пользовательские настройки «ломаются»
Данные отфильтрованы согласно заданному условию
Отбор игнорируется — условие задано в отборе варианта, а не в основных настройках, или наоборот
Отличие недоступного условия от параметра с ограничением
Альтернатива недоступному отбору — параметр данных с установленным флажком «Ограничение доступности» на закладке «Параметры» схемы. Такой параметр задаётся только в схеме или программно, пользователь его не видит и не меняет. Это удобнее, когда фильтр должен быть частью логики запроса (например, условие в виртуальной таблице регистра), а не просто отбором результата.
Выбор между подходами зависит от того, где должно работать условие. Параметр с ограничением доступности участвует в тексте запроса и может влиять на производительность положительно — отбор накладывается на уровне СУБД при обращении к виртуальной таблице. Недоступный элемент отбора применяется компоновщиком к итоговому результату. Для фильтрации по организации, периоду или складу в регистрах обычно эффективнее параметр; для простых отчётов по записям справочников разницы практически нет.
Сравнение вариантов
Подходит, когда условие нужно зафиксировать, но оставить в структуре настроек. Ограничение: пользователь не видит, что отчёт отфильтрован
Подходит для условий внутри запроса и виртуальных таблиц. Ограничение: требует правки текста запроса схемы
Самый жёсткий вариант — фильтр нельзя отключить вообще. Ограничение: любое изменение требует правки схемы и обновления конфигурации
Типичные ошибки и ограничения
Самая распространённая ошибка — установить режим «Недоступный», но забыть включить флажок «Использование». Внешне всё выглядит настроенным, но условие не применяется, и отчёт выводит лишние данные. Вторая ошибка — задать условие в пользовательских настройках конкретного варианта отчёта, а потом менять схему: пользовательские настройки хранятся отдельно и могут конфликтовать с новой структурой полей.
Ещё одна ловушка — смешение настроек компоновщика отчёта и настроек варианта. В управляемых формах отчётов на базе БСП (библиотека стандартных подсистем) элементы отбора могут дублироваться между основными настройками и пользовательскими. Если одно и то же условие задано в обоих местах с разными режимами отображения, поведение становится неочевидным: пользователь видит отбор, меняет его, но результат не меняется, потому что действует недоступный дубль.
Проверка результата и безопасные границы
После настройки недоступного условия проверьте отчёт под обычным пользователем, а не под администратором: у полных прав могут отображаться расширенные настройки, и картина будет отличаться. Убедитесь, что отбор применяется (состав данных соответствует условию), что пользователь не может его изменить или отключить и что сброс настроек варианта не снимает заданное вами ограничение.
Перед изменением схемы компоновки в рабочей базе сохраните копию отчёта или выгрузите схему в файл. Ошибка в настройках СКД не портит данные учёта, но может привести к тому, что пользователи увидят лишние данные (например, по чужим организациям) или, наоборот, потеряют нужные. Для отчётов с чувствительными данными недоступный отбор — это ещё и мера разграничения доступа, поэтому проверяйте его под всеми целевыми ролями.
Что важно запомнить
«Недоступный» режим отображения фиксирует условие отбора и скрывает его от пользователя, но не отменяет его действие. Настраивается в конструкторе СКД или программно через РежимОтображения элемента отбора. Если условие стало недоступным «само» — ищите переименованное или удалённое поле в схеме и сбрасывайте пользовательские настройки варианта.
Частые вопросы
Чем режим «Недоступный» отличается от снятого флажка «Использование»?
Снятый флажок отключает условие — оно не влияет на результат. Режим «Недоступный» лишь скрывает элемент от пользователя: при включённом флажке условие продолжает фильтровать данные.
Почему пользователь не видит отбор, хотя он задан в схеме?
Проверьте режим отображения элемента: «Недоступный» полностью скрывает условие из настроек. Если нужно показать отбор без возможности изменения значения, используйте режим «Обычный» и ограничьте доступность самого поля в схеме.
Можно ли сделать недоступным условие только для части пользователей?
Декларативно — нет, режим отображения един для всех. Практический вариант: программно устанавливать режим отображения в обработчике формы отчёта в зависимости от роли или функциональной опции текущего пользователя.
После обновления конфигурации отбор стал серым и не редактируется. Что делать?
Скорее всего, поле в схеме переименовано или удалено, а пользовательские настройки сохранили старое условие. Откройте «Ещё → Изменить вариант», удалите битый отбор или выполните «Установить стандартные настройки», затем задайте условие заново.
Влияет ли недоступный отбор на производительность отчёта?
Сам режим отображения на производительность не влияет. Имеет значение только то, где реализован фильтр: условие в параметре виртуальной таблицы обычно выполняется быстрее, чем отбор компоновки по готовому результату запроса.
Как полностью запретить отбор по полю, чтобы его нельзя было добавить?
На закладке «Настройки» схемы в списке доступных полей отбора уберите это поле или снимите у него доступность. Тогда пользователь не сможет создать по нему условие ни в одном варианте отчёта.