Как включить интерактивное удаление объектов в 1С без контроля ссылок?

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

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

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

Что такое интерактивное удаление и в чем его опасность?

Прежде чем перейти к практической настройке прав, проанализируем физический смысл данной операции. Когда вы нажимаете клавишу Del на объекте, платформа просто устанавливает для него специальный признак (флаг пометки удаления). Сам объект физически остается в таблицах СУБД, а все связанные с ним документы и регистры продолжают корректно ссылаться на него.

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

Появление битых ссылок может привести к непредсказуемым последствиям:

  1. Ошибки при проведении связанных документов, которые пытаются получить свойства удаленного объекта.
  2. Искажение информации в отчетах из-за отсутствия аналитики.
  3. Зависание или аварийное завершение регламентных операций закрытия месяца.
  4. Проблемы при синхронизации и выгрузке данных в другие информационные системы.

Именно по этой причине право на непосредственное удаление должно предоставляться с крайней осторожностью и только квалифицированному персоналу.

Настройка интерактивного удаления в Конфигураторе

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

  1. Запустите информационную базу в режиме Конфигуратор. Обратите внимание, что ваш пользователь должен обладать административными правами.
  2. Откройте дерево метаданных конфигурации (через меню «Конфигурация» — «Открыть конфигурацию» или с помощью горячих клавиш Ctrl + Shift + T).
  3. Разверните ветку Общие и перейдите в подраздел Роли.
  4. Найдите роль, которую вы хотите отредактировать (или создайте новую специализированную роль, например, УдалениеОбъектовБезКонтроля, если ваша конфигурация находится на поддержке с возможностью изменения). Двойным кликом откройте окно редактирования роли.
  5. В открывшемся окне перейдите на вкладку Права.
  6. В левой панели выберите нужный класс объектов (например, Документы) или конкретный тип документа (например, ЗаказПоставщику).
  7. В правой панели найдите право под названием Интерактивное удаление и установите напротив него флажок. Если вам также требуется удалять предопределенные элементы, обратите внимание на флажки Интерактивное удаление предопределенных.
  8. Сохраните изменения в конфигурации, нажав клавишу F7 или выбрав пункт меню «Конфигурация» — «Обновить конфигурацию базы данных».

После этого пользователю, в профиль которого добавлена измененная или новая роль, станет доступна команда «Удалить непосредственно» в контекстном меню списков документов и справочников.

Особенности взаимодействия ролей в 1С:Предприятии

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

Однако в крупных корпоративных конфигурациях (таких как УПП, ERP, Комплексная автоматизация) администраторы часто сталкиваются с ситуацией, когда флажок в конфигураторе установлен, но у пользователя все равно не получается выполнить непосредственное удаление. Проанализируем причины этой технической проблемы:

  1. Ограничения на уровне записей (RLS): Если в системе включен механизм RLS (Record Level Security), ограничивающий видимость данных по организациям, контрагентам или складам, попытка непосредственного удаления объекта, который попадает под условия ограничения, будет заблокирована платформой с ошибкой нарушения прав доступа.
  2. Зависимости в служебных регистрах БСП: Современные конфигурации используют множество регистров сведений для логирования изменений, хранения версий и прав доступа. При удалении документа платформа пытается очистить записи и в этих связанных регистрах. Если у роли пользователя нет прав на изменение записей в этих регистрах, удаление основного объекта прервется ошибкой.

Официальные стандарты разработки фирмы «1С»

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

Программный метод обхода ограничений (Режим загрузки)

Если перед вами стоит задача очистки базы данных от определенного пула объектов (например, удаление устаревших логов или ошибочных документов за прошлые периоды) без изменения типовых ролей пользователей, лучшим решением будет использование программного удаления.

При программном удалении мы можем задействовать специальный режим работы объекта — ОбменДанными.Загрузка = Истина. Этот флаг отключает выполнение прикладных проверок в модулях объектов, блокирует запуск подписок на события и позволяет выполнить удаление максимально быстро и без контроля ссылок.

Посмотрим на практический пример кода, который реализует такое удаление:


// Процедура программного удаления документа без контроля ссылочной целостности
Процедура УдалитьДокументНепосредственно(СсылкаНаДокумент) Экспорт
    
    // Получаем объект документа из ссылки
    ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
    
    Если ОбъектДокумента <> Неопределено Тогда
        
        // Устанавливаем режим загрузки данных для отключения подписок и проверок
        ОбъектДокумента.ОбменДанными.Загрузка = Истина;
        
        НачатьТранзакцию();
        Попытка
            // Вызываем непосредственное удаление объекта из базы данных
            ОбъектДокумента.Удалить();
            
            ЗафиксироватьТранзакцию();
            Сообщить("Документ " + СсылкаНаДокумент + " успешно удален непосредственно.");
        Исключение
            ОтменитьТранзакцию();
            
            // Записываем ошибку в Журнал регистрации для последующего анализа
            ЗаписьЖурналаРегистрации("Администрирование.УдалениеОбъектов",
                УровеньЖурналаРегистрации.Ошибка,
                ОбъектДокумента.Метаданные(),
                СсылкаНаДокумент,
                "Ошибка удаления: " + ОписаниеОшибки());
                
            ВызватьИсключение "Не удалось произвести непосредственное удаление: " + ОписаниеОшибки();
        КонецПопытки;
        
    Иначе
        Сообщить("Указанный объект не найден в информационной базе.");
    КонецЕсли;
    
КонецПроцедуры

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

Альтернатива: Безопасное удаление через БСП

Вместо опасного непосредственного удаления объектов мы рекомендуем использовать стандартные инструменты Библиотеки стандартных подсистем (БСП). В БСП встроен специальный модуль УдалениеПомеченныхОбъектовКлиент, который позволяет интерактивно запускать поиск и очистку помеченных элементов.

В современных версиях БСП предусмотрено три режима удаления данных:

  1. Стандартный режим: Полная проверка всех связей. Если на объект есть ссылки, программа откажется его удалять и покажет пользователю список зависимых объектов.
  2. Упрощенный режим: Проверка связей выполняется только по активным транзакциям и критическим метаданным, что значительно ускоряет процесс в крупных базах.
  3. Программная зачистка ссылок: В ряде случаев разработчики могут написать обработчики автоматической замены удаляемых ссылок на пустые значения или на «Битый» предопределенный элемент, что сохраняет работоспособность регистров без ручного исправления каждой ссылки.

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

← На главную