Сталкивались ли вы с ситуацией, когда, обладая полными правами администратора, вы открываете форму списка регистра сведений и видите, что стандартная кнопка "Удалить" (или клавиша Del) неактивна? Запись выделить можно, а удалить — нет. Это распространенная проблема, которая может поставить в тупик даже опытного пользователя или разработчика. Причины такого поведения могут быть самыми разными: от одной простой настройки в свойствах формы до сложных механизмов разграничения прав.
Давайте вместе разберемся, куда смотреть и что проверять в таких случаях. Проанализируем все возможные сценарии по порядку, от самых очевидных до более скрытых.
Это одна из самых частых и простых причин. Разработчик мог целенаправленно установить для всей формы режим "только просмотр". Это свойство полностью блокирует любые действия по изменению данных в форме: нельзя создавать, изменять или удалять записи. Кнопки, отвечающие за эти действия, становятся неактивными.
Для чего это делают? Основная цель — защитить важные данные от случайных или необдуманных правок вручную. Например, если данные в регистр должны попадать только из документов или загружаться регламентным заданием. При этом режим ТолькоПросмотр оставляет пользователю возможность выделять и копировать данные из ячеек, что бывает удобно.
Как проверить?
Нужно открыть конфигуратор и найти код формы списка или формы записи нужного регистра сведений. Чтобы ускорить этот процесс при работе с большим объемом кода, можно использовать статический анализатор кода проектов. Чаще всего эта настройка устанавливается в обработчике события ПриСозданииНаСервере. Выглядеть это может так:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ... какой-то код ...
ЭтаФорма.ТолькоПросмотр = Истина;
// ... какой-ко код ...
КонецПроцедуры
Если вы найдете такую строку, то причина найдена. Для временного разрешения редактирования можно закомментировать эту строку или установить значение в Ложь. Однако перед этим стоит понять, почему разработчик ввел это ограничение.
Если свойство ТолькоПросмотр не установлено, возможно, доступность кнопки управляется более сложной логикой. Разберем несколько вариантов.
Явное отключение кнопки в коде
Разработчик мог отключить не всю форму, а конкретно кнопку удаления. Это также делается в серверных обработчиках событий формы. Код будет выглядеть примерно так:
// Получаем стандартную команду "Удалить" из командной панели формы
Элементы.ФормаУдалить.Доступность = Ложь;
// Или если это кнопка в списке
Элементы.СписокУдалить.Доступность = Ложь;
Условное оформление
Доступность элементов формы, включая кнопки, может настраиваться через механизм условного оформления. Это позволяет делать кнопку неактивной в зависимости от каких-либо данных на форме или других условий. Для быстрой проверки и изменения подобных свойств прямо в пользовательском режиме можно использовать редактор форм в режиме предприятия.
Как проверить? Откройте форму в конфигураторе, перейдите на вкладку "Условное оформление" и посмотрите, нет ли там правил, которые устанавливают свойство "Доступность" для нужной кнопки в значение Ложь.
Блокировка в обработчиках событий объекта
Это более хитрый способ. Важно понимать, что удаление записи из регистра сведений — это, по сути, запись пустого набора записей. Зная это, разработчик может поставить "ловушку" в модуле набора записей самого регистра.
Как проверить? Откройте в конфигураторе модуль набора записей регистра сведений и найдите обработчик события ПередЗаписью. В нем может быть проверка на удаление (т.е. на пустой набор записей) и отмена действия.
Посмотрим на пример такого кода:
Процедура ПередЗаписью(Отказ, Замещать)
// Если в наборе нет записей, значит, выполняется попытка удаления
Если ЭтотОбъект.Количество() = 0 Тогда
// Проверяем некое условие, например, что удаление запрещено для всех,
// кроме пользователя с определенным именем
Если НЕ РольДоступна("ПолныеПрава") Тогда
Сообщить("Удаление записей из данного регистра запрещено.");
Отказ = Истина; // Отменяем операцию
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В этом случае кнопка "Удалить" в интерфейсе будет активна, но при ее нажатии будет выходить сообщение об ошибке, и удаление не произойдет.
Даже если у пользователя назначена роль "Полные права", это не всегда гарантирует стопроцентный доступ. Рассмотрим два аспекта.
Отсутствие прав в роли
Если регистр сведений нетиповой, разработчик мог просто забыть добавить права на него в существующие роли. Для возможности интерактивного удаления у роли должны быть установлены права на "Чтение", "Изменение" и "Интерактивное удаление". Чтобы не проверять каждую роль вручную, используйте инструмент для быстрой проверки прав доступа на объект метаданных.
Как проверить? В конфигураторе откройте нужную роль, найдите в дереве объектов ваш регистр сведений и убедитесь, что все галочки установлены.
Ограничение доступа на уровне записей (RLS)
RLS (Row-Level Security) позволяет ограничивать доступ к отдельным записям по условиям. С помощью RLS можно полностью запретить удаление записей, даже если у пользователя есть общие права на объект.
Как проверить? Анализ RLS — задача для опытного разработчика. Нужно открыть роль в конфигураторе, перейти на вкладку "Ограничения доступа" и проанализировать тексты запросов для нужного регистра сведений.
Иногда причина кроется не в коде или правах, а в самой структуре объекта в конфигураторе.
Регистр подчинен регистратору
Если регистр сведений имеет режим записи "Подчинение регистратору", его записи неразрывно связаны с документом-регистратором. В этом случае удалять записи напрямую из формы регистра невозможно по определению. Кнопка "Удалить" всегда будет неактивна.
Как проверить? Откройте свойства регистра сведений в конфигураторе и посмотрите на "Режим записи". Если там установлено "Подчинение регистратору", то для удаления записей нужно найти и распровести/удалить соответствующий документ.
Функциональные опции
Право на редактирование записей в вашем регистре может быть "привязано" к функциональной опции, которая сейчас отключена в настройках программы.
Чтобы системно найти причину неактивной кнопки "Удалить", действуем по следующему алгоритму:
ТолькоПросмотр. Проанализируйте код формы списка и записи.Следуя этому плану, вы с большой вероятностью найдете причину проблемы и сможете ее устранить.