Удаление помеченных на удаление объектов в 1С 8.3

· 10 мин

Содержание

Пометка на удаление сама по себе ничего не удаляет. Документ или элемент справочника с красным крестиком остаётся в базе, участвует в поиске ссылок и занимает место — он просто ждёт физического удаления. Чтобы объекты действительно исчезли, запускают отдельную обработку: в «Бухгалтерии 8.3», ЗУП и других управляемых конфигурациях это Администрирование → Обслуживание → Удаление помеченных объектов.

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

Что означает пометка на удаление

Пометка — это обратимый флаг «кандидат на удаление». Нажали Del на строке списка или выбрали в меню команду пометки — у объекта появился значок с красным крестом. Снять флаг так же просто: повторная команда «Снять пометку на удаление» возвращает объект в обычное состояние.

Почему нельзя удалять сразу, одной кнопкой:

  • 📌 На объект могут ссылаться другие документы. Удалить его молча — значит получить «битые» ссылки и ошибки в отчётах.
  • 📌 Пометка даёт время передумать. Пока физического удаления не было, всё восстановимо.
  • 📌 Удаление — тяжёлая операция с проверкой целостности. Её логично делать пакетом, а не на каждый объект.

Отдельный момент с проведёнными документами. Когда вы помечаете на удаление проведённый документ, платформа предложит отменить его проведение — иначе в базе остались бы движения по регистрам от объекта, который готовится к удалению. Соглашайтесь: движения снимутся, остатки и обороты пересчитаются. Если пометку потом снять, документ придётся провести заново.

Помеченные объекты продолжают участвовать в работе базы: они видны в списках, доступны для выбора и попадают в поиск ссылок. Чтобы случайно не выбрать «кандидата на удаление» в новый документ, в большинстве списков есть настройка показа — через Ещё → Настроить список можно включить отбор, скрывающий помеченные строки.

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

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

Стандартный путь в «Бухгалтерии предприятия 3.0», ЗУП 3.1 и «Управлении торговлей 11» одинаков по смыслу, меню верхнего уровня совпадает:

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

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

  • Включите его один раз: Главное меню → Сервис → Параметры → галочка Отображать команду «Все функции».
  • Затем Главное меню → Все функции → Стандартные → Удаление помеченных объектов.

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

Перед первой массовой чисткой большой рабочей базы сделайте резервную копию. Восстановить одну копию проще, чем разбирать последствия ошибочной пометки на сотни документов.

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

Чем именно полезно разбирать итог, а не только «удалить всё автоматически»: в автоматическом режиме неудаляемые объекты молча остаются в базе, и вы не всегда заметите, что половина помеченного так и не ушла. Выборочный режим с просмотром списка ссылок даёт полную картину.

Групповая пометка и удаление нескольких объектов

Чтобы не ходить по одному объекту, пометку ставят пачкой прямо в списке:

  1. Откройте список (например, журнал документов или справочник номенклатуры).
  2. Выделите нужные строки: с зажатым Ctrl — вразнобой, с Shift — диапазон.
  3. Вызовите команду Пометить на удаление / Снять пометку из командной панели списка или из контекстного меню по правой кнопке.
  4. Подтвердите. У всех выделенных строк появится крестик.

Дальше — та же обработка Удаление помеченных объектов. В режиме выборочного удаления удобно отобрать именно эту группу: отсортируйте список помеченных по типу объекта или по дате и отметьте нужное.

Безопасная массовая чистка базы
Выполнено: 0 / 5

Полезный приём для разовой большой уборки: сначала пройдите выборочным режимом и посмотрите, сколько объектов «застряло» на ссылках. Это покажет масштаб ручной работы ещё до того, как вы запустите автоматическое удаление.

Почему объект не удаляется

Главная причина одна: на помеченный объект ссылается другой объект, который на удаление не помечен. Платформа не станет рвать связь и оставит «кандидата» в базе. В отчёте обработки вы увидите строку вида «на объект есть ссылки» и список, где именно он используется.

Разберём типичные ситуации и что с ними делать.

Диагностика: выберите симптом

Удобный инструмент для ручного разбора — команда Ещё → Связанные документы или отчёт по движениям: они показывают, какие документы и регистры держат объект. Ещё точнее работает стандартная команда поиска ссылок: открыв объект, через Ещё можно запросить список всех мест, где он используется, и переходить по ним прямо из результата. Разорвав последнюю ссылку, снова запускайте удаление — теперь объект уйдёт.

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

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

Раздел для тех, кто автоматизирует обслуживание. Сразу о главном: прямое удаление данных через SQL в таблицах 1С не поддерживается и ломает базу. Платформа хранит объект сразу в нескольких таблицах, ведёт итоги регистров и контроль ссылок. DELETE в СУБД мимо платформы оставит висящие ссылки, разъедет итоги и приведёт к ошибкам, которые потом правят только из резервной копии. Консоль запросов для этого тоже не годится — язык запросов 1С умеет только читать данные, удалять им нельзя.

