Удаление регистров в конфигурации 1С 8.3: способы и риски
Содержание
Удалить регистры в 1С:Бухгалтерия 8.3 можно двумя совершенно разными действиями, и их постоянно путают. Удаление самого объекта метаданных (регистр накопления, сведений, бухгалтерии) делают только в Конфигураторе. А очистку накопленных записей — встроенным языком, перепроведением документов или специальными обработками, не трогая структуру.
От того, что вам нужно на самом деле, зависит всё: сложность, риски и возможность отката. Поэтому первый шаг — честно ответить, вы хотите убрать таблицу из конфигурации целиком или просто избавиться от данных внутри неё.
Любое удаление регистра в типовой конфигурации на поддержке нарушает её целостность и усложняет обновления. Прежде чем что-то удалять — сделайте резервную копию базы. Для файловой базы это выгрузка в .dt (Администрирование → Выгрузить информационную базу в Конфигураторе), для клиент-серверной надёжнее бэкап средствами СУБД. Выгрузка .dt большой клиент-серверной базы может длиться часами — планируйте время.
Что вы удаляете: объект метаданных или его записи
Это главная развилка. Разберём на примере.
- Объект метаданных — это сама таблица регистра в структуре конфигурации. Удаляется в Конфигураторе клавишей
Del. Вместе с ним физически удаляется таблица в базе данных и все её записи. Отменить нельзя — только восстановить из копии. - Записи (движения) — это строки внутри регистра. Их чистят, не затрагивая структуру: объект остаётся, таблица пустеет. Это обратимо, если есть бэкап, и безопаснее.
Чаще всего пользователю нужно именно второе: убрать лишние движения, обнулить остатки, стереть ошибочно загруженные данные. Удаление самого регистра — задача разработчика, и в типовой базе она нужна редко.
Виды регистров и как это влияет на удаление
В 1С:Бухгалтерия встречаются четыре типа регистров, и ведут они себя при удалении по-разному.
| Тип регистра | Что хранит | Чем чистятся записи |
|---|---|---|
| Накопления | остатки и обороты (товары, взаиморасчёты) | через регистратор — перепроведением или отменой проведения документа |
| Сведений | срезы значений (курсы, настройки, цены) | набором записей по отбору; независимые — свободно |
| Бухгалтерии | проводки (счёт Дт/Кт, суммы) | через регистратор — документ, формирующий проводку |
| Расчёта | начисления по периодам (есть в ЗУП, в БП почти не используется) | через регистратор |
Ключевое различие — подчинение регистратору. Если регистр подчинён регистратору (накопления, бухгалтерии, часть регистров сведений), его записи «принадлежат» документу. Удалить их отдельно от документа встроенным языком можно только по отбору на регистратор, но при следующем проведении документа движения вернутся. Независимый регистр сведений (например, ручные настройки) чистится свободно — он ни к какому документу не привязан.
Важна и периодичность регистра сведений. У периодического регистра в отборе участвует ещё и период: один и тот же набор измерений хранит несколько записей на разные даты. При очистке такого регистра учитывайте период, иначе удалите не тот срез.
Как объект метаданных все четыре типа удаляются одинаково — в дереве конфигурации. А вот последствия разные: удаление регистра бухгалтерии в типовой базе равнозначно поломке всего учёта, тогда как своя вспомогательная таблица сведений уходит без следа для документов.
Удаление регистра в Конфигураторе
Это способ «через интерфейс 1С» — то есть через Конфигуратор, где и живут объекты метаданных. В режиме 1С:Предприятие удалить регистр нельзя, там нет доступа к структуре.
Операцию делают, когда в базе никто не работает: обновление структуры требует монопольного доступа, активные сеансы придётся завершить.
- Откройте базу в режиме Конфигуратор.
- Если конфигурация типовая и на поддержке — сначала включите возможность редактирования: меню
Конфигурация → Поддержка → Настройка поддержки, затем кнопкаВключить возможность изменения. Для своих доработок этот шаг не нужен. - В дереве конфигурации раскройте ветку нужного типа:
Регистры накопления,Регистры сведенийилиРегистры бухгалтерии. - Выделите регистр и нажмите
Del(или правой кнопкой → удалить). - Платформа покажет окно со ссылками на объект — список мест, где регистр используется (движения документов, запросы отчётов, формы). Пока эти ссылки есть, удаление заблокировано.
- Уберите все ссылки: в модулях документов удалите движения по этому регистру, в отчётах — обращения к нему. После этого повторите удаление.
- Сохраните конфигурацию и выполните
Конфигурация → Обновить конфигурацию базы данных(клавишаF7). Именно на этом шаге таблица физически удаляется из базы.
После обновления структуры данные регистра не восстановить штатно — только развернув резервную копию.
Очистка данных регистра встроенным языком
Если нужно убрать не объект, а записи, работает встроенный язык 1С. Основной инструмент — набор записей: пустой набор, записанный по отбору, удаляет строки, попавшие в отбор.
Пример для независимого регистра сведений — удалить записи по одному измерению:
НаборЗаписей = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Организация.Установить(СсылкаНаОрганизацию);
НаборЗаписей.Записать(); // набор пуст → записи по отбору удаляются
Записать пустой набор без отбора не очистит всю таблицу: платформа заменяет только те записи, что попали в отбор, а при пустом отборе заменять нечего. Чтобы очистить регистр целиком, переберите все комбинации измерений — запросом получите уникальные значения и пройдите по ним в цикле:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ Организация
|ИЗ РегистрСведений.МойРегистр";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Набор = РегистрыСведений.МойРегистр.СоздатьНаборЗаписей();
Набор.Отбор.Организация.Установить(Выборка.Организация);
Набор.Записать(); // пустой набор по отбору = удаление
КонецЦикла;
Такой цикл гарантированно обходит все значения измерения и чистит их по одному. Для больших таблиц разумно обрабатывать данные частями и в транзакции, чтобы не держать блокировки слишком долго.
Для регистров накопления и бухгалтерии записи подчинены регистратору. Удалить их можно отбором по регистратору:
НаборЗаписей = РегистрыНакопления.МойРегистр.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
НаборЗаписей.Записать();
Движения, удалённые у подчинённого регистра, вернутся при следующем проведении документа. Если движения должны исчезнуть насовсем — отмените проведение самого документа или исправьте его модуль.
Этот код — разовая обработка. Запускают её через Файл → Открыть внешней обработки или в консоли кода. Перед массовым изменением записей обязательно сделайте копию базы — набор записей меняет данные без возможности отмены внутри сеанса.
Прямое удаление через SQL: почему так делать не стоит
В интернете советуют «просто сделать TRUNCATE таблицы регистра в СУБД». Технически это возможно, но для рабочей базы 1С это плохая идея, и вот почему.
- Имена таблиц нечитаемые. Регистр не называется в СУБД по-человечески — это служебное имя вида
_AccumRg1234или_InfoRg567. Сопоставить его с регистром можно только через структуру хранения базы данных; ошибка в имени — и вы чистите не ту таблицу. - Нарушается целостность. У регистра накопления рядом лежат таблицы итогов (
_AccumRgT…). Если удалить движения через SQL, а итоги не пересчитать — остатки в отчётах разъедутся. - Теряется поддержка. Фирма 1С не поддерживает прямое изменение базы средствами СУБД. После такого вмешательства любой инцидент — ваша зона ответственности.
- Риск для кластера.
DELETE/TRUNCATEмимо платформы не уведомляет сервер 1С, кэш и блокировки остаются несогласованными.
Если задача всё же требует работы на уровне СУБД (например, разовая чистка архивной копии, а не рабочей базы) — делайте это на отдельной копии, затем загрузите её обратно и выполните полный пересчёт итогов и проверку. В рабочей базе чистите только штатными средствами.
Отдельно про остатки: у регистров накопления и бухгалтерии платформа хранит рассчитанные итоги в служебных таблицах. Даже штатная чистка записей требует последующего пересчёта итогов, иначе отчёты по остаткам покажут старые суммы. Пересчёт запускают в режиме 1С:Предприятие (управление итогами) либо в Конфигураторе при тестировании и исправлении базы. Прямое SQL-удаление этот механизм не затрагивает вовсе — ещё одна причина им не пользоваться.
Частые ошибки при удалении регистров
Эти промахи встречаются чаще всего — и большинство приводит к потере данных или поломке проведения.
- 🔸 Удалили объект вместо очистки записей. Хотели обнулить остатки, а стёрли регистр целиком вместе со структурой. Сначала решайте, что именно убираете.
- 🔸 Не сделали копию. Удаление регистра и запись пустого набора необратимы внутри сеанса. Нет бэкапа — нет отката.
- 🔸 Удалили типовой регистр на поддержке. Проведение документов, которые писали в него движения, сломается с ошибкой. Типовые регистры не удаляют.
- 🔸 Проигнорировали ссылки на объект. Удалили регистр, но забыли убрать движения в модулях документов — конфигурация не соберётся или выдаст ошибку при проведении.
- 🔸 Забыли обновить конфигурацию
базы данных. Объект удалён из конфигурации, но
F7не нажали — изменения не применились, таблица осталась. - 🔸 Чистили записи при работающих пользователях. Параллельное проведение документов во время массовой чистки даёт блокировки и непредсказуемый результат.
Как вернуть удалённое
Штатного «отменить» у удаления регистра нет. Варианты восстановления зависят от того, что у вас сохранилось.
- Резервная копия базы. Главный и самый надёжный путь. Разверните
.dtили бэкап СУБД на тестовую базу, перенесите нужные данные или просто вернитесь к копии. Поэтому копию и делают перед операцией. - Хранилище конфигурации. Если вы работали через хранилище, сам объект метаданных можно вернуть из истории версий — но без данных, только структуру.
- Перепроведение документов . Если удалили только движения подчинённого регистра, а документы целы — групповое перепроведение восстановит движения заново. Для независимых регистров сведений этот способ не работает: там данные не из документов.
Отдельная ситуация — когда удалён объект метаданных, а свежей копии нет, но есть бэкап недельной давности. Тогда разумно развернуть старую копию рядом, а недостающие данные за прошедшую неделю перенести выгрузкой/загрузкой или обработкой. Полностью заменять рабочую базу устаревшей копией стоит только если новых данных в ней почти нет.
Если копии нет и документы удалены — восстановить записи регистра, скорее всего, уже не получится. Это и есть главный аргумент за бэкап перед любой необратимой операцией.
Чем заменить удаление регистра
Часто удаление регистра — не то, что реально нужно. Разумные альтернативы:
- Очистить данные, оставив объект. Если регистр захламлён ошибочными записями — почистите записи (см. выше), а структуру сохраните. Документы продолжат работать.
- Перестать использовать. Свой регистр, который больше не нужен, можно просто не заполнять: убрать движения в документах. Объект останется пустым и ничему не помешает.
- Удаление помеченных объектов. Если проблема в лишних документах, а не в регистре — пометьте их на удаление и запустите штатную обработку
Администрирование → Обслуживание → Удаление помеченных объектов. Она уберёт и документы, и их движения, проверив ссылки. - Пересчёт итогов. Когда остатки «врут», регистр удалять не нужно — достаточно пересчитать итоги и перепровести документы за период.
Удаление объекта оставьте на крайний случай: когда регистр точно ваш, точно лишний и вы готовы к тому, что откат будет только из копии.
Частые вопросы
Можно ли удалить регистр в режиме 1С:Предприятие?
Почему 1С не даёт удалить регистр?
Удалится ли таблица в базе данных сразу?
Del. Таблица физически удаляется только после Обновить конфигурацию базы данных (F7), когда платформа применяет изменения структуры.