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

В этой статье разберём, как полностью удалить объекты из 1С без возможности восстановления, включая справочники, документы и регистры. Методы работают в 1С:Предприятие 8.3 (включая последние релизы) и 8.2, но требуют разных уровней доступа — от прав администратора до прямого доступа к СУБД. Важно: некоторые операции необратимы и могут нарушить целостность данных!

Если вы не уверены в своих действиях — сделайте резервную копию базы перед экспериментами. А теперь перейдём к конкретным способам.

1. Почему 1С не удаляет объекты физически

Архитектура 1С:Предприятие построена на принципе пометки на удаление вместо физического стирания данных. Это сделано для:

  • 🔄 Восстановления — возможность отменить удаление через журнал регистрации или специализированные обработки.
  • 📊 Отчётности — сохранение истории изменений для бухгалтерских и налоговых целей (например, ФНС требует хранить данные 5+ лет).
  • 🔗 Ссылочной целостности — предотвращение "битых" ссылок в связанных документах и регистрах.
  • 🛠️ Технической поддержки — упрощение диагностики проблем при обращении в 1С или франчайзи.

Однако такой подход создаёт проблемы:

  • 🗑️ Раздувание базы — помеченные объекты занимают место на диске и в резервных копиях.
  • 🔍 Утечки данных — конфиденциальная информация (например, уволенных сотрудников) может быть восстановлена.
  • Замедление работы — лишние записи увеличивают время выполнения запросов.

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

📊 С какой целью вы хотите полностью удалить данные в 1С?
Очистка тестовой базы
Удаление конфиденциальной информации
Оптимизация производительности
Исправление ошибок после некорректного удаления
Другое

2. Способ 1: Удаление через "Управление итогами" (для регистров)

Этот метод подходит для регистров накопления, бухгалтерии и расчётов. Он не удаляет сами документы, но очищает их движения, что часто достаточно для освобождения места.

Инструкция:

  1. Откройте меню Администрирование → Обслуживание → Управление итогами.
  2. Выберите нужный регистр (например, РегистрБухгалтерии.Хозрасчетный).
  3. Нажмите Действия → Пометить движения на удаление.
  4. Укажите период (например, с 01.01.2020 по 31.12.2023).
  5. Подтвердите действие и выполните Запись и закрытие.
  6. Запустите регламентное задание Очистка помеченных объектов (через Администрирование → Регламентные операции).

⚠️ Внимание: После очистки итогов восстановить движения будет невозможно! Это повлияет на отчёты (например, оборотно-сальдовую ведомость) за указанный период.

Сделать резервную копию базы

Проверить, что период не пересекается с актуальными данными

Убедиться, что нет блокировок от других пользователей

Предупредить бухгалтерию о временной недоступности отчётов

-->

3. Способ 2: Прямое удаление через SQL-запрос (для опытных)

Если у вас есть доступ к СУБД (например, Microsoft SQL Server или PostgreSQL), можно удалить данные напрямую. Этот метод самый радикальный и требует знания структуры базы.

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

DELETE FROM [dbo].[Document25] WHERE [Deleted] = 1

Где:

  • Document25 — таблица документа (узнать номер можно через конфигуратор в свойствах объекта).
  • Deleted = 1 — флаг пометки на удаление.

⚠️ Внимание: Неправильный SQL-запрос может поломать базу без возможности восстановления! Перед выполнением:

  1. Сделайте полный бэкап базы.
  2. Проверьте запрос на тестовой копии.
  3. Убедитесь, что нет внешних ключей, блокирующих удаление.

Для сложных объектов (например, документов с движениями) может потребоваться удаление из нескольких таблиц. Например, для ЗаказПокупателя нужно очистить:

-- 1. Удаляем движения по регистрам

DELETE FROM [dbo].[AccumRg25] WHERE [Document25_ID_RRef] IN (

SELECT [ID] FROM [dbo].[Document25] WHERE [Deleted] = 1

)

-- 2. Удаляем сам документ

