В процессе разработки и сопровождения конфигураций на платформе 1С:Предприятие специалисты часто сталкиваются с ситуацией, когда требуется изменить структуру метаданных. Типичный пример — необходимость удалить неиспользуемый или ошибочно созданный ресурс регистра накопления. Однако при попытке сделать это стандартными средствами разработчик обнаруживает, что кнопка «Удалить» в контекстном меню неактивна, а клавиша Del на клавиатуре никак не реагирует.
В рамках этой статьи мы подробно разберем, почему возникает эта проблема, как правильно обойти системные блокировки в условиях коллективной разработки (через хранилище конфигурации) и как безопасно провести удаление ресурса, не нарушив работоспособность информационной базы.
Если в конфигураторе 1С заблокирована возможность редактирования объекта метаданных, это всегда связано с одной из трех причин (или их комбинацией):
Рассмотрим подробнее каждый шаг по устранению этих блокировок и корректному удалению ресурса.
Если разработка ведется в информационной базе, подключенной к хранилищу конфигурации, процедура изменения правил поддержки усложняется, поскольку правила хранятся глобально в корне конфигурации. Проанализируем правильную последовательность действий:
Del) для выбранного ресурса станет активной.Просто удалить ресурс из структуры метаданных нельзя. Если этот ресурс используется в программном коде, запросах или экранных формах, конфигурация не пройдет проверку, а пользователи столкнутся с критическими ошибками при проведении документов или формировании отчетов. Выполним подготовку системы к удалению по шагам:
1. Поиск ссылок на удаляемый ресурс. Нажмем правой кнопкой мыши на удаляемый ресурс в дереве метаданных и выберем пункт «Поиск ссылок на объект». Платформа сформирует список всех мест, где данный ресурс задействован программно или интерактивно.
2. Очистка процедур проведения документов (регистраторов). Перейдем в модули проведения всех документов, которые делают движения по этому регистру. Нам нужно удалить строки заполнения этого ресурса. Рассмотрим пример.
До рефакторинга код заполнения движений выглядел следующим образом:
Движение = Движения.Продажи.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = ТекДокумент.Дата;
Движение.Номенклатура = СтрокаТоваров.Номенклатура;
Движение.Количество = СтрокаТоваров.Количество;
Движение.УдаляемыйРесурс = СтрокаТоваров.СпецЦена; // Эту строку необходимо удалить
После удаления лишней строки код примет правильный вид:
Движение = Движения.Продажи.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = ТекДокумент.Дата;
Движение.Номенклатура = СтрокаТоваров.Номенклатура;
Дviжение.Количество = СтрокаТоваров.Количество;
3. Корректировка запросов и отчетов. Проверим все схемы компоновки данных (СКД), динамические списки на управляемых формах и обычные запросы. Если в секции ВЫБРАТЬ вашего запроса фигурирует удаляемый ресурс, его нужно оттуда исключить, иначе СУБД вернет ошибку об отсутствии поля в таблице базы данных.
4. Обновление экранных форм. Если ресурс выводился на форму списка регистра или форму набора записей в виде колонки таблицы, этот элемент управления необходимо удалить вручную через редактор форм.
После того как ресурс удален в конфигураторе и весь связанный код вычищен, наступает этап применения изменений к базе данных (клавиша F7 или кнопка «Обновить конфигурацию базы данных»).
Критически важно понимать последствия этого действия:
.dt или средствами СУБД, например, через SQL Server / PostgreSQL).Что делать, если вам категорически запрещено снимать с поддержки основной регистр накопления или вносить изменения непосредственно в основную конфигурацию? К сожалению, платформа 1С накладывает жесткие ограничения на заимствование регистров в расширения:
Решение проблемы через расширение: если необходимо кардинально изменить логику учета, создайте в расширении совершенно новый, собственный регистр накопления с нужной структурой ресурсов и измерений. Запись в него можно организовать, перехватив процедуры проведения документов основной конфигурации с помощью аннотаций &После или &Вместо в программных модулях расширения.
Если удаляемый ресурс слишком глубоко интегрирован в систему, используется в сотнях сложных отчетов, и его моментальное удаление парализует работу аналитиков, рассмотрите стратегию постепенного вывода его из эксплуатации:
Удалить_ (например, Удалить_СтараяЦена). Это визуально подскажет другим разработчикам, что использовать поле больше нельзя.