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