Как удалить ресурс регистра накопления в 1С, если кнопка удаления неактивна?

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

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

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

Выясняем причину блокировки: почему кнопка «Удалить» неактивна?

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

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

Рассмотрим подробнее каждый шаг по устранению этих блокировок и корректному удалению ресурса.

Шаг 1. Снятие замка поддержки в условиях работы с хранилищем

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

  1. Захват корня конфигурации: Откроем дерево метаданных, нажмем правой кнопкой мыши на самый верхний элемент (имя конфигурации) и выберем пункт «Захватить в хранилище». Без этого действия платформа не позволит изменить правила поддержки для дочерних объектов.
  2. Изменение правил поддержки регистра: Перейдем в главное меню: Конфигурация — Поддержка — Настройка поддержки. В открывшемся окне найдем наш регистр накопления, дважды кликнем по нему и установим новое правило: «Объект поставщика редактируется с сохранением поддержки». После этого нажмем «ОК» и закроем окно настройки.
  3. Захват регистра накопления: Перейдем непосредственно к нашему регистру в дереве метаданных. Нажмем по нему правой кнопкой мыши и выберем «Захватить в хранилище». Теперь, когда замок поддержки снят, а сам объект монопольно захвачен вами, кнопка «Удалить» (или клавиша Del) для выбранного ресурса станет активной.

Шаг 2. Обязательный рефакторинг кода и поиск ссылок перед удалением

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

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

2. Очистка процедур проведения документов (регистраторов). Перейдем в модули проведения всех документов, которые делают движения по этому регистру. Нам нужно удалить строки заполнения этого ресурса. Рассмотрим пример.

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


Движение = Движения.Продажи.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = ТекДокумент.Дата;
Движение.Номенклатура = СтрокаТоваров.Номенклатура;
Движение.Количество = СтрокаТоваров.Количество;
Движение.УдаляемыйРесурс = СтрокаТоваров.СпецЦена; // Эту строку необходимо удалить

После удаления лишней строки код примет правильный вид:


Движение = Движения.Продажи.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = ТекДокумент.Дата;
Движение.Номенклатура = СтрокаТоваров.Номенклатура;
Дviжение.Количество = СтрокаТоваров.Количество;

3. Корректировка запросов и отчетов. Проверим все схемы компоновки данных (СКД), динамические списки на управляемых формах и обычные запросы. Если в секции ВЫБРАТЬ вашего запроса фигурирует удаляемый ресурс, его нужно оттуда исключить, иначе СУБД вернет ошибку об отсутствии поля в таблице базы данных.

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

Шаг 3. Реструктуризация базы данных и ее последствия

После того как ресурс удален в конфигураторе и весь связанный код вычищен, наступает этап применения изменений к базе данных (клавиша F7 или кнопка «Обновить конфигурацию базы данных»).

Критически важно понимать последствия этого действия:

Альтернативный вариант: Использование расширений конфигурации

Что делать, если вам категорически запрещено снимать с поддержки основной регистр накопления или вносить изменения непосредственно в основную конфигурацию? К сожалению, платформа 1С накладывает жесткие ограничения на заимствование регистров в расширения:

Решение проблемы через расширение: если необходимо кардинально изменить логику учета, создайте в расширении совершенно новый, собственный регистр накопления с нужной структурой ресурсов и измерений. Запись в него можно организовать, перехватив процедуры проведения документов основной конфигурации с помощью аннотаций &После или &Вместо в программных модулях расширения.

«Мягкое» устаревание (Deprecation) как безопасная альтернатива удалению

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

  1. Переименуйте ресурс в конфигураторе, добавив к нему префикс Удалить_ (например, Удалить_СтараяЦена). Это визуально подскажет другим разработчикам, что использовать поле больше нельзя.
  2. Очистите код заполнения этого ресурса в процедурах проведения документов. С этого момента новые записи будут создаваться с пустым или нулевым значением данного поля, а старые исторические данные сохранятся в базе данных для архивных отчетов.
  3. Постепенно, в плановом режиме перепишите сложные отчеты и интеграционные механизмы на использование новых механизмов учета, после чего физическое удаление ресурса из метаданных пройдет безболезненно для бизнеса.
← На главную