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

Помеченные объекты — это не просто "мусор", который можно бесследно стереть. За каждым таким элементом могут стоять связанные документы, регистры или даже транзакции, критичные для отчетности. Поэтому перед удалением важно понимать механизм пометки, отличать логическое удаление от физического, и знать, когда можно обойтись штатными средствами, а когда потребуется вмешательство в конфигурацию или прямые SQL-запросы.

В этой инструкции мы рассмотрим:

  • 🔹 Чем отличается пометка на удаление от полного стирания данных
  • 🔹 Как найти и просмотреть все помеченные объекты в базе
  • 🔹 Стандартные и альтернативные способы удаления (включая 1С:Предприятие 8.3 и 1С:Управление торговлей 11)
  • 🔹 Типичные ошибки и как их избежать
  • 🔹 Работа с помеченными объектами через консоль запросов и внешние обработки

Пометка на удаление vs. физическое удаление: в чем разница

В 1С:Предприятие существует два принципиально разных подхода к удалению данных:

  1. Пометка на удаление — объект остается в базе, но становится невидимым для пользователей (если не включен режим отображения помеченных). Все ссылки на него сохраняются, что позволяет восстановить данные при необходимости. Этот метод используется по умолчанию в большинстве конфигураций (Бухгалтерия 3.0, Зарплата и Управление Персоналом 3.1 и др.).
  2. Физическое удаление — объект безвозвратно стирается из базы данных. Этот способ применяется реже, так как может нарушить целостность данных, если на объект существуют ссылки из других таблиц.

Основное преимущество пометки — сохранение ссылочной целостности. Например, если вы пометили на удаление документ Поступление товаров, но в базе остались ссылки на него в регистрах накопления или расходных ордерах, система не позволит физически удалить объект, пока эти связи не будут разорваны. Это защищает от случайного удаления критичных данных.

Однако у такого подхода есть и минусы:

  • 📉 Помеченные объекты занимают место в базе и могут замедлять работу при большом их количестве.
  • 🔍 Их сложно отследить без специальных отчетов (особенно в крупных базах с тысячами документов).
  • 🔄 При обмене данными помеченные объекты могут передаваться в другие системы, если это не запрещено настройками.
📊 Как часто вы очищаете базу 1С от помеченных объектов?
Раз в месяц
Раз в квартал
Только при замедлении работы
Никогда не очищаю

Как найти помеченные на удаление объекты

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

Способ 1: Стандартный отчет "Помеченные на удаление"

В большинстве типовых конфигураций (1С:Бухгалтерия, 1С:УТ, 1С:ERP) есть встроенный отчет для поиска помеченных объектов:

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

Отчет покажет список объектов с указанием типа (документ, справочник, регистр и т.д.), даты пометки и пользователя, который выполнил действие.

Способ 2: Поиск через "Все функции"

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

  1. Откройте меню Все функции (обычно доступно через кнопку с тремя точками в правом верхнем углу или по горячей клавише Ctrl+Shift+F).
  2. Введите в поиске фразу помеченные на удаление.
  3. Выберите подходящую обработку или отчет из результатов.

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

  1. Откройте нужный справочник или журнал документов.
  2. Нажмите Еще → Настройки списка.
  3. Поставьте галочку Показывать помеченные на удаление.
💡

Если в вашей конфигурации нет стандартного отчета, можно скачать внешнюю обработку для поиска помеченных объектов с сайта Инфостарт или 1С-Сообщество. Например, обработка "Поиск и удаление помеченных объектов" работает почти во всех типовых конфигурациях.

Стандартные способы удаления помеченных объектов

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

Метод 1: Удаление через отчет "Помеченные на удаление"

Если вы использовали стандартный отчет для поиска, то прямо из него можно инициалировать удаление:

  1. Откройте отчет Помеченные на удаление и сформируйте его.
  2. Выделите нужные объекты (или нажмите Выделить все).
  3. Нажмите кнопку Удалить помеченные (в некоторых версиях — Очистить помеченные).
  4. Подтвердите действие.

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

