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