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