К статье
Практический материал

Справочники и Данные · 11 мин

Как удалить предопределенный элемент справочника в 1С

Почему предопределенный элемент справочника не удаляется в 1С и как это исправить: пометка на удаление, переименование в конфигураторе, обработка ссылок и типичные ошибки.

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

Типичные примеры — группа «НДС не облагается» в справочнике ставок, валюта «RUB», предопределённые виды расчёта или элементы плана счетов. Пользователь видит их в списке, пытается удалить и получает либо отказ, либо элемент, который невозможно пометить на удаление стандартной командой.

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

Что такое предопределенный элемент и почему он не удаляется

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

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

Отсюда следствие: удаление предопределенного элемента всегда состоит из двух задач — убрать признак «предопределенный» и только потом удалять как обычный элемент. Пропуск первого шага — причина большинства ошибок «объект не может быть удалён».

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

Прежде чем что-либо удалять, выясните две вещи: используется ли элемент в документах и других объектах базы, и обращается ли к нему код конфигурации. Первая проверка выполняется в пользовательском режиме, вторая — в конфигураторе.

Для поиска ссылок выделите элемент в списке справочника и используйте команду «Ещё» → «Найти ссылки на объект» (в типовых конфигурациях также доступен отчёт «Поиск ссылок на объекты» через раздел «Администрирование» → «Обслуживание»). Если ссылки найдены — сначала замените их на другой элемент или удалите сами документы.

Для поиска обращений в коде откройте конфигуратор и выполните глобальный поиск (Ctrl+Shift+F) по имени предопределенного элемента, например по строке «RUB» или по конструкции Справочники.ИмяСправочника.ИмяЭлемента. Если обращения найдены, удаление элемента приведёт к ошибкам выполнения — сначала нужно доработать код.

Способ 1. Удаление через конфигуратор (правильный путь)

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

Порядок действий в конфигураторе
  1. 1
    Сделайте резервную копию информационной базы (Конфигуратор → Администрирование → Выгрузить информационную базу).
  2. 2
    Откройте конфигурацию, найдите нужный справочник, перейдите на закладку «Прочее» → «Предопределенные данные».
  3. 3
    Найдите нужный элемент в списке предопределенных и удалите строку (или переименуйте, если код к ней обращается).
  4. 4
    Проверьте глобальным поиском, что код не обращается к удалённому имени; при необходимости исправьте обращения.
  5. 5
    Обновите конфигурацию базы данных (F7), согласитесь на реструктуризацию.
  6. 6
    В пользовательском режиме найдите элемент в справочнике — теперь он обычный. Пометьте его на удаление.
  7. 7
    Выполните «Администрирование» → «Обслуживание» → «Удаление помеченных объектов» и удалите элемент окончательно.

После обновления конфигурации базы данных платформа сама снимает признак предопределённости у элемента в таблице справочника. Запись остаётся, но становится обычной — её можно редактировать, помечать на удаление и удалять.

Учтите: в типовых конфигурациях на поддержке изменение предопределённых данных снимает объект с полной поддержки. При последующих обновлениях конфигурации поставщик может вернуть удалённый предопределенный элемент — тогда процедуру придётся повторить или отказаться от автоматического обновления этого объекта.

Способ 2. Снятие признака «Предопределенный» через обработку

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

bsl
Элемент = Справочники.Валюты.НайтиПоКоду("643");
Объект = Элемент.ПолучитьОбъект();
Объект.ИмяПредопределенныхДанных = "";
Объект.Записать();
Объект.УстановитьПометкуУдаления(Истина);

Обработку можно выполнить через внешнюю обработку «Универсальный подбор и обработка объектов» или любую консоль кода, запускаемую в режиме предприятия под полными правами. Свойство ИмяПредопределенныхДанных доступно для записи именно в пользовательском режиме начиная с современных версий платформы — это штатный механизм, а не обход защиты.

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

Способ 3. Не удалять, а вывести из использования

Часто реальная потребность — не физическое удаление, а чтобы элемент «не мешал»: не выбирался в документах, не попадал в отчёты. В этом случае удаление вообще не требуется, и риски сводятся к нулю.

Доступные варианты: переименовать элемент с префиксом «(не используется)», переместить его в отдельную служебную группу, установить пометку на удаление без физического удаления (помеченные объекты по умолчанию скрываются во многих списках выбора) или ограничить доступ через RLS. В ряде типовых конфигураций у справочников есть реквизит «Архив» или «Не используется» — это самый чистый вариант.