Метод 2: Удаление через журнал документов

Для документов (например, Реализация товаров, Поступление на расчетный счет) можно использовать журнал:

  1. Откройте журнал нужного типа документов (например, Продажи → Реализация товаров и услуг).
  2. Включите отображение помеченных объектов (как описано выше).
  3. Выделите помеченные документы и нажмите Действия → Удалить помеченные.

Этот способ удобен, если нужно очистить только один тип документов.

Метод 3: Регламентное задание "Очистка помеченных объектов"

В конфигурациях на базе 1С:Предприятие 8.3 (например, 1С:ERP или 1С:УТ 11) есть регламентное задание для автоматической очистки. Чтобы его настроить:

  1. Перейдите в Администрирование → Поддержка и обслуживание → Регламентные задания.
  2. Найдите задание Очистка помеченных объектов (или создайте новое).
  3. Укажите расписание (например, раз в неделю) и параметры очистки.
  4. Сохраните и запустите.

Преимущество этого метода — автоматизация: не нужноremember вручную запускать удаление. Однако он подходит только для регулярной очистки, а не для разовых операций.

Проверьте, что на объекты нет активных ссылок из других документов

Создайте резервную копию базы (обязательно!)

Убедитесь, что у вас есть права на удаление (роль "Администратор" или аналогичная)

Закройте все сеансы пользователей, работающих с базой-->

Удаление помеченных объектов через консоль запросов

Если стандартные методы не сработали (например, из-за ошибок в базе или ограничений конфигурации), можно воспользоваться консолью запросов. Этот способ требует знания языка 1С:Запросы и осторожности, так как неправильный запрос может повредить данные.

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

Чтобы найти все помеченные документы типа Документ.РеализацияТоваровУслуг, используйте запрос:

ВЫБРАТЬ

РеализацияТоваровУслуг.Ссылка КАК Ссылка,

РеализацияТоваровУслуг.Дата КАК Дата,

РеализацияТоваровУслуг.Номер КАК Номер

ИЗ

Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

ГДЕ

РеализацияТоваровУслуг.ПометкаУдаления = ИСТИНА

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

Для физического удаления помеченных документов (если это разрешено конфигурацией) можно использовать:

ДЛЯ КАЖДОГО ТЕКСсылка ИЗ

(ВЫБРАТЬ

РеализацияТоваровУслуг.Ссылка КАК Ссылка

ИЗ

Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

ГДЕ

РеализацияТоваровУслуг.ПометкаУдаления = ИСТИНА)

ЦИКЛ

ТЕКОбъект = ТЕКСсылка.ПолучитьОбъект();

ТЕКОбъект.Удалить();

КОНЕЦЦИКЛА;

⚠️ Внимание: Перед выполнением такого запроса обязательно:

  • 🔐 Создайте резервную копию базы.
  • 🛑 Проверьте, что на объекты нет ссылок из других таблиц (используйте запрос с ВЫБРАТЬ РАЗРЕШЕННЫЕ).
  • 👥 Убедитесь, что в базе нет активных пользователей.

Если при выполнении запроса появляется ошибка "Объект используется в другой транзакции", значит, на объект есть ссылки, и его нельзя удалить без предварительной очистки зависимостей.

Как проверить ссылки на объект перед удалением?

Используйте запрос вида:

ВЫБРАТЬ РАЗРЕШЕННЫЕ

Метаданные.Имя КАК Таблица,

СЧЕТЧИК() КАК КоличествоСсылок

ИЗ

&Таблица КАК Объект

ГДЕ

Объект.СсылкаНаОбъект = &СсылкаНаУдаляемыйОбъект

Где &Таблица — имя таблицы, в которой может быть ссылка, а &СсылкаНаУдаляемыйОбъект — ссылка на объект, который вы хотите удалить. Этот запрос покажет все таблицы, где есть ссылки на ваш объект.

