К статье
Практический материал

Администрирование · 10 мин

Как удалить строки, помеченные на удаление в 1С

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

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

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

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

Как работает механизм пометки на удаление

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

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

Как пометить объект на удаление

Для одиночного объекта откройте его в списке, выделите строку и нажмите клавишу Delete или кнопку «Пометить на удаление» в меню «Ещё». В списках документов пометка ставится аналогично; проведённый документ при этом будет распроведён. Повторное нажатие снимает пометку — объект восстанавливается.

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

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

Основной инструмент — обработка «Удаление помеченных объектов». В типовых конфигурациях на управляемых формах она находится в разделе «Администрирование» → «Обслуживание» → «Удаление помеченных объектов». В обычных формах (например, старые редакции) путь: «Операции» → «Удаление помеченных объектов».

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

Порядок действий
  1. 1
    Сделайте резервную копию базы
  2. 2
    Завершите работу всех пользователей или дождитесь монопольного доступа
  3. 3
    Откройте «Администрирование» → «Удаление помеченных объектов»
  4. 4
    Выберите режим: автоматический или выборочный
  5. 5
    Запустите удаление и дождитесь отчёта о результате
  6. 6
    Разберите объекты, которые не удалось удалить из-за ссылок
  7. 7
    Повторно запустите удаление для оставшихся объектов

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

Что делать, если объект не удаляется из-за ссылок

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

Первый — пометить на удаление и ссылающиеся объекты, если они тоже не нужны (например, ошибочно созданные документы). Второй — открыть ссылающийся объект и заменить ссылку на актуальное значение или очистить поле. Третий — оставить объект в базе, сняв с него пометку, если данные ещё нужны для истории и отчётности.

Маршрут решения

Как выбрать действие

Ссылающийся документ тоже ошибочный и не нуженПометьте его на удаление и повторите удаление
Документ нужен, но ссылка в нём невернаОткройте документ и замените ссылку на правильный объект
Объект нужен для истории и отчётовСнимите пометку на удаление и оставьте объект в базе
Ссылок очень много и они однотипныеИспользуйте обработку поиска и замены значений

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

Удаление строк в табличной части документа

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

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

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

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

МассивПомеченных = НайтиПомеченныеНаУдаление();

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

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

bsl
МассивПомеченных = НайтиПомеченныеНаУдаление();
УдалитьОбъекты(МассивПомеченных);

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

Типичные ошибки и ограничения

Типичные ошибки
01
Запуск удаления без резервной копии — при ошибке восстановить данные невозможно
02
Попытка удалить в не-монопольном режиме — операция прерывается ошибкой
03
Удаление «вслепую» в автоматическом режиме — вместе с мусором уходят нужные объекты, помеченные ранее другими пользователями
04
Игнорирование списка ссылок — объект остаётся в базе, а пользователь считает, что удалил его
05
Программное удаление методом Удалить() без проверки ссылок — нарушение целостности базы

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

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

Контрольные точки

Как проверить результат

Повторный запуск обработки удаления
Норма

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

Тревожный признак

Те же объекты снова в списке без видимых причин

Поиск объекта в списке справочника
Норма

Объект не находится даже с отбором по помеченным

Тревожный признак

Объект по-прежнему отображается с пометкой

Отчёты и движения документов
Норма

Данные удалённых документов исключены из оборотов

Тревожный признак

В отчётах остались «битые» ссылки вида <Объект не найден>

Часто задаваемые вопросы

Можно ли восстановить объект после пометки на удаление?

Да, пока не выполнено физическое удаление. Выделите помеченный объект и повторно нажмите Delete или кнопку снятия пометки — объект полностью восстановится вместе со своими данными.

Почему обработка требует монопольный режим?

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

Что делать с «битыми» ссылками вида «Объект не найден»?

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

Как удалить помеченные объекты в клиент-серверной базе, где работают пользователи?

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

Удаляются ли движения документа при его удалении?

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

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

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

Итог

Что важно запомнить

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