Сравнение подходов

Удаление через конфигуратор

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

Обработка со снятием признака

Быстро, без конфигуратора. Подходит для элементов, не задействованных в коде. Риск — конфигурация может восстановить связь при обновлении.

Вывод из использования без удаления

Самый безопасный вариант. Элемент остаётся в базе, ссылки не ломаются, обновления проходят штатно. Подходит, когда цель — убрать элемент из выбора.

Типичные ошибки и как их избежать

Типичные ошибки
01
Удаление предопределенного элемента без проверки обращений в коде — после этого документы падают с ошибкой «Предопределенный элемент отсутствует в данных» при проведении.
02
Удаление без резервной копии — восстановить предопределенный элемент с прежним внутренним идентификатором сложно, ссылки в старых документах превратятся в «битые».
03
Удаление элемента, на который есть ссылки в проведённых документах — вместо значения появится «Объект не найден», отчёты исказятся.
04
Ожидание, что «Удаление помеченных объектов» удалит предопределенный элемент — монопольное удаление откажет, пока снят признак предопределённости.
05
Повторное создание элемента вручную с тем же наименованием вместо восстановления предопределенного — код по-прежнему не найдёт его, потому что ищет по служебному имени, а не по наименованию.

Отдельная ситуация — «задвоение» предопределенных данных после обмена или загрузки: в списке два одинаковых элемента, один предопределенный, второй обычный. Удалять нужно именно обычный дубликат, предварительно перенеся с него ссылки на предопределенный. Для этого удобно использовать типовую обработку «Поиск и замена дублирующихся элементов» («Администрирование» → «Обслуживание» → «Корректировка данных»).

Проверка результата после удаления

Контрольные точки

Как проверить результат

Элемент в списке справочника
Норма

Элемент отсутствует или скрыт пометкой на удаление, дублей нет

Тревожный признак

Элемент появился снова после обновления конфигурации — значит, он задан в предопределенных данных

Проведение документов, где элемент использовался
Норма

Документы проводятся без ошибок

Тревожный признак

Ошибка «Предопределенный элемент отсутствует в данных» — код обращается к удалённому элементу

Поиск ссылок на объект
Норма

Ссылок нет, объект удалён монопольно

Тревожный признак

Остаются ссылки — элемент помечен, но физически не удалён

Обновление конфигурации
Норма

Обновление проходит без сообщений о несоответствии предопределенных данных

Тревожный признак

Платформа сообщает о расхождении предопределенных данных — требуется сверка с конфигурацией поставщика

Финальная проверка — выполнить тестирование и исправление информационной базы (в режиме «Тестирование и исправление» через конфигуратор) с включённой проверкой ссылочной целостности. Это выявит «битые» ссылки, если элемент всё же где-то остался задействован.

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

Часто задаваемые вопросы

Почему кнопка «Пометить на удаление» недоступна для предопределенного элемента?

Платформа блокирует пометку на удаление для предопределенных данных, потому что код конфигурации обращается к ним по служебному имени. Сначала нужно снять признак предопределённости — в конфигураторе через «Предопределенные данные» справочника или программно, присвоив свойству ИмяПредопределенныхДанных пустую строку.

Можно ли удалить предопределенный элемент без доступа к конфигуратору?

Да, через обработку в режиме предприятия: получить объект элемента, установить ИмяПредопределенныхДанных = "" и записать. После этого элемент становится обычным и удаляется штатно. Нужны полные права и запущенный режим, позволяющий выполнять внешние обработки.

Что будет, если удалить предопределенный элемент, который используется в коде?

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

Элемент вернулся после обновления конфигурации. Почему?

Потому что он по-прежнему описан в предопределенных данных конфигурации поставщика. При обновлении платформа синхронизирует предопределенные элементы и создаёт их заново. Чтобы элемент не возвращался, нужно удалить его из предопределенных данных в конфигураторе и зафиксировать это изменение при каждом обновлении.

Как удалить дубликат предопределенного элемента после обмена данными?

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

Безопасно ли просто переименовать предопределенный элемент?

Изменение наименования безопасно — код обращается к элементу по служебному имени предопределенных данных, а не по наименованию. А вот менять имя предопределенных данных в конфигураторе без правки кода нельзя: все обращения по старому имени перестанут работать.

Итог

Что важно запомнить

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