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