Регистры в 1С:Предприятие — это ключевые объекты конфигурации, которые хранят данные о движениях, остатках и другой аналитической информации. Однако иногда возникает необходимость их удалить: при очистке тестовых баз, исправлении ошибок конфигурации или оптимизации производительности. Но неправильное удаление может привести к потере критичных данных или нарушению целостности системы.
В этой статье разберём все возможные сценарии удаления регистров — от стандартных методов через конфигуратор до программных решений с использованием встроенного языка. Особое внимание уделим регистрам накопления, сведений и бухгалтерии, так как их структура и зависимости требуют разных подходов. Также рассмотрим типичные ошибки и способы восстановления, если что-то пойдёт не так.
Прежде чем приступать к удалению, важно понять: регистры делятся на два типа по способу хранения данных — периодические (с привязкой к дате) и непериодические. От этого зависит не только метод удаления, но и последствия для связанных документов. Например, удаление регистра накопления ТоварыНаСкладах может "обнулить" остатки в отчётах, а удаление регистра сведений ЦеныНоменклатуры — сбросить историю цен.
Ещё один критичный момент — права доступа. Для удаления регистров через конфигуратор потребуется режим Конфигуратор с полными правами (администратор или разработчик). Если вы работаете в 1С:Управление торговлей 11 или 1С:Бухгалтерия 3.0, проверьте, не заблокированы ли объекты конфигурации поставщиком (это актуально для типовых решений с поддержкой).
Наконец, всегда делайте резервную копию базы перед массовыми изменениями. Даже если вы удаляете "ненужный" регистр, он мог использоваться в отчётах или обработках, о которых вы не знаете. В 1С:Предприятие 8.3 для этого подойдёт стандартный механизм выгрузки/загрузки (Администрирование → Выгрузка данных), но лучше использовать внешние инструменты вроде SQL-бэкапа или 1C:Reporter.
1. Типы регистров в 1С и их особенности при удалении
В 1С:Предприятие существует пять основных типов регистров, и каждый требует своего подхода к удалению. Рассмотрим их ключевые характеристики:
- 📊 Регистры накопления — хранят данные о движениях (приход/расход) и остатках. Пример:
ТоварыНаСкладах,ВзаиморасчётыСКонтрагентами. Их удаление приведёт к потере истории движений документов, но не всегда к ошибкам при проведении новых документов (если регистр не используется в алгоритмах). - 📝 Регистры сведений — содержат справочную информацию (цены, курсы валют, свойства объектов). Пример:
ЦеныНоменклатуры,КурсыВалют. Удаляются проще, но могут "подвесить" отчёты, если те обращаются к отсутствующим данным. - 💰 Регистры бухгалтерии — используются для хранения бухгалтерских проводок. Пример:
Хозрасчетный(в 1С:Бухгалтерия). Удаление такого регистра разорвёт связь с планом счетов и сделает невозможным формирование баланса. - 🔄 Регистры расчёта — хранят данные для сложных расчётов (зарплата, налоги). Пример:
НДФЛ,СтраховыеВзносы. Их удаление потребует пересчёта всех связанных начислений. - 🔗 Регистры информации — редко используемый тип, предназначенный для хранения произвольных данных. Удаляются без серьёзных последствий, если не задействованы в бизнес-логике.
Особенно осторожно следует относиться к регистрам бухгалтерии и накопления — их удаление может потребовать полного перепроведения документов в базе. Например, в 1С:УТ 11 регистр ТоварыНаСкладах связан с документами ПоступлениеТоваров и РеализацияТоваров. Если удалить его, старые документы потеряют данные об остатках, а новые не смогут корректно рассчитывать доступное количество товара.
Для регистров сведений и информации риски ниже, но всё равно есть нюансы. Например, регистр КурсыВалют может использоваться в отчётах за прошлые периоды. Если его удалить, отчёты либо покажут ошибку, либо подтянут текущие курсы, что исказит исторические данные.
2. Удаление регистра через конфигуратор: пошаговая инструкция
Самый надёжный способ удалить регистр — использовать режим конфигуратора. Этот метод подходит для всех версий 1С:Предприятие 8.3 и 8.2, включая типовые конфигурации (УТ 11, БП 3.0, ЗУП 3.1). Главное условие — наличие прав на изменение конфигурации.
Алгоритм действий:
удерживайте клавишу Конфигуратор (для этого при запуске 1СShift или выберите пункт в меню запуска).
Общие → Регистры (или Регистры накопления/сведений/бухгалтерии, в зависимости от типа).Удалить.Конфигурация → Обновить конфигурацию базы данных).Администрирование → Тестирование и исправление) для устранения возможных ошибок.Если регистр используется в других объектах конфигурации (документах, отчётах, обработках), система покажет список зависимостей. В этом случае удаление может быть заблокировано. Решения:
- 🔧 Удалить зависимости вручную — найти все объекты, ссылающиеся на регистр, и убрать ссылки.
- 🔄 Заменить регистр — создать новый регистр с аналогичной структурой и перенастроить на него зависимости.
- 🚫 Отказаться от удаления — если регистр критичен для работы системы.
Сделать резервную копию базы|Проверить права доступа (режим Конфигуратор)|Закрыть все сеансы пользователей|Отключить регламентные задания|Проверить зависимости регистра-->
В типовых конфигурациях (например, 1С:Бухгалтерия 3.0) некоторые регистры защищены от удаления. В этом случае появится сообщение: "Объект заблокирован для изменения поставщиком". Решения:
- 🔓 Снять блокировку через
Сервис → Параметры → Защита от опасных действий(не рекомендуется для рабочих баз!). - 🛠️ Использовать расширения конфигурации — перенести логику в расширение, а оригинальный регистр отключить.
- 📦 Создать новую конфигурацию на основе типовой и удалить регистр там (подходит для тестовых баз).
Если регистр не удаляется из-за зависимостей, попробуйте сначала удалить все связанные с ним регламентные задания и подписки на события. Их можно найти в ветке Общие → Регламентные задания и Общие → Подписки на события.
3. Программное удаление регистров: когда без кода не обойтись
В некоторых случаях удаление через конфигуратор невозможно или нецелесообразно. Например:
- 🔒 Регистр заблокирован поставщиком (типовые конфигурации).
- 📊 Нужно удалить только данные регистра, а не сам объект конфигурации.
- 🤖 Требуется автоматизировать процесс (например, очистка тестовых данных).
В таких ситуациях поможет встроенный язык 1С.
Для удаления данных регистра (без удаления самого регистра из конфигурации) используйте следующий код:
Процедура ОчиститьДанныеРегистра()
НачатьТранзакцию();
Попытка
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УдалитьИтогиРегистраНакопления.ТоварыНаСкладах()
|;
|
|ВЫБРАТЬ
| УдалитьДанныеРегистраНакопления.ТоварыНаСкладах()
|;
|
|ВЫБРАТЬ
| УдалитьИтогиРегистраСведений.ЦеныНоменклатуры()
|;
|
|ВЫБРАТЬ
| УдалитьДанныеРегистраСведений.ЦеныНоменклатуры()
|;";
Запрос.Выполнить();
ЗафиксироватьТранзакцию();
Сообщить("Данные регистров успешно удалены!");
Исключение
ОтменитьТранзакцию();
Сообщить("Ошибка при очистке: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Этот код удаляет:
- 📉 Итоги регистра накопления (для ускорения работы отчётов).
- 🗃️ Данные регистра накопления (все движения).
- 📋 Итоги и данные регистра сведений.
Для удаления самого регистра из конфигурации программно используйте метод Удалить():
Процедура УдалитьРегистрИзКонфигурации()
Регистр = Метаданные.РегистрыНакопления.ТоварыНаСкладах;
Если Регистр <> Неопределёно Тогда
Попытка
Регистр.Удалить();
Сообщить("Регистр успешно удалён из конфигурации!");
Исключение
Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;
Иначе
Сообщить("Регистр не найден!");
КонецЕсли;
КонецПроцедуры
Обратите внимание: программное удаление регистра из конфигурации не удаляет его данные из базы. Для полной очистки потребуется:
- Удалить регистр из конфигурации (код выше).
- Обновить конфигурацию базы данных.
- Выполнить очистку данных через запрос (первый пример кода).
- Провести тестирование и исправление базы.
Что будет, если удалить регистр, на который ссылаются документы?
Если регистр используется в документах (например, регистр накопления ТоварыНаСкладах связан с документом РеализацияТоваров), то после удаления регистра:
1. Старые документы потеряют данные о движениях (в отчётах появятся "дыры").
2. Новые документы не смогут записать движения в удалённый регистр (ошибка при проведении).
3. В некоторых случаях 1С автоматически создаст новый регистр с аналогичной структурой, но это не гарантируется.
Для восстановления потребуется:
- Восстановить регистр из резервной копии.
- Перепровести все документы за период.
- Вручную исправить ошибки в данных (если восстановление невозможно).
4. Удаление регистров в типовых конфигурациях: УТ 11, БП 3.0, ЗУП 3.1
Типовые конфигурации (1С:Управление торговлей 11, 1С:Бухгалтерия 3.0, 1С:Зарплата и управление персоналом 3.1) имеют жёсткую структуру, и многие регистры в них заблокированы для удаления.Attempting to delete them directly will result in an error: "Object is locked by the vendor".
Рассмотрим альтернативные подходы для популярных конфигураций:
| Конфигурация | Регистр | Метод удаления/отключения | Последствия |
|---|---|---|---|
| 1С:УТ 11 | ТоварыНаСкладах |
Отключить через расширение или заменить на пользовательский регистр | Требует перенастройки всех связанных документов и отчётов |
| 1С:БП 3.0 | Хозрасчетный |
Удаление невозможно. Можно только очистить данные | Потеря истории проводок, необходим пересчёт итогов |
| 1С:ЗУП 3.1 | НДФЛ |
Очистка данных через запрос, удаление заблокировано | Требуется пересчёт налогов за все периоды |
| 1С:ERP 2.4 | ЗаказыПокупателей |
Отключение через механизм "Функциональные опции" | Возможны ошибки в отчётах по продажам |
Для 1С:Управление торговлей 11 наиболее безопасный способ — отключение регистра через функциональные опции:
- Откройте конфигуратор и перейдите в
Общие → Функциональные опции. - Найдите опцию, связанную с регистром (например,
УчётТоваровНаСкладах). - Снимите флажок с опции и обновите конфигурацию.
Это не удалит регистр физически, но отключит его использование в бизнес-логике.
В 1С:Бухгалтерия 3.0 для очистки регистра бухгалтерии (Хозрасчетный) используйте стандартную обработку Удаление помеченных объектов:
- Перейдите в
Операции → Удаление помеченных объектов. - Установите флажок
Удалять движения по регистрам. - Выберите период и выполните удаление.
Для 1С:Зарплата и управление персоналом 3.1 актуальна очистка регистров расчёта (например, НДФЛ) через регламентные операции:
Процедура ОчиститьРегистрНДФЛ()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УдалитьДанныеРегистраРасчёта.НДФЛ(
| &ДатаНачала,
| &ДатаОкончания
| )";
Запрос.УстановитьПараметр("ДатаНачала", НачалоГода(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаОкончания", КонецГода(ТекущаяДата()));
Запрос.Выполнить();
КонецПроцедуры
1. Очистку данных через запросы.
2. Отключение регистров через функциональные опции.
3. Перенос логики в расширения конфигурации.-->
5. Ошибки при удалении регистров и способы их исправления
Даже опытные разработчики сталкиваются с ошибками при работе с регистрами. Рассмотрим наиболее распространённые проблемы и их решения:
- 🔴 Ошибка: "Объект используется в другом месте"
Причина: Регистр связан с документами, отчётами или обработками.
Решение: Найдите зависимости через
Конфигурация → Анализ → Поиск ссылок на объекти удалите их. - 🔴 Ошибка: "Недостаточно прав для изменения конфигурации"
Причина: Недостаточные права пользователя в режиме
Конфигуратор.Решение: Зайдите под пользователем с ролью
АдминистраторилиПолные права. - 🔴 Ошибка: "Невозможно удалить объект, так как он помечен на удаление"
Причина: Регистр уже помечен на удаление, но не удалён физически.
Решение: Выполните
Обновить конфигурацию базы данныхи повторите попытку. - 🔴 Ошибка при проведении документов: "Не найден регистр ХХХ"
Причина: Документы ссылаются на удалённый регистр.
Решение: Восстановите регистр из резервной копии или перенастройте документы на другой регистр.
Если после удаления регистра 1С выдаёт ошибку при запуске, выполните следующие действия:
- Запустите базу в режиме
Конфигуратор. - Перейдите в
Администрирование → Тестирование и исправление. - Установите флажки:
- 🔹
Реиндексация таблиц - 🔹
Проверка логической целостности - 🔹
Проверка ссылочной целостности - 🔹
Исправление ошибок
- 🔹
- Нажмите
Выполнитьи дождитесь завершения. - 🗃️ Архивирование данных
Перенесите данные регистра в отдельную таблицу или внешнюю базу. Например, для регистра
ЦеныНоменклатурыможно создать документАрхивЦени записать туда исторические данные. - 🔄 Замена регистра на другой объект
Создайте новый регистр с упрощённой структурой и перенесите в него данные через запрос. Старый регистр можно отключить.
- 📂 Выгрузка в внешний файл
Используйте обработку
ВыгрузкаДанныхXMLдля сохранения данных регистра в файл. При необходимости их можно будет загрузить обратно. - 🔗 Использование расширений
Перенесите логику регистра в расширение конфигурации, а оригинальный регистр отключите. Это позволит сохранить данные и избежать ошибок в типовых механизмах.
- 🔄 Восстановление из резервной копии
Самый надёжный способ. Используйте стандартный механизм
Администрирование → Загрузка данныхили внешние инструменты вроде 1C:Reporter. - 📂 Импорт данных из файла
Если перед удалением вы выгружали данные регистра в
XMLилиExcel, загрузите их обратно через обработкуУниверсальныйОбменДанными. - 🔧 Восстановление через SQL
Для файловой базы используйте утилиту chdbfl.exe. Для SQL-базы — восстановите бэкап через SQL Server Management Studio.
- 📊 Ручной ввод критичных данных
Если регистр содержал небольшой объём данных (например, справочник цен), можно ввести их вручную через документ или обработку.
Если тестирование не помогло, попробуйте восстановить базу из резервной копии и повторить удаление с учётом ошибок. В крайнем случае можно использовать утилиту chdbfl.exe (входит в комплект 1С:Предприятие) для низкоуровневого исправления базы:
chdbfl.exe /F "C:\Базы\ВашаБаза\1Cv8.1CD" /L "C:\log.txt" /Fix
Если после удаления регистра 1С зависает при открытии отчётов, проверьте виртуальные таблицы. Возможно, отчёт обращается к удалённому регистру через виртуальную таблицу (например, РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты). Исправьте запрос отчёта или восстановите регистр.
6. Как удалить регистр без потери данных: альтернативные подходы
Если вам нужно освободить место в базе или упростить конфигурацию, но при этом сохранить данные, рассмотрите альтернативные методы:
Пример кода для архивирования данных регистра сведений ЦеныНоменклатуры в документ:
Процедура АрхивироватьЦены()
// Создаём новый документ для архива
АрхивЦен = Документы.АрхивЦен.СоздатьДокумент();
АрхивЦен.Дата = ТекущаяДата();
// Читаем данные из регистра
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
| ЦеныНоменклатуры.Цена КАК Цена,
| ЦеныНоменклатуры.Период КАК Период
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
// Записываем данные в табличную часть документа
Пока Выборка.Следующий() Цикл
Строка = АрхивЦен.Цены.Добавить();
Строка.Номенклатура = Выборка.Номенклатура;
Строка.Цена = Выборка.Цена;
Строка.Период = Выборка.Период;
КонецЦикла;
// Записываем документ
АрхивЦен.Записать();
Сообщить("Данные архивированы в документе: " + АрхивЦен.Ссылка());
КонецПроцедуры
Для переноса данных между регистрами используйте запрос с конструктором результата:
Процедура ПеренестиДанныеВНовыйРегистр()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СтарыйРегистр.Номенклатура КАК Номенклатура,
| СтарыйРегистр.Количество КАК Количество,
| СтарыйРегистр.Период КАК Период
|ПОМЕСТИТЬ НовыйРегистр
|ИЗ
| РегистрНакопления.СтарыйРегистр КАК СтарыйРегистр";
Запрос.Выполнить();
// Очищаем старый регистр
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ УдалитьДанныеРегистраНакопления.СтарыйРегистр()";
Запрос.Выполнить();
КонецПроцедуры
1. Создайте параметр сеанса: ПараметрыСеанса.ОтключитьРегистрX = Истина;
2. В модуле регистра добавьте проверку: Если ПараметрыСеанса.ОтключитьРегистрX Тогда Возврат; КонецЕсли;
Это позволит отключать регистр без физического удаления.-->
7. Восстановление данных после ошибочного удаления регистра
Если вы удалили регистр по ошибке, не паникуйте — в большинстве случаев данные можно восстановить. Рассмотрим возможные сценарии:
Для восстановления регистра накопления из резервной копии:
- Создайте новый регистр с такой же структурой, как у удалённого.
- Загрузите данные из резервной копии с помощью обработки:
Процедура ВосстановитьРегистрИзФайла(ИмяФайла)ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);
Запрос = Новый Запрос;
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ЧтениеXML.Имя = "Движение" Тогда
Номенклатура = ЧтениеXML.ПолучитьАтрибут("Номенклатура");
Количество = ЧтениеXML.ПолучитьАтрибут("Количество");
Дата = ЧтениеXML.ПолучитьАтрибут("Дата");
// Записываем движение в новый регистр
Движение = РегистрыНакопления.ТоварыНаСкладах.СоздатьДвижение();
Движение.Номенклатура = Номенклатура;
Движение.Количество = Количество;
Движение.Период = Дата;
Движение.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
- Обновите итоги регистра (
РегистрыНакопления.ТоварыНаСкладах.ПересчитатьИтоги()).
Если резервной копии нет, попробуйте восстановить данные из связанных документов. Например, для регистра ТоварыНаСкладах можно перепровести все документы ПоступлениеТоваров и РеализацияТоваров за нужный период:
Процедура ВосстановитьДвиженияИзДокументов()
// Перепроводим все документы поступления
Запрос = Новый Запрос