Массовое удаление операций в 1С: безопасно и с контролем ссылок

· 9 мин

Содержание

Удалить все операции в 1С можно за два шага: пометить документы на удаление, а затем выполнить Администрирование → Обслуживание → Удаление помеченных объектов. Если операций десятки или сотни, пометку удобнее ставить не вручную, а через «Групповую обработку справочников и документов».

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

Речь прежде всего о документах «Операция» (ручные проводки) в бухгалтерских конфигурациях — БП 3.0, «Бухгалтерия КОРП», КА, ERP. Тот же механизм удаления работает для любых документов и справочников в типовых конфигурациях на БСП.

Что проверить перед удалением операций

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

Сделайте резервную копию базы до первого шага. Для файловой базы достаточно закрыть 1С и скопировать файл 1Cv8.1CD. Для любой базы надёжнее выгрузка через конфигуратор: Администрирование → Выгрузить информационную базу создаст файл .dt.

Массовое удаление и контроль ссылок идут по всей базе. Если в этот момент другие пользователи проводят документы, удаление либо затянется, либо прервётся. Выполняйте его, когда в базе никого нет, — в идеале монопольно.

Как освободить базу от пользователей, зависит от варианта:

  • Файловая база — попросите всех выйти и закройте программу у остальных; работайте локально на компьютере с базой, так удаление идёт быстрее.
  • Клиент-серверная база — активные сеансы видно в консоли администрирования серверов 1С. Завершать их нужно, предупредив людей: оборванный сеанс откатит незавершённые операции пользователя.

Заранее определите границы: за какой период и какие именно документы удаляете. Проверьте, не попадают ли операции в закрытые периоды — если там уже сформирована отчётность, их удаление исказит сданные цифры.

Подготовка к массовому удалению
Выполнено: 0 / 5

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

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

СпособКогда применятьРиск
Пометка + удаление помеченных1–50 документов, обычная чисткаМинимальный
Групповая обработкаДесятки и сотни документов с отборомНизкий
Программная пометка в кодеТысячи документов, повторяемая задачаСредний
Внешняя обработкаНестандартный отбор, чужой кодЗависит от обработки
Полная очистка (чистая база)Нужно стереть вообще всёВысокий, но контролируемый

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

Способ 1. Пометка на удаление и «Удаление помеченных объектов»

Это штатный и самый безопасный путь. Он состоит из двух независимых действий.

  1. Пометьте операции на удаление. Откройте список (например, журнал операций), выделите нужные строки и нажмите Delete либо вызовите в контекстном меню «Пометить на удаление / Снять пометку». У помеченных документов появится значок с крестиком.
  2. Запустите удаление. Перейдите в Администрирование → Обслуживание → Удаление помеченных объектов. Выберите режим: автоматический (удалит все помеченные) или выборочный (отметите галочками, что именно удалять).
  3. Дождитесь контроля ссылок. Программа проверит, не используются ли объекты в других документах, и удалит только те, на которые ссылок нет.

Если часть операций не удалилась, 1С покажет, какие объекты на них ссылаются и в каких документах. По двойному щелчку на строке можно открыть мешающий документ прямо из результата. Дальше вариантов два: либо снять ссылку (перепровести или удалить сам ссылающийся документ), либо оставить операцию как есть. В выборочном режиме удобно снять галочки с проблемных объектов и удалить остальное одним проходом.

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

«Удаление помеченных объектов» и групповая обработка есть во всех типовых конфигурациях на БСП — БП, ЗУП, УТ, УНФ, КА, ERP — по пути Администрирование → Обслуживание. Документ «Операция» существует только в бухгалтерских конфигурациях; в «Управлении торговлей» или «Рознице» операций в этом смысле нет, но тем же способом удаляют любые их документы.

Способ 2. Групповая обработка справочников и документов

Когда помечать по одному долго, помогает стандартная обработка «Групповая обработка справочников и документов». Она умеет отобрать документы по типу и периоду и пометить их на удаление пачкой.

Обработка вызывается через команду «Все функции». Если её нет в меню, включите:

  1. Откройте «Главное меню» (кнопка со стрелкой в левом верхнем углу) → Сервис → Параметры.
  2. Поставьте флажок «Отображать команду “Все функции”».

Дальше: Главное меню → Все функции → Стандартные → Групповая обработка справочников и документов.

  • На вкладке отбора выберите вид объекта — документ «Операция» — и задайте условие по периоду или по другим реквизитам.
  • Сформируйте список, выделите нужные строки (или все сразу).
  • На вкладке обработки выберите действие «установить пометку удаления» и выполните его над выделенными.

