Многие пользователи и администраторы систем 1С сталкиваются с ситуацией, когда после очередного обновления конфигурации (например, «Бухгалтерия предприятия 2.0» до релиза 2.0.28.3 и выше) привычная функция непосредственного удаления объектов перестает работать. Даже при использовании комбинации клавиш Shift+Del система никак не реагирует, хотя у пользователя установлены «Полные права». В рамках данной статьи мы подробно разберем причины такого поведения платформы, проанализируем технические аспекты настройки прав и рассмотрим несколько способов решения проблемы: от правки конфигурации до использования внешних инструментов.
Прежде всего, выясним причину изменений. В платформе 1С:Предприятие 8 существует два принципиально разных права для каждого объекта метаданных (справочника, документа и т.д.):
Del или Shift+Del непосредственно в списке объектов.Начиная с определенных релизов, разработчики 1С намеренно отключают флаг ИнтерактивноеУдаление в типовых ролях (даже в роли «Полные права»). Это сделано для защиты базы данных от появления «битых ссылок». Когда объект удаляется непосредственно, система не проверяет, используется ли он в других документах или регистрах. В результате в базе остаются ссылки вида <Объект не найден>, что может привести к критическим ошибкам при проведении документов или формировании отчетности.
Если специфика вашей работы требует частого использования непосредственного удаления, и вы осознаете все риски, можно вернуть эту функцию через Конфигуратор. Рассмотрим этот процесс по шагам:
Важно: Если ваша конфигурация находится на поддержке и закрыта для редактирования (горит значок «замочка»), вам потребуется сначала включить возможность изменения (Конфигурация — Поддержка — Настройка поддержки — Включить возможность изменения). Однако помните, что это может усложнить процесс последующих обновлений.
Проанализируем механику установки флагов: установка флажка Интерактивное удаление автоматически влечет за собой установку флага Удаление. Обратите внимание, что для работы Shift+Del в интерфейсе должен быть активен именно «интерактивный» вариант. После внесения изменений необходимо обновить конфигурацию базы данных (клавиша F7).
Если вы не хотите вносить изменения в структуру конфигурации и снимать ее с поддержки, оптимальным решением станет использование внешних инструментов. Проанализируем наиболее эффективные из них.
1. Обработка «Универсальные подбор и обработка объектов»
Эта обработка входит в состав диска ИТС и является «швейцарским ножом» для администратора 1С. Рассмотрим, как с ее помощью выполнить удаление:
2. Специализированные обработки для непосредственного удаления
Существуют легкие внешние обработки, предназначенные только для одной цели — удаления. Они используют программный метод Удалить(), который игнорирует запрет на интерактивное удаление, если у роли пользователя есть базовое право Удаление.
Для программиста 1С решение задачи непосредственного удаления сводится к написанию нескольких строк кода. Посмотрим на пример реализации простого удаления объекта по ссылке:
// Пример программного удаления объекта
Процедура УдалитьОбъектНепосредственно(СсылкаНаОбъект)
// Получаем объект из ссылки для возможности редактирования/удаления
ОбъектДляУдаления = СсылкаНаОбъект.ПолучитьОбъект();
// Выполняем удаление.
// Метод Удалить() физически стирает запись из таблицы БД
Попытка
ОбъектДляУдаления.Удалить();
Сообщить("Объект успешно удален.");
Исключение
Сообщить("Ошибка удаления: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Если нам необходимо перед удалением убедиться, что на объект нет ссылок (безопасное удаление), мы можем использовать функцию НайтиПоСсылкам(). Проанализируем фрагмент кода:
// Проверка ссылочной целостности перед удалением
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(НужнаяСсылка);
ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);
Если ТаблицаСсылок.Количество() > 0 Тогда
Сообщить("Удаление невозможно: на объект ссылаются другие элементы системы!");
Иначе
НужнаяСсылка.ПолучитьОбъект().Удалить();
КонецЕсли;
Рассмотрим ситуацию: бухгалтеру нужно удалить один конкретный документ, но в базе висит еще 100 помеченных на удаление объектов, которые «пока трогать нельзя». Вместо опасного непосредственного удаления, выясним, как использовать штатный механизм эффективнее.
В типовых решениях (особенно на управляемых формах, но доступно и в обычных) в форме «Удаление помеченных объектов» можно выбрать режим «Выборочное удаление». Это позволяет:
В завершение проанализируем, почему 1С настойчиво рекомендует отказаться от этой функции. После массового непосредственного удаления в базе данных происходят следующие процессы:
Совет: Если вы все же провели массовое непосредственное удаление, обязательно запустите процедуру «Тестирование и исправление» (Администрирование — Тестирование и исправление) с установленными флажками «Проверка ссылочной целостности» и опцией «Очищать объекты» или «Создавать объекты» для битых ссылок. Это поможет минимизировать ущерб для базы данных.