Почему в 1С:УТ 11 при открытии журнала документов возникает ошибка «Поле объекта не обнаружено (Организация)» и как настроить права?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

{ЖурналДокументов.РеестрТорговыхДокументов.Форма.ФормаСписка.Форма(162)}: Поле объекта не обнаружено (Организация)

Ошибка проявляется в коде при попытке прямого обращения к элементу формы:


Элементы.Организация.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций");

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

Выясним причину поведения платформы «1С:Предприятие»

Графа журнала документов объединяет в себе одноименные реквизиты различных видов документов, зарегистрированных в составе этого журнала. Механизм прав платформы устроен следующим образом:

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

Способ 1. Безопасное управление видимостью элементов через расширение конфигурации

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

Рассмотрим пример кода в расширении для формы списка журнала документов с директивой &Вместо или &После:


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    ЭлементОрганизация = Элементы.Найти("Организация");
    Если ЭлементОрганизация <> Неопределено Тогда
        ЭлементОрганизация.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций");
    КонецЕсли;
    
КонецПроцедуры

Проанализируем этот подход: метод Найти() возвращает Неопределено, если элемент был исключен платформой. Ошибка исчезает, форма успешно открывается, а колонка просто скрывается у пользователя, не нарушая работу интерфейса.

Способ 2. Точечная настройка прав на уровне метаданных

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

  1. Откроем разрабатываемую роль в конфигураторе.
  2. Найдем все документы, входящие в состав журнала РеестрТорговыхДокументов.
  3. Для каждого документа перейдем к ветке реквизитов и найдем реквизит Организация.
  4. Установим флажок «Просмотр» точечно на реквизит Организация (самому документу при этом достаточно оставить право «Чтение», не открывая просмотр всех его полей, сумм и табличных частей).
  5. Обновим данные подсистемы доступа БСП, выполнив в пользовательском режиме команду обновления или программный вызов: Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника().

Штатные альтернативы общему журналу в УТ 11

Журнал РеестрТорговыхДокументов исторически проектировался как сквозной инструмент и слабо приспособлен для профилирования прав. В конфигурации «Управление торговлей 11» предусмотрены специализированные раздельные рабочие места, не требующие открытия доступа ко всей базе сразу:

  1. Для оптового отдела (Заказы, Реализации, Счета-фактуры): используем журнал Документы продажи (все) в разделе Продажи. В нем доступна типовая команда Печать → Реестр документов, а также стандартная возможность меню Еще → Вывести список... для формирования печатного реестра.
  2. Для склада (Перемещения, Списания, Оприходования): используем журнал Внутренние документы (все) в разделе Склад и доставка. Он ограничен исключительно складским контуром.
  3. Для отдела закупок: используем специализированный журнал Документы закупки (все) в разделе Закупки.
  4. Контроль наличия подписанных документов: используем типовое рабочее место Журнал учета оригиналов первичных документов, позволяющее отслеживать состояние первичных документов без конфликта прав.

Создание отчета на СКД с учетом прав доступа

Если требуется выводить сводный список документов произвольных типов в рамках единой печатной формы, оптимальным решением является внешний отчет на Системе компоновки данных (СКД).

В тексте запроса набора данных обязательно используем конструкцию ВЫБРАТЬ РАЗРЕШЕННЫЕ:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
    "Реализация товаров и услуг" КАК ТипДокумента,
    Ссылка КАК Документ,
    Номер КАК Номер,
    Дата КАК Дата,
    Организация КАК Организация,
    СуммаДокумента КАК Сумма
ИЗ
    Документ.РеализацияТоваровИУслуг
ГДЕ
    Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    "Перемещение товаров",
    Ссылка,
    Номер,
    Дата,
    Организация,
    0
ИЗ
    Документ.ПеремещениеТоваров
ГДЕ
    Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

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

← На главную