Почему не активно меню «Режим просмотра» в форме списка подчиненного справочника 1С и как это исправить?

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

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

Выясним причину блокировки меню

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

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

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

Вариант 1: Установка отбора в пользовательском режиме

Самое простое решение, которое не требует изменения программного кода конфигурации — установить отбор интерактивно. Посмотрим, как это сделать:

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

Сразу после установки отбора платформа поймет, что контекст ограничен одним владельцем, и меню «Режим просмотра» станет активным.

Вариант 2: Программная установка отбора при открытии формы

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

Посмотрим на пример кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Предположим, владелец передается в параметрах формы
    Если ЗначениеЗаполнено(Параметры.Владелец) Тогда
        
        ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Владелец");
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.ПравоеЗначение = Параметры.Владелец;
        ЭлементОтбора.Использование = Истина;
        
    КонецЕсли;
    
КонецПроцедуры

Используя этот код, мы принудительно накладываем отбор, и платформа 1С автоматически активирует возможность переключения режимов просмотра списка для пользователя.

Вариант 3: Техническая хитрость (Обходной маневр)

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

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

  1. Добавляем отбор по полю Владелец.
  2. Устанавливаем вид сравнения — Не равно.
  3. В качестве значения указываем Неопределено (или пустую ссылку владельца).

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

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

← На главную