Ошибки при удалении помеченных объектов и их решения

Даже при использовании стандартных методов пользователи часто сталкиваются с ошибками. Рассмотрим самые распространенные и способы их устранения.

Ошибка Причина Решение
"Объект помечен на удаление и не может быть изменен" Попытка редактировать или провести помеченный документ. Снимите пометку на удаление (Действия → Снять пометку удаления) или удалите объект полностью.
"Нарушение ссылочной целостности" На объект есть ссылки из других таблиц (например, в регистрах или документах). Найдите и удалите все зависимости или используйте обработку для принудительного удаления (с риском нарушить учет).
"Недостаточно прав для удаления" У пользователя нет роли с правом на удаление объектов. Зайдите под администратором или добавьте право УдалениеПомеченныхОбъектов в роль пользователя.
"Операция невозможна в транзакции" Попытка удалить объект внутри незавершенной транзакции. Закройте все открытые транзакции или выполните удаление вне транзакционного блока.

Если ошибка не устраняется стандартными способами, попробуйте:

  1. Выполнить Тестирование и исправление базы (Администрирование → Тестирование и исправление).
  2. Использовать внешнюю обработку для принудительного удаления (например, "Универсальная очистка помеченных объектов" с Инфостарта).
  3. Обратиться к программисту для написания индивидуального скрипта.
💡

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

Удаление помеченных объектов в SQL-базе (для опытных пользователей)

В некоторых случаях (например, при повреждении базы или необходимости массовой очистки) приходится работать напрямую с SQL-сервером. Этот метод требует знания структуры базы данных и должен выполняться только администратором.

⚠️ Внимание: Неправильные действия с SQL могут безвозвратно повредить базу. Перед любыми манипуляциями:

  • 🔄 Создайте полный бэкап базы.
  • 🛑 Остановите все сеансы .
  • 📝 Задокументируйте все изменения.

Пример SQL-запроса для поиска помеченных объектов

Чтобы найти все помеченные документы в базе на Microsoft SQL Server, используйте запрос:

SELECT

T1._Reference_ID,

T1._Date_Time,

T1._Number

FROM

_Document123 T1 -- где 123 - внутренний идентификатор типа документа

WHERE

T1._Marked = 1

Чтобы узнать внутренний идентификатор типа документа, выполните:

SELECT _IDRRef, _Description FROM _Reference13

Пример SQL-запроса для удаления помеченных объектов

Для физического удаления помеченных записей из таблицы документов:

DELETE FROM _Document123

WHERE _Marked = 1

После удаления необходимо обновить служебные таблицы :

EXEC sp_MSforeachtable 'UPDATE ? SET _Marked = 0 WHERE _Marked = 1'

⚠️ Внимание: Удаление напрямую через SQL не обновляет служебные индексы 1С. После таких операций обязательно выполните:

  1. Тестирование и исправление базы в .
  2. Пересчет итогов (Администрирование → Обслуживание → Пересчет итогов).
BEGIN TRANSACTION;

-- Ваши DELETE-запросы

-- Проверка результатов

COMMIT TRANSACTION;

Это позволит откатить изменения, если что-то пойдет не так.-->

Автоматизация удаления помеченных объектов

В крупных базах с тысячами помеченных объектов ручная очистка неэффективна. Рассмотрим способы автоматизации.

Способ 1: Регламентное задание

Как уже упоминалось, в 1С:Предприятие 8.3 есть встроенное регламентное задание Очистка помеченных объектов. Его можно настроить на:

  • 🕒 Ежедневную очистку (например, в 3 часа ночи).
  • 📅 Еженедельную очистку по расписанию.
  • 🔄 Очистку только определенных типов объектов (например, только справочников Контрагенты).

