При работе с управляемыми формами в «1С:Предприятие 8.3» разработчики часто сталкиваются с ситуацией, когда у пользователя с полными правами динамический список работает корректно (доступны отборы, группировки, поиск), а у пользователя с ограниченными правами Компоновщик настроек выглядит пустым или часть его функций недоступна. Выясним причину такого поведения и разберем по шагам методы диагностики.
Рассмотрим самый эффективный способ, предложенный в обсуждении. Когда прав много и искать «методом тыка» долго, проще всего заставить систему саму сообщить о нехватке конкретного права. Проанализируем алгоритм действий:
В этот момент платформа выдаст системную ошибку, в которой будет четко указано, к какому объекту метаданных (справочнику, документу, регистру) у пользователя нет права Чтение. После того как вы добавите необходимые права в соответствующую роль, компоновщик настроек в динамическом списке инициализируется корректно.
Разберем, как свойство Основная таблица влияет на права доступа. Если в настройках динамического списка указана основная таблица, то платформа строит права доступа и состав доступных полей компоновщика, ориентируясь в первую очередь на неё.
Проанализируем ситуацию: если запрос в списке сложный (использует левые соединения с другими таблицами), но основная таблица не указана, система будет проверять права на каждую таблицу, участвующую в запросе. Если хотя бы к одной из них нет доступа, компоновщик может «схлопнуться». Чтобы этого избежать, убедимся, что:
Основная таблица.Чтение и Просмотр на эту таблицу.Выясним важный нюанс платформы: для работы компоновщика в интерфейсе (чтобы пользователь мог сам выбирать поля в отборах) недостаточно права Чтение. Право Чтение позволяет системе получить данные программно, но именно право Просмотр делает поля доступными в визуальных настройках компоновщика.
Если пользователь видит данные в списке, но не может добавить новый отбор по конкретному полю — проверим в роли права на это поле. Убедимся, что флажок Просмотр установлен как для всего объекта, так и для конкретных реквизитов.
Посмотрим на ситуацию со стороны метаданных. В 1С существует механизм функциональных опций. Если реквизит, используемый в динамическом списке, привязан к функциональной опции, которая отключена для данного пользователя или в данной базе, то это поле будет полностью исключено из схемы компоновки данных.
Если все ключевые поля, по которым строятся настройки, попадают под действие выключенной опции, компоновщик будет выглядеть нерабочим. Проверим настройки функциональных опций в константах или параметрах учета.
Проанализируем влияние RLS. Даже если право доступа есть, условие RLS может быть настроено таким образом, что для текущего пользователя оно всегда возвращает пустой результат или ограничивает доступ к метаданным в контексте компоновки. Если в запросе динамического списка используются поля, на которые наложено ограничение «Чтение» с условием, платформа может не дать компоновщику инициализировать структуру этих полей.
Для проверки попробуем временно отключить RLS для этого объекта в копии базы. Если компоновщик появится — проблему нужно искать в тексте условия ограничения доступа.
Система 1С оптимизирует запросы, исключая из них поля, которые не отображаются на форме. Иногда это приводит к тому, что компоновщик «забывает» о существовании поля, необходимого для сложной логики. Чтобы принудительно включить поле в состав доступных, выполним следующие действия:
Использовать всегда.Это гарантирует, что поле будет присутствовать в схеме компоновки данных независимо от настроек видимости колонок на форме.
Иногда полезно проверить состояние компоновщика программно при открытии формы. Рассмотрим пример кода, который поможет отладить доступность настроек:
&НаСервере
Процедура ПроверитьДоступностьПолейНаСервере()
Схема = Список.КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора;
Для Каждого Поле Из Схема.Элементы Цикл
Сообщить("Поле: " + Поле.Заголовок + " Доступно: " + Поле.Доступность);
КонецЦикла;
КонецПроцедуры
Используя данный код, мы сможем увидеть, какие именно поля платформа считает недоступными для текущего контекста прав пользователя.
Резюме: Если компоновщик настроек «то есть, то нет», первым делом проверяем права доступа через консоль запросов под конкретным пользователем. Если права в порядке, анализируем основную таблицу, функциональные опции и наличие права Просмотр на уровне реквизитов.