Как удалить регистр накопления в 1С, если пункт меню неактивен и возникает ошибка отсутствия регистраторов

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

В процессе обновления доработанных типовых конфигураций (например, 1С:УПП 1.3 или 1С:Комплексная автоматизация) разработчики нередко сталкиваются с ситуацией, когда фирма «1С» удаляет устаревший регистр накопления из типовой конфигурации. Однако в рабочей базе на этот регистр могут оставаться ссылки в нетиповых или доработанных документах. При попытке избавиться от регистра возникает так называемый замкнутый круг: если убрать регистр из движений документа, платформа выдает ошибку метаданных «Регистр накопления не имеет регистраторов», а стандартный пункт меню «Удалить» для самого регистра остается неактивным.

Разберем детально, почему возникает такое поведение платформы, и рассмотрим пошаговые методы корректного удаления объекта из метаданных.

Причины возникновения проблемы

Проанализируем архитектурные ограничения платформы 1С, приводящие к блокировке:

  1. Неделимый контроль целостности метаданных. Регистр накопления по правилам платформы не может существовать без назначенных документов-регистраторов. Проверка структуры выполняется в момент попытки сохранения изменений (нажатие Ctrl+S или применение обновлений по F7). Если регистратор отвязан, а сам регистр еще не удален, конфигуратор фиксирует критическую ошибку.
  2. Ограничение правил поддержки. Если объект метаданных находится на поддержке (даже в режиме Редактируется с сохранением поддержки), платформа запрещает его удаление из дерева метаданных. Кнопка удаления будет заблокирована до тех пор, пока сам регистр и все подчиненные ему реквизиты, ресурсы и измерения не будут полностью сняты с поддержки.
  3. Скрытые связи в конфигурации. Удаление регистра может блокироваться ссылками в других объектах: подписках на события, планах обмена, критериях отбора или ролях.

Способ 1. Удаление за одну транзакцию редактирования (рекомендуемый способ)

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

  1. Перейдем в главное меню: Конфигурация → Поддержка → Настройка поддержки....
  2. В дереве объектов настройки поддержки найдем удаляемый регистр накопления.
  3. Установим правило поддержки «Снят с поддержки» для самого регистра накопления, а также обязательно для всех его измерений, ресурсов, реквизитов и форм. Нажмем кнопку закрытия окна поддержки.
  4. Откроем свойства самописного документа, перейдем на вкладку «Движения» и снимем флаг с удаляемого регистра.
  5. Важный момент: ни в коем случае не нажимаем сохранение (Ctrl+S) и не обновляем конфигурацию базы данных (F7) на этом этапе, иначе платформа выдаст ошибку отсутствия регистратора.
  6. Сразу же находим регистр в дереве метаданных, нажимаем на нем правой кнопкой мыши (или клавишу Delete) и выбираем пункт «Удалить». Так как объект снят с поддержки, команда станет доступной.
  7. Выполняем глобальный поиск по конфигурации через меню Правка → Поиск во всех текстах по имени удаленного регистра и очищаем вызовы к нему во всех модулях (модули документов, подписок, общие модули).
  8. Запускаем проверку метаданных через меню Конфигурация → Проверка конфигурации....
  9. Сохраняем конфигурацию и применяем изменения к информационной базе нажатием клавиши F7.

Способ 2. Использование временного документа-регистратора

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

  1. Создадим в дереве метаданных новый пустой документ-заглушку с произвольным именем, например ВременныйДокументДляУдаления.
  2. В свойствах удаляемого регистра накопления назначим созданный документ единственным регистратором, сняв флаги со всех реальных документов.
  3. Снимем регистр с поддержки вместе со всеми реквизитами через окно Настройка поддержки....
  4. Сохраним конфигурацию (Ctrl+S). Ошибка метаданных не возникнет, так как у регистра есть назначенный временный регистратор.
  5. Выделим в дереве метаданных одновременно временный документ и удаляемый регистр (с зажатой клавишей Ctrl) и удалим их оба нажатием клавиши Delete.
  6. Применим изменения в базе данных нажатием F7.

Дополнительные рекомендации по очистке данных

Если регистр содержал миллионы записей, удаление объекта через конфигуратор может вызвать длительную реструктуризацию и блокировку таблиц на уровне СУБД. Рекомендуется перед удалением метаданных предварительно очистить движения программно в режиме 1С:Предприятие, записывая пустые наборы записей по документам-регистраторам.

Для программной очистки движений перед удалением используем следующий пример кода:


Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(СсылкаНаДокумент);
Набор.Записать(); // Запись пустого набора удаляет движения документа

Также перед удалением метаданных полезно нажать правой кнопкой мыши по регистру и выбрать «Найти ссылки в объекте», чтобы исключить регистр из подписок на события и планов обмена вручную.

← На главную