Очистка регистров накопления и сведений в 1С 8.3 без поломки учёта
Содержание
Очистить регистр в 1С можно тремя способами, и выбор зависит от его типа. Записи регистра, подчинённого регистратору (регистры накопления, бухгалтерии и большинство регистров сведений), убирают через документ: отменой проведения, ручной корректировкой движений или удалением документа. Записи независимого регистра сведений удаляют прямо из его списка: Все функции → Регистры сведений → <регистр>, выделить строки, Delete.
Массовую или выборочную очистку делают внешней обработкой: запросом находят нужные записи или регистраторы, а потом пишут пустой набор записей. После любой очистки регистров накопления и бухгалтерии стоит пересчитать итоги , иначе остатки в отчётах могут расходиться с движениями.
Как устроены регистры в 1С и почему «просто удалить строки» не выйдет
Регистр — это таблица, в которой программа хранит накопленные данные: остатки товаров, взаиморасчёты, курсы валют, начисления. Пользователь почти никогда не пишет в регистр напрямую. Записи появляются при проведении документов.
Виды регистров, с которыми вы столкнётесь:
- 📦 Регистр накопления — остатки и обороты (товары на складах, взаиморасчёты, партии). Всегда подчинён регистратору.
- 📒 Регистр бухгалтерии — проводки. Тоже подчинён регистратору: документу или операции, введённой вручную.
- 🗂️ Регистр сведений — значения на дату или без даты (курсы, цены, настройки, сведения о сотрудниках). Бывает подчинённым регистратору и независимым.
- 🧮 Регистр расчёта — начисления и удержания в зарплатных конфигурациях. Подчинён документам.
Главное различие — режим записи. У подчинённого регистра каждая запись привязана к документу-регистратору. Записи одного документа образуют набор, и программа перезаписывает его целиком при каждом проведении. Удалить одну строку такого набора из списка регистра нельзя: список только показывает движения.
У независимого регистра сведений регистратора нет. Его записи вводят вручную или обработками, и удалять их можно поштучно.
Тип регистра видно по списку записей. Если в нём есть колонка «Регистратор» — регистр подчинённый, чистить его нужно через документы.
Что такое итоги регистра
У регистров накопления и бухгалтерии, кроме самих движений, есть таблица итогов: заранее посчитанные остатки по периодам. Отчёты читают остатки именно оттуда, чтобы не складывать миллионы строк. Если движения удалить, а итоги не пересчитать, база покажет остатки по старым данным. Поэтому пересчёт итогов — обязательная часть очистки.
Подготовка базы к очистке регистров
Очистка движений необратима. Отменить её кнопкой нельзя, вернуть данные можно только из копии.
Перед очисткой любого регистра сделайте полную резервную копию базы .
Порядок подготовки:
- Выгрузите базу. В конфигураторе:
Администрирование → Выгрузить информационную базу, файл.dt. Для клиент-серверной базы подойдёт и резервная копия СУБД. - Проверьте копию. Загрузите
.dtв пустую базу и откройте её. Непроверенная копия — не копия. - Потренируйтесь на копии. Всё, что описано ниже, сначала выполните в тестовой базе и сверьте результат.
- Договоритесь о времени. Массовая очистка и пересчёт итогов нагружают базу. Пользователи увидят тормоза и блокировки, поэтому работу лучше запускать вечером или в выходной.
- Включите команду «Все функции». В интерфейсе «Такси»: главное меню (кнопка с тремя полосками в заголовке окна)
→ Сервис → Параметры, флажок «Отображать команду “Все функции”». Без неё списки регистров в пользовательском режиме не открыть.
Проверьте права. Удалять записи регистров может пользователь с ролью «Полные права» или «Администратор системы». Для запуска внешних обработок в конфигурациях на БСП нужна отдельная роль на открытие внешних отчётов и обработок, а программа покажет предупреждение о защите от опасных действий.
Как очистить движения регистра через документ
Это самый безопасный путь: программа сама убирает записи из всех регистров, в которые писал документ, и не оставляет «висящих» движений.
Способ 1. Отмена проведения
- Откройте журнал документов нужного вида.
- Выделите один или несколько документов (
ShiftилиCtrl+ клик). - В командной панели списка нажмите
Отмена проведения(команда есть в менюЕщё).
Движения исчезнут из всех регистров сразу. Сам документ останется в базе непроведённым, его можно исправить и провести заново.
Способ 2. Ручная корректировка движений (БП 3.0)
В Бухгалтерии предприятия 3.0 можно убрать часть движений документа, не трогая остальные:
- Откройте проведённый документ.
- Нажмите кнопку
Показать проводки и другие движения документа(значок «Дт/Кт»). - Установите флажок «Ручная корректировка».
- Перейдите на вкладку нужного регистра, выделите строки и удалите их.
- Нажмите
Записать и закрыть.
Документ с ручной корректировкой больше не пересчитывает движения при перепроведении. Групповое перепроведение его тоже не исправит. Если нужно вернуть автоматические движения, снимите флажок «Ручная корректировка» и проведите документ заново.
Способ 3. Удаление документа
Если документ ошибочный, пометьте его на удаление (Del в списке), а потом удалите помеченные объекты: Администрирование → Обслуживание → Удаление помеченных объектов. Вместе с документом уйдут все его движения.
Программа не удалит документ, на который ссылаются другие объекты. Она покажет список мешающих ссылок, и их придётся сначала поправить.
| Способ | Когда подходит | Что учесть |
|---|---|---|
| Отмена проведения | Нужно временно убрать движения, документ ещё нужен | Документ останется, его легко провести снова |
| Ручная корректировка | Лишняя строка в проводках или в одном регистре | Автоматический пересчёт движений отключается |
| Удаление помеченных | Документ ошибочный целиком | Мешают ссылки из других объектов |
Ручное удаление записей независимого регистра сведений
Цены номенклатуры, курсы валют, настройки, сведения, введённые без документа, хранятся в независимых регистрах сведений. Их чистят прямо из списка.
- Откройте
Все функции → Регистры сведений. - Найдите регистр по имени. Список длинный, удобнее набрать начало названия на клавиатуре.
- Отберите записи: по периоду, по измерению (например, по валюте или товару). Отбор настраивается в
Ещё → Настроить списокили через поиск по колонке. - Выделите строки (
Ctrl+A— все строки по отбору) и нажмитеDelete. - Подтвердите удаление.
Записи удаляются сразу, без пометки и без корзины.
Перед удалением выведите список в табличный документ: Ещё → Вывести список. Сохраните его в Excel — это быстрая «копия» удаляемых строк, по которой их можно восстановить вручную.
Некоторые регистры сведений программа заполняет сама: при обновлении, при обмене, по регламентному заданию. Если удалить их записи, они могут появиться снова или, хуже, сломать механизм, который на них опирается. Служебные регистры с непонятными названиями без нужды не трогайте.
Выборочная очистка регистра запросом и обработкой
Запрос в 1С только читает данные: оператора удаления в языке запросов нет. Поэтому выборочная очистка идёт в два шага. Сначала консоль запросов показывает, что именно попадёт под удаление. Потом внешняя обработка удаляет эти записи кодом.
Шаг 1. Найти записи консолью запросов
Консоль запросов — внешняя обработка, которую открывают через Файл → Открыть. Пример запроса, который находит документы, оставившие движения в регистре накопления за период:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Движения.Регистратор КАК Регистратор
ИЗ
РегистрНакопления.ИмяРегистра КАК Движения
ГДЕ
Движения.Период МЕЖДУ &НачалоПериода И &КонецПериода
Подставьте имя регистра и параметры. Добавьте в условие отбор по измерению, например И Движения.Склад = &Склад. Посмотрите результат: это ровно тот список, движения которого вы уберёте.
Шаг 2. Очистить движения кодом
Самый чистый вариант — отменить проведение найденных документов. Тогда документы и регистры останутся согласованными:
&НаСервере
Процедура ОтменитьПроведениеНаСервере(НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Движения.Регистратор КАК Регистратор
|ИЗ
| РегистрНакопления.ИмяРегистра КАК Движения
|ГДЕ
| Движения.Период МЕЖДУ &НачалоПериода И &КонецПериода";
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.Регистратор.ПолучитьОбъект();
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЦикла;
КонецПроцедуры
Если нужно убрать движения только из одного регистра, а в остальных оставить, запишите пустой набор с отбором по регистратору:
Набор = РегистрыНакопления.ИмяРегистра.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ДокументСсылка);
Набор.Записать();
Метод Записать() по умолчанию замещает набор. Пустой набор с отбором стирает все записи этого регистратора в регистре.
После такой очистки документ формально остаётся проведённым, но движений в одном регистре у него нет. Первое же перепроведение вернёт их обратно. Этот приём годится, когда вы точно знаете, зачем рвёте связь документа и регистра.
Для независимого регистра сведений отбор ставят по измерениям:
Набор = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();
Набор.Отбор.Номенклатура.Установить(Товар);
Набор.Записать();
Пустой набор независимого регистра без единого отбора удаляет ВСЕ записи регистра. Проверьте отборы дважды, прежде чем запускать.
Как ускорить массовую очистку
Если записей сотни тысяч, перед циклом отключите использование итогов, а после — включите обратно:
РегистрыНакопления.ИмяРегистра.УстановитьИспользованиеИтогов(Ложь);
// ... очистка ...
РегистрыНакопления.ИмяРегистра.УстановитьИспользованиеИтогов(Истина);
При включении итогов платформа пересчитает их сама. Пока итоги выключены, отчёты по остаткам этого регистра работают медленно, так что делайте это вне рабочего времени.
Пересчёт итогов после очистки регистров
Даже если вы чистили штатными средствами, после массовой работы с движениями пересчитайте итоги. Это убирает расхождения между движениями и остатками в отчётах.
В пользовательском режиме
- Откройте
Все функции → Стандартные → Управление итогами. - Если форма открылась в кратком виде, перейдите в режим полных возможностей.
- Отметьте нужные регистры или все сразу.
- Нажмите команду пересчёта итогов.
В этой же форме можно сменить период рассчитанных итогов. По умолчанию итоги считают до текущего месяца, и менять это без причины не нужно.
В конфигураторе
Более глубокий вариант — тестирование и исправление:
- Откройте базу в конфигураторе. Работать с ней в этот момент никто не должен: для проверки нужен монопольный режим.
- Выберите
Администрирование → Тестирование и исправление. - Отметьте «Пересчёт итогов». Для полной проверки добавьте «Проверка логической целостности информационной базы» и «Проверка ссылочной целостности».
- Для битых ссылок выберите вариант «Не изменять», чтобы сначала увидеть масштаб проблемы.
- Нажмите
Выполнитьи дождитесь протокола.
Монопольный режим требует, чтобы в базе не было других сеансов. Предупредите пользователей заранее: их работа оборвётся, несохранённые документы пропадут.
Как проверить результат и целостность данных
Очистить регистр — половина дела. Вторая половина — убедиться, что учёт не поехал.
Что проверить:
- 📊 Остатки по регистру. Сформируйте универсальный отчёт по регистру (в БП 3.0:
Все функции → Отчеты → Универсальный отчет, тип источника — регистр накопления). Сравните с выгрузкой, сделанной до очистки. - ➖ Отрицательные остатки. Если вы убрали движения прихода, а расход остался, в регистре появятся минусы. Найдите их запросом по таблице остатков с условием
КоличествоОстаток < 0. - 📒 Оборотно-сальдовая ведомость. Для бухгалтерских конфигураций — сверьте сальдо по счетам, связанным с очищенным регистром.
- 🔁 Последовательность документов. Если очищали движения задним числом, проведите документы после этой даты заново, в хронологическом порядке. В БП 3.0 это делает обработка группового перепроведения документов в разделе
Операции. - 🧾 Протокол ТиИ. Ошибки логической и ссылочной целостности после очистки — повод вернуться к резервной копии и разобраться, что затронуто.
Запрос для поиска отрицательных остатков:
ВЫБРАТЬ
Остатки.Номенклатура,
Остатки.Склад,
Остатки.КоличествоОстаток
ИЗ
РегистрНакопления.ИмяРегистра.Остатки КАК Остатки
ГДЕ
Остатки.КоличествоОстаток < 0
Имена измерений и ресурсов подставьте из своего регистра: в разных конфигурациях они называются по-разному. Их видно в конфигураторе, в дереве объектов, в ветке нужного регистра.