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

· 9 мин

Содержание

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

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

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

Когда вы выделяете документ или элемент справочника и жмёте Del (или выбираете в контекстном меню Пометить на удаление / Снять пометку), объект получает перечёркнутую пиктограмму. Это обратимая операция: запись никуда не делась, её можно восстановить тем же пунктом меню.

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

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

  • 🔗 На документ или справочник могут ссылаться десятки других объектов — проводки, движения регистров, другие документы.
  • 🧮 Прямое удаление без проверки оставило бы в базе «висящие» ссылки — обращения к несуществующим данным.
  • ↩️ Пометка даёт возможность передумать: пока объект только помечен, его легко вернуть.

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

Выбрать подходящий способ поможет короткое дерево решений.

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

Коротко все способы в одной таблице:

СпособКогда применятьКонтроль ссылокМонопольный доступ
Обработка в ПредприятииПовседневная чисткаДаНет
КонфигураторБольшие объёмы, плановая паузаДаДа
Программно Удалить()Нетиповые разовые задачиНетЗависит от задачи
Регламентное заданиеРегулярная авточисткаДаНет
Прямой SQL к таблицамНе применять——

Дальше — каждый способ по шагам.

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

Это основной и безопасный способ. Подходит для «1С:Бухгалтерии» 3.0, «ЗУП» 3.1, «Управления торговлей» 11 и других типовых конфигураций на управляемых формах.

Порядок действий:

  1. Откройте раздел Администрирование. В «Бухгалтерии» 3.0 нужный пункт лежит в Администрирование → Обслуживание → Удаление помеченных объектов. В «ЗУП» и «УТ» раздел может называться НСИ и администрирование, дальше — та же группа Обслуживание.
  2. Выберите режим: Автоматическое удаление всех помеченных объектов или Выборочное. При выборочном откроется список всех помеченных записей — снимите галочки с тех, что пока трогать не нужно.
  3. Нажмите Удалить. Программа запустит контроль ссылочной целостности: проверит, не ссылается ли на удаляемые объекты что-то ещё.
  4. Если препятствий нет — объекты удаляются, в конце выводится отчёт о количестве.
  5. Если препятствия есть — появится список объектов, которые мешают. Что с ним делать, разберём в следующем разделе.

Перед массовым удалением сделайте резервную копию базы (Администрирование → Обслуживание → Резервное копирование или выгрузка .dt в Конфигураторе). Отменить физическое удаление штатными средствами уже нельзя — только восстановлением из копии.

Короткий чек-лист подготовки, чтобы не удалить лишнего:

Перед массовым удалением помеченных объектов
Выполнено: 0 / 4

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

Самая частая ситуация: программа отказывается удалять часть объектов и показывает список «Объекты, препятствующие удалению». Это значит, что на помеченную запись ссылается другая, непомеченная.

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

Как разобраться:

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

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

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

Если нужно заранее понять, кто ссылается на конкретный объект, не запуская удаление, используйте типовую обработку поиска и замены ссылок или команду Ещё → Связанные документы / Перейти → ... в форме самого объекта. Это даёт картину зависимостей до того, как вы начнёте чистку, и экономит время на разборе препятствий.

Не снимайте пометку с объекта, чтобы «обойти» препятствие. Проблема не в помеченной записи, а в той, что на неё ссылается. Пока ссылка жива, удаление всё равно не пройдёт.

Удаление через Конфигуратор в монопольном режиме

Когда помеченных объектов очень много или штатная обработка в Предприятии «подвисает» на большой базе, удаление запускают из Конфигуратора. Пункт — Администрирование → Удаление помеченных объектов.

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

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

Порядок:

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

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

Логика работы с препятствиями здесь та же: если на объект есть ссылки, Конфигуратор покажет их список, и разбираться с ними придётся так же, как описано выше. Монопольный режим сам по себе ссылки не отменяет.

Программное удаление для продвинутых

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

В коде есть два варианта:

  • УстановитьПометкуУдаления(Истина) — ставит пометку, но не удаляет. По сути то же, что крестик вручную.
  • Удалить() — непосредственное удаление, в обход контроля ссылочной целостности. Запись пропадает сразу, даже если на неё кто-то ссылается.

Именно поэтому прямой Удалить() опасен: он оставляет в базе битые ссылки. Применять его стоит, только когда вы точно знаете, что объект больше нигде не используется, и обычно — в паре с отдельной проверкой ссылок через НайтиПоСсылкам.

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

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

Клиент-серверная база: почему не чистят через SQL

В клиент-серверном варианте (сервер 1С + СУБД MS SQL или PostgreSQL) возникает соблазн удалить данные прямым SQL-запросом к таблицам. Так делать нельзя.

Причины:

  • Один объект 1С хранится сразу в нескольких таблицах СУБД (сам объект, его движения по регистрам, табличные части). Удалив строку из одной таблицы, вы оставите «обрезки» в остальных.
  • Структура таблиц 1С не документирована и меняется между релизами — запрос, написанный под одну версию, сломает данные в другой.
  • Прямое вмешательство в СУБД не поддерживается и легко приводит к неработоспособной базе.

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

  • Тестирование и исправление в Конфигураторе (Администрирование → Тестирование и исправление) — пересчёт итогов, реструктуризация, проверка логической целостности. Требует монопольного доступа.
  • Для файловой базы — утилиту chdbfl (проверка физической целостности файла 1Cv8.1CD).
  • На стороне СУБД — штатное обслуживание (переиндексация, обновление статистики, при необходимости — сжатие), которое выполняет администратор СУБД.

Тестирование и исправление и обслуживание СУБД тоже запускают в монопольном режиме или с остановкой сервиса. Это плановые работы для нерабочего времени, а не ежедневная операция.

Автоматизация: удаление по расписанию

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

Где настроить:

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

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

В клиент-серверной базе регламентные задания выполняет сервер 1С, расписание отрабатывает без запущенного клиента. В файловой базе задание сработает, только пока у кого-то открыто Предприятие, — на ночь такую базу специально не оставляют запущенной, поэтому в файловом варианте авточистку чаще запускают вручную по итогам недели.

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

Частые ошибки

Короткий разбор того, на чём спотыкаются чаще всего — без повтора шагов выше.

  • 🗑️ Путают пометку и удаление. Поставили крестик и думают, что база очищена. Нет: помеченные объекты лежат в базе, пока не выполнено физическое удаление.
  • 💾 Удаляют без резервной копии. Отмены у физического удаления нет. Копия перед массовой чисткой обязательна.
  • 👥 Запускают монопольные операции в рабочее время. Удаление в Конфигураторе и тестирование с исправлением оборвут сеансы пользователей. Только нерабочее время.
  • 🧨 Лезут в SQL напрямую. Прямое удаление из таблиц СУБД портит базу. Чистят только штатным механизмом.
  • 🔁 Снимают пометку, чтобы «починить» препятствие. Если объект не удаляется из-за ссылки, снятие пометки не поможет — нужно разобраться с тем, кто ссылается.
Можно ли вернуть объект после физического удаления?
Штатными средствами — нет. Восстановить получится только из резервной копии, сделанной до удаления. Пока объект лишь помечен (крестик), его легко вернуть пунктом «Снять пометку».
Почему часть объектов удалилась, а часть — нет?
Удалились те, на которые никто не ссылается. Оставшиеся держат ссылки из других, непомеченных объектов. Их список программа показывает в окне «Объекты, препятствующие удалению».
Нужны ли особые права, чтобы удалять помеченные объекты?
Да, операция доступна пользователям с правами администратора или с соответствующей ролью. Рядовому пользователю обычно доступна только сама пометка.
Освободится ли место на диске сразу после удаления?
В файловой базе размер файла 1Cv8.1CD уменьшится не сразу — место помечается как свободное и переиспользуется. Чтобы реально сжать базу, запускают тестирование и исправление. В клиент-серверной — обслуживание средствами СУБД.
Сработает ли автоматическое удаление, если у объекта есть ссылки?
Нет. Регламентное задание пропустит такой объект и попробует удалить его при следующем запуске, когда ссылок не останется. Это защищает базу от битых ссылок.