Почему в 1С пропала функция непосредственного удаления и как ее вернуть?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия
← На главную

Многие пользователи и администраторы систем 1С сталкиваются с ситуацией, когда после очередного обновления конфигурации (например, «Бухгалтерия предприятия 2.0» до релиза 2.0.28.3 и выше) привычная функция непосредственного удаления объектов перестает работать. Даже при использовании комбинации клавиш Shift+Del система никак не реагирует, хотя у пользователя установлены «Полные права». В рамках данной статьи мы подробно разберем причины такого поведения платформы, проанализируем технические аспекты настройки прав и рассмотрим несколько способов решения проблемы: от правки конфигурации до использования внешних инструментов.

Разберем причину: разница между «Удалением» и «Интерактивным удалением»

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

  1. Удаление (Delete): Это право на программное удаление объекта. Если оно установлено, система позволяет удалить запись через программный код или внешние обработки.
  2. Интерактивное удаление (Interactive Delete): Именно это право отвечает за возможность пользователя нажать клавишу Del или Shift+Del непосредственно в списке объектов.

Начиная с определенных релизов, разработчики 1С намеренно отключают флаг ИнтерактивноеУдаление в типовых ролях (даже в роли «Полные права»). Это сделано для защиты базы данных от появления «битых ссылок». Когда объект удаляется непосредственно, система не проверяет, используется ли он в других документах или регистрах. В результате в базе остаются ссылки вида <Объект не найден>, что может привести к критическим ошибкам при проведении документов или формировании отчетности.

Способ 1: Настройка прав в Конфигураторе

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

Важно: Если ваша конфигурация находится на поддержке и закрыта для редактирования (горит значок «замочка»), вам потребуется сначала включить возможность изменения (Конфигурация — Поддержка — Настройка поддержки — Включить возможность изменения). Однако помните, что это может усложнить процесс последующих обновлений.

  1. Откроем Конфигуратор и перейдем в дерево метаданных.
  2. Развернем ветку Общие -> Роли.
  3. Выберем роль, под которой работает пользователь (например, создадим новую роль «СуперАдмин» или отредактируем существующую, если это допустимо).
  4. Нажмем правой кнопкой мыши по роли и выберем «Открыть права».
  5. В левой колонке выберем нужный тип объекта (например, «Справочники» или конкретный документ).
  6. В правой колонке найдем флажок Интерактивное удаление.

Проанализируем механику установки флагов: установка флажка Интерактивное удаление автоматически влечет за собой установку флага Удаление. Обратите внимание, что для работы Shift+Del в интерфейсе должен быть активен именно «интерактивный» вариант. После внесения изменений необходимо обновить конфигурацию базы данных (клавиша F7).

Способ 2: Использование внешних обработок (Рекомендуемый)

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

1. Обработка «Универсальные подбор и обработка объектов»

Эта обработка входит в состав диска ИТС и является «швейцарским ножом» для администратора 1С. Рассмотрим, как с ее помощью выполнить удаление:

  1. Запустим обработку через меню «Файл» — «Открыть».
  2. В поле «Объект поиска» выберем нужный справочник или документ.
  3. На вкладке «Настройки параметров» можно задать фильтр (например, выбрать только помеченные на удаление объекты).
  4. Нажмем кнопку «Найти объекты».
  5. В списке доступных методов выберем Удалить или Удалить непосредственно.

2. Специализированные обработки для непосредственного удаления

Существуют легкие внешние обработки, предназначенные только для одной цели — удаления. Они используют программный метод Удалить(), который игнорирует запрет на интерактивное удаление, если у роли пользователя есть базовое право Удаление.

Способ 3: Программное решение задачи

Для программиста 1С решение задачи непосредственного удаления сводится к написанию нескольких строк кода. Посмотрим на пример реализации простого удаления объекта по ссылке:


// Пример программного удаления объекта
Процедура УдалитьОбъектНепосредственно(СсылкаНаОбъект)
    
    // Получаем объект из ссылки для возможности редактирования/удаления
    ОбъектДляУдаления = СсылкаНаОбъект.ПолучитьОбъект();
    
    // Выполняем удаление. 
    // Метод Удалить() физически стирает запись из таблицы БД
    Попытка
        ОбъектДляУдаления.Удалить();
        Сообщить("Объект успешно удален.");
    Исключение
        Сообщить("Ошибка удаления: " + ОписаниеОшибки());
    КонецПопытки;
    
КонецПроцедуры

Если нам необходимо перед удалением убедиться, что на объект нет ссылок (безопасное удаление), мы можем использовать функцию НайтиПоСсылкам(). Проанализируем фрагмент кода:


// Проверка ссылочной целостности перед удалением
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(НужнаяСсылка);

ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);

Если ТаблицаСсылок.Количество() > 0 Тогда
    Сообщить("Удаление невозможно: на объект ссылаются другие элементы системы!");
Иначе
    НужнаяСсылка.ПолучитьОбъект().Удалить();
КонецЕсли;

Безопасная альтернатива: Выборочное удаление помеченных объектов

Рассмотрим ситуацию: бухгалтеру нужно удалить один конкретный документ, но в базе висит еще 100 помеченных на удаление объектов, которые «пока трогать нельзя». Вместо опасного непосредственного удаления, выясним, как использовать штатный механизм эффективнее.

В типовых решениях (особенно на управляемых формах, но доступно и в обычных) в форме «Удаление помеченных объектов» можно выбрать режим «Выборочное удаление». Это позволяет:

Последствия и риски непосредственного удаления

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

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

Совет: Если вы все же провели массовое непосредственное удаление, обязательно запустите процедуру «Тестирование и исправление» (Администрирование — Тестирование и исправление) с установленными флажками «Проверка ссылочной целостности» и опцией «Очищать объекты» или «Создавать объекты» для битых ссылок. Это поможет минимизировать ущерб для базы данных.

← На главную