В процессе эксплуатации 1С:ERP Управление предприятием (особенно версий 2.5.12 и выше) пользователи часто сталкиваются с неочевидными ошибками при попытке прикрепить файлы к документам. Ситуация осложняется, когда архитектура хранения файлов реализована через общий справочник Файлы, а не через специализированные справочники присоединенных файлов. Рассмотрим подробно, почему возникает эта проблема, как работает механизм ограничения доступа (RLS) и что необходимо сделать для восстановления работоспособности системы.
Проанализируем базовый принцип работы современных конфигураций на базе Библиотеки стандартных подсистем (БСП). В актуальных редакциях ERP использование справочника Файлы для хранения вложений к документам считается нетиповым подходом. Стандартная логика предполагает создание для каждого метаданного (документа или справочника) собственного подчиненного справочника, например, ПеремещениеТоваровПрисоединенныеФайлы.
Если в вашей системе файлы прикрепляются к справочнику Файлы, возникает конфликт прав доступа. Система RLS в ERP 2.5 настроена на делегирование прав: права на файл «наследуются» от прав на его владельца. Когда владельцем выступает документ Перемещение товаров, а сам файл записывается в общий справочник, механизмы БСП могут не найти прямой связи для проверки прав, что приводит к отказу в транзакции.
Разберем основные факторы, которые могут вызывать ошибку «Объект не выбран» или отказ транзакции при работе с файлами:
КлючиДоступаКОбъектам и КлючиДоступаПользователей. Если файл создается, а ключ доступа для него еще не рассчитан или фоновое задание по обновлению прав зависло, пользователь получит ошибку транзакции. В таких случаях полезно понимать, как работают длительные операции в актуальных версиях БСП, чтобы диагностировать задержки в расчете прав.СправочникОбъект.Файлы, а только потом установить реквизит ВладелецФайла. Если в настройках RLS стоит жесткая проверка на заполнение владельца, запись пустого объекта будет заблокирована.Файлы. Ему необходимы права на изменение самого документа-владельца (в нашем случае — Перемещение товаров). БСП проверяет, имеет ли право пользователь модифицировать данные, связанные с этим конкретным документом — для настройки прав пригодится настройка прав доступа и профилей пользователей.Первым делом проверим состояние системы управления доступом. В ERP 2.5 расчет прав происходит асинхронно. Если регламентные задания остановлены, новые объекты (файлы) могут оказаться «вне закона» для системы безопасности.
Выполним следующие действия:
Заполнение данных для ограничения доступа.Объекты для обновления прав доступа. Если в нем скопилось большое количество записей, это явный признак того, что система не успевает рассчитывать права, и именно это блокирует запись новых файлов.Рассмотрим пример кода, который часто приводит к ошибкам, если он написан без учета особенностей RLS. Если мы создаем файл вручную, необходимо убедиться, что владелец устанавливается до первого вызова метода Записать(). В качестве ориентира можно использовать данную шпаргалку по прикреплению файлов к документам.
Проанализируем правильный подход к программному созданию файла:
НовыйФайл = Справочники.Файлы.СоздатьЭлемент();
НовыйФайл.Наименование = "Скан_документа.pdf";
// Установка владельца ОБЯЗАТЕЛЬНА до первой записи объекта
НовыйФайл.ВладелецФайла = СсылкаНаДокументПеремещение;
НовыйФайл.ДатаСоздания = ТекущаяДатаСеанса();
НовыйФайл.Автор = Пользователи.ТекущийПользователь();
Попытка
НовыйФайл.Записать();
Исключение
Инфо = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации("ОшибкаЗаписиФайла", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(Инфо));
ВызватьИсключение "Не удалось сохранить файл. Возможно, недостаточно прав на документ-владелец.";
КонецПопытки;
Обратите внимание: если СсылкаНаДокументПеремещение является новой и еще не записанной в базу, RLS гарантированно выдаст ошибку, так как прав на несуществующий объект быть не может.
Если в вашей информационной базе включена опция «Хранить файлы в томах на диске», ошибка в транзакции может иметь внешнюю причину. Разберем ситуацию: пользователь нажимает «Добавить», 1С создает запись в базе (транзакция открывается), затем сервер 1С пытается физически скопировать файл в сетевую папку. Если у учетной записи, под которой запущен сервер «1С:Предприятия» (а не текущий пользователь компьютера!), нет прав «Запись» на эту папку, операция прерывается и транзакция в базе откатывается.
Для решения этой проблемы:
rphost на сервере.Чтобы точно определить, какой именно объект блокирует RLS, проанализируем Журнал регистрации. Нам необходимо искать события с уровнем Ошибка и статусом Отказ в доступе. Для комплексной проверки рекомендуется выполнить анализ ролей и профилей пользователя — в этом поможет анализ ролей, профилей и ограничений RLS.
Часто в подробностях ошибки можно увидеть метаданные, на которые не хватило прав. В ERP 2.5 это могут быть:
РегистрСведений.КлючиДоступаККурсорамСправочник.КлючиДоступаРегистрСведений.КлючиДоступаКОбъектамЕсли вы видите ошибки по этим регистрам, значит, проблема стопроцентно в механизме упрощенного RLS. В этом случае полезно провести детальный анализ прав доступа к выбранному объекту и попробовать запустить обработку Обновление ключей доступа — для этого подойдет проверка прав доступа и RLS для БСП.
Если вы планируете долгосрочное использование механизма прикрепления файлов к Перемещению товаров, мы рекомендуем отказаться от использования общего справочника Файлы. Правильным решением будет создание типового справочника ПеремещениеТоваровПрисоединенныеФайлы через конструктор БСП. Это позволит:
Таким образом, для исправления текущей ошибки необходимо либо обеспечить полную идентичность прав на справочник Файлы и документ-владелец, либо восстановить корректную работу регламентных заданий по расчету ключей доступа.