Удаление движений и записей регистров: методы 1С 8.3
Содержание
Записи регистра в 1С 8.3 почти всегда формирует документ при проведении — напрямую в списке их не удалить и не поправить. Чтобы убрать такие движения, отменяют проведение документа-регистратора: его записи исчезают сразу из всех регистров. Вручную стирать строки разрешено только в независимых регистрах сведений — курсы валют, ручные настройки, корректировки.
Поэтому первый вопрос перед удалением — к какому типу относится регистр. От этого зависит и способ, и риск для учёта. Ниже — что можно удалять руками, где нужна отмена проведения, как это делается набором записей в коде и почему после удаления движений обязателен пересчёт итогов.
Любое удаление записей меняет остатки и обороты. Перед операцией сделайте резервную копию базы и убедитесь, что период не закрыт отчётностью.
Почему строки регистра не удаляются из списка
В 1С записи регистров бывают двух видов по способу хранения.
- 🔒 Подчинённые регистратору. Движения принадлежат документу: приход товара, начисление зарплаты, проводка. Такие записи создаются только при проведении и живут, пока документ проведён. Список регистра открывается на просмотр — кнопок «добавить» и «удалить» там нет.
- ✏️ Независимые регистры сведений. Данные вносят вручную или программно, без документа-регистратора: курсы валют, виды цен, пользовательские настройки. Их список редактируется — строки можно добавлять, менять и удалять.
Понять тип просто: если в списке регистра есть колонка «Регистратор» и нет кнопок редактирования — он подчинён документу. Если колонки «Регистратор» нет, а есть команды добавления строки — регистр независимый.
Тип регистра определяет и доступный способ удаления:
- 📊 Регистры накопления (остатки, обороты) — почти всегда подчинены регистратору. Записи убирают отменой проведения или перепроведением документа.
- 📒 Регистры бухгалтерии — хранят проводки, тоже подчинены документу. Напрямую проводку не удалить, только через документ-основание.
- 🧮 Регистры расчёта (в зарплатных конфигурациях) — подчинены документам начисления. Чистятся перепроведением расчётных документов.
- 📅 Регистры сведений — бывают и подчинёнными, и независимыми. Периодические независимые регистры (курсы валют) хранят записи по датам.
Если у регистра сведений в списке видна колонка «Регистратор» — он подчинён документу, даже будучи регистром сведений. Независимыми чаще бывают справочные и настроечные регистры.
Из этого следует главное правило: движения, которые создал документ, удаляются через сам документ, а не через регистр. Попытка «почистить» такой регистр напрямую либо невозможна в интерфейсе, либо ломает связь с документом.
Удаление записей независимого регистра сведений вручную
Независимый регистр правится прямо в пользовательском режиме. Нужно только добраться до его списка.
Список служебных регистров обычно не вынесен в меню конфигурации, поэтому его открывают через команду «Все функции». Она включается один раз:
- Нажмите стрелку вниз в левом верхнем углу — это
Главное меню. - Выберите
Сервис→Параметры. - Поставьте флажок
Отображать команду «Все функции»и сохраните.
После этого в Главное меню → Все функции появится раздел Регистры со списком всех регистров сведений. Открываете нужный, выделяете строку (или несколько с Shift/Ctrl) и жмёте Удалить на панели или клавишу Delete.
Если регистр периодический, у каждой записи своя дата и удаление затрагивает конкретный срез. Проверьте период отбора, прежде чем стирать: удалив запись за старую дату, вы измените значение, которое система подставляет на последующие даты (для периодических регистров берётся последнее значение до запрашиваемого момента). Так, стерев один курс валюты в середине месяца, вы заставите программу брать предыдущий курс до появления следующего.
Для массовой очистки удобнее отбор: задайте фильтр списка по измерению — конкретной валюте, организации, типу цен — и удаляйте уже отфильтрованные строки. Это безопаснее, чем снимать фильтр и выделять всё подряд: так меньше шанс задеть чужие данные.
Для подчинённого регистратору регистра команда удаления в списке недоступна — это не ошибка прав, а архитектура. Переходите к отмене проведения.
Очистка движений регистров накопления через документ
Записи регистров накопления (остатки товаров, взаиморасчёты, партии) стираются отменой проведения документа. Это штатный и безопасный путь: платформа сама убирает движения из всех регистров, куда писал документ.
Открываете документ и выполняете команду Отменить проведение — она есть в форме документа (иногда под кнопкой Ещё) и в списке документов при выделении строки. Пометка проведения снимается, движения удаляются.
Чтобы отменить проведение сразу у группы документов:
- Откройте журнал или список нужных документов.
- Выделите диапазон строк.
- В меню
Ещёвыберите команду отмены проведения для выделенных.
Если документ нужно сохранить, но временно убрать его влияние на остатки — отмена проведения как раз для этого: сам документ остаётся в базе, а его движения исчезают. Обратная операция — повторное проведение — вернёт записи.
Когда нужно не убрать, а переписать движения (изменились настройки учёта, релиз), используйте не удаление, а перепроведение. Оно очищает старые записи и формирует новые за один шаг.
Удаление записей программно: набор записей и роль запроса
Частое заблуждение — что записи регистра удаляют запросом. Язык запросов 1С только читает данные: команды DELETE в нём нет. Запрос помогает лишь выбрать, какие записи или регистраторы трогать. Само удаление выполняет объект «набор записей».
Набор записей читает и пишет записи регистра по отбору. Приём для удаления такой: открываете пустой набор, устанавливаете отбор и записываете его. Пустой набор с отбором замещает (стирает) все подходящие записи.
Удалить движения конкретного документа из регистра накопления:
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
НаборЗаписей.Записать(); // пустой набор с отбором = удаление записей
Очистить записи независимого регистра сведений по измерению:
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Валюта.Установить(ВыбраннаяВалюта);
НаборЗаписей.Записать(); // отбор по валюте — удалятся только её записи
Запрос тут уместен, когда нужно сначала найти список регистраторов, у которых есть лишние движения, а потом пройти по ним набором записей. Логика: запрос выбирает регистраторы → цикл по результату → для каждого пустой набор с отбором Регистратор → Записать().
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Регистратор
|ИЗ
| РегистрНакопления.ТоварыНаСкладах
|ГДЕ
| Период МЕЖДУ &Начало И &Конец";
Запрос.УстановитьПараметр("Начало", НачалоПериода);
Запрос.УстановитьПараметр("Конец", КонецПериода);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Набор = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
Набор.Записать(); // стирает движения этого документа
КонецЦикла;
Такой приём удаляет только движения из одного регистра. Документы останутся проведёнными, и платформа будет считать их проведёнными корректно, хотя часть записей исчезла. Это и есть источник рассинхронизации — поэтому для документов надёжнее отмена проведения, а набор записей держите для независимых регистров и служебных чисток.
Запись набора без установленного отбора заместит весь регистр пустым набором — то есть удалит все записи. Всегда проверяйте, что отбор задан.
Выполнять такой код в рабочей базе можно через консоль кода или внешнюю обработку . Запускайте операцию в монопольном режиме или вне рабочих часов: массовая запись наборов блокирует регистр, и у пользователей оборвутся операции.
Групповая очистка и типовые инструменты
Для разовых задач не обязательно писать код — помогут штатные обработки, которые открываются через Главное меню → Все функции → Стандартные.
| Инструмент | Что делает | Когда применять |
|---|---|---|
| Проведение документов | Групповое перепроведение за период | Движения устарели после смены настроек/релиза |
| Управление итогами | Пересчёт и установка периода итогов | После ручного удаления движений |
| Удаление помеченных объектов | Физическое удаление документов | Когда убрать нужно сам документ вместе с движениями |
Логика выбора простая:
- Нужно переписать движения — групповое перепроведение.
- Нужно убрать движения, оставив документы — групповая отмена проведения.
- Нужно убрать и документ, и его записи — пометьте документы на удаление и выполните «Удаление помеченных объектов».
Прямого удаления строк подчинённого регистра штатная обработка не делает — это по-прежнему только набор записей или отмена проведения. Для регулярной чистки независимых регистров по сложным условиям удобнее собственная внешняя обработка с набором записей: её можно подключить к базе без изменения конфигурации и запускать по мере надобности.
Групповое перепроведение запускают с осторожностью. Оно пересчитывает движения по действующим настройкам учёта, и если настройки менялись, результат за прошлые периоды может отличаться от исходного. Поэтому перепроводят закрытый период только при явной необходимости и всегда от резервной копии.
Целостность данных: итоги, последовательности и перепроведение
Удалить движения — половина дела. Регистры накопления и бухгалтерии хранят ещё и рассчитанные итоги (остатки и обороты по периодам). Прямое удаление записей набором итоги не трогает, и база начинает показывать остатки, которых в движениях уже нет.
Что проверить и восстановить после удаления:
- Пересчитайте итоги. В обработке «Управление итогами» выполните пересчёт по затронутым регистрам. Отчёты по остаткам снова сойдутся с движениями.
- Восстановите последовательности. Если в конфигурации есть граница последовательности (например, по партиям или взаиморасчётам), удаление движений в середине периода сдвигает её. Перепроведите документы с точки нарушения.
- Проверьте связанные регистры. Один документ пишет сразу в несколько регистров. Удалив записи только из одного набором, вы рассинхронизируете данные. Поэтому отмена проведения надёжнее ручной чистки — она снимает все движения документа разом.
Отмена проведения и перепроведение сами поддерживают итоги и последовательности в актуальном состоянии. Ручное удаление набором — нет, за ним нужен пересчёт вручную.
Проверить результат после чистки помогают стандартные отчёты. Для регистров накопления сверьте остатки в ведомости по регистру до и после операции. Для регистров бухгалтерии откройте оборотно-сальдовую ведомость за период: если сальдо по счёту изменилось не так, как ожидали, значит, задели лишние движения — разворачивайте резервную копию и повторяйте операцию аккуратнее.
Отдельная ситуация — закрытый период. Если месяц закрыт и по нему сдана отчётность, удаление движений задним числом изменит уже утверждённые цифры. Такие правки делают через корректирующие документы текущего периода, а не стиранием старых записей. Иначе данные в базе разойдутся со сданными декларациями и расчётами, и придётся объясняться с проверяющими.
Частые ошибки при удалении записей
- ❌ Чистят регистр вместо документа. Пытаются стереть движения подчинённого регистра, вместо того чтобы отменить проведение документа . В интерфейсе это невозможно, в коде — ломает связь с регистратором.
- ❌ Пишут пустой набор без отбора. Один запуск без установленного отбора очищает весь регистр. Проверяйте отбор до вызова
Записать(). - ❌ Удаляют движения и забывают про итоги. Остатки в отчётах расходятся с движениями. Нужен пересчёт в «Управлении итогами».
- ❌ Работают в рабочей базе днём. Массовая запись наборов блокирует регистр и обрывает операции пользователей. Делайте вне часов работы и после резервной копии.
- ❌ Правят закрытый период. Удаление старых движений меняет сданную отчётность. Используйте корректировки текущего периода.
Частые вопросы
Можно ли удалить запись регистра запросом с DELETE?
Чем отмена проведения отличается от удаления движений?
Как удалить движения сразу у всех документов за период?
Регистратор. После — пересчёт итогов.