Почему не отображается колонка динамического списка при обращении через точку под ограниченными правами в 1С?

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

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

Выясняем причину скрытия дочерних полей

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

  1. Разница между правами «Чтение» и «Просмотр»: Для корректного разыменования ссылки в динамическом списке и получения представления объекта платформе требуется не просто право Чтение на базовую таблицу, а право Просмотр. Если у роли пользователя есть только право чтения объекта, динамический список исключает дочерние реквизиты из состава доступных полей выбора.
  2. Изменения в платформе начиная с версии 8.3.11: Начиная с релиза 8.3.11.150, разработчики платформы пересмотрели доступность дочерних полей в зависимости от прав доступа пользователя. Это поведение является штатным: платформа на уровне компоновки данных фильтрует состав полей и убирает колонки, к которым у пользователя нет полного набора прав интерактивного просмотра.
  3. Неявные соединения при составных типах данных: Если реквизит-ссылка имеет составной тип (например, может хранить ссылки на несколько различных документов или справочников), обращение через точку заставляет платформу выполнять неявные левые соединения со всеми таблицами, входящими в состав данного типа. Если у пользователя отсутствует право просмотра хотя бы к одному из метаданных из составного типа, платформа скрывает дочернее поле целиком.
  4. Влияние ограничений RLS (Record Level Security): Если на целевой объект наложены условия доступа на уровне записей, компоновщик настроек динамического списка контекстно проверяет права для каждой записи. При действии RLS дочернее поле может быть скрыто без вывода каких-либо предупреждений.

Способы решения проблемы

Разберем по шагам проверенные варианты устранения данной проблемы в конфигурации или расширении.

Вариант 1. Настройка прав доступа для пользователей

Если специфика системы позволяет предоставить пользователю визуальный доступ к связанным объектам, необходимо скорректировать роли:

  1. Определим, к какому типу метаданных относится ссылочный реквизит, из которого вытягивается поле.
  2. В дереве конфигурации или расширения откроем нужную роль и для целевого объекта метаданных установим флаг Просмотр.
  3. Если ссылочное поле имеет составной тип, убедимся, что право Просмотр назначено для всех метаданных, входящих в состав типа.

Вариант 2. Использование явного соединения (LEFT JOIN) в запросе списка

Наиболее надежным и технически правильным решением с точки зрения стандартов разработки 1С является изменение текста запроса динамического списка. Вместо обращения к реквизиту через точку свяжем таблицы явно.

Посмотрим на пример: если в стандартном запросе используется обращение через точку:


ВЫБРАТЬ
	Регистр.Ссылка КАК Ссылка,
	Регистр.Ссылка.НомерБСО КАК НомерБСО
ИЗ
	РегистрСведений.БСО КАК Регистр

Перепишем запрос с использованием явного левого соединения с целевой таблицей:


ВЫБРАТЬ
	Регистр.Ссылка КАК Ссылка,
	ДокументТаблица.НомерБСО КАК НомерБСО
ИЗ
	РегистрСведений.БСО КАК Регистр
	ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходныйОрдер КАК ДокументТаблица
		ПО Регистр.Ссылка = ДокументТаблица.Ссылка

Преимущество данного подхода: Для отображения данных, полученных через явное левое соединение таблиц в запросе динамического списка, пользователю достаточно иметь только право Чтение на присоединяемую таблицу (право Просмотр больше не требуется).

Настройка свойства «Использовать всегда»

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

Ограничения и рекомендации по производительности

Проанализируем важные особенности работы динамических списков, которые необходимо учитывать при проектировании:

← На главную