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

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

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

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

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

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

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

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

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

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

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

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

Порядок действий
  1. 1
    Найдите документ-регистратор через отчёт по регистру или поиском по ссылке
  2. 2
    Откройте документ и нажмите «Отменить проведение» (или снимите пометку проведения в списке)
  3. 3
    Для массовой отмены используйте обработку «Групповое изменение реквизитов» или «Проведение документов» из раздела «Администрирование»
  4. 4
    Проверьте регистр: откройте его список с отбором по регистратору — записей быть не должно

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

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

Способ 2. Ручная корректировка движений проведённого документа

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

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

Способ 3. Программное удаление записей через встроенный язык

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

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

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

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

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

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

bsl
Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ Регистратор ИЗ РегистрНакопления.ТоварыНаСкладах ГДЕ Регистратор.Организация = &Орг"); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НЗ = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НЗ.Отбор.Регистратор.Установить(Выборка.Регистратор); НЗ.Записать(Истина); КонецЦикла;

Способ 4. Типовые и внешние обработки

Если писать код нет возможности, задачу решают готовые инструменты. В конфигурациях на Библиотеке стандартных подсистем есть «Удаление помеченных объектов» — после пометки документов на удаление обработка удалит и объекты, и их движения. Для точечной работы с регистрами распространены внешние обработки типа «Редактор записей регистров» или универсальные консоли, позволяющие открыть таблицу регистра с отбором и удалить строки.

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

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

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

Штатно и безопасно; не работает при битых ссылках и требует доступа к документам

Ручная корректировка движений

Быстро для точечных правок; изменения теряются при перепроведении

Программное удаление набора записей

Решает любые случаи, включая «осиротевшие» записи; требует навыков и резервной копии

Внешние обработки

Не нужен код; есть риск некорректной работы стороннего инструмента

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

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

Дополнительно запустите тестирование и исправление информационной базы с проверкой логической и ссылочной целостности — это выявит «битые» ссылки, если удаление затронуло связанные объекты. В клиент-серверном варианте полезно проверить, не выросли ли ошибки в журнале регистрации за время операции.

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

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

Список регистра с отбором по регистратору
Норма

Записей нет

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

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

Обороты регистра за период
Норма

Обороты уменьшились ровно на сумму удалённых движений

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

Остатки «ушли в минус» или не изменились

Тестирование и исправление ИБ
Норма

Ошибок ссылочной целостности нет

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

Найдены битые ссылки — требуется восстановление связей

Журнал регистрации
Норма

Нет ошибок за время операции

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

Ошибки блокировок или транзакций — операция могла выполниться частично

Типичные ошибки и как их избежать

Чаще всего проблемы возникают не из-за самого удаления, а из-за пропущенных подготовительных шагов. Работа без резервной копии превращает любую ошибку в необратимую: восстановить записи регистра из журнала регистрации невозможно, помогает только копия базы или выгрузка DT.

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

Типичные ошибки
01
Удаление без резервной копии — при ошибке записи восстановить нечем
02
Запись пустого набора без отбора — очищается весь регистр, а не движения одного документа
03
Забытый параметр Истина в методе Записать() — движения добавляются вместо замещения, появляются дубли
04
Удаление записей в закрытом периоде — расхождение с сданной отчётностью
05
Отсутствие перепроведения зависимых документов — себестоимость и взаиморасчёты становятся некорректными
Перед массовой очисткой выгрузите удаляемые записи в табличный документ или файл через отчёт по регистру. Если выяснится, что удалили лишнее, эта выгрузка станет единственным источником для восстановления данных без отката всей базы.
ПЗ
Практическое замечание

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

Можно ли удалить записи регистра накопления без удаления документа?

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

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

Это «осиротевшие» записи. Найдите их регистраторы запросом (различные значения поля «Регистратор»), затем для каждого создайте набор записей, установите отбор по регистратору и запишите пустой набор с замещением. Предварительно проверьте ссылочную целостность базы через тестирование и исправление.

Удалятся ли записи регистра при пометке документа на удаление?

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

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

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

Можно ли восстановить удалённые записи регистра?

Штатного механизма отмены нет. Варианты: перепровести документ-регистратор, если он существует; восстановить данные из резервной копии; загрузить записи из предварительно сделанной выгрузки. Поэтому копия базы перед операцией — обязательное условие.

Нужен ли монопольный режим для удаления записей?

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

Итог

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

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