DELETE FROM [dbo].[Document25] WHERE [Deleted] = 1

Как узнать номер таблицы объекта в 1С?

Откройте конфигуратор → найдите объект (например, справочник "Контрагенты") → в палитре свойств посмотрите поле "Имя таблицы" (например, "_Reference16"). В SQL это будет "[dbo].[_Reference16]".

4. Способ 3: Использование обработки "Удаление помеченных объектов"

В стандартных поставках есть обработка для физического удаления помеченных объектов. Она доступна через:

  1. Перейдите в Файл → Открыть.
  2. Выберите файл обработки (обычно находится в каталоге шаблонов, например, C:\Program Files\1cv8\8.3.22.1804\tmplts\1c\Common\DelMarkedObjects.epf).
  3. Запустите обработку и выберите типы объектов для удаления (например, справочники, документы).
  4. Нажмите Выполнить и дождитесь завершения.

Преимущества метода:

  • ✅ Работает без доступа к СУБД.
  • ✅ Сохраняет ссылочную целостность (удаляет связанные объекты каскадно).
  • ✅ Поддерживается официально (есть в дистрибутиве 1С).

Ограничения:

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

💡 Полезный совет: Если обработка "зависает", попробуйте разбить удаление по типам объектов (например, сначала справочники, потом документы).

5. Способ 4: Выгрузка/загрузка с фильтрацией (для сложных случаев)

Этот метод подходит, когда нужно очистить базу от старых данных, оставив только актуальные. Алгоритм:

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

🔹 Когда это оправдано:

  • 📦 Перенос базы на новый сервер с "чистого листа".
  • 🧹 Очистка тестового окружения от мусора.
  • 🔒 Удаление конфиденциальных данных перед передачей базы аудиторам.

⚠️ Внимание: При таком подходе теряются:

  • История изменений объектов.
  • Ссылки между документами (если не перенесены все связанные объекты).
  • Настройки пользователей и права доступа.

📌 Ключевой вывод: Этот способ самый надёжный для гарантированного удаления, но требует много времени и тестирования.

6. Способ 5: Использование внешних утилит (для технических специалистов)

Для avanzado-пользователей есть сторонние инструменты, которые позволяют работать с базой на низком уровне. Популярные утилиты:

Утилита Назначение Особенности
1C:Repair Восстановление и очистка баз Поддерживает физическое удаление помеченных объектов, проверку ссылочной целостности
DBF Viewer Просмотр и редактирование таблиц 1С Позволяет вручную удалять записи из DBF-файлов (для файлового варианта 1С)
SQL Server Management Studio Управление СУБД Для клиент-серверного варианта; требует знания T-SQL
PostgreSQL pgAdmin Администрирование PostgreSQL Аналог SSMS для PostgreSQL-версий 1С

