При работе с динамическими списками в управляемом приложении 1С программисты часто сталкиваются с ситуацией, когда колонка формы (например, «Организация») отсутствует на экране, а обращение к ней из программного кода вызывает ошибку. При этом права на просмотр самого журнала и связанного справочника у пользователя есть. Рассмотрим подробно, почему возникают подобная проблема и как её исправить.
Проанализируем поведение платформы 1С при ограничении прав или отключении функциональных опций. Важно понимать ключевую особенность работы управляемых форм: если у пользователя нет прав на просмотр данных реквизита или отключена функциональная опция, связанная с элементом, платформа не просто делает элемент невидимым (свойство Видимость = Ложь), а **полностью исключает элемент из коллекции Элементы на сервере**.
В результате при вызове обращения вида Элементы.Организация программа выдает ошибку о том, что поле не найдено. Прямое обращение к отсутствующему элементу приводит к сбою выполнения модуля.
Выясним главную причину недоступности графы журнала документов (в частности, в конфигурации «Управление торговлей» при работе с «Реестром торговых документов»).
Графа журнала документов — это составная сущность, которая объединяет реквизиты различных документов, входящих в данный журнал. Платформа 1С рассчитывает права доступа к графе по правилу **наименьшего общего знаменателя**:
Посмотрим, как проверить права доступа на графу журнала с помощью встроенного языка 1С. В отладчике под сеансом пользователя можно выполнить следующие выражения:
ПравоЧтения = ПравоДоступа("Чтение", Метаданные.ЖурналыДокументов.РеестрТорговыхДокументов.Графы.Организация);
ПравоПросмотра = ПравоДоступа("Просмотр", Метаданные.ЖурналыДокументов.РеестрТорговыхДокументов.Графы.Организация);
Если проверка показывает, что ПравоЧтения = Истина, а ПравоПросмотра = Ложь, это однозначно указывает на то, что у роли не хватает прав на просмотр реквизита в одном или нескольких входящих в журнал документах.
Разберем по шагам действия, необходимые для успешного отображения колонки в динамическом списке:
ИспользоватьНесколькоОрганизаций). Если функциональная опция выключена или не инициализирована в сеансе пользователя, элемент формы также будет удален из коллекции.Чтобы избежать аварийного завершения работы программы при отсутствии элемента в коллекции Элементы, рекомендуется отказаться от прямого обращения через точку и использовать метод Найти():
ЭлементОрганизация = Элементы.Найти("Организация");
Если ЭлементОрганизация <> Неопределено Тогда
// Элемент присутствует на форме, выполняем с ним необходимые операции
ЭлементОрганизация.Видимость = Истина;
КонецЕсли;
Применение метода Найти() гарантирует стабильную работу модуля независимо от настроек прав доступа и функциональных опций текущего пользователя.