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

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

Как удалить движения документа в 1С 8 без потери данных

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

Движения документа в 1С 8 — это записи в регистрах (накопления, сведений, бухгалтерии, расчета), которые платформа формирует при проведении. Иногда их нужно удалить: документ проведён ошибочно, требуется перепровести его с нуля, либо в регистрах остались «хвосты» после удаления самого документа. Способ удаления зависит от того, существует ли документ и должен ли он остаться в базе.

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

Что такое движения документа и когда их нужно удалять

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

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

Способ 1. Отмена проведения — штатный и безопасный вариант

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

Для списка документов удобна групповая отмена: выделите нужные строки в журнале, вызовите контекстное меню и выберите «Отменить проведение». В типовых конфигурациях также есть обработка «Групповое изменение реквизитов», но для движений надёжнее стандартная команда отмены проведения — она корректно отрабатывает контроль итогов и последовательности.

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

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

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

Пример кода для внешней обработки или консоли кода:

// СсылкаДок — ссылка на документ, чьи движения удаляем

МетаданныеДок = СсылкаДок.Метаданные();

Для Каждого Регистр Из МетаданныеДок.Движения Цикл

Если Метаданные.РегистрыНакопления.Содержит(Регистр) Тогда

Набор = РегистрыНакопления[Регистр.Имя].СоздатьНаборЗаписей();

ИначеЕсли Метаданные.РегистрыСведений.Содержит(Регистр) Тогда

Набор = РегистрыСведений[Регистр.Имя].СоздатьНаборЗаписей();

ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(Регистр) Тогда

Набор = РегистрыБухгалтерии[Регистр.Имя].СоздатьНаборЗаписей();

ИначеЕсли Метаданные.РегистрыРасчета.Содержит(Регистр) Тогда

Набор = РегистрыРасчета[Регистр.Имя].СоздатьНаборЗаписей();

Иначе

Продолжить;

КонецЕсли;

Набор.Отбор.Регистратор.Установить(СсылкаДок);

Набор.Записать(Истина); // записывает пустой набор, стирая движения

КонецЦикла;

Метод Записать(Истина) с параметром «Замещать» перезаписывает существующие записи регистратора пустым набором. Код выполняется в пользовательском режиме через обработку «Консоль кода» или аналогичный инструмент и требует прав на изменение соответствующих регистров.

Способ 3. Типовые обработки и инструменты администратора

В типовых конфигурациях на БСП есть обработка «Удаление помеченных объектов» (Администрирование → Обслуживание). При непомеченном удалении документа его движения удаляются штатно. Однако если объекты удалялись «напрямую» сторонними обработками, в регистрах могут остаться записи с битыми ссылками на регистратор.

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

Как найти «осиротевшие» движения без документа

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

Пример запроса для консоли:

ВЫБРАТЬ Рег.Регистратор

ИЗ РегистрНакопления.ТоварыНаСкладах КАК Рег

ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК Док

ПО Рег.Регистратор = Док.Ссылка

ГДЕ Док.Ссылка ЕСТЬ NULL

СГРУППИРОВАТЬ ПО Рег.Регистратор

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

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

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

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

Записей нет, отчёт пустой

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

Строки с регистратором всё ещё выводятся

Форма документа
Норма

Документ не проведён, кнопка «Провести» активна

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

Документ числится проведённым при пустых движениях

Итоги и остатки
Норма

Остатки соответствуют ожиданиям после пересчёта

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

Появились отрицательные или завышенные остатки

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

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

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

Третья ошибка — работа в многопользовательской базе без монопольного режима при массовой очистке. Долгие транзакции вызывают блокировки и конфликты. Выполняйте пакетную обработку в нерабочее время и фиксируйте транзакцию порциями.

Типичные ошибки
01
Очистка движений только в части регистров — отчёты начинают противоречить друг другу
02
Работа без резервной копии — ошибочное удаление невозможно откатить
03
Изменение движений закрытого периода — искажение сданной отчётности
04
Массовая очистка в одной транзакции в рабочее время — блокировки и обрывы сеансов пользователей

Что выбрать в вашей ситуации

Маршрут решения

Как выбрать действие

Документ существует и просто проведён ошибочноОтмените проведение штатной командой — платформа сама удалит движения
Документ помечен на удалениеЗапустите штатное удаление помеченных объектов — движения удалятся вместе с документом
Документ удалён, а записи в регистрах осталисьНайдите битых регистраторов запросом и очистите движения кодом через пустые наборы записей
Нужно перепровести документ с новой логикойНе удаляйте движения вручную — просто перепроведите документ, записи заместятся автоматически

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

Итог

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

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

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

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

Технически да — кодом через пустой набор записей. Но документ при этом останется в состоянии «проведён» с пустыми движениями, что нарушит логику учёта и контроль последовательностей. Делайте так только для восстановления после сбоев и сразу приводите состояние документа в соответствие.

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

Обычно это результат прямого удаления объекта сторонними обработками в обход штатных механизмов, либо сбоя во время удаления. Штатное удаление помеченных объектов всегда очищает движения. Остатки убираются кодом с отбором по битой ссылке регистратора.

Нужно ли пересчитывать итоги после удаления движений?

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

Как удалить движения у большой группы документов сразу?

Выделите документы в журнале и выполните групповую отмену проведения. Если документы недоступны (удалены), напишите обработку, которая перебирает список ссылок и для каждой очищает наборы записей по всем регистрам, фиксируя транзакцию порциями по 50–100 документов.

Можно ли восстановить удалённые движения?

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

Почему отмена проведения не удаляет движения в одном из регистров?

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