Как исправить ошибку при добавлении файлов к документам в 1С:ERP 2.5?

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

В процессе эксплуатации 1С:ERP Управление предприятием (особенно версий 2.5.12 и выше) пользователи часто сталкиваются с неочевидными ошибками при попытке прикрепить файлы к документам. Ситуация осложняется, когда архитектура хранения файлов реализована через общий справочник Файлы, а не через специализированные справочники присоединенных файлов. Рассмотрим подробно, почему возникает эта проблема, как работает механизм ограничения доступа (RLS) и что необходимо сделать для восстановления работоспособности системы.

Анализируем архитектуру подсистемы «Работа с файлами»

Проанализируем базовый принцип работы современных конфигураций на базе Библиотеки стандартных подсистем (БСП). В актуальных редакциях ERP использование справочника Файлы для хранения вложений к документам считается нетиповым подходом. Стандартная логика предполагает создание для каждого метаданного (документа или справочника) собственного подчиненного справочника, например, ПеремещениеТоваровПрисоединенныеФайлы.

Если в вашей системе файлы прикрепляются к справочнику Файлы, возникает конфликт прав доступа. Система RLS в ERP 2.5 настроена на делегирование прав: права на файл «наследуются» от прав на его владельца. Когда владельцем выступает документ Перемещение товаров, а сам файл записывается в общий справочник, механизмы БСП могут не найти прямой связи для проверки прав, что приводит к отказу в транзакции.

Выясняем причины ошибки при добавлении и удалении

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

  1. Механизм «Ключей доступа»: В 1С:ERP 2.5 внедрена сложная система расчета прав через регистры сведений КлючиДоступаКОбъектам и КлючиДоступаПользователей. Если файл создается, а ключ доступа для него еще не рассчитан или фоновое задание по обновлению прав зависло, пользователь получит ошибку транзакции. В таких случаях полезно понимать, как работают длительные операции в актуальных версиях БСП, чтобы диагностировать задержки в расчете прав.
  2. Пустой владелец в момент записи: Часто программный код добавления файла сначала пытается записать объект СправочникОбъект.Файлы, а только потом установить реквизит ВладелецФайла. Если в настройках RLS стоит жесткая проверка на заполнение владельца, запись пустого объекта будет заблокирована.
  3. Разрыв прав на чтение и изменение: Для успешного добавления файла пользователю недостаточно иметь права на справочник Файлы. Ему необходимы права на изменение самого документа-владельца (в нашем случае — Перемещение товаров). БСП проверяет, имеет ли право пользователь модифицировать данные, связанные с этим конкретным документом — для настройки прав пригодится настройка прав доступа и профилей пользователей.

Шаг 1. Проверка регламентных заданий и ключей доступа

Первым делом проверим состояние системы управления доступом. В ERP 2.5 расчет прав происходит асинхронно. Если регламентные задания остановлены, новые объекты (файлы) могут оказаться «вне закона» для системы безопасности.

Выполним следующие действия:

Шаг 2. Анализ кода привязки файла

Рассмотрим пример кода, который часто приводит к ошибкам, если он написан без учета особенностей RLS. Если мы создаем файл вручную, необходимо убедиться, что владелец устанавливается до первого вызова метода Записать(). В качестве ориентира можно использовать данную шпаргалку по прикреплению файлов к документам.

Проанализируем правильный подход к программному созданию файла:


НовыйФайл = Справочники.Файлы.СоздатьЭлемент();
НовыйФайл.Наименование = "Скан_документа.pdf";
// Установка владельца ОБЯЗАТЕЛЬНА до первой записи объекта
НовыйФайл.ВладелецФайла = СсылкаНаДокументПеремещение; 
НовыйФайл.ДатаСоздания = ТекущаяДатаСеанса();
НовыйФайл.Автор = Пользователи.ТекущийПользователь();

Попытка
    НовыйФайл.Записать();
Исключение
    Инфо = ИнформацияОбОшибке();
    ЗаписьЖурналаРегистрации("ОшибкаЗаписиФайла", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(Инфо));
    ВызватьИсключение "Не удалось сохранить файл. Возможно, недостаточно прав на документ-владелец.";
КонецПопытки;

Обратите внимание: если СсылкаНаДокументПеремещение является новой и еще не записанной в базу, RLS гарантированно выдаст ошибку, так как прав на несуществующий объект быть не может.

Шаг 3. Настройка прав доступа к томам на диске

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

Для решения этой проблемы:

  1. Выясним имя пользователя, от которого запущен процесс rphost на сервере.
  2. Проверим настройки общего доступа (Sharing) и безопасности (NTFS) для каталога тома.
  3. Убедимся, что для данной учетной записи предоставлены права Полный доступ или как минимум Изменение.

Шаг 4. Диагностика через Журнал регистрации

Чтобы точно определить, какой именно объект блокирует RLS, проанализируем Журнал регистрации. Нам необходимо искать события с уровнем Ошибка и статусом Отказ в доступе. Для комплексной проверки рекомендуется выполнить анализ ролей и профилей пользователя — в этом поможет анализ ролей, профилей и ограничений RLS.

Часто в подробностях ошибки можно увидеть метаданные, на которые не хватило прав. В ERP 2.5 это могут быть:

Если вы видите ошибки по этим регистрам, значит, проблема стопроцентно в механизме упрощенного RLS. В этом случае полезно провести детальный анализ прав доступа к выбранному объекту и попробовать запустить обработку Обновление ключей доступа — для этого подойдет проверка прав доступа и RLS для БСП.

Рекомендации по доработке

Если вы планируете долгосрочное использование механизма прикрепления файлов к Перемещению товаров, мы рекомендуем отказаться от использования общего справочника Файлы. Правильным решением будет создание типового справочника ПеремещениеТоваровПрисоединенныеФайлы через конструктор БСП. Это позволит:

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

← На главную