Пометка стоит, а документ всё ещё в списке: как окончательно стереть объекты в 1С 8.3
Содержание
Помеченный объект из базы 1С 8.3 удаляют обработкой Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов. Клавиша Del в списке только ставит пометку: документ зачёркивается, но физически остаётся в базе, пока вы не запустите эту обработку.
Так же решается и вопрос, как удалить «удалённые» документы в 1С 8.3, которые висят в журнале красным крестиком. Обработка проверит, не ссылается ли на них что-то живое, сотрёт всё, что можно, и покажет список того, что удалить нельзя, с причиной. Путь одинаковый для Бухгалтерии 3.0, ЗУП 3.1 и УТ 11: все три построены на одной библиотеке стандартных подсистем.
Пометка и удаление: что происходит с документом на самом деле
В 1С два разных действия, и их часто путают.
- 🏷️ Пометка на удаление (
Delили команда в менюЕщё). Объект остаётся в базе, у него просто взводится признак. Проведённый документ при пометке распроводится, его движения по регистрам исчезают. Пометку можно снять тем жеDel. - 🗑️ Окончательное удаление. Запись стирается из таблиц базы. Вернуть её можно только из резервной копии.
Зачем такая двухшаговая схема: на элемент справочника или документ могут ссылаться десятки других объектов. Если стереть контрагента сразу, все его договоры, счета и платёжки получат пустую ссылку <Объект не найден>. Пометка даёт программе шанс проверить связи перед удалением.
Команда «Удалить» напрямую (Shift+Del) в типовых конфигурациях обычно недоступна: на неё нужно право «Интерактивное удаление», которого нет в стандартных ролях. Это защита, а не ошибка настройки.
Как пометить сразу много объектов
Пометку ставят не только по одному документу. В любом списке 8.3 выделите строки с зажатым Ctrl или диапазон через Shift, нажмите Del и подтвердите вопрос. Программа пометит все выделенные объекты разом.
Чтобы выбрать, например, все документы ошибочной загрузки за один день, сначала установите отбор по дате или по автору в списке, затем Ctrl+A в таблице и Del. Перед подтверждением проверьте число выделенных строк: одна лишняя строка — и нужный документ окажется в очереди на удаление.
Снять пометку с группы можно так же: выделить и снова нажать Del. Для проведённых документов учтите, что после снятия пометки они остаются непроведёнными, проводить их нужно отдельно.
Что подготовить до запуска
- Сделайте резервную копию: выгрузку в
.dtчерез Конфигуратор или копию каталога файловой базы. Удаление необратимо, корзины в 1С нет. - Проверьте права. Обработку запускает пользователь с полными правами (роль «Администратор системы» или «Полные права»).
- Выберите время. В больших базах проверка ссылок идёт от нескольких минут до часов и нагружает сервер. Лучше вечер или выходной.
Как удалить помеченные документы штатной обработкой
Это основной и самый безопасный способ. Где он находится в разных программах:
| Конфигурация | Путь к обработке |
|---|---|
| Бухгалтерия предприятия 3.0 | Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов |
| ЗУП 3.1 | Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов |
| УТ 11, КА 2, ERP | НСИ и администрирование → Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов |
Если раздела «Обслуживание» не видно, проверьте, что вы вошли под администратором: обычным пользователям он скрыт.
Шаги удаления
- Откройте обработку по пути из таблицы.
- Выберите режим:
- Автоматически удалить все отмеченные объекты — программа сама удалит всё, что можно;
- Выборочное удаление — откроется дерево помеченных объектов по видам (документы, справочники), где можно снять галочки с того, что трогать пока нельзя.
- Для выборочного режима проставьте флажки и нажмите кнопку удаления внизу формы.
- Дождитесь окончания. Ход виден по индикатору, форму можно не трогать.
- Изучите результат. Сверху — сколько объектов удалено, ниже — список неудалённых с указанием, что именно на них ссылается.
Выборочный режим полезен, когда в базе за годы скопились тысячи пометок. Начните с документов: справочники часто держатся именно на помеченных документах и уходят следом сами.
Если программа просит монопольный режим
В некоторых релизах обработка предлагает перевести базу в монопольный режим. Тогда все остальные пользователи должны выйти из программы, а их незавершённые сеансы придётся закрыть. Предупредите коллег заранее: принудительное завершение сеанса обрывает работу без сохранения. В клиент-серверной базе сеансы смотрят и завершают в консоли администрирования серверов.
Стандартная функция платформы через «Все функции»
Помимо обработки конфигурации, в самой платформе 8.3 есть своя функция удаления. Она нужна, когда конфигурация нетиповая или переписанная и в разделе администрирования обработки нет.
- Включите меню:
Сервис и настройки → Параметры, флажокОтображать команду «Все функции». - Откройте
Все функции → Стандартные → Удаление помеченных объектов. - Нажмите кнопку поиска помеченных объектов, отметьте нужные и запустите контроль и удаление.
Платформенная функция тоже проверяет ссылки, но выглядит проще и не знает о специфике конфигурации. В типовых БП, ЗУП и УТ пользуйтесь обработкой из раздела «Обслуживание»: она учитывает служебные связи, которые настроили разработчики.
Почему помеченный объект не удаляется и как убрать ссылки на него
Главная причина «неудаляемых» объектов одна: на них ссылается объект без пометки. Обработка не удалит контрагента, пока существует хоть один непомеченный договор, документ или запись регистра сведений с ним.
Что делать по шагам:
- В результатах обработки раскройте неудалённый объект. Под ним будет список мест, где он используется.
- Если место — тоже мусор, пометьте его на удаление и повторите запуск.
- Если место нужное (например, правильная реализация, где ошибочно выбран дубль контрагента), откройте его и замените значение реквизита на правильное.
- Если таких мест сотни, используйте замену ссылок. В типовых конфигурациях это обработка «Поиск и удаление дублей» в том же разделе
Обслуживание → Корректировка данных: она переносит все ссылки с дубля на оригинал и затем удаляет дубль.
Посмотреть, кто держит объект, можно и без запуска удаления. Стандартная функция Все функции → Стандартные → Поиск ссылок на объект показывает все объекты базы, где встречается выбранный элемент.
Цепочки и закрытые периоды
- 🔗 Цепочка документов. Счёт держит реализацию, реализация держит счёт-фактуру. Помечайте всю цепочку, тогда обработка удалит её за один проход.
- 📅 Дата запрета изменения. Если документ лежит в закрытом периоде, программа может не дать его удалить. Проверьте дату запрета в
Администрирование → Проведение документови временно сдвиньте её, если вы вправе это делать. - 👥 Блокировка. Объект открыт у другого пользователя. Попросите закрыть форму и запустите ещё раз.
Удаление кодом: консоль запросов и внешняя обработка
Сразу о частом заблуждении: язык запросов 1С умеет только читать данные. Командой из консоли запросов ничего удалить нельзя. Консоль полезна как разведка: найти помеченные объекты нужного вида и оценить их число.
Запрос, который покажет все помеченные реализации:
ВЫБРАТЬ
Реализация.Ссылка,
Реализация.Дата,
Реализация.Номер
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.ПометкаУдаления
Для удаления нужен код на встроенном языке. Его выполняют во внешней обработке или в консоли кода с правами администратора. Пример серверной процедуры, которая удаляет только те помеченные документы, на которые никто не ссылается:
&НаСервере
Процедура УдалитьПомеченныеРеализацииНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг ГДЕ ПометкаУдаления";
Помеченные = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Удалено = 0;
Пропущено = 0;
Для Каждого Ссылка Из Помеченные Цикл
Проверка = Новый Массив;
Проверка.Добавить(Ссылка);
Связи = НайтиПоСсылкам(Проверка);
Если Связи.Количество() = 0 Тогда
Объект = Ссылка.ПолучитьОбъект();
Объект.Удалить();
Удалено = Удалено + 1;
Иначе
Пропущено = Пропущено + 1;
КонецЕсли;
КонецЦикла;
Сообщить(СтрШаблон("Удалено: %1, пропущено из-за ссылок: %2", Удалено, Пропущено));
КонецПроцедуры
Ключевая строка тут — проверка НайтиПоСсылкам. Метод Удалить() у объекта сам ссылки не проверяет: он сотрёт документ, даже если на него ссылаются другие. Без проверки вы получите битые ссылки.
Есть и глобальный метод платформы УдалитьОбъекты(). Он принимает массив ссылок и умеет контролировать ссылки сам, если передать вторым параметром Истина. Его удобно применять для пакетного удаления, но перед запуском в рабочей базе прогоните код на копии.
Код удаления запускают только на копии базы, сверив результат, и лишь потом в рабочей. Ошибка в условии запроса, например пропущенное ГДЕ ПометкаУдаления, сотрёт непомеченные документы.
Прямое удаление в SQL: почему так делать нельзя
Для клиент-серверной базы иногда советуют удалить строки прямо в СУБД. Это худший способ из всех, и вот почему:
- ❌ таблицы называются служебными именами вроде
_Document123, связи между ними СУБД не контролирует; - ❌ табличные части, движения по регистрам, итоги и версии объектов хранятся в отдельных таблицах, и пропустить одну из них легко;
- ❌ платформа ничего не узнает об удалении: итоги регистров разойдутся с движениями, ссылки станут битыми;
- ❌ фирма-разработчик не поддерживает базы, данные которых меняли в обход платформы.
Если удалять приходится миллионы записей и обработка не справляется, правильный путь — внешний код через УдалитьОбъекты() порциями по несколько тысяч объектов, ночью, после полной копии.
Как починить последствия удаления без проверки
Если объекты уже стерли в обход контроля и в документах появилось <Объект не найден>, запустите проверку базы:
- Сделайте копию базы .
- Попросите всех выйти: проверке нужен монопольный доступ.
- В Конфигураторе откройте
Администрирование → Тестирование и исправление. - Отметьте проверку ссылочной целостности и выберите действие для битых ссылок: «Создавать объекты» (появятся пустые заглушки, их можно заполнить) или «Очищать ссылки».
- Запустите и дождитесь окончания.
«Создавать объекты» безопаснее: вы увидите, где были ссылки, и решите вручную, что с ними делать.
Внешние обработки, расширения и удаление по расписанию
Готовые внешние обработки для удаления пригодятся, когда штатная форма не подходит: нужен отбор по периоду, по организации или по виду документа. Подключают их так:
- разово — через
Файл → Открыть(если это разрешено настройками безопасности); - постоянно — через
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
Перед использованием чужой обработки откройте её код в Конфигураторе и найдите, где вызывается удаление. Если там нет проверки ссылок, не запускайте её в рабочей базе.
Расширение конфигурации нужно, если доработка удаления должна жить в базе постоянно и переживать обновления: например, своя команда «Удалить помеченные за период». Писать его — работа программиста.
Регламентное удаление
В типовых конфигурациях на БСП удаление можно поставить на расписание. В форме обработки удаления или в разделе Обслуживание есть флажок автоматического удаления помеченных объектов с настройкой расписания. Включайте его, только если резервное копирование
настроено и проходит до запуска задания.