Почему не удаляются файлы, помеченные на удаление в 1С:Документооборот 2.1 при хранении в томах?

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

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

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

Разберем архитектуру хранения файлов

Для начала проанализируем, как 1С хранит информацию о файлах. В системе задействовано сразу несколько объектов:

  1. Справочник Файлы: содержит общую информацию (имя, автор, дата создания).
  2. Справочник ВерсииФайлов: здесь хранятся конкретные изменения файла. У одного файла может быть много версий.
  3. Регистр сведений ФайлыКУдалению: это ключевой объект для систем, использующих хранение в томах. Когда мы помечаем версию файла на удаление, запись об этом попадает в данный регистр.

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

Выясним причину блокировки удаления

Рассмотрим подробнее, почему стандартный поиск ссылок выдает препятствия для удаления. Основная причина заключается в независимом режиме записи регистра сведений ФайлыКУдалению.

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

Даже если все объекты справочников помечены на удаление, запись в независимом регистре сама по себе помечена быть не может (у регистров сведений нет пометки на удаление). Платформа 8.3 в стандартном режиме контроля ссылочной целостности не может самостоятельно очистить этот регистр, пока не удален основной объект, и не может удалить основной объект, пока на него ссылается регистр. Это типичная ошибка логики в релизах 2.1.11.5 и 2.1.12.

Шаг 1: Проверка настроек автоматической очистки

Прежде чем переходить к радикальным мерам, проверим штатные настройки системы. Перейдем в раздел Настройка и администрирование — Работа с файлами. Нам необходимо убедиться, что включена опция Автоматически очищать устаревшие версии файлов.

Если эта настройка активна, система должна самостоятельно обрабатывать очередь на удаление. Попробуем нажать кнопку Очистить сейчас. В некоторых случаях это принудительно запускает регламентные процедуры, которые очищают регистр ФайлыКУдалению, разрывая порочный круг ссылок.

Шаг 2: Анализ работы регламентных заданий

Проанализируем состояние регламентных заданий. За очистку физических данных в томах и последующую очистку записей в регистре отвечает задание ОчисткаНенужныхФайлов. Если это задание зависает, завершается с ошибкой или вовсе не настроено, записи в регистре ФайлыКУдалению будут «висеть» вечно, блокируя удаление объектов справочника.

Рекомендуется проверить:

Шаг 3: Ручная очистка регистра через консоль (Workaround)

Если обновление конфигурации в данный момент невозможно, воспользуемся проверенным методом ручного вмешательства. Нам необходимо удалить записи из регистра ФайлыКУдалению, которые ссылаются на наши «зависшие» версии файлов.

Рассмотрим алгоритм действий для программиста:

  1. Откройте консоль запросов или обработку «Редактирование записей регистров».
  2. Найдите записи в регистре ФайлыКУдалению, где в поле Версия указана ссылка на объект, который не удаляется.
  3. Удалите эти записи вручную.
  4. Снова запустите стандартную обработку Удаление помеченных объектов.

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

Шаг 4: Использование режима «Удалять сразу»

В некоторых версиях платформы 8.3 можно попробовать использовать режим удаления «Удалять сразу (без возможности отмены)». В этом режиме платформа использует более агрессивный алгоритм обхода дерева ссылок. Однако будьте осторожны: этот метод не всегда корректно отрабатывает в старых релизах 2.1.11 при наличии записей в независимых регистрах.

Шаг 5: Окончательное решение — Обновление

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

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

Резюме

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

← На главную