Регистры в 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 или выберите пункт в меню запуска).
  2. В дереве объектов конфигурации найдите ветку Общие → Регистры (или Регистры накопления/сведений/бухгалтерии, в зависимости от типа).
  3. Выделите нужный регистр правой кнопкой мыши и выберите Удалить.
  4. Подтвердите удаление в диалоговом окне. Система может выдать предупреждение о связанных объектах — внимательно прочитайте его!
  5. Обновите конфигурацию базы данных (Конфигурация → Обновить конфигурацию базы данных).
  6. Выполните тестирование и исправление базы (Администрирование → Тестирование и исправление) для устранения возможных ошибок.

Если регистр используется в других объектах конфигурации (документах, отчётах, обработках), система покажет список зависимостей. В этом случае удаление может быть заблокировано. Решения:

  • 🔧 Удалить зависимости вручную — найти все объекты, ссылающиеся на регистр, и убрать ссылки.
  • 🔄 Заменить регистр — создать новый регистр с аналогичной структурой и перенастроить на него зависимости.
  • 🚫 Отказаться от удаления — если регистр критичен для работы системы.

Сделать резервную копию базы|Проверить права доступа (режим Конфигуратор)|Закрыть все сеансы пользователей|Отключить регламентные задания|Проверить зависимости регистра-->

В типовых конфигурациях (например, 1С:Бухгалтерия 3.0) некоторые регистры защищены от удаления. В этом случае появится сообщение: "Объект заблокирован для изменения поставщиком". Решения:

  • 🔓 Снять блокировку через Сервис → Параметры → Защита от опасных действий (не рекомендуется для рабочих баз!).
  • 🛠️ Использовать расширения конфигурации — перенести логику в расширение, а оригинальный регистр отключить.
  • 📦 Создать новую конфигурацию на основе типовой и удалить регистр там (подходит для тестовых баз).
💡

Если регистр не удаляется из-за зависимостей, попробуйте сначала удалить все связанные с ним регламентные задания и подписки на события. Их можно найти в ветке Общие → Регламентные задания и Общие → Подписки на события.

3. Программное удаление регистров: когда без кода не обойтись

В некоторых случаях удаление через конфигуратор невозможно или нецелесообразно. Например:

  • 🔒 Регистр заблокирован поставщиком (типовые конфигурации).
  • 📊 Нужно удалить только данные регистра, а не сам объект конфигурации.
  • 🤖 Требуется автоматизировать процесс (например, очистка тестовых данных).

В таких ситуациях поможет встроенный язык 1С.

Для удаления данных регистра (без удаления самого регистра из конфигурации) используйте следующий код:

Процедура ОчиститьДанныеРегистра()

НачатьТранзакцию();

Попытка

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| УдалитьИтогиРегистраНакопления.ТоварыНаСкладах()

|;

|

|ВЫБРАТЬ

| УдалитьДанныеРегистраНакопления.ТоварыНаСкладах()

|;

|

|ВЫБРАТЬ

| УдалитьИтогиРегистраСведений.ЦеныНоменклатуры()

|;

|

|ВЫБРАТЬ

| УдалитьДанныеРегистраСведений.ЦеныНоменклатуры()

|;";

Запрос.Выполнить();

ЗафиксироватьТранзакцию();

Сообщить("Данные регистров успешно удалены!");

Исключение

ОтменитьТранзакцию();

Сообщить("Ошибка при очистке: " + ОписаниеОшибки());

КонецПопытки;

КонецПроцедуры

Этот код удаляет:

  • 📉 Итоги регистра накопления (для ускорения работы отчётов).
  • 🗃️ Данные регистра накопления (все движения).
  • 📋 Итоги и данные регистра сведений.

Для удаления самого регистра из конфигурации программно используйте метод Удалить():

Процедура УдалитьРегистрИзКонфигурации()

Регистр = Метаданные.РегистрыНакопления.ТоварыНаСкладах;

Если Регистр <> Неопределёно Тогда

Попытка

Регистр.Удалить();

Сообщить("Регистр успешно удалён из конфигурации!");

Исключение

Сообщить("Ошибка: " + ОписаниеОшибки());

КонецПопытки;

Иначе

Сообщить("Регистр не найден!");

КонецЕсли;

КонецПроцедуры

Обратите внимание: программное удаление регистра из конфигурации не удаляет его данные из базы. Для полной очистки потребуется:

  1. Удалить регистр из конфигурации (код выше).
  2. Обновить конфигурацию базы данных.
  3. Выполнить очистку данных через запрос (первый пример кода).
  4. Провести тестирование и исправление базы.
Что будет, если удалить регистр, на который ссылаются документы?

Если регистр используется в документах (например, регистр накопления ТоварыНаСкладах связан с документом РеализацияТоваров), то после удаления регистра:

1. Старые документы потеряют данные о движениях (в отчётах появятся "дыры").

