К статье
Практический материал

Администрирование · 10 мин

Как удалить движения регистра накопления в 1С

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

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

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

Перед любыми действиями сделайте резервную копию базы. Для файловой базы достаточно скопировать файл 1Cv8.1CD, для клиент-серверной — выполнить выгрузку через конфигуратор (Администрирование → Выгрузить информационную базу) или средствами СУБД. Без копии откатить ошибочное удаление движений будет невозможно.

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

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

Поэтому все способы удаления сводятся к двум вариантам: воздействовать на документ (отменить проведение, пометить на удаление) или программно записать пустой набор записей с отбором по конкретному регистратору. Третьего пути — «удалить строки из таблицы» — в штатной логике 1С не существует, а вмешательство на уровне СУБД разрушает итоги регистра.

Способ 1. Отмена проведения документа

Самый безопасный и рекомендуемый способ — отменить проведение документа, сформировавшего движения. Откройте документ и нажмите кнопку «Провести» повторно (она снимает проведение) либо выберите в меню «Ещё» команду отмены проведения. Платформа автоматически удалит все записи документа из регистров, включая регистры накопления.

Если документов много, используйте групповую обработку: в списке документов выделите нужные строки и через «Ещё» → «Отменить проведение» снимите проведение пакетно. В типовых конфигурациях также доступна обработка «Групповое изменение реквизитов» и механизм «Проведение документов» (раздел «Администрирование» → «Обслуживание»), где можно отменить проведение за выбранный период по выбранным видам документов.

Учтите ограничение: отмена проведения документа в закрытом периоде (при установленной дате запрета изменения данных) будет заблокирована. Сначала придётся временно снять дату запрета, что требует соответствующих прав и согласования с бухгалтерией, если период уже сдан в отчётность.

Отмена проведения за период
  1. 1
    Сделайте резервную копию базы
  2. 2
    Откройте Администрирование → Обслуживание → Проведение документов
  3. 3
    Выберите период и виды документов, установите режим «Отмена проведения»
  4. 4
    Запустите обработку и дождитесь завершения
  5. 5
    Проверьте отчётом по регистру, что движения удалены

Способ 2. Программное удаление движений через набор записей

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

bsl
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
НаборЗаписей.Записать(Истина); // запись пустого набора = удаление движений

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

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

Способ 3. Перепроведение документов и восстановление последовательности

Если движения некорректны не по одному документу, а по целому периоду (например, после изменения алгоритма проведения или сбоя), правильное решение — полное перепроведение. При перепроведении платформа сначала удаляет старые движения документа, затем записывает новые по актуальному алгоритму.

В типовых конфигурациях используйте обработку «Проведение документов» из раздела «Обслуживание» или групповое перепроведение из списка документов. В конфигурациях с последовательностями (УПП, КА, ERP) дополнительно выполните восстановление последовательности — это гарантирует, что партии и взаиморасчёты пересчитаются в правильном хронологическом порядке.

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

Сравнение способов и выбор подходящего

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

Сравнение способов

Отмена проведения документа

Подходит для точечного исправления. Удаляет движения по всем регистрам документа, сам документ становится непроведённым.

Программная очистка набора записей

Для удаления движений по одному регистру без изменения статуса документа. Требует прав разработчика и понимания последствий.

Перепроведение за период

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

Пометка документа на удаление

Когда документ вообще не нужен в базе. Движения удаляются вместе с отменой проведения при пометке.

Проверка результата после удаления движений

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

Дополнительно проверьте итоги регистра: откройте карточку документа и убедитесь, что список его движений пуст (в типовых — кнопка «Движения документа» или переход по подсистеме «Движения»). Если движения отображаются, значит отбор по регистратору был установлен неверно или документ перепровели повторно.

Контрольные точки

Как проверить результат

Отчёт по регистру с отбором по документу
Норма

Записей по документу нет

Тревожный признак

Строки остались — отбор по регистратору не сработал

Форма документа, список движений
Норма

Регистр отсутствует в движениях или пуст

Тревожный признак

Движения на месте — документ проведён повторно

Итоги по регистру за период
Норма

Суммы соответствуют ожиданиям после сверки

Тревожный признак

Итоги «уехали» — затронуты лишние документы

Типичные ошибки и ограничения

Чаще всего проблемы возникают из-за работы без копии и неправильного отбора. Ошибка в установке отбора по регистратору (например, отбор не установлен вовсе) при вызове Записать() очистит весь регистр целиком — это критичная ситуация, восстановимая только из резервной копии.

Вторая распространённая ошибка — удаление движений вручную в базе с обменом данными (РИБ, синхронизация с другими системами). Изменения зарегистрируются в планах обмена или, наоборот, не уйдут в другие узлы, и базы разойдутся. В распределённых системах корректировку выполняют в главном узле и контролируют выгрузку.

Типичные ошибки
01
Вызов Записать() без установки отбора по регистратору — очищается весь регистр, восстановление только из копии
02
Удаление движений без резервной копии — откат невозможен
03
Правка движений в закрытом периоде без сверки — расхождение с сданной отчётностью
04
Игнорирование обмена данными — узлы РИБ расходятся, потребуется повторная синхронизация
05
Прямая правка таблиц на уровне СУБД — разрушение итогов регистра и потеря поддержки

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

FAQ: частые вопросы об удалении движений

Можно ли удалить движения, не отменяя проведение документа?

Да, программно: создать набор записей регистра, установить отбор по регистратору и вызвать Записать() с пустым набором. Документ останется проведённым, но его записи в этом регистре исчезнут. Учтите, что при следующем перепроведении движения появятся снова.

Как удалить движения у помеченного на удаление документа?

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

Что делать, если после очистки регистра отчёты показывают неверные остатки?

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

Можно ли удалить движения только за определённую дату?

Отбор в наборе записей устанавливается по регистратору, а не по периоду, поэтому удалить «все записи за дату» одной командой нельзя. Нужно сначала запросом выбрать документы за период, а затем в цикле очищать движения каждого регистратора — или использовать отмену проведения документов за период через типовую обработку.

Почему после удаления движений они появились снова?

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

Опасно ли удалять движения в рабочей базе при активных пользователях?

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

Итог

Что важно запомнить

Движения регистра накопления удаляются только через регистратор: отменой проведения, пометкой на удаление или записью пустого набора с отбором по документу. Всегда делайте резервную копию, проверяйте установленный отбор перед Записать() и сверяйте итоги после операции. Прямая правка таблиц на уровне СУБД недопустима.