💡 Пример использования 1C:Repair:

  1. Запустите утилиту и подключитесь к базе.
  2. Выберите режим Очистка базы данных.
  3. Отметьте галочки:
    • 🗑️ Удалять помеченные объекты
    • 🔄 Проверять ссылочную целостность
    • 📊 Оптимизировать таблицы
  4. Нажмите Выполнить и дождитесь отчёта.
  5. ⚠️ Внимание: Сторонние утилиты могут конфликтовать с актуальными версиями 1С. Перед использованием проверьте совместимость на сайте разработчика.

    7. Частые ошибки и как их избежать

    При попытке полностью удалить данные в 1С пользователи сталкиваются с типичными проблемами:

    1. Ошибка "Объект используется в другом месте"

    🔹 Причина: На объект есть ссылка из непомеченного документа или регистра.

    🔹 Решение: Используйте обработку Поиск ссылок (входит в стандартную поставку) или запрос:

    ВЫБРАТЬ
    

    Ссылка КАК Объект,

    ВЛАДЕЛЕЦ КАК ГдеИспользуется

    ИЗ

    РегистрСведений.СсылкиОбъектов

    ГДЕ

    Ссылка.Ссылка = &СсылкаНаОбъект

    2. База "зависает" при удалении

    🔹 Причина: Слишком много объектов помечено на удаление или блокировки от других пользователей.

    🔹 Решение: Разбейте удаление на части (например, по 1000 объектов за раз) или выполните операцию в монопольном режиме.

    3. После удаления не освобождается место на диске

    🔹 Причина: В клиент-серверном варианте 1С место освобождается только после Shrink Database в SQL Server.

    🔹 Решение: Выполните в SQL Server Management Studio:

    DBCC SHRINKDATABASE (ИмяБазы, 10)

    Где 10 — процент свободного места, который нужно оставить.

    4. Удалены нужные данные

    🔹 Причина: Ошибка в фильтрах при массовом удалении.

    🔹 Решение: Восстановите базу из бэкапа или используйте Журнал регистрации для отката изменений (если включён).

    📌 Ключевой вывод: Всегда тестируйте операции удаления на копии базы, особенно если работаете с SQL-запросами или сторонними утилитами.

    FAQ: Ответы на частые вопросы

    Можно ли восстановить данные после физического удаления?

    Если данные удалены через SQL или утилиты вроде 1C:Repair — восстановление невозможно без резервной копии. Исключение: если используется транзакционный журнал СУБД (например, в SQL Server с моделью восстановления FULL), но это требует специальных знаний.

    В случае пометки на удаление (стандартный способ) восстановить объекты можно через:

    • Журнал регистрации (Администрирование → Журнал регистрации).
    • Обработку Восстановление помеченных объектов (есть в стандартных поставках).
    • Запрос к таблице объекта с фильтром WHERE Deleted = 1.
Как удалить документ, на который есть ссылки?

Если документ используется в других объектах (например, в реализации ссылаются на заказ), нужно:

  1. Найти все ссылки через обработку Поиск ссылок.
  2. Удалить или переназначить зависимости (например, в реализации указать другой заказ).
  3. Пометить документ на удаление и запустить Очистку помеченных объектов.

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

  • Снять пометку на удаление.
  • Скорректировать движения документа вручную.
  • Использовать документ Корректировка записей регистров.
Почему после удаления через SQL данные всё равно отображаются в 1С?

Это происходит из-за кэширования в 1С. После прямых изменений в СУБД нужно:

  1. Обновить кэш метаданных: Конфигуратор → Администрирование → Тестирование и исправление → Обновить информацию о базе данных.
  2. Перезапустить сеанс 1С (выйти и зайти заново).
  3. Для клиент-серверного варианта — перезапустить службу 1С:Предприятие.

Если данные по-прежнему видны, проверьте:

  • Правильность SQL-запроса (возможно, удалены не все связанные таблицы).
  • Наличие триггеров в СУБД, которые восстанавливают данные.
Как удалить все тестовые данные из базы?

Для полной очистки тестовой базы:

  1. Создайте новую базу с той же конфигурацией.
  2. Перенесите только необходимые справочники (например, Организации, Склады) через Универсальный обмен данными.
  3. Настройте права пользователей и параметры учётной политики.

Альтернативный способ (для опытных):

-- Удаление всех документов (SQL Server)

DELETE FROM [dbo].[Document{XX}] WHERE [Deleted] = 1

-- Очистка регистров накопления

TRUNCATE TABLE [dbo].[AccumRg{XX}]

-- Сброс счётчиков

DBCC CHECKIDENT ('[dbo].[Document{XX}]', RESEED, 1)

⚠️ После таких операций потребуется пересчёт итогов (Администрирование → Обслуживание → Пересчёт итогов).

Можно ли отключить пометку на удаление и сделать удаление физическим?

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

Однако можно:

  • 🔧 Модифицировать конфигурацию — добавить обработчики событий, которые будут физически удалять данные из таблиц при пометке. Это требует знания 1С:Предприятие и может нарушить поддержку.
  • 🗑️ Использовать внешние утилиты (например, 1C:Repair) для периодической очистки.
  • 📤 Настроить автоматическую архивацию старых данных в отдельную базу с последующим удалением из основной.