В процессе работы с 1С:Предприятие пользователи регулярно сталкиваются с необходимостью удаления устаревших данных. Однако стандартная функция «пометить на удаление» не очищает базу физически — объекты остаются в системе, занимая место и замедляя работу. Это особенно критично для крупных предприятий, где объем данных исчисляется гигабайтами. Неправильная очистка может привести к потере важных документов, нарушению ссылочной целостности или даже краху базы.
В этой статье мы разберем все актуальные способы физического удаления помеченных объектов — от ручных методов до автоматизированных обработок, включая нюансы для разных конфигураций (1С:Бухгалтерия, 1С:УТ, 1С:ЗУП и др.). Особое внимание уделим скрытым рискам, о которых не предупреждают даже опытные администраторы, и дадим чек-лист для безопасной очистки.
Почему помеченные объекты не удаляются сразу?
Механизм пометки на удаление в 1С:Предприятие — это защита от случайных потерь данных. Когда вы нажимаете «Удалить» в интерфейсе программы, система не стирает объект физически, а лишь ставит метку ПометкаУдаления = Истина. Это позволяет:
- 🔄 Восстановить объект, если удаление было ошибочным (через журнал документов или обработку)
- 🔗 Сохранить ссылочную целостность: другие объекты (документы, справочники) продолжают «видеть» помеченный элемент
- 📊 Формировать отчеты с учетом исторических данных (например, в 1С:ЗУП для расчета среднего заработка)
Однако со временем таких «мусорных» объектов накапливается тысячи. Они:
- 🐢 Замедляют работу базы (особенно при полнотекстовом поиске)
- 💾 Увеличивают размер файла
1Cv8.1CD(иногда на десятки гигабайт) - 🔍 Усложняют аудит — в отчетах появляются «мертвые» записи
⚠️ Внимание: В конфигурациях с версионированием данных (например, 1С:ERP) физическое удаление может нарушить историю изменений. Перед очисткой проверьте настройки хранения версий в Администрирование → Поддержка и обслуживание.
Способ 1: Стандартная обработка «Удаление помеченных объектов»
Самый безопасный и рекомендуемый метод — использовать встроенную обработку. Она доступна во всех типовых конфигурациях, но путь к ней может отличаться. Общий алгоритм:
- Откройте меню
Все функции(если его нет — включите в настройках интерфейса). - Перейдите в раздел
ОбработкиилиСервис. - Выберите
Удаление помеченных объектов(в некоторых версиях —Очистка базы данных).
В открывшемся окне:
- 📅 Укажите период (если нужно удалить объекты, помеченные до определенной даты)
- 📋 Выберите типы объектов (документы, справочники, регистры и т.д.)
- 🔍 При необходимости используйте расширенный отбор (например, только по конкретному справочнику)
- 🚀 Нажмите
Выполнитьи дождитесь завершения операции
Создайте резервную копию базы|Закройте все сеансы пользователей|Проверьте права доступа (требуется роль "Администратор")|Отключите регламентные задания|Убедитесь, что достаточно места на диске-->
Преимущества метода:
- ✅ Безопасность: обработка учитывает ссылочную целостность
- ✅ Логирование: ведется протокол удаленных объектов
- ✅ Гибкость: можно выбрать конкретные типы данных
⚠️ Внимание: В 1С:УТ 11 и 1С:КА 2 стандартная обработка не удаляет помеченные элементы планов обмена. Для них требуется отдельная процедура через Администрирование → Обмен данными.
Способ 2: Ручное удаление через консоль запросов
Для опытных пользователей и администраторов доступен метод удаления через язык запросов 1С. Он полезен, когда стандартная обработка не справляется (например, при ошибках блокировки объектов). Основной запрос:
ВЫБРАТЬ
Ссылка КАК Объект
ИЗ
РегистрСведений.ПометкиУдаления КАК Пометки
ГДЕ
Пометки.ПометкаУдаления = ИСТИНА
И НЕ Пометки.ЭтоГруппа
Однако непосредственное удаление требует аккуратности. Полный скрипт для очистки справочника Номенклатура:
// 1. Получаем список помеченных элементов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ПометкаУдаления = ИСТИНА";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
// 2. Удаляем физически
Пока Выборка.Следующий() Цикл
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Удалить();
КонецЦикла;
Критические нюансы:
- 🔒 Блокировки: перед выполнением закройте все сеансы пользователей
- 📈 Производительность: при большом количестве объектов (>10 000) используйте
ПакетныеЗапросы - 🛡️ Транзакции: оберните код в
НачатьТранзакцию()/ЗафиксироватьТранзакцию()
Перед массовым удалением через запрос выполните тестовый прогон на копии базы. Используйте конструкцию ОТЛАДКА, чтобы увидеть, какие именно объекты будут затронуты: добавьте строку Сообщить(Объект.Наименование); в цикл обработки.
Способ 3: Регламентное задание для автоматической очистки
Для регулярного удаления помеченных объектов (например, еженедельно) удобно настроить регламентное задание. Это избавит от рутинных операций и снизит риск забыть про очистку. Алгоритм настройки:
- Перейдите в
Администрирование → Регламентные задания. - Создайте новое задание с типом
Очистка базы данных. - Укажите расписание (рекомендуемое время — ночь, когда нет пользователей).
- В параметрах задания выберите:
- 🗓️ Период удаления (например, «помеченные более 30 дней назад»)
- 📄 Типы объектов (документы, справочники и т.д.)
- 🔄 Режим выполнения (
АвтоматическиилиПо требованию)
Преимущества метода:
| Параметр | Ручная очистка | Регламентное задание |
|---|---|---|
| Частота выполнения | По запросу | Автоматически по расписанию |
| Риск ошибок | Высокий (человеческий фактор) | Низкий (стандартный алгоритм) |
| Нагрузка на сервер | Пиковая (в рабочее время) | Распределенная (ночью) |
| Логирование | Ручное | Автоматическое (журнал регламентных заданий) |
⚠️ Внимание: В 1С:БП 3.0 регламентное задание очистки по умолчанию не удаляет помеченные элементы справочника «Контрагенты», если по ним есть движения в регистрах расчетов. Для полной очистки требуется дополнительная настройка параметров задания.
Никогда не очищаю|Раз в полгода|Раз в квартал|Ежемесячно|По мере необходимости-->
Способ 4: Утилита chdbfl.exe для физической очистки
Для глубокой очистки файловой базы (например, после массового удаления или переноса данных) используется утилита chdbfl.exe, входящая в комплект поставки 1С:Предприятие. Она позволяет:
- 🧹 Удалить физически помеченные объекты (включая «мертвые» ссылки)
- 🔧 Перестроить индексы для ускорения работы
- 📉 Сжать базу, уменьшив размер файла
.1CD
Порядок действий:
- Закройте все сеансы 1С (включая фоновые процессы).
- Откройте командную строку от имени администратора.
- Перейдите в папку с утилитой (обычно
C:\Program Files\1cv8\8.3.x.xxx\bin). - Выполните команду:
chdbfl.exe -ibname "Путь\к\базе.1CD" -rebuild -compactгде:
-ibname— путь к файлу базы-rebuild— перестроение индексов-compact— сжатие базы
Важные предупреждения:
- 🚨 Не прерывайте процесс — это может повредить базу
- ⏳ Время выполнения зависит от размера базы (для 50 ГБ — до 2-3 часов)
- 🔐 Требуются права на папку с базой
Что делать, если chdbfl.exe выдает ошибку "Файл занят"?
1. Проверьте в Диспетчере задач процессы 1cv8.exe, 1cv8s.exe, ragent.exe и завершите их.
2. Отключите службу Агент сервера 1С:Предприятия (если используется).
3. Убедитесь, что база не открыта в Конфигураторе в фоновом режиме.
4. Для сетевых баз проверьте подключения по протоколу TCP/IP через netstat -ano.
Способ 5: Очистка через Конфигуратор (для администраторов)
В режиме Конфигуратора доступны расширенные инструменты для работы с помеченными объектами. Этот метод подходит для:
- 🛠️ Исправления ошибок после некорректного удаления
- 🔍 Анализа ссылочной целостности перед массовой очисткой
- 📂 Очистки служебных объектов (например, временных таблиц)
Пошаговая инструкция:
- Откройте базу в Конфигураторе (с правами администратора).
- Перейдите в меню
Администрирование → Тестирование и исправление. - Включите флаги:
- 🔲
Проверять логическую целостность - 🔲
Проверять ссылочную целостность - 🔲
Реструктурировать таблицы базы данных
- 🔲
Выполнить и дождитесь окончания процесса.Администрирование → Удаление помеченных объектов и запустите очистку.Особенности метода:
- 🔧 Исправляет битые ссылки, которые могут блокировать стандартное удаление
- 📊 Генерирует отчет о найденных ошибках (сохраните его для анализа)
- ⚠️ Может занять много времени на больших базах (рекомендуем выполнять на выделенном сервере)
Тестирование и исправление в Конфигураторе — единственный способ безопасно удалить помеченные объекты, если стандартная обработка выдает ошибку "Нарушение ссылочной целостности".
Риски и как их избежать
Неправильная очистка базы может привести к критическим последствиям:
- 💥 Потеря данных: удаление объектов, на которые есть активные ссылки
- 🔄 Нарушение проводок: в бухгалтерских конфигурациях это ведет к расхождению итогов
- 🚫 Блокировка базы: при прерывании процесса очистки
Чек-лист для безопасной очистки:
Создайте полную резервную копию базы (не только архив, но и выгрузку данных)|Проверьте, что нет активных сеансов пользователей (включая фоновые процессы)|Запустите тестовое удаление на копии базы|Используйте транзакции для массовых операций|Сохраните лог удаленных объектов (для возможного восстановления)|Проверьте отчеты после очистки (особенно оборотно-сальдовую ведомость)|Обновите статистику запросов (ДБФ → Сервис → Обновить статистику)-->
Типичные ошибки и их решения:
| Ошибка | Причина | Решение |
|---|---|---|
Нарушение ссылочной целостности |
Есть активные ссылки на помеченный объект | Используйте Тестирование и исправление в Конфигураторе |
Объект заблокирован |
Объект используется в другом сеансе | Закройте все сеансы или используйте ПакетныеЗапросы |
Недостаточно прав |
У пользователя нет роли Администратор |
Запустите очистку от имени администратора или назначьте роль |
Превышен тайм-аут |
Слишком много объектов для однократной обработки | Разбейте очистку на части по типам объектов или периодам |
FAQ: Частые вопросы по удалению помеченных объектов
Можно ли восстановить объект после физического удаления?
Нет, после физического удаления (через chdbfl.exe или прямые запросы) восстановление невозможно. Единственный способ — восстановить базу из резервной копии, сделанной до очистки. Именно поэтому критично важно:
- Создавать бэкапы перед массовыми операциями
- Использовать тестовые копии для проверки скриптов
- Ведите журнал удаленных объектов (в стандартной обработке он формируется автоматически)
Почему после очистки размер базы не уменьшился?
Это нормальная ситуация. Причины:
- Фрагментация данных: удаленные объекты оставляют «дыры» в файле
.1CD, которые не сжимаются автоматически. - Служебные таблицы: 1С хранит метаданные, индексы и временные таблицы, которые не очищаются при удалении объектов.
- Неполная очистка: могли остаться помеченные объекты в регистрах сведений или планах обмена.
Решение: выполните chdbfl.exe -ibname "путь" -compact для физического сжатия базы.
Как удалить помеченные объекты в облачной версии 1С (1С:Fresh)?
В 1С:Fresh прямой доступ к файловой базе и утилитам вроде chdbfl.exe отсутствует. Варианты:
- Стандартная обработка: доступна через веб-интерфейс в разделе
Администрирование. - Техническая поддержка: создайте заявку на очистку — специалисты 1С выполнят ее в фоновом режиме.
- Выгрузка/загрузка: для критичных случаев можно выгрузить данные в
DT, очистить локально и загрузить обратно.
⚠️ Внимание: В 1С:Fresh некоторые объекты (например, истории изменений) нельзя удалить физически — они архивируются на серверах 1С.
Какие объекты нельзя удалять физически?
Даже если объект помечен на удаление, его нельзя стирать физически, если:
- Он используется в регламентированной отчетности (например, документы для налоговой).
- На него есть активные ссылки в регистрах накопления или расчетов.
- Он принадлежит плану обмена и еще не синхронизирован с другими базами.
- Это элемент справочника, по которому ведется аналитика (например, номенклатура в оборотках).
Для проверки используйте запрос:
ВЫБРАТЬ
Ссылка.Представление КАК Объект,
ВЫРАЗИТЬ(СУММА(Количество) КАК СТРОКА) КАК СсылкиНаНего
ИЗ
РегистрСведений.СсылкиОбъектов КАК Ссылка
ГДЕ
Ссылка.ОбъектСсылка = &ВашаСсылка
СГРУППИРОВАТЬ ПО
Ссылка.Представление
Как ускорить процесс очистки большой базы?
Для баз размером >20 ГБ:
- 📅 Разбейте очистку по периодам: удаляйте объекты, помеченные более года/полугода назад.
- 📂 Очищайте по типам: сначала справочники, затем документы, потом регистры.
- ⏱️ Используйте пакетный режим:
Запрос.ПакетныйРежим = Истина; - 🖥️ Выполняйте на сервере: локальная машина может не справиться с нагрузкой.