Как удалить внутренние документы в 1С:Документооборот? Разбор причин блокировки и пошаговое руководство

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

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

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

Почему возникает «замкнутый круг» при удалении в 1С:ДО?

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

  1. Цепочка «Документ — Файл — Версия»: Карточка внутреннего документа ссылается на справочник Файлы. Каждый элемент этого справочника, в свою очередь, имеет владельца (сам документ) и жестко связан со справочником Версии файлов, где физически хранится двоичные данные (срез файла). Пока существует хотя бы одна версия, файл удалить нельзя. Пока существует файл — нельзя удалить документ.
  2. Дескрипторы доступа: Для обеспечения высокой скорости работы прав доступа в 1С:ДО используется механизм дескрипторов (специальных служебных объектов). Дескрипторы связывают документы, файлы и пользователей. Ссылки на удаляемые объекты остаются в регистрах прав, блокируя удаление.
  3. Активные процессы и задачи: Если документ хотя бы раз отправлялся на согласование, ознакомление или исполнение, в базе создаются бизнес-процессы и задачи. Все они содержат жесткие ссылки на документ в качестве предмета процесса.
  4. Регистры связей: Связи видов «В ответ на», «Во исполнение», «Содержит» фиксируются в специальном регистре сведений. Наличие записи в этом регистре также делает удаление невозможным.

Ниже мы подробно рассмотрим четыре основных способа решения этой проблемы — от штатных административных процедур до использования внешних инструментов разработчика.


Способ 1. Пошаговый штатный алгоритм очистки связей

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

Шаг 1. Прерывание и удаление бизнес-процессов

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

Шаг 2. Разрыв связей между документами

Перейдите на вкладку «Связи» в карточке документа. Если документ связан со сторонними карточками, удалите все установленные связи. Это очистит записи в соответствующем регистре сведений.

Шаг 3. Запуск регламентных заданий очистки версий

В «1С:Документообороте» задействован механизм отложенной очистки. Чтобы удалить «зависшие» версии файлов, перейдите в меню Настройка и администрирование -> Обслуживание -> Регламентные операции и выполните следующие задания:

Шаг 4. Обновление прав доступа (дескрипторов)

Чтобы окончательно разорвать связь документов с дескрипторами прав, выполните принудительное обновление прав доступа. Перейдите в раздел Настройка и администрирование -> Обслуживание -> Управление расчетом прав. Нажмите кнопку «Обновить права доступа» для очистки устаревших записей.

Шаг 5. Стандартное удаление объектов

После выполнения подготовительных шагов перейдите в Настройка и администрирование -> Обслуживание -> Удаление помеченных объектов, выберите нужные документы и запустите автоматическое удаление. На этот раз цепочки связей будут разорваны, и система успешно удалит элементы.


Способ 2. Использование групповой обработки и программных методов

Когда документов на удаление много, ручная очистка неэффективна. В этом случае мы можем прибегнуть к стандартной обработке «Групповое изменение реквизитов» или написать небольшой программный код для автоматизации процесса.

Через групповое изменение реквизитов мы можем массово пометить на удаление связанные файлы. Для этого выберите объект Файлы, установите отбор по владельцу (нашим удаляемым документам) и массово установите для них признак ПометкаУдаления = Истина.

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


// Программный обход и пометка на удаление связанных файлов документа
Процедура ПометитьНаУдалениеФайлыДокумента(ДокументСсылка) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Файлы.Ссылка КАК Файл
        |ИЗ
        |	Справочник.Файлы КАК Файлы
        |ГДЕ
        |	Файлы.ВладелецФайла = &ДокументСсылка";
        
    Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ФайлОбъект = Выборка.Файл.ПолучитьОбъект();
        // Устанавливаем пометку удаления на сам файл и каскадно на его версии
        ФайлОбъект.УстановитьПометкуУдаления(Истина, Истина);
        ФайлОбъект.Записать();
    КонецЦикла;
    
КонецПроцедуры

Использование подобных скриптов позволяет значительно сократить время администратора базы данных при массовом выводе документов из оборота.


Способ 3. Организация «Архивной корзины» (Административный обходной путь)

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

Вместо удаления мы рекомендуем использовать архитектурное решение под названием «Корзина». Рассмотрим его реализацию подробнее:

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

Для рядовых сотрудников документ мгновенно «исчезнет» из списков поиска и реестров. При этом целостность базы данных не пострадает, ссылки в бизнес-процессах останутся рабочими, а администратору не придется тратить часы на ручную очистку блокирующих связей.


Способ 4. Применение внешних инструментов разработчика (ИР)

Если физическое удаление объектов неизбежно (например, перед сверткой базы или для уменьшения размера файловой СУБД), стандартные инструменты часто пасуют перед сложными циклическими ссылками. В таких случаях на помощь приходит мощный комплекс «Инструменты разработчика» (ИР).

В составе комплекса ИР присутствует специализированная обработка очистки и удаления ссылок. Рассмотрим ее ключевые преимущества:

Использование комплекса «Инструменты разработчика» требует административных прав и аккуратности, но экономит до 90% времени при техническом обслуживании запущенных и тяжелых баз данных «1С:Документооборот».

← На главную