При переходе на новые релизы программных продуктов 1С, в частности «1С:Документооборот КОРП» версии 3.0, технические специалисты часто сталкиваются с коллизиями в системе прав доступа. Одной из наиболее заметных проблем в релизе 3.0.10.20 стала ошибка при попытке открытия списка документов: Поле объекта не обнаружено (СостояниеМЭДО). Эта ошибка блокирует работу рядовых пользователей, при этом администраторы системы продолжают работать без ограничений. В данной статье мы подробно разберем причины этой ситуации и алгоритмы её устранения.
Для начала проанализируем ситуацию с точки зрения платформы 1С:Предприятие 8.3. В управляемом приложении состав элементов формы (кнопки, колонки списков, поля ввода) формируется динамически в момент открытия. Если у текущего пользователя отсутствуют права на чтение данных, связанных с конкретным элементом, или на объект метаданных, который выводит это поле, платформа физически не включает данный элемент в коллекцию Элементы формы.
Рассмотрим фрагмент программного кода, на котором происходит сбой в модуле формы ФормаСпискаСПапками справочника ДокументыПредприятия:
Элементы.СостояниеМЭДО.Видимость = ЕстьМЭДО;
В этой строке система пытается программно управлять видимостью колонки СостояниеМЭДО. Однако, если из-за нехватки прав платформа не создала этот элемент на форме, обращение к нему по имени вызывает исключение Поле объекта не обнаружено. Проанализируем ситуацию: почему прав, которые работали в предыдущем релизе (например, 3.0.10.17), стало недостаточно? В версии 3.0.10 произошла реструктуризация ролей подсистемы МЭДО (Межведомственный электронный документооборот). Ранее назначенных «Базовых прав МЭДО» теперь недостаточно для того, чтобы платформа разрешила отображение статусов обмена в общих списках документов.
Разберем основной способ решения проблемы, который заключается в правильной настройке профилей групп доступа и полномочий. Как выяснилось в ходе практики, для корректной работы формы списка рядовому пользователю теперь требуется более расширенный набор прав на объекты МЭДО.
Работа с МЭДО. Как показывает опыт эксплуатации релиза 3.0.10.20, именно этой роли не хватает для того, чтобы элемент СостояниеМЭДО появился в коллекции формы.Чтение входящих и исходящих документов МЭДО.Важно понимать, что роль Базовые права МЭДО дает лишь общие технические права на запуск подсистемы, но не на визуализацию конкретных реквизитов в сложных формах списков. После добавления полномочия Работа с МЭДО элемент формы становится доступен для платформы, и программный код инициализации формы отрабатывает без ошибок.
Если по каким-то причинам вы не можете расширить права пользователей, или хотите сделать конфигурацию более отказоустойчивой, можно прибегнуть к программному исправлению. Посмотрим на пример безопасного обращения к элементам формы. Проблема в типовом коде 1С:Документооборота версии 3.0.10.20 заключалась в отсутствии проверки существования элемента.
Рекомендуется изменить код инициализации формы, используя метод Найти, который не вызывает критическую ошибку в случае отсутствия объекта:
ЭлементСостояние = Элементы.Найти("СостояниеМЭДО");
Если ЭлементСостояние <> Неопределено Тогда
ЭлементСостояние.Видимость = ЕстьМЭДО;
КонецЕсли;
Такой подход считается «безопасным». Даже если у пользователя нет прав на МЭДО, система просто пропустит этот блок кода, не прерывая работу всей программы. Стоит отметить, что в последующих патчах и релизах (начиная с 3.0.11) разработчики 1С применили именно такую методику проверки.
Иногда даже после корректной настройки прав доступа ошибка продолжает проявляться. Это связано с тем, что информация о составе элементов формы может кэшироваться в пользовательских настройках. Проанализируем, как полностью очистить данные формы для конкретного пользователя:
ДокументыПредприятия.После этой процедуры при следующем открытии форма будет сформирована «с нуля» на основании актуальных прав доступа, что часто помогает устранить остаточные визуальные ошибки после обновления конфигурации.
Выясним еще одну деталь: почему ошибка зависит от переменной ЕстьМЭДО? В коде 1С:Документооборота статус этой переменной определяется функциональной опцией ИспользоватьМЭДО. Если в вашей организации МЭДО вообще не используется, можно просто отключить эту опцию в настройках программы (Настройка — Настройка программы — Обмен данными). В этом случае логика формы может измениться, и обращение к проблемному реквизиту будет проигнорировано программным кодом. Однако, если МЭДО включен, правильное распределение прав является критически важным.
Подводя итоги, отметим, что переход на ветку 3.0.10 требует особого внимания к распределению ролей. Основные шаги по предотвращению ошибки Поле объекта не обнаружено (СостояниеМЭДО) включают:
Работа с МЭДО в основные профили пользователей сразу после обновления.Мы рассмотрели несколько способов решения проблемы — от административной настройки прав до программного изменения кода. Рекомендуется начинать с настройки полномочий, так как это сохраняет типовую конфигурацию на поддержке и соответствует логике разработчиков 1С.