2. Новые документы не смогут записать движения в удалённый регистр (ошибка при проведении).

3. В некоторых случаях автоматически создаст новый регистр с аналогичной структурой, но это не гарантируется.

Для восстановления потребуется:

- Восстановить регистр из резервной копии.

- Перепровести все документы за период.

- Вручную исправить ошибки в данных (если восстановление невозможно).

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. Откройте конфигуратор и перейдите в Общие → Функциональные опции.
  2. Найдите опцию, связанную с регистром (например, УчётТоваровНаСкладах).
  3. Снимите флажок с опции и обновите конфигурацию.

Это не удалит регистр физически, но отключит его использование в бизнес-логике.

В 1С:Бухгалтерия 3.0 для очистки регистра бухгалтерии (Хозрасчетный) используйте стандартную обработку Удаление помеченных объектов:

  1. Перейдите в Операции → Удаление помеченных объектов.
  2. Установите флажок Удалять движения по регистрам.
  3. Выберите период и выполните удаление.

Для 1С:Зарплата и управление персоналом 3.1 актуальна очистка регистров расчёта (например, НДФЛ) через регламентные операции:

Процедура ОчиститьРегистрНДФЛ()

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| УдалитьДанныеРегистраРасчёта.НДФЛ(

| &ДатаНачала,

| &ДатаОкончания

| )";

Запрос.УстановитьПараметр("ДатаНачала", НачалоГода(ТекущаяДата()));

Запрос.УстановитьПараметр("ДатаОкончания", КонецГода(ТекущаяДата()));

Запрос.Выполнить();

КонецПроцедуры

1. Очистку данных через запросы.

2. Отключение регистров через функциональные опции.

3. Перенос логики в расширения конфигурации.-->

5. Ошибки при удалении регистров и способы их исправления

Даже опытные разработчики сталкиваются с ошибками при работе с регистрами. Рассмотрим наиболее распространённые проблемы и их решения:

  • 🔴 Ошибка: "Объект используется в другом месте"

    Причина: Регистр связан с документами, отчётами или обработками.

    Решение: Найдите зависимости через Конфигурация → Анализ → Поиск ссылок на объект и удалите их.

  • 🔴 Ошибка: "Недостаточно прав для изменения конфигурации"

    Причина: Недостаточные права пользователя в режиме Конфигуратор.

    Решение: Зайдите под пользователем с ролью Администратор или Полные права.

  • 🔴 Ошибка: "Невозможно удалить объект, так как он помечен на удаление"

    Причина: Регистр уже помечен на удаление, но не удалён физически.

    Решение: Выполните Обновить конфигурацию базы данных и повторите попытку.

  • 🔴 Ошибка при проведении документов: "Не найден регистр ХХХ"

    Причина: Документы ссылаются на удалённый регистр.

    Решение: Восстановите регистр из резервной копии или перенастройте документы на другой регистр.

