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