Правильный способ — встроенный язык. Платформа даёт два метода, которые вместе повторяют логику стандартной обработки:

// Собираем все помеченные на удаление объекты
МассивПомеченных = НайтиПомеченныеНаУдаление();

// Контролируемое удаление с проверкой ссылок
УдалитьОбъекты(МассивПомеченных);

НайтиПомеченныеНаУдаление() возвращает массив ссылок на все помеченные объекты. УдалитьОбъекты() удаляет их с той же проверкой целостности, что и стандартная обработка: объекты, на которые есть ссылки, останутся в базе. Этот код оформляют как внешнюю обработку и запускают из Файл → Открыть.

Если нужно удалить объект, у которого вы заведомо убрали все ссылки, но платформа всё равно держит его из-за служебной связи, применяют Объект.Удалить() без контроля ссылок. Это небезопасно: метод удаляет молча, не проверяя, кто ссылается на объект. Используйте его только когда точно понимаете последствия.

Если нужно почистить не всё подряд, а помеченные объекты одного вида, массив фильтруют по типу ссылки перед удалением — например, оставляют только элементы конкретного справочника. Так регламентное задание не трогает документы, которые вы хотите разбирать вручную.

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

Автоматизация и регламентная чистка

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

Схема такая:

  1. Оформите код из предыдущего раздела как внешнюю обработку с методом, вызываемым из регламентного задания.
  2. В конфигураторе (или в расширении, чтобы не снимать базу с поддержки) создайте регламентное задание со своим методом.
  3. Задайте расписание на период минимальной нагрузки — ночь или выходные.
  4. Для клиент-серверной базы регламентные задания выполняет сервер; проверьте, что их выполнение не отключено в консоли кластера.

Безопаснее не удалять автоматически, а раз в период запускать обработку в выборочном режиме вручную и смотреть на список застрявших по ссылкам объектов. Автоудаление уберёт только «чистые» объекты и так же молча оставит все спорные — а вы об этом не узнаете.

Чего в регламентной чистке делать не стоит:

  • ❌ Не ставьте удаление помеченных объектов на дневное время — вырастет вероятность, что часть объектов не удалится из-за активности пользователей.
  • ❌ Не комбинируйте автоудаление с автопометкой «старых» документов без ручной проверки: так легко пометить и снести нужное.
  • ❌ Не трогайте таблицы базы напрямую никакими внешними SQL-скриптами.

Отличия в файловой и клиент-серверной базе

Сам порядок действий одинаков, но пара деталей зависит от типа базы.

ЧтоФайловая базаКлиент-серверная база
Где выполняется обработкаВ вашем клиентском сеансеНа сервере 1С
Удобное времяКогда вы в базе одниПериод низкой активности; монополия не нужна
Регламентные заданияРаботают, пока открыт клиентВыполняет сервер по расписанию
Освобождение места на дискеНе сразу; помогает реструктуризацияЗависит от обслуживания СУБД

После большого удаления размер файловой базы 1Cv8.1CD сам не уменьшается — физически место освобождает Конфигуратор → Администрирование → Тестирование и исправление с включённым пунктом сжатия таблиц информационной базы. Эту операцию делают строго в монопольном режиме и после резервной копии.

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

Частые вопросы

Можно ли восстановить физически удалённый объект?
Нет. После завершения обработки «Удаление помеченных объектов» данные стираются из базы. Вернуть их можно только из резервной копии, сделанной до удаления. Пока объект просто помечен крестиком — он восстановим снятием пометки.
Чем «пометить на удаление» отличается от «удалить непосредственно»?
Пометка — обратимый флаг, объект остаётся в базе. Непосредственное удаление (Объект.Удалить() в коде или право «интерактивное удаление») стирает объект сразу и без проверки ссылок. В обычной работе пользуются именно пометкой и последующей обработкой.
Удаление помеченных объектов требует монопольного режима?
В актуальных версиях платформы 8.3 — нет, обработка работает в многопользовательском режиме. Но объекты, на которые во время чистки создаются новые ссылки из других сеансов, не удалятся. Поэтому запускайте её при минимальной активности.
Как массово снять пометку на удаление?
Выделите помеченные строки в списке (Ctrl или Shift) и вызовите ту же команду Пометить на удаление / Снять пометку — для уже помеченных объектов она снимает флаг. Отдельной «кнопки отмены всего» нет.
Почему после удаления база не уменьшилась в размере?
Физическое место на диске СУБД освобождается не сразу. Для файловой базы помогает Тестирование и исправление с реструктуризацией, для клиент-серверной — регламентные операции обслуживания на стороне СУБД (например, сжатие/перестроение индексов).