Та же обработка умеет и обратное — снять пометку удаления, провести или распровести группу документов. Это выручает, если вы передумали: снимите пометку пачкой до запуска удаления помеченных.

После этого документы помечены — осталось запустить Удаление помеченных объектов из Способа 1. Групповая обработка только помечает; физически удаляет всё равно штатный механизм с контролем ссылок.

Внешние обработки. Для нестандартного отбора используют внешние обработки массового удаления (файлы .epf). Простую обработку открывают через Файл → Открыть, оформленную как дополнительную подключают в Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки.

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

Способ 3. Программное удаление операций в 1С

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

// Помечаем на удаление все документы "Операция"
Выборка = Документы.Операция.Выбрать();
Пока Выборка.Следующий() Цикл
    Объект = Выборка.ПолучитьОбъект();
    Объект.УстановитьПометкуУдаления(Истина);
КонецЦикла;

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

Существует и непосредственное удаление — метод Удалить() у объекта стирает запись сразу, минуя пометку:

Объект.Удалить(); // удаляет немедленно, без контроля ссылок

Непосредственное удаление не проверяет ссылки. Если на операцию кто-то ссылается, в базе появятся «битые» ссылки вида «<Объект не найден>». Применяйте его только осознанно, на копии и когда точно знаете, что ссылок нет.

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

Код удобно выполнить во внешней обработке. Запускать произвольный код в рабочей базе без тестирования на копии не стоит — цикл по всей таблице документов необратим.

Полная очистка базы: когда проще создать чистую

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

  • Выгрузите конфигурацию в файл: в конфигураторе Конфигурация → Сохранить конфигурацию в файл (.cf).
  • Создайте новую пустую информационную базу той же версии и загрузите в неё этот .cf.

Данных в новой базе не будет, а конфигурация и настройки структуры сохранятся. Второй вариант — развернуть «чистую» базу из дистрибутива конфигурации (демо-данные в неё не входят).

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

Если нужно убрать старые операции, но сохранить остатки. Часто за запросом «удалить все операции» стоит другая задача — очистить базу от документов за прошлые годы, не потеряв текущие остатки. Для этого есть типовая обработка «Свертка информационной базы»: она вводит остатки на выбранную дату отдельными документами, а старые операции до этой даты удаляет. Так база становится легче, а сальдо на начало периода сохраняется. Запускайте свёртку только после резервной копии и сверки остатков до и после.

Почему нельзя удалять операции напрямую в SQL

Заманчиво выполнить DELETE по таблице документов в MS SQL или PostgreSQL и разом очистить базу. Делать так нельзя.

1С хранит данные в таблицах со служебными именами (_Document123, регистры — отдельно) и ведёт собственные таблицы итогов. Платформа не знает о правках, сделанных в обход неё:

  • 🔻 итоги регистров не пересчитаются — остатки и обороты «поедут»;
  • 🔻 ссылки на удалённые строки останутся в других документах и превратятся в «битые»;
  • 🔻 рассинхронизируются связанные таблицы (движения, последовательности);
  • 🔻 база снимается с поддержки — такое вмешательство не является штатным.

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

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

Если после удаления возникли ошибки

Чаще всего проблемы связаны со ссылками и с итогами. Разберите по симптому.

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

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

Чем пометка на удаление отличается от удаления помеченных объектов?
Пометка только ставит крестик — документ остаётся в базе и, если был проведён, продолжает влиять на учёт. «Удаление помеченных объектов» физически стирает документ вместе с его движениями и с контролем ссылок.
Удаляются ли вместе с операцией её проводки?
Да. При удалении документа удаляются и все его движения по регистрам. Отдельно чистить регистры не нужно.
Как удалить операции только за определённый период?
Задайте отбор по дате в групповой обработке либо отфильтруйте журнал операций по периоду, выделите строки и пометьте на удаление.
Что делать, если «Удаление помеченных объектов» ничего не удаляет?
Значит, на объекты есть ссылки — программа покажет, где они используются. Разберитесь со ссылками или удаляйте выборочно, начиная с документов, на которые никто не ссылается.
Можно ли удалить операции сразу, без пометки?
Да, непосредственным удалением в коде, но тогда не работает контроль ссылок и база может «побиться». Для рабочей базы так не делают — только пометка и удаление помеченных.
Как удалить операцию в закрытом периоде?
Если период закрыт и отчётность сдана, операцию обычно не удаляют, а сторнируют — вводят исправляющую запись в текущем периоде. Прямое удаление изменит уже сданные данные задним числом.
Вернутся ли удалённые операции после обновления конфигурации?
Нет. Обновление меняет конфигурацию (структуру и формы), а не данные. Удалённые документы обновление не восстанавливает — вернуть их можно только из резервной копии.