Администрирование · 10 мин
Как удалить движения документа в 1С 8 без потери данных
Как удалить движения документа в 1С 8.3: через отмену проведения, обработку и код на встроенном языке. Риски, проверка результата и типичные ошибки.
Движения документа в 1С 8 — это записи в регистрах (накопления, сведений, бухгалтерии, расчета), которые платформа формирует при проведении. Иногда их нужно удалить: документ проведён ошибочно, требуется перепровести его с нуля, либо в регистрах остались «хвосты» после удаления самого документа. Способ удаления зависит от того, существует ли документ и должен ли он остаться в базе.
Главное правило: штатный и самый безопасный путь — отмена проведения документа. Прямая очистка записей регистров через код или обработки — рабочий, но рискованный приём, требующий резервной копии и понимания того, какие регистры затрагиваются. Ниже разобраны все варианты с конкретным кодом и проверками результата.
Что такое движения документа и когда их нужно удалять
При проведении документа платформа вызывает его обработчик «ОбработкаПроведения», в котором формируются наборы записей по регистрам, указанным в свойстве «Движения» объекта метаданных. Каждая запись содержит ссылку на регистратор — сам документ. Пока документ проведён, его движения участвуют в отчётах, расчёте итогов и контроле остатков.
Типичные ситуации, когда требуется удалить движения: документ проведён с ошибкой и мешает корректным остаткам; после удаления документа в регистрах остались «осиротевшие» записи (такое бывает при прямом удалении объектов обработками); нужно очистить движения перед повторным проведением с изменённой логикой; выполняется свёртка или чистка тестовой базы.
Способ 1. Отмена проведения — штатный и безопасный вариант
Если документ на месте и помечать его на удаление не требуется, достаточно отменить проведение. Откройте документ и нажмите кнопку «Провести» ещё раз (в управляемых формах — «Провести и закрыть» переключается командой отмены, либо используйте меню «Ещё → Отменить проведение»). Платформа автоматически удалит все записи этого документа из всех регистров, по которым он двигается.
Для списка документов удобна групповая отмена: выделите нужные строки в журнале, вызовите контекстное меню и выберите «Отменить проведение». В типовых конфигурациях также есть обработка «Групповое изменение реквизитов», но для движений надёжнее стандартная команда отмены проведения — она корректно отрабатывает контроль итогов и последовательности.
- 1Сделайте резервную копию базы или убедитесь, что есть свежий бэкап
- 2Откройте документ или выделите группу документов в журнале
- 3Выполните команду «Отменить проведение»
- 4Постройте отчёт по соответствующему регистру и убедитесь, что записей документа нет
Способ 2. Удаление движений кодом через набор записей
Когда документ уже удалён, а записи остались, либо нужно очистить движения без отмены проведения, используется встроенный язык. Принцип: для каждого регистра из списка «Движения» документа создаётся набор записей, устанавливается отбор по регистратору, и набор записывается пустым — старые записи стираются.
Пример кода для внешней обработки или консоли кода:
// СсылкаДок — ссылка на документ, чьи движения удаляем
МетаданныеДок = СсылкаДок.Метаданные();
Для Каждого Регистр Из МетаданныеДок.Движения Цикл
Если Метаданные.РегистрыНакопления.Содержит(Регистр) Тогда
Набор = РегистрыНакопления[Регистр.Имя].СоздатьНаборЗаписей();
ИначеЕсли Метаданные.РегистрыСведений.Содержит(Регистр) Тогда
Набор = РегистрыСведений[Регистр.Имя].СоздатьНаборЗаписей();
ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(Регистр) Тогда
Набор = РегистрыБухгалтерии[Регистр.Имя].СоздатьНаборЗаписей();
ИначеЕсли Метаданные.РегистрыРасчета.Содержит(Регистр) Тогда
Набор = РегистрыРасчета[Регистр.Имя].СоздатьНаборЗаписей();
Иначе
Продолжить;
КонецЕсли;
Набор.Отбор.Регистратор.Установить(СсылкаДок);
Набор.Записать(Истина); // записывает пустой набор, стирая движения
КонецЦикла;
Метод Записать(Истина) с параметром «Замещать» перезаписывает существующие записи регистратора пустым набором. Код выполняется в пользовательском режиме через обработку «Консоль кода» или аналогичный инструмент и требует прав на изменение соответствующих регистров.
Способ 3. Типовые обработки и инструменты администратора
В типовых конфигурациях на БСП есть обработка «Удаление помеченных объектов» (Администрирование → Обслуживание). При непомеченном удалении документа его движения удаляются штатно. Однако если объекты удалялись «напрямую» сторонними обработками, в регистрах могут остаться записи с битыми ссылками на регистратор.
Для поиска таких остатков используйте «Тестирование и исправление» информационной базы (конфигуратор) с включённой проверкой ссылочной целостности, либо запросом найдите записи, где регистратор отсутствует в таблице документов. Популярные обработки с ИТС и инфраструктурные инструменты вроде «Консоли запросов» позволяют выборочно очистить движения по списку регистраторов.
Как найти «осиротевшие» движения без документа
Признак проблемы — отчёт по регистру показывает строки с пустым или битым регистратором (отображается как «Объект не найден»). Проверить можно запросом: выбрать записи регистра с левым соединением к таблице документа, где ссылка документа есть NULL.
Пример запроса для консоли:
ВЫБРАТЬ Рег.Регистратор
ИЗ РегистрНакопления.ТоварыНаСкладах КАК Рег
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК Док
ПО Рег.Регистратор = Док.Ссылка
ГДЕ Док.Ссылка ЕСТЬ NULL
СГРУППИРОВАТЬ ПО Рег.Регистратор
Полученный список регистраторов обрабатывается кодом из второго способа: для каждой битой ссылки создаётся пустой набор записей с отбором и записывается. Работайте пакетами, если записей много, чтобы не блокировать базу надолго.
Как проверить результат
Записей нет, отчёт пустой
Строки с регистратором всё ещё выводятся
Документ не проведён, кнопка «Провести» активна
Документ числится проведённым при пустых движениях
Остатки соответствуют ожиданиям после пересчёта
Появились отрицательные или завышенные остатки
Типичные ошибки и ограничения
Частая ошибка — очистка движения только в одном регистре, когда документ двигает несколько. В результате отчёты расходятся между собой: складской учёт очищен, а бухгалтерский нет. Всегда перебирайте полный список регистров из свойства «Движения» метаданных документа.
Вторая ошибка — удаление записей в закрытом периоде. Если дата документа попадает в период, по которому сдана отчётность, изменение движений исказит уже утверждённые данные. Устанавливайте дату запрета редактирования и не трогайте движения закрытых периодов без крайней необходимости и согласования с бухгалтерией.
Третья ошибка — работа в многопользовательской базе без монопольного режима при массовой очистке. Долгие транзакции вызывают блокировки и конфликты. Выполняйте пакетную обработку в нерабочее время и фиксируйте транзакцию порциями.
Что выбрать в вашей ситуации
Как выбрать действие
Итоговая логика проста: пока документ жив — управляйте движениями через проведение и отмену проведения, это единственный полностью контролируемый платформой механизм. Ручная очистка кодом — инструмент восстановления после нештатных ситуаций, а не повседневная практика.
Что важно запомнить
Штатное удаление движений — это отмена проведения документа. Для «осиротевших» записей используйте пустые наборы записей с отбором по регистратору. Перед любыми ручными операциями делайте резервную копию и проверяйте результат отчётом по регистру.
Частые вопросы
Можно ли удалить движения, не отменяя проведение документа?
Технически да — кодом через пустой набор записей. Но документ при этом останется в состоянии «проведён» с пустыми движениями, что нарушит логику учёта и контроль последовательностей. Делайте так только для восстановления после сбоев и сразу приводите состояние документа в соответствие.
Почему после удаления документа записи в регистрах остались?
Обычно это результат прямого удаления объекта сторонними обработками в обход штатных механизмов, либо сбоя во время удаления. Штатное удаление помеченных объектов всегда очищает движения. Остатки убираются кодом с отбором по битой ссылке регистратора.
Нужно ли пересчитывать итоги после удаления движений?
Если движения удалены штатно (отменой проведения), платформа сама корректно обновляет итоги. После прямой очистки кодом рекомендуется выполнить пересчёт итогов по затронутым регистрам через «Тестирование и исправление» или средствами СУБД, чтобы исключить расхождения в отчётах.
Как удалить движения у большой группы документов сразу?
Выделите документы в журнале и выполните групповую отмену проведения. Если документы недоступны (удалены), напишите обработку, которая перебирает список ссылок и для каждой очищает наборы записей по всем регистрам, фиксируя транзакцию порциями по 50–100 документов.
Можно ли восстановить удалённые движения?
Да, если документ сохранился: достаточно провести его заново — движения сформируются повторно по текущим данным документа. Если удалён и сам документ, восстановление возможно только из резервной копии базы.
Почему отмена проведения не удаляет движения в одном из регистров?
Проверьте, что регистр включён в список «Движения» в метаданных документа и что записи создавались именно этим документом, а не другой операцией или ручной корректировкой. Записи, созданные вручную (например, документом «Операция» или корректировкой регистров), удаляются отменой проведения того объекта, который их создал.