Почему массовое удаление документов в 1С требует осторожности

Работа с большими массивами данных в 1С:Предприятие 8 часто ставит пользователей перед необходимостью очистки базы от устаревших или ошибочных документов. Однако стандартный интерфейс программы не предусматривает кнопку "Удалить всё" — и на то есть веские причины. Пометка документов на удаление вручную занимает часы, а ошибка при массовом удалении может привести к потере критичных данных, нарушению ссылочной целостности или даже блокировке базы.

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

Прежде чем приступать к очистке, ответьте себе на три вопроса:

  • 🔹 Есть ли резервная копия базы? Без неё массовое удаление равносильно игре в русскую рулетку.
  • 🔹 Какие документы связаны с удаляемыми? Например, реализации привязаны к платежам, а накладные — к счетам.
  • 🔹 Нужно ли сохранять историю изменений? В некоторых конфигурациях (например, 1С:ERP) удаление документов стирает их из журналов регистрации.
📊 Как часто вы очищаете базу 1С от устаревших документов?
Раз в месяц
Раз в квартал
Только при критической необходимости
Никогда не очищаю

Способ 1: Стандартная обработка "Пометка на удаление" (для новичков)

Если вам нужно удалить документы одного типа (например, только РеализацияТоваровУслуг), проще всего воспользоваться типовой обработкой. Она встроена в большинство конфигураций на базе 1С:Предприятие 8.3 и не требует знания программирования.

Инструкция:

  1. Откройте список документов, которые нужно удалить (например, через меню Документы → Продажи → Реализация товаров и услуг).
  2. Нажмите кнопку Ещё → Пометить на удаление (или Действия → Пометить на удаление в старых версиях).
  3. В открывшемся окне укажите период (даты начала и конца) и нажмите Выполнить.
  4. Подтвердите действие в диалоговом окне.

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

Создать резервную копию базы

Проверить права пользователя (нужны права на удаление)

Закрыть все сеансы других пользователей

Убедиться, что документы не используются в отчётах-->

⚠️ Внимание: В конфигурациях 1С:Бухгалтерия 3.0 и 1С:Управление торговлей 11 стандартная обработка может не показывать документы с проведёнными движениями. Чтобы их увидеть, предварительно снимите пометку проведения (Действия → Провести/Снять проведение).

Способ 2: Консоль запросов — для опытных пользователей

Если стандартная обработка не справляется (например, из-за большого объёма данных), используйте консоль запросов. Этот метод позволяет гибко фильтровать документы по любым параметрам: дате, контрагенту, сумме и т.д.

Пример запроса для пометки на удаление всех документов типа ПоступлениеТоваровУслуг за 2023 год:

ВЫБРАТЬ

ПоступлениеТоваровУслуг.Ссылка КАК Ссылка

ИЗ

Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг

ГДЕ

ПоступлениеТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода

Как выполнить:

  1. Откройте консоль запросов через меню Все функции → Стандартные → Консоль запросов (или нажмите Ctrl+Shift+Q).
  2. Вставьте запрос и нажмите Выполнить.
  3. В результатах выделите все строки (или нужные) и нажмите Пометить на удаление.
Тип документа Пример условия в запросе Риск при удалении
РеализацияТоваровУслуг ГДЕ РеализацияТоваровУслуг.СуммаДокумента = 0 Нарушение цепочки продаж в отчётах
ПлатёжноеПоручение ГДЕ ПлатёжноеПоручение.Статус = "Не проведен" Потеря привязки к банковским выпискам
СчётФактураВыданный ГДЕ СчётФактураВыданный.Дата < ТЕКУЩАЯДАТА() - 365 Проблемы с налоговым учётом
💡

Перед выполнением запроса добавьте в условие И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления = ИСТИНА, чтобы не помечать уже удалённые документы повторно.

Способ 3: Программное удаление через встроенный язык (1С:Предприятие)

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

Пример кода для пометки на удаление всех непроведённых документов типа ЗаказПокупателя:

Выборка = Документы.ЗаказПокупателя.Выбрать();

Пока Выборка.Следующий() Цикл