Чтобы настроить задание:

  1. Перейдите в Администрирование → Поддержка и обслуживание → Регламентные задания.
  2. Найдите задание Очистка помеченных объектов или создайте новое.
  3. Укажите параметры:
    • Типы объектов для очистки.
    • Периодичность выполнения.
    • Пользователя, от имени которого будет выполняться задание.
  • Сохраните и активируйте задание.
  • Способ 2: Внешняя обработка с гибкими настройками

    На сайтах Инфостарт и 1С-Сообщество есть готовые обработки для автоматической очистки, например:

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

    Преимущества внешних обработок:

    • 🔍 Более гибкие настройки, чем в стандартных отчетах.
    • 📊 Возможность предварительного анализа зависимостей.
    • 📝 Логирование действий для отчетности.

    Способ 3: Скрипт на встроенном языке

    Для опытных пользователей можно написать скрипт на 1С:Предприятие, который будет:

    1. Автоматически искать помеченные объекты старше определенной даты.
    2. Проверять их на наличие зависимостей.
    3. Удалять объекты, которые можно безопасно очистить.
    4. Отправлять отчет по email администратору.

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

    Процедура ОчиститьПомеченнуюНоменклатуру()
    

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ

    | Номенклатура.Ссылка КАК Ссылка

    |ИЗ

    | Справочник.Номенклатура КАК Номенклатура

    |ГДЕ

    | Номенклатура.ПометкаУдаления = ИСТИНА

    | И Номенклатура.ДатаПометкиУдаления < &ДатаГраница";

    Запрос.УстановитьПараметр("ДатаГраница", ТекущаяДата() - 30); // Удаляем объекты старше 30 дней

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл

    Объект = Выборка.Ссылка.ПолучитьОбъект();

    Попытка

    Объект.Удалить();

    Исключение

    Сообщить("Ошибка при удалении: " + ОписаниеОшибки());

    КонецПопытки;

    КонецЦикла;

    КонецПроцедуры

    💡

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

    Частые вопросы по удалению помеченных объектов в 1С

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

    Нет, после физического удаления объект восстановить невозможно (если не было резервной копии базы). Пометка на удаление, в отличие от физического удаления, позволяет восстановить объект через Действия → Снять пометку удаления.

    Почему после удаления помеченных объектов база не уменьшилась в размере?

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

    1. Оптимизацию базы (Администрирование → Обслуживание → Оптимизация базы данных).
    2. Пересоздание индексов (для SQL-баз).
    3. Упаковку файловой базы (Тестирование и исправление → Упаковать базу).
    Как удалить помеченные объекты, если на них есть ссылки?

    Если система не позволяет удалить объект из-за ссылок, у вас есть несколько вариантов:

    1. Найти и удалить все зависимости вручную (через отчеты или запросы).
    2. Использовать внешнюю обработку, которая автоматически разрывает связи (например, "Очистка ссылок" с Инфостарта).
    3. Обратиться к программисту для написания скрипта, который перенаправит ссылки на другие объекты.
    4. Если объект некритичен, оставить его помеченным (физическое удаление не обязательно).

    ⚠️ Удаление зависимостей без анализа может привести к ошибкам в учете!

    Как запретить пользователям помечать объекты на удаление?

    Чтобы ограничить права на пометку удаления:

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

    Что делать, если при удалении помеченных объектов появляется ошибка "Объект заблокирован"?

    Ошибка "Объект заблокирован" означает, что:

    • 🔒 Объект используется в другой сессии (кто-то открыл его для редактирования).
    • 🔄 Объект участвует в незавершенной транзакции.
    • 🛡️ На объект наложена блокировка на уровне СУБД.

    Решения:

    1. Закройте все сеансы и повторите попытку.
    2. Проверьте активные транзакции в SQL Server Management Studio (для SQL-баз).
    3. Перезапустите службу 1С:Предприятие.
    4. Если блокировка сохраняется, обратитесь к администратору базы данных.