Почему в регистре сведений 1С неактивна кнопка "Удалить"?

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

Сталкивались ли вы с ситуацией, когда, обладая полными правами администратора, вы открываете форму списка регистра сведений и видите, что стандартная кнопка "Удалить" (или клавиша Del) неактивна? Запись выделить можно, а удалить — нет. Это распространенная проблема, которая может поставить в тупик даже опытного пользователя или разработчика. Причины такого поведения могут быть самыми разными: от одной простой настройки в свойствах формы до сложных механизмов разграничения прав.

Давайте вместе разберемся, куда смотреть и что проверять в таких случаях. Проанализируем все возможные сценарии по порядку, от самых очевидных до более скрытых.

Причина №1: Свойство формы "ТолькоПросмотр"

Это одна из самых частых и простых причин. Разработчик мог целенаправленно установить для всей формы режим "только просмотр". Это свойство полностью блокирует любые действия по изменению данных в форме: нельзя создавать, изменять или удалять записи. Кнопки, отвечающие за эти действия, становятся неактивными.

Для чего это делают? Основная цель — защитить важные данные от случайных или необдуманных правок вручную. Например, если данные в регистр должны попадать только из документов или загружаться регламентным заданием. При этом режим ТолькоПросмотр оставляет пользователю возможность выделять и копировать данные из ячеек, что бывает удобно.

Как проверить?

Нужно открыть конфигуратор и найти код формы списка или формы записи нужного регистра сведений. Чтобы ускорить этот процесс при работе с большим объемом кода, можно использовать статический анализатор кода проектов. Чаще всего эта настройка устанавливается в обработчике события ПриСозданииНаСервере. Выглядеть это может так:


Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // ... какой-то код ...

    ЭтаФорма.ТолькоПросмотр = Истина;

    // ... какой-ко код ...

КонецПроцедуры

Если вы найдете такую строку, то причина найдена. Для временного разрешения редактирования можно закомментировать эту строку или установить значение в Ложь. Однако перед этим стоит понять, почему разработчик ввел это ограничение.

Причина №2: Программные ограничения в коде

Если свойство ТолькоПросмотр не установлено, возможно, доступность кнопки управляется более сложной логикой. Разберем несколько вариантов.

Явное отключение кнопки в коде

Разработчик мог отключить не всю форму, а конкретно кнопку удаления. Это также делается в серверных обработчиках событий формы. Код будет выглядеть примерно так:


// Получаем стандартную команду "Удалить" из командной панели формы

Элементы.ФормаУдалить.Доступность = Ложь;

// Или если это кнопка в списке
Элементы.СписокУдалить.Доступность = Ложь;

Условное оформление

Доступность элементов формы, включая кнопки, может настраиваться через механизм условного оформления. Это позволяет делать кнопку неактивной в зависимости от каких-либо данных на форме или других условий. Для быстрой проверки и изменения подобных свойств прямо в пользовательском режиме можно использовать редактор форм в режиме предприятия.

Как проверить? Откройте форму в конфигураторе, перейдите на вкладку "Условное оформление" и посмотрите, нет ли там правил, которые устанавливают свойство "Доступность" для нужной кнопки в значение Ложь.

Блокировка в обработчиках событий объекта

Это более хитрый способ. Важно понимать, что удаление записи из регистра сведений — это, по сути, запись пустого набора записей. Зная это, разработчик может поставить "ловушку" в модуле набора записей самого регистра.

Как проверить? Откройте в конфигураторе модуль набора записей регистра сведений и найдите обработчик события ПередЗаписью. В нем может быть проверка на удаление (т.е. на пустой набор записей) и отмена действия.

Посмотрим на пример такого кода:


Процедура ПередЗаписью(Отказ, Замещать)

    // Если в наборе нет записей, значит, выполняется попытка удаления
    Если ЭтотОбъект.Количество() = 0 Тогда
    
        // Проверяем некое условие, например, что удаление запрещено для всех,
        // кроме пользователя с определенным именем
        Если НЕ РольДоступна("ПолныеПрава") Тогда
            Сообщить("Удаление записей из данного регистра запрещено.");
            Отказ = Истина; // Отменяем операцию
        КонецЕсли;

    КонецЕсли;

КонецПроцедуры

В этом случае кнопка "Удалить" в интерфейсе будет активна, но при ее нажатии будет выходить сообщение об ошибке, и удаление не произойдет.

Причина №3: Настройки прав доступа (Роли и RLS)

Даже если у пользователя назначена роль "Полные права", это не всегда гарантирует стопроцентный доступ. Рассмотрим два аспекта.

Отсутствие прав в роли

Если регистр сведений нетиповой, разработчик мог просто забыть добавить права на него в существующие роли. Для возможности интерактивного удаления у роли должны быть установлены права на "Чтение", "Изменение" и "Интерактивное удаление". Чтобы не проверять каждую роль вручную, используйте инструмент для быстрой проверки прав доступа на объект метаданных.

Как проверить? В конфигураторе откройте нужную роль, найдите в дереве объектов ваш регистр сведений и убедитесь, что все галочки установлены.

Ограничение доступа на уровне записей (RLS)

RLS (Row-Level Security) позволяет ограничивать доступ к отдельным записям по условиям. С помощью RLS можно полностью запретить удаление записей, даже если у пользователя есть общие права на объект.

Как проверить? Анализ RLS — задача для опытного разработчика. Нужно открыть роль в конфигураторе, перейти на вкладку "Ограничения доступа" и проанализировать тексты запросов для нужного регистра сведений.

Причина №4: Свойства самого регистра в конфигурации

Иногда причина кроется не в коде или правах, а в самой структуре объекта в конфигураторе.

Регистр подчинен регистратору

Если регистр сведений имеет режим записи "Подчинение регистратору", его записи неразрывно связаны с документом-регистратором. В этом случае удалять записи напрямую из формы регистра невозможно по определению. Кнопка "Удалить" всегда будет неактивна.

Как проверить? Откройте свойства регистра сведений в конфигураторе и посмотрите на "Режим записи". Если там установлено "Подчинение регистратору", то для удаления записей нужно найти и распровести/удалить соответствующий документ.

Функциональные опции

Право на редактирование записей в вашем регистре может быть "привязано" к функциональной опции, которая сейчас отключена в настройках программы.

Итог: пошаговый план проверки

Чтобы системно найти причину неактивной кнопки "Удалить", действуем по следующему алгоритму:

  1. Проверяем подчинение регистратору. Откройте свойства регистра в конфигураторе.
  2. Ищем свойство ТолькоПросмотр. Проанализируйте код формы списка и записи.
  3. Проверяем права в роли. Убедитесь в наличии права "Интерактивное удаление".
  4. Ищем явную блокировку кнопок. Проверьте код формы и настройки условного оформления.
  5. Анализируем RLS. Проанализируйте ограничения доступа на уровне записей в ролях.
  6. Проверяем обработчики событий. Загляните в модуль набора записей регистра.

Следуя этому плану, вы с большой вероятностью найдете причину проблемы и сможете ее устранить.

← На главную