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

Разработка и Конфигурация · 10 мин

Как в 1С снять признак «Предопределенный»

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

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

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

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

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

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

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

Когда снятие признака оправдано, а когда нет

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

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

Способ 1: снятие признака через конфигуратор

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

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

Порядок действий через конфигуратор
  1. 1
    Сделайте резервную копию базы (выгрузку .dt или средствами СУБД)
  2. 2
    Откройте конфигуратор и найдите объект метаданных с нужным предопределенным элементом
  3. 3
    Откройте список предопределенных данных и удалите или переименуйте элемент
  4. 4
    Выполните глобальный поиск по имени элемента, чтобы найти обращения из кода
  5. 5
    Обновите конфигурацию базы данных (F7)
  6. 6
    Проверьте в режиме предприятия, что элемент стал обычным и доступен для редактирования

Способ 2: программный сброс признака обработкой

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

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

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

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

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

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

Сравнение способов

Через конфигуратор

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

Программный сброс обработкой

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

Как проверить результат и типичные ошибки

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

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

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

Ограничения и границы безопасной работы

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

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

Итог

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

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

Ответы на частые вопросы

Можно ли снять признак «Предопределенный» в режиме 1С:Предприятие без конфигуратора?

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

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

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

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

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

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

В конфигураторе выполните глобальный поиск (Правка → Глобальный поиск) по имени предопределенного элемента. Также проверьте обращения через менеджер объекта, например конструкции вида Справочники.ИмяСправочника.ИмяЭлемента, которые поиск по строке имени тоже находит.

Снимется ли признак при загрузке данных через обмен или конвертацию?

Нет, обмен данными сам по себе признак не сбрасывает. Но если в базе-источнике элемент обычный, а в приёмнике предопределенный (или наоборот), при синхронизации по GUID возможны конфликты и дубли — такие ситуации разбирают правилами конвертации или ручной корректировкой.

Можно ли вернуть признак обратно после снятия?

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