Если после удаления регистра выдаёт ошибку при запуске, выполните следующие действия:

  1. Запустите базу в режиме Конфигуратор.
  2. Перейдите в Администрирование → Тестирование и исправление.
  3. Установите флажки:
    • 🔹 Реиндексация таблиц
    • 🔹 Проверка логической целостности
    • 🔹 Проверка ссылочной целостности
    • 🔹 Исправление ошибок
  4. Нажмите Выполнить и дождитесь завершения.
  5. Если тестирование не помогло, попробуйте восстановить базу из резервной копии и повторить удаление с учётом ошибок. В крайнем случае можно использовать утилиту chdbfl.exe (входит в комплект 1С:Предприятие) для низкоуровневого исправления базы:

    chdbfl.exe /F "C:\Базы\ВашаБаза\1Cv8.1CD" /L "C:\log.txt" /Fix
    💡

    Если после удаления регистра зависает при открытии отчётов, проверьте виртуальные таблицы. Возможно, отчёт обращается к удалённому регистру через виртуальную таблицу (например, РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты). Исправьте запрос отчёта или восстановите регистр.

    6. Как удалить регистр без потери данных: альтернативные подходы

    Если вам нужно освободить место в базе или упростить конфигурацию, но при этом сохранить данные, рассмотрите альтернативные методы:

    • 🗃️ Архивирование данных

      Перенесите данные регистра в отдельную таблицу или внешнюю базу. Например, для регистра ЦеныНоменклатуры можно создать документ АрхивЦен и записать туда исторические данные.

    • 🔄 Замена регистра на другой объект

      Создайте новый регистр с упрощённой структурой и перенесите в него данные через запрос. Старый регистр можно отключить.

    • 📂 Выгрузка в внешний файл

      Используйте обработку ВыгрузкаДанныхXML для сохранения данных регистра в файл. При необходимости их можно будет загрузить обратно.

    • 🔗 Использование расширений

      Перенесите логику регистра в расширение конфигурации, а оригинальный регистр отключите. Это позволит сохранить данные и избежать ошибок в типовых механизмах.

    Пример кода для архивирования данных регистра сведений ЦеныНоменклатуры в документ:

    Процедура АрхивироватьЦены()
    

    // Создаём новый документ для архива

    АрхивЦен = Документы.АрхивЦен.СоздатьДокумент();

    АрхивЦен.Дата = ТекущаяДата();

    // Читаем данные из регистра

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ

    | ЦеныНоменклатуры.Номенклатура КАК Номенклатура,

    | ЦеныНоменклатуры.Цена КАК Цена,

    | ЦеныНоменклатуры.Период КАК Период

    |ИЗ

    | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры";

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();

    // Записываем данные в табличную часть документа

    Пока Выборка.Следующий() Цикл

    Строка = АрхивЦен.Цены.Добавить();

    Строка.Номенклатура = Выборка.Номенклатура;

    Строка.Цена = Выборка.Цена;

    Строка.Период = Выборка.Период;

    КонецЦикла;

    // Записываем документ

    АрхивЦен.Записать();

    Сообщить("Данные архивированы в документе: " + АрхивЦен.Ссылка());

    КонецПроцедуры

    Для переноса данных между регистрами используйте запрос с конструктором результата:

    Процедура ПеренестиДанныеВНовыйРегистр()
    

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ

    | СтарыйРегистр.Номенклатура КАК Номенклатура,

    | СтарыйРегистр.Количество КАК Количество,

    | СтарыйРегистр.Период КАК Период

    |ПОМЕСТИТЬ НовыйРегистр

    |ИЗ

    | РегистрНакопления.СтарыйРегистр КАК СтарыйРегистр";

    Запрос.Выполнить();

    // Очищаем старый регистр

    Запрос = Новый Запрос;

    Запрос.Текст = "ВЫБРАТЬ УдалитьДанныеРегистраНакопления.СтарыйРегистр()";

    Запрос.Выполнить();

    КонецПроцедуры

    1. Создайте параметр сеанса: ПараметрыСеанса.ОтключитьРегистрX = Истина;

    2. В модуле регистра добавьте проверку: Если ПараметрыСеанса.ОтключитьРегистрX Тогда Возврат; КонецЕсли;

    Это позволит отключать регистр без физического удаления.-->

    7. Восстановление данных после ошибочного удаления регистра

    Если вы удалили регистр по ошибке, не паникуйте — в большинстве случаев данные можно восстановить. Рассмотрим возможные сценарии:

    • 🔄 Восстановление из резервной копии

      Самый надёжный способ. Используйте стандартный механизм Администрирование → Загрузка данных или внешние инструменты вроде 1C:Reporter.

    • 📂 Импорт данных из файла

      Если перед удалением вы выгружали данные регистра в XML или Excel, загрузите их обратно через обработку УниверсальныйОбменДанными.

    • 🔧 Восстановление через SQL

      Для файловой базы используйте утилиту chdbfl.exe. Для SQL-базы — восстановите бэкап через SQL Server Management Studio.

    • 📊 Ручной ввод критичных данных

      Если регистр содержал небольшой объём данных (например, справочник цен), можно ввести их вручную через документ или обработку.

Для восстановления регистра накопления из резервной копии:

  1. Создайте новый регистр с такой же структурой, как у удалённого.
  2. Загрузите данные из резервной копии с помощью обработки:
    Процедура ВосстановитьРегистрИзФайла(ИмяФайла)
    

    ЧтениеXML = Новый ЧтениеXML;

    ЧтениеXML.ОткрытьФайл(ИмяФайла);

    Запрос = Новый Запрос;

    Пока ЧтениеXML.Прочитать() Цикл

    Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда

    Если ЧтениеXML.Имя = "Движение" Тогда

    Номенклатура = ЧтениеXML.ПолучитьАтрибут("Номенклатура");

    Количество = ЧтениеXML.ПолучитьАтрибут("Количество");

    Дата = ЧтениеXML.ПолучитьАтрибут("Дата");

    // Записываем движение в новый регистр

    Движение = РегистрыНакопления.ТоварыНаСкладах.СоздатьДвижение();

    Движение.Номенклатура = Номенклатура;

    Движение.Количество = Количество;

    Движение.Период = Дата;

    Движение.Записать();

    КонецЕсли;

    КонецЕсли;

    КонецЦикла;

    КонецПроцедуры

  3. Обновите итоги регистра (РегистрыНакопления.ТоварыНаСкладах.ПересчитатьИтоги()).

Если резервной копии нет, попробуйте восстановить данные из связанных документов. Например, для регистра ТоварыНаСкладах можно перепровести все документы ПоступлениеТоваров и РеализацияТоваров за нужный период:

Процедура ВосстановитьДвиженияИзДокументов()

// Перепроводим все документы поступления

Запрос = Новый Запрос