В практике разработчика и администратора 1С нередко возникает ситуация: объект (справочник или документ) успешно помечен на удаление в интерфейсе, на нем отображается соответствующая иконка («крестик»), однако при запуске стандартной платформенной обработки «Удаление помеченных объектов» этот объект в списке не появляется. Это вызывает недоумение, особенно если у пользователя установлены «Полные права».
В данной статье мы подробно разберем причины такого поведения платформы, проанализируем необходимые настройки прав доступа и рассмотрим технические нюансы, которые могут влиять на видимость объектов в мастере удаления.
Прежде чем приступать к анализу прав доступа, нам необходимо убедиться, что объект действительно помечен на удаление на уровне базы данных, а не просто сменил картинку в списке за счет каких-либо доработок в конфигурации. Рассмотрим, как это проверить программно.
Для проверки вызовем «Табло» (в режиме «Предприятие») или воспользуемся внешней консолью кода. Введем следующий программный код, подставив тип метаданных и ссылку на ваш объект (например, по коду или номеру):
// Проверка значения стандартного реквизита ПометкаУдаления
ОбъектСсылка = Справочники.Номенклатура.НайтиПоКоду("19096");
Сообщить(ОбъектСсылка.ПометкаУдаления);
Если в результате выполнения кода мы получаем Истина, значит, на уровне данных объект помечен корректно. Если же результат Ложь, значит, в вашей конфигурации реализован механизм «псевдо-удаления» через дополнительные реквизиты, и стандартная обработка такой объект не увидит. В нашем случае мы исходим из того, что реквизит установлен в Истина.
Выясним основную причину, по которой платформенная обработка игнорирует объект. Многие ошибочно полагают, что для удаления достаточно прав Удаление или Интерактивное удаление. Однако стандартный мастер поиска помеченных объектов ориентируется на совершенно другое право. Для быстрого выявления отсутствующих прав по всей конфигурации можно использовать обработку для проверки прав на интерактивное удаление объектов.
Рассмотрим фрагмент кода, который используется в алгоритмах стандартных обработок для фильтрации метаданных:
// Проверка наличия специального права доступа
CanDelete = AccessRight("InteractiveDeleteMarked", MetadataObject);
Если Не CanDelete Тогда
// Объект не будет включен в список поиска
Продолжить;
КонецЕсли;
Право InteractiveDeleteMarked (в русской редакции конфигуратора — «Интерактивное удаление помеченных») является ключевым. Рассмотрим основные нюансы его работы:
Если с правами на уровне метаданных все в порядке, проанализируем ситуацию с ограничением доступа на уровне записей. Если в системе настроен RLS, стандартная обработка может «не видеть» объект по следующим причинам:
ВЫБРАТЬ РАЗРЕШЕННЫЕ (в старых версиях платформы) или вне привилегированного режима.Чтобы исключить влияние RLS, попробуйте запустить поиск под пользователем с абсолютно неограниченными правами в монопольном режиме. Для комплексной диагностики ограничений и взаимосвязей прав можно использовать инструмент для анализа ролей, профилей и ограничений RLS.
Разберем еще несколько технологических причин, которые могут привести к невидимости объектов:
Функциональные опции: Если объект привязан к функциональной опции, которая отключена в константах, система может исключить этот объект из всех стандартных интерфейсных механизмов, включая обработку удаления. Проверьте свойство Состав у функциональных опций в конфигураторе.
Кэш метаданных: Иногда платформа «залипает» на старых определениях прав. Помогает очистка локального кэша (папки %AppData%\1C\1Cv8) или обновление конфигурации базы данных с предварительным снятием и повторной установкой прав.
Рассмотрим ситуацию, когда пользователь пометил один документ, а обработка сообщает об удалении, например, 123 объектов. Проанализируем, как это происходит:
Подводя итог, если вы столкнулись с отсутствием объекта в списке удаления, выполните следующие действия:
Табло, что ПометкаУдаления = Истина.Понимание работы прав доступа в 1С помогает избежать лишних трудозатрат и гарантирует корректную очистку базы данных от неактуальных записей.