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