Удаление помеченных на удаление объектов в 1С 8.3
Содержание
Помеченные на удаление объекты убирают в режиме Предприятия через раздел Администрирование → Обслуживание → Удаление помеченных объектов. Там же программа проверяет, не ссылается ли кто-то на удаляемые данные, и либо чистит базу сразу, либо показывает список того, что мешает. Пометка на удаление — это только «красный крестик» на документе или элементе справочника: сама запись остаётся в базе, занимает место и попадает в некоторые выборки, пока вы не выполните физическое удаление.
Ниже — все рабочие способы: штатный в Предприятии, через Конфигуратор с монопольным доступом, программный для продвинутых и что делать в клиент-серверной базе. Разберём, почему объект иногда «не удаляется», как настроить автоматическую чистку по расписанию и каких ошибок не допустить.
Чем пометка на удаление отличается от удаления
Когда вы выделяете документ или элемент справочника и жмёте Del (или выбираете в контекстном меню Пометить на удаление / Снять пометку), объект получает перечёркнутую пиктограмму. Это обратимая операция: запись никуда не делась, её можно восстановить тем же пунктом меню.
Физическое удаление — отдельный шаг. Его выполняет администратор или пользователь с правами, и только оно реально вычищает данные из таблиц.
Почему нельзя удалять сразу, минуя пометку:
- 🔗 На документ или справочник могут ссылаться десятки других объектов — проводки, движения регистров, другие документы.
- 🧮 Прямое удаление без проверки оставило бы в базе «висящие» ссылки — обращения к несуществующим данным.
- ↩️ Пометка даёт возможность передумать: пока объект только помечен, его легко вернуть.
Пометка на удаление не ускоряет и не замедляет работу базы заметно. Реальный эффект от чистки — порядок в списках и чуть меньший размер базы, а не кратный прирост скорости. Не ждите, что удаление сотни документов разгонит медленный отчёт.
Выбрать подходящий способ поможет короткое дерево решений.
Администрирование → Обслуживание → Удаление помеченных объектов. Контроль ссылок включён, безопасно.Коротко все способы в одной таблице:
| Способ | Когда применять | Контроль ссылок | Монопольный доступ |
|---|---|---|---|
| Обработка в Предприятии | Повседневная чистка | Да | Нет |
| Конфигуратор | Большие объёмы, плановая пауза | Да | Да |
Программно Удалить() | Нетиповые разовые задачи | Нет | Зависит от задачи |
| Регламентное задание | Регулярная авточистка | Да | Нет |
| Прямой SQL к таблицам | Не применять | — | — |
Дальше — каждый способ по шагам.
Удаление помеченных объектов в режиме Предприятия
Это основной и безопасный способ. Подходит для «1С:Бухгалтерии» 3.0, «ЗУП» 3.1, «Управления торговлей» 11 и других типовых конфигураций на управляемых формах.
Порядок действий:
- Откройте раздел
Администрирование. В «Бухгалтерии» 3.0 нужный пункт лежит вАдминистрирование → Обслуживание → Удаление помеченных объектов. В «ЗУП» и «УТ» раздел может называтьсяНСИ и администрирование, дальше — та же группаОбслуживание. - Выберите режим:
Автоматическое удаление всех помеченных объектовилиВыборочное. При выборочном откроется список всех помеченных записей — снимите галочки с тех, что пока трогать не нужно. - Нажмите
Удалить. Программа запустит контроль ссылочной целостности: проверит, не ссылается ли на удаляемые объекты что-то ещё. - Если препятствий нет — объекты удаляются, в конце выводится отчёт о количестве.
- Если препятствия есть — появится список объектов, которые мешают. Что с ним делать, разберём в следующем разделе.
Перед массовым удалением сделайте резервную копию базы (Администрирование → Обслуживание → Резервное копирование или выгрузка .dt в Конфигураторе). Отменить физическое удаление штатными средствами уже нельзя — только восстановлением из копии.
Короткий чек-лист подготовки, чтобы не удалить лишнего:
Что делать, если объект не удаляется
Самая частая ситуация: программа отказывается удалять часть объектов и показывает список «Объекты, препятствующие удалению». Это значит, что на помеченную запись ссылается другая, непомеченная.
Пример: вы пометили контрагента, но на него ссылается проведённый документ реализации. Пока документ существует и ссылается на контрагента, удалить справочник нельзя — иначе в документе появится «битая» ссылка.
Как разобраться:
- В списке препятствий дважды щёлкните по строке — откроется тот объект, который держит ссылку.
- Решите, что с ним делать: либо пометить на удаление и его тоже, либо открыть и убрать ссылку (например, поменять контрагента в документе на правильного).
- После правок вернитесь в обработку удаления и запустите её снова.
Если препятствий много и они однотипные (ссылки из одного вида документов), удобнее сначала разобраться с этими документами через их журнал, а уже потом запускать удаление справочников.
Иногда ссылку держат служебные объекты — настройки, значения по умолчанию в регистрах сведений. Их тоже видно в списке препятствий; открывайте и правьте по тому же принципу.
Если нужно заранее понять, кто ссылается на конкретный объект, не запуская удаление, используйте типовую обработку поиска и замены ссылок или команду Ещё → Связанные документы / Перейти → ... в форме самого объекта. Это даёт картину зависимостей до того, как вы начнёте чистку, и экономит время на разборе препятствий.
Не снимайте пометку с объекта, чтобы «обойти» препятствие. Проблема не в помеченной записи, а в той, что на неё ссылается. Пока ссылка жива, удаление всё равно не пройдёт.
Удаление через Конфигуратор в монопольном режиме
Когда помеченных объектов очень много или штатная обработка в Предприятии «подвисает» на большой базе, удаление запускают из Конфигуратора. Пункт — Администрирование → Удаление помеченных объектов.
Ключевое отличие: эта операция требует монопольного доступа к базе. Конфигуратор не даст её выполнить, пока в базе работают пользователи, и предложит завершить их сеансы.
Монопольный режим оборвёт работу всех, кто сейчас в базе. Выполняйте только в согласованное нерабочее время и после резервной копии. Незавершённые у пользователей документы могут не сохраниться.
Порядок:
- Закройте Предприятие у всех пользователей, предупредив заранее.
- Запустите базу в режиме
Конфигуратор. - Откройте
Администрирование → Удаление помеченных объектов. - Программа установит монопольный доступ и покажет список помеченных записей.
- Отметьте нужные, нажмите
Удалить. Контроль ссылок работает так же, как в Предприятии.
Способ быстрее на больших объёмах и удобен, когда всё равно нужна технологическая пауза в работе базы. По сути это тот же механизм, что и в Предприятии, но без конкуренции за данные с пользователями — поэтому обработка большого списка проходит стабильнее.
Логика работы с препятствиями здесь та же: если на объект есть ссылки, Конфигуратор покажет их список, и разбираться с ними придётся так же, как описано выше. Монопольный режим сам по себе ссылки не отменяет.
Программное удаление для продвинутых
Консоль запросов для удаления не подходит: язык запросов в 1С — только на чтение, записать или удалить данные запросом нельзя. Продвинутые задачи решают внешней обработкой на встроенном языке.
В коде есть два варианта:
УстановитьПометкуУдаления(Истина)— ставит пометку, но не удаляет. По сути то же, что крестик вручную.Удалить()— непосредственное удаление, в обход контроля ссылочной целостности. Запись пропадает сразу, даже если на неё кто-то ссылается.
Именно поэтому прямой Удалить() опасен: он оставляет в базе битые ссылки. Применять его стоит, только когда вы точно знаете, что объект больше нигде не используется, и обычно — в паре с отдельной проверкой ссылок через НайтиПоСсылкам.
Если задача разовая, почти всегда безопаснее пометить объекты обработкой, а физически удалить штатным механизмом с контролем ссылок. Так вы не получите «висящие» ссылки, которые потом придётся искать тестированием и исправлением.
Для поиска объектов, которые пора чистить, подходит типовая обработка поиска и замены ссылок или консоль запросов — но только чтобы найти, а не удалить.
Клиент-серверная база: почему не чистят через SQL
В клиент-серверном варианте (сервер 1С + СУБД MS SQL или PostgreSQL) возникает соблазн удалить данные прямым SQL-запросом к таблицам. Так делать нельзя.
Причины:
- Один объект 1С хранится сразу в нескольких таблицах СУБД (сам объект, его движения по регистрам, табличные части). Удалив строку из одной таблицы, вы оставите «обрезки» в остальных.
- Структура таблиц 1С не документирована и меняется между релизами — запрос, написанный под одну версию, сломает данные в другой.
- Прямое вмешательство в СУБД не поддерживается и легко приводит к неработоспособной базе.
Правильный путь тот же: пометка и штатное удаление через Предприятие или Конфигуратор. А вот чтобы уменьшить размер базы и привести таблицы в порядок уже после массового удаления, используют:
Тестирование и исправлениев Конфигураторе (Администрирование → Тестирование и исправление) — пересчёт итогов, реструктуризация, проверка логической целостности. Требует монопольного доступа.- Для файловой базы — утилиту
chdbfl(проверка физической целостности файла1Cv8.1CD). - На стороне СУБД — штатное обслуживание (переиндексация, обновление статистики, при необходимости — сжатие), которое выполняет администратор СУБД.
Тестирование и исправление и обслуживание СУБД тоже запускают в монопольном режиме или с остановкой сервиса. Это плановые работы для нерабочего времени, а не ежедневная операция.
Автоматизация: удаление по расписанию
Чистить базу вручную каждую неделю необязательно. В типовых конфигурациях есть регламентное задание, которое удаляет помеченные объекты автоматически.
Где настроить:
- Откройте форму
Удаление помеченных объектов(Администрирование → Обслуживание). - Найдите настройку автоматического удаления по расписанию — программа позволит задать периодичность.
- Задайте расписание на нерабочее время (ночь, выходные), чтобы контроль ссылок и сама чистка не мешали пользователям.
Автоматическое удаление работает с тем же контролем ссылок. Если у объекта остались ссылки, задание его не тронет и перенесёт на следующий запуск — база не пострадает. Поэтому периодически всё равно просматривайте, что «застряло» помеченным надолго.
В клиент-серверной базе регламентные задания выполняет сервер 1С, расписание отрабатывает без запущенного клиента. В файловой базе задание сработает, только пока у кого-то открыто Предприятие, — на ночь такую базу специально не оставляют запущенной, поэтому в файловом варианте авточистку чаще запускают вручную по итогам недели.
Разумная периодичность для большинства баз — раз в неделю или раз в месяц. Чаще смысла нет: помеченных объектов за день набирается немного, а каждый запуск контроля ссылок нагружает базу.
Частые ошибки
Короткий разбор того, на чём спотыкаются чаще всего — без повтора шагов выше.
- 🗑️ Путают пометку и удаление. Поставили крестик и думают, что база очищена. Нет: помеченные объекты лежат в базе, пока не выполнено физическое удаление.
- 💾 Удаляют без резервной копии. Отмены у физического удаления нет. Копия перед массовой чисткой обязательна.
- 👥 Запускают монопольные операции в рабочее время. Удаление в Конфигураторе и тестирование с исправлением оборвут сеансы пользователей. Только нерабочее время.
- 🧨 Лезут в SQL напрямую. Прямое удаление из таблиц СУБД портит базу. Чистят только штатным механизмом.
- 🔁 Снимают пометку, чтобы «починить» препятствие. Если объект не удаляется из-за ссылки, снятие пометки не поможет — нужно разобраться с тем, кто ссылается.
Можно ли вернуть объект после физического удаления?
Почему часть объектов удалилась, а часть — нет?
Нужны ли особые права, чтобы удалять помеченные объекты?
Освободится ли место на диске сразу после удаления?
1Cv8.1CD уменьшится не сразу — место помечается как свободное и переиспользуется. Чтобы реально сжать базу, запускают тестирование и исправление. В клиент-серверной — обслуживание средствами СУБД.