Если НЕ Выборка.ЭтотОбъект.Проведён Тогда

Выборка.ЭтотОбъект.УстановитьПометкуУдаления(Истина);

КонецЕсли;

КонецЦикла;

Где разместить код:

  • 📝 В внешней обработке (создайте через Файл → Новый → Внешняя обработка).
  • 🖥️ В модуле управляемого приложения (для постоянного использования).
  • 🔧 В отладчике (для разового выполнения, нажмите Ctrl+Alt+F12).
⚠️ Внимание: Код выше не проверяет ссылки на другие документы! Чтобы избежать ошибок, добавьте условие:
Если НЕ Выборка.ЭтотОбъект.СсылаетсяНаДругиеДокументы() Тогда

Функцию СсылаетсяНаДругиеДокументы() нужно реализовать самостоятельно или использовать типовую процедуру из конфигурации.

Как проверить, какие документы ссылаются на удаляемый

Откройте документ в форме, перейдите на закладку "Связи" (если она есть).

Или выполните запрос:

ВЫБРАТЬ РАЗРЕШЕННЫЕ

Ссылка.ВидыСсылок() КАК ВидСсылки,

Ссылка.Ссылка КАК СсылкаНаОбъект

ИЗ

Документ.ИмяВашегоДокумента.Ссылка КАК Ссылка

ГДЕ

Ссылка.Ссылка = &ВашаСсылка

Способ 4: Использование обработки "Универсальный отбор и пометка на удаление"

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

  • 🔍 Отбирать документы по любым реквизитам (дате, сумме, контрагенту).
  • 📊 Предварительно просматривать список перед удалением.
  • 🔄 Отменять пометку на удаление.

Где взять обработку:

  1. Скачайте с сайта Infostart (поиск по фразе "Универсальный отбор и пометка на удаление").
  2. Или найдите в каталоге 1С:ИТС (раздел "Обработки для администрирования").

Как использовать:

  1. Откройте обработку через Файл → Открыть.
  2. Выберите тип документа (например, СчётНаОплатуПокупателю).
  3. Задайте фильтры (период, контрагент, сумма и т.д.).
  4. Нажмите Отобрать, затем Пометить на удаление.
💡

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

Способ 5: Удаление через RLS (управляемые блокировки) для больших баз

В крупных компаниях с распределённой базой массовое удаление может заблокировать работу других пользователей. В этом случае используют RLS (Row-Level Security) — механизм, позволяющий удалять данные порциями, не блокируя всю таблицу.

Пример скрипта с RLS (для 1С:Предприятие 8.3.20+):

// Устанавливаем блокировку на уровне записей

НачатьТранзакцию();

Попытка

Выборка = Документы.ВашДокумент.Выбрать();

Пока Выборка.Следующий() Цикл

Если Выборка.ЭтотОбъект.МожноУдалить() Тогда

Выборка.ЭтотОбъект.УстановитьПометкуУдаления(Истина);

// Фиксируем изменения каждые 100 документов

Если Выборка.Счётчик() % 100 = 0 Тогда

ЗафиксироватьТранзакцию();

НачатьТранзакцию();

КонецЕсли;

КонецЕсли;

КонецЦикла;

ЗафиксироватьТранзакцию();

Исключение

ОтменитьТранзакцию();

Сообщить("Ошибка: " + ОписаниеОшибки());

КонецПопытки;

Преимущества метода:

  • 🔄 Минимизирует блокировки для других пользователей.
  • 🛡️ Позволяет откатить изменения при ошибке.
  • ⚡ Подходит для баз с миллионами документов.
⚠️ Внимание: В конфигурациях с управляемым приложением (например, 1С:ERP 2.5) для RLS может потребоваться настройка прав доступа на уровне ролей. Без этого скрипт выдаст ошибку "Недостаточно прав".

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

Иногда отказывается помечать документы на удаление, даже если они кажутся "свободными". Рассмотрим типичные причины и решения:

Ошибка Причина Решение
Документ используется в регистрах Документ имеет движения по регистрам (например, РегистрНакопления.ТоварыНаСкладах) Снимите проведение документа или используйте обработку "Очистка движений"
Нарушение прав доступа У пользователя нет роли с правом Удаление Запустите 1С под администратором или измените права роли
Документ помечен как системный Документ создан автоматически (например, ЗакрытиеМесяца) Удалить можно только через конфигуратор в режиме "Отладка"

Если документ всё равно не удаляется, проверьте:

  1. Есть ли у него подчинённые документы (например, корректировки к реализации).
  2. Не используется ли он в отчётах (проверьте через Отчёты → Стандартные отчёты → Анализ связей объектов).
  3. Не заблокирован ли он для изменений (в некоторых конфигурациях есть флаг Блокировка).
Как найти все связи документа через запрос

ВЫБРАТЬ

Метаданные.Ссылки.Имя КАК ИмяОбъекта,

Метаданные.Ссылки.Тип КАК ТипОбъекта

ИЗ

Документ.ВашДокумент.Ссылка КАК Док,

Метаданные.Ссылки КАК Метаданные.Ссылки

ГДЕ

Метаданные.Ссылки.Ссылка = Док.Ссылка

Восстановление после ошибочного удаления

Если вы случайно пометили на удаление не те документы, не паникуйте. В 1С 8.3 есть несколько способов вернуть данные:

Способ 1: Отмена пометки через журнал документов

  1. Откройте список документов (например, Документы → Продажи → Реализация товаров).
  2. Включите отображение помеченных на удаление (Все действия → Показать помеченные на удаление).
  3. Выделите нужные документы и нажмите Снять пометку удаления.

Способ 2: Восстановление из резервной копии

  • 🔄 Если копия свежая, восстановите базу полностью.
  • 📂 Если нужно вернуть только часть данных, используйте выборочное восстановление через 1С:Конвертацию данных.

Способ 3: Программное восстановление

Для опытных пользователей — скрипт для снятия пометки удаления со всех документов типа ВашДокумент:

Выборка = Документы.ВашДокумент.ВыбратьПомеченныеНаУдаление();

Пока Выборка.Следующий() Цикл

Выборка.ЭтотОбъект.УстановитьПометкуУдаления(Ложь);

КонецЦикла;

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

FAQ: Частые вопросы о массовом удалении в 1С

Можно ли удалить документы окончательно, без возможности восстановления?

Да, но для этого нужно:

  1. Пометить документы на удаление (любым из описанных способов).
  2. Выполнить физическое удаление через Администрирование → Обслуживание → Удаление помеченных объектов.

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

Почему после пометки на удаление документы остаются в отчётах?

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

  • В настройках отчёта добавьте фильтр ПометкаУдаления = Ложь.
  • Или используйте обработку "Очистка истории" (доступна в 1С:ИТС).
Как удалить документы в облачной версии 1С (1С:Fresh)?

В 1С:Fresh массовое удаление ограничено:

  • 🔹 Стандартная обработка доступна, но работает медленнее.
  • 🔹 Консоль запросов и программный код заблокированы по умолчанию.
  • 🔹 Для массовых операций нужно обращаться в поддержку .

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

Какие документы нельзя удалять ни при каких условиях?

Критичные документы, удаление которых нарушит работу базы:

  • 📌 Начальное заполнение регистров (например, Ввод начальных остатков).
  • 📌 Документы Закрытие месяца или Закрытие года.
  • 📌 Кадровые документы (привязаны к расчёту зарплаты).
  • 📌 Документы с движениями по регламентированному учёту (налоговые регистры).
Сколько времени занимает массовое удаление 10 000 документов?

Время зависит от:

  • 🔹 Конфигурации: в 1С:Бухгалтерия 3.0 — 5-10 минут, в 1С:ERP — до 30 минут.
  • 🔹 Аппаратных мощностей: на SSD и 16 ГБ ОЗУ процесс идёт в 3-5 раз быстрее.
  • 🔹 Способа удаления: RLS (способ 5) работает дольше, но безопаснее.

Для ускорения:

  • Закройте все сеансы других пользователей.
  • Выполняйте операцию в нерабочее время.
  • Разбейте удаление на пакеты (например, по 1 000 документов).