Помеченные на удаление объекты: что делает конфигуратор, а что режим Предприятие

· 10 мин

Содержание

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

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

Как устроена пометка на удаление и почему конфигуратор её не трогает

Когда пользователь нажимает Del на документе или элементе справочника, объект не исчезает. Платформа ставит ему флаг ПометкаУдаления = Истина, и в списке он отображается перечёркнутым значком. Пометку можно снять повторным Del.

Зачем так сделано: на объект могут ссылаться другие данные. Контрагент указан в сотне документов, номенклатура — в остатках и проводках. Если удалить его сразу, в документах останутся «битые» ссылки вида <Объект не найден> (42:8f3a...).

Поэтому удаление разделено на два шага:

  1. 🏷️ Пометка — делает любой пользователь с правом на пометку.
  2. 🧹 Окончательное удаление — отдельная обработка проверяет, ссылается ли кто-то на объект, и удаляет только «свободные».

Что происходит при пометке документа:

  • 📄 проведённый документ при пометке на удаление теряет проведение, его движения по регистрам удаляются;
  • 🔗 ссылки на него в других документах остаются до окончательного удаления;
  • 📊 в отчётах помеченный документ уже не участвует, потому что движений у него нет.

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

Подготовка в конфигураторе: копия, права, проверка базы

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

Перед удалением выгрузите базу в .dt или сделайте копию средствами СУБД.

Порядок подготовки:

  1. Откройте базу в конфигураторе.
  2. Выполните Администрирование → Выгрузить информационную базу и сохраните файл .dt. Для этого никто не должен работать в базе — предупредите пользователей заранее.
  3. Если обработка удаления ранее падала с ошибками, запустите Администрирование → Тестирование и исправление (подробности — в разделе про ссылки).
  4. Проверьте права пользователя, который будет удалять.

Какие права нужны

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

В типовых конфигурациях на БСП не правьте типовые роли в конфигураторе — это снимет конфигурацию с поддержки или усложнит обновление. Права выдаются через профили групп доступа в режиме Предприятие: Администрирование → Настройки пользователей и прав.

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

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

СпособГдеКогда выбирать
Обработка БСПБП 3.0, ЗУП 3.1, УТ 11 и другие на БСПОсновной способ в типовых базах: понятный список, настройка по расписанию
Стандартная обработка платформыЛюбая конфигурация 8.3Нетиповые и старые самописные базы без БСП
Внешняя обработка с кодомЛюбая конфигурацияНужна выборочная или автоматическая очистка по своим правилам

Через обработку в типовой конфигурации

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

В этой же форме можно включить удаление помеченных по расписанию. Тогда регламентное задание само чистит базу, например, раз в неделю ночью. Удобно, если пользователи часто помечают ошибочные документы.

Через стандартную обработку платформы

  1. Если в главном меню нет пункта «Все функции», включите его: Сервис и настройки → Параметры → Отображать команду «Все функции».
  2. Откройте Все функции → Стандартные → Удаление помеченных объектов.
  3. Выберите «Автоматическое удаление всех отмеченных объектов» или «Выборочное удаление».
  4. При выборочном удалении снимите флажки с объектов, которые пока трогать не надо.
  5. Нажмите «Удалить» и посмотрите результат.

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

Монопольный режим для удаления в 8.3 не обязателен. Но если в это время пользователи создают документы, они могут сослаться на объект, который обработка уже признала свободным. Для крупной чистки надёжнее выбрать время, когда в базе никто не работает .

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

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

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

Что можно сделать с мешающим объектом:

  • ✏️ открыть его и заменить ссылку на правильный объект (например, на дубль контрагента, который остаётся);
  • 🏷️ пометить его на удаление тоже, если он больше не нужен, и запустить удаление повторно;
  • ⏸️ снять пометку с исходного объекта, если он всё-таки используется.

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

Когда помогает «Тестирование и исправление»

Иногда удаление прерывается не из-за ссылок, а из-за повреждений: ссылок на несуществующие объекты, нарушенной структуры таблиц. Тогда переходите в конфигуратор:

  1. Администрирование → Тестирование и исправление.
  2. Отметьте «Проверка логической целостности информационной базы» и «Проверка ссылочной целостности информационной базы».
  3. Для ссылок на несуществующие объекты выберите «Создавать объекты» — так вы увидите, где они были, и сможете разобраться вручную.
  4. Отметьте «Тестирование и исправление» в нижней части окна и запустите.

Для этой процедуры нужен монопольный доступ: все пользователи должны выйти из базы.

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

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

Удаление помеченных программно: своя внешняя обработка

Иногда нужна своя логика: удалить помеченные только одного вида или запускать очистку из другого механизма. Для этого в конфигураторе создают внешнюю обработку (Файл → Новый → Внешняя обработка) и открывают её в режиме Предприятие.

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

&НаСервереБезКонтекста
Функция УдалитьПомеченныеНаСервере()

    УстановитьПривилегированныйРежим(Истина);
    Помеченные = НайтиПомеченныеНаУдаление();
    Удалено = 0;

    Для Каждого Ссылка Из Помеченные Цикл

        МассивСсылок = Новый Массив;
        МассивСсылок.Добавить(Ссылка);
        Связи = НайтиПоСсылкам(МассивСсылок);

        ЕстьВнешниеСсылки = Ложь;
        Для Каждого Связь Из Связи Цикл
            Если Связь.Данные <> Ссылка Тогда
                ЕстьВнешниеСсылки = Истина;
                Прервать;
            КонецЕсли;
        КонецЦикла;

        Если ЕстьВнешниеСсылки Тогда
            Продолжить;
        КонецЕсли;

        Попытка
            Ссылка.ПолучитьОбъект().Удалить();
            Удалено = Удалено + 1;
        Исключение
            // объект занят или запись запрещена: пропускаем
        КонецПопытки;

    КонецЦикла;

    Возврат Удалено;

КонецФункции

&НаКлиенте
Процедура Удалить(Команда)
    Количество = УдалитьПомеченныеНаСервере();
    Сообщить("Удалено объектов: " + Формат(Количество, "ЧГ=0"));
КонецПроцедуры

Как это работает:

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

Ограничения кода. Пара помеченных объектов, которые ссылаются друг на друга, останется: каждый «видит» ссылку другого. Их добивают стандартной обработкой. Код также не выполняет проверки, которые встроены в обработку БСП. Сначала прогоните обработку на копии базы.

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

В клиент-серверной базе данные лежат в таблицах MS SQL Server или PostgreSQL. У ссылочных таблиц (_Reference…, _Document…) есть поле _Marked — это и есть пометка удаления. Возникает соблазн удалить строки запросом DELETE.

Не делайте этого в рабочей базе. Причины:

  • 🔗 ссылки на удалённые строки останутся в документах и регистрах, появятся «Объект не найден»;
  • 📑 строки табличных частей лежат в отдельных таблицах (_Reference42_VT… и подобных) и останутся «сиротами»;
  • 📊 итоги регистров не пересчитаются, отчёты начнут расходиться;
  • 🔄 изменения не попадут в планы обмена, и узлы РИБ рассинхронизируются;
  • 🚫 прямое изменение таблиц базы в обход платформы запрещено лицензионным соглашением 1С.

SQL полезен только для диагностики — понять масштаб перед чисткой. Имена таблиц узнают кодом ПолучитьСтруктуруХраненияБазыДанных() во внешней обработке. Например, если справочнику «Номенклатура» соответствует таблица _Reference42, считаем помеченные элементы так (MS SQL):

SELECT COUNT(*) AS Помечено
FROM _Reference42
WHERE _Marked = 0x01;

Только SELECT, никаких UPDATE и DELETE. Удаляйте средствами платформы.

Файловая и клиент-серверная база: что меняется после удаления

Сама процедура удаления одинакова для обоих вариантов. Разница — в скорости и в том, что происходит с местом на диске.

Файловая базаКлиент-серверная база
Где идёт поиск ссылокНа компьютере, запустившем обработкуНа сервере 1С и СУБД
Размер после удаленияФайл 1Cv8.1CD не уменьшаетсяФайлы базы СУБД не уменьшаются
Как вернуть местоКонфигуратор: тестирование и исправление со сжатием таблицСредствами СУБД: обслуживание индексов, сжатие файлов
Что ещё учестьСетевая папка замедляет обработку в разыРастёт журнал транзакций СУБД

Сжатие файловой базы

После большой чистки удалённые записи в 1Cv8.1CD остаются пустым местом. Чтобы его вернуть:

  1. Попросите всех выйти из базы.
  2. В конфигураторе откройте Администрирование → Тестирование и исправление.
  3. Отметьте «Сжатие таблиц информационной базы».
  4. Запустите проверку.

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

Клиент-серверный вариант

На сервере удаление нагружает СУБД: каждый объект проверяется по всем таблицам, где на него могут ссылаться. При модели восстановления FULL в MS SQL журнал транзакций за ночь может вырасти на десятки гигабайт. Заранее проверьте свободное место и настройте резервное копирование журнала.

После очистки администратор СУБД перестраивает индексы и обновляет статистику. Сжатие файлов данных — по необходимости, не после каждой чистки.

Объекты с префиксом «Удалить» в дереве конфигурации

Часто запрос «удалить помеченные объекты в конфигураторе» относится к другому. Открыв дерево метаданных, администратор видит справочники и реквизиты с именами вроде УдалитьВидыДоговоров. Это не данные, а объекты конфигурации.

Фирма 1С так помечает устаревшие объекты в типовых конфигурациях. Их не удаляют сразу, чтобы при обновлении перенести данные в новые объекты. В следующих релизах они исчезают сами.

Что с ними делать:

  • 🔒 если конфигурация на поддержке без возможности изменения — ничего, их уберёт обновление;
  • ⚠️ если поддержка включена с изменениями, ручное удаление таких объектов усложнит сравнение и объединение при следующем обновлении;
  • 🔍 в самописной конфигурации перед удалением объекта вызовите на нём команду поиска ссылок из контекстного меню, затем удалите и обновите конфигурацию базы данных.

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

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

Можно ли восстановить объект после окончательного удаления?
Только из резервной копии. Загрузите копию в отдельную базу и перенесите нужные объекты обработкой выгрузки-загрузки данных.
Почему удаление не освободило место на диске?
Удалённые записи оставляют пустоты. В файловой базе их убирает сжатие таблиц в конфигураторе, в серверной — обслуживание СУБД.
Нужно ли выгонять пользователей для удаления помеченных?
Платформа 8.3 этого не требует. Но для большой чистки лучше нерабочее время: меньше блокировок и риск новых ссылок на удаляемые объекты.
Как удалять помеченные автоматически?
В типовых конфигурациях на БСП включите удаление по расписанию в форме удаления помеченных объектов. Регламентное задание будет запускаться само.
Удаляются ли помеченные объекты при обновлении конфигурации?
Нет. Обновление меняет структуру, а помеченные данные остаются, пока не запустить обработку удаления.