Справочники и Данные · 12 мин
Как отличить обычные элементы справочника от предопределенных в 1С
Как пользователю отличить обычные элементы справочника от предопределенных в 1С: визуальные признаки, поведение при удалении, роль в конфигурации и проверка в конфигураторе.
При работе со справочниками в 1С пользователь рано или поздно сталкивается с ситуацией: один элемент удаляется без проблем, а другой система не даёт удалить или пометить на удаление. Причина почти всегда одна — часть элементов является предопределёнными, то есть созданными разработчиком конфигурации, а не пользователем. Умение быстро отличить такие элементы помогает избежать ошибок при чистке базы, настройке обменов и исправлении данных.
Предопределённые элементы отличаются от обычных по нескольким признакам: внешнему виду в списке, поведению при попытке удаления, наличию уникального имени в конфигураторе и роли в программной логике. Ниже разобраны все доступные пользователю способы проверки — от простого взгляда на пиктограмму до запроса в консоли.
Чем предопределённые элементы отличаются по сути
Обычный элемент справочника создаёт пользователь в режиме предприятия: вводит наименование, заполняет реквизиты и записывает. Такой элемент существует только в конкретной базе данных и нигде в коде конфигурации по имени не упоминается. Его можно свободно редактировать, помечать на удаление и удалять окончательно, если на него нет ссылок из документов.
Предопределённый элемент описывается разработчиком в конфигураторе на закладке «Предопределённые» у справочника. Каждому такому элементу присваивается имя — например, «ОсновнаяОрганизация» или «РозничныйПокупатель». Программный код конфигурации обращается к этим элементам по имени: например, при проведении документа система может автоматически подставлять предопределённый склад или валюту.
Именно поэтому удаление предопределённого элемента опасно: код, который ссылается на него по имени, начнёт возвращать ошибку или пустую ссылку, и часть функций программы перестанет работать корректно. Система защищает такие элементы от случайного удаления стандартными средствами.
Как отличить элементы по пиктограмме в списке
Самый быстрый способ, доступный любому пользователю без специальных прав, — посмотреть на значок элемента в форме списка справочника. В типовых конфигурациях на управляемых формах предопределённые элементы отображаются с отличительной пиктограммой: обычно это значок с дополнительной отметкой (точкой или иным маркером), визуально отличающийся от значка обычного элемента.
Чтобы увидеть разницу на практике, откройте справочник, в котором точно есть предопределённые данные, — например, «Валюты», «Виды налогов» или «Ставки НДС» в типовых конфигурациях. Сравните значки нескольких элементов: те, что поставлялись с конфигурацией, будут помечены иначе, чем добавленные пользователями вручную.
Учтите, что внешний вид пиктограммы зависит от версии платформы и библиотеки стандартных подсистем. В некоторых конфигурациях отличие выражено слабо, поэтому пиктограмму стоит использовать как первый ориентир, а не как единственное доказательство.
Сравните значки нескольких элементов справочника
Попробуйте пометить элемент на удаление
Откройте ветку «Предопределённые» у справочника
Поищите имя элемента в текстах модулей
Проверка через попытку пометки на удаление
Второй надёжный способ — попробовать установить пометку удаления. Выделите элемент в списке и нажмите клавишу Delete или кнопку «Пометить на удаление». Обычный элемент будет помечен без вопросов (если у вас есть права). Предопределённый элемент система в типовых конфигурациях, как правило, не даст пометить: появится предупреждение о том, что элемент предопределённый и его удаление невозможно или нежелательно.
Важно понимать, что поведение зависит от настроек конфигурации. В некоторых решениях пометка удаления предопределённых элементов технически допускается, но при обновлении конфигурации такой элемент будет создан заново — и вы получите дубль. Поэтому перед массовой чисткой справочника стоит проверить поведение на одном элементе и зафиксировать результат.
Если вы работаете с файловой копией базы, безопасно поэкспериментировать именно там: пометьте элемент, проверьте реакцию системы, затем снимите пометку. В рабочей базе такие проверки лучше проводить только с согласия администратора.
Как проверить элемент в конфигураторе
Если у вас есть доступ к конфигуратору, проверка становится однозначной. Откройте конфигурацию, найдите нужный справочник в дереве объектов и перейдите на закладку «Данные» (или откройте команду «Предопределённые» — расположение зависит от версии платформы). Перед вами появится список всех предопределённых элементов с их именами, кодами и наименованиями.
Сопоставьте наименование элемента из режима предприятия с этим списком. Если элемент присутствует там — он предопределённый. Дополнительно видно его имя, по которому к нему обращается код: например, элемент «Розничный покупатель» может иметь имя «РозничныйПокупатель».
Для точной проверки конкретного элемента можно использовать встроенный язык. В консоли кода или через обработку выполните обращение к элементу по имени: Справочники.Валюты.НайтиПоНаименованию("USD") для обычного поиска и Справочники.Валюты.USD для обращения к предопределённому элементу по имени. Если второе обращение возвращает ссылку, а не ошибку, — элемент предопределённый.
// Проверка: является ли элемент предопределённым
Ссылка = Справочники.Валюты.USD; // обращение по имени предопределённого
Если ЗначениеЗаполнено(Ссылка) Тогда
Сообщить("Элемент предопределённый: " + Ссылка);
Иначе
Сообщить("Предопределённый элемент не найден в базе");
КонецЕсли;Как ведут себя предопределённые элементы при обновлении и обмене
Ключевая особенность предопределённых элементов — их жизненный цикл привязан к конфигурации. При обновлении конфигурации платформа автоматически создаёт недостающие предопределённые элементы в базе и обновляет их по данным разработчика. Обычные элементы при обновлении не затрагиваются вообще.
Из этого следует практическое правило: если после обновления конфигурации в справочнике появился элемент, которого никто из пользователей не создавал, — почти наверняка это предопределённый элемент, добавленный разработчиком в новой версии. Также при обновлении могут появиться дубли: если пользователь ранее создал вручную элемент с тем же наименованием, что и новый предопределённый, в списке окажутся два похожих элемента.
При обменах между базами предопределённые элементы требуют особого внимания: их ссылки должны совпадать в обеих базах, иначе документы после переноса будут ссылаться на разные элементы. В типовых планах обмена предопределённые данные обычно сопоставляются автоматически, но при самописных обменах это частая причина ошибок.
Типичные ошибки при работе с предопределёнными элементами
Наиболее распространённая ошибка — создание пользовательского дубля предопределённого элемента. Пользователь не находит нужный элемент поиском (например, из-за отбора в списке) и создаёт новый с таким же наименованием. В результате в базе два «Основных склада», и документы начинают ссылаться на разные элементы, что искажает отчёты.
Вторая ошибка — переименование предопределённого элемента. Наименование можно менять, и код от этого не сломается, так как обращение идёт по имени в конфигураторе, а не по наименованию. Но пользователи других баз при обмене или аудиторы могут не узнать элемент, а сопоставление при миграции данных усложнится.
Третья ошибка — попытка «почистить» справочник от неиспользуемых, на взгляд пользователя, элементов. Предопределённый элемент может не использоваться в документах напрямую, но быть нужным для обработок, обменов или будущих обновлений. Удаление таких элементов без анализа кода приводит к скрытым сбоям.
Пошаговый алгоритм определения типа элемента
Чтобы быстро определить, обычный перед вами элемент или предопределённый, действуйте в следующем порядке. Сначала откройте список справочника и посмотрите на пиктограмму элемента — особый значок указывает на предопределённость. Затем попробуйте пометить элемент на удаление в тестовой копии базы: запрет системы подтверждает вывод.
Если остались сомнения и есть доступ к конфигуратору, откройте список предопределённых элементов справочника и найдите там наименование. Наконец, для стопроцентной проверки выполните обращение к элементу по имени через встроенный язык или проверьте свойство «Предопределенный» у объекта в отладчике.
- 1Откройте список справочника и сравните пиктограммы элементов — предопределённые имеют особый значок
- 2В копии базы попробуйте пометить элемент на удаление — системный запрет указывает на предопределённость
- 3В конфигураторе откройте ветку «Предопределённые» у справочника и найдите элемент по наименованию
- 4При необходимости проверьте обращение к элементу по имени через встроенный язык
- 5Зафиксируйте результат и не изменяйте предопределённые элементы без резервной копии
Как проверить результат
Значок отличается от обычных элементов характерным маркером
Значки всех элементов одинаковые — проверяйте другими способами
Система выдаёт предупреждение или запрещает пометку
Элемент помечается без вопросов — скорее всего, он обычный
Элемент найден по наименованию, указано имя
Элемента в списке нет — он пользовательский
Возвращается ссылка на элемент
Ошибка обращения — такого предопределённого имени нет
Часто задаваемые вопросы
Можно ли удалить предопределённый элемент, если очень нужно?
Технически в некоторых конфигурациях это возможно, но делать этого не следует без анализа кода: все обращения к элементу по имени начнут возвращать пустую ссылку или ошибку. Безопасный путь — согласовать удаление с разработчиком, который проверит использование имени в модулях.
Почему после обновления конфигурации появились дубли элементов?
Обычно это происходит, когда пользователь ранее создал вручную элемент с таким же наименованием, а при обновлении платформа добавила предопределённый. Дубли нужно объединить: перенести ссылки из документов на предопределённый элемент, а пользовательский пометить на удаление.
Можно ли переименовать предопределённый элемент?
Наименование менять можно — код обращается к элементу по имени из конфигуратора, а не по наименованию. Однако менять имя в конфигураторе нельзя без правки всех мест кода, где оно используется, иначе обращения сломаются.
Как программно проверить, предопределённый ли элемент?
У объекта справочника есть свойство «Предопределенный», которое возвращает Истина для предопределённых элементов. Также можно получить имя предопределённого элемента через метод НайтиПоСсылке или обратившись к менеджеру справочника по имени.
Предопределённые элементы есть только у справочников?
Нет, механизм предопределённых данных также поддерживают планы видов характеристик, планы счетов и планы видов расчёта. Принципы отличия от обычных элементов там те же: особая пиктограмма, запрет на удаление и имя в конфигураторе.
Что делать, если предопределённый элемент случайно пометили на удаление?
Снимите пометку удаления стандартной командой. Если элемент уже удалён окончательно, восстановите его из резервной копии или выполните обновление конфигурации базы данных — при соответствующих настройках платформа создаст предопределённый элемент заново.
Что важно запомнить
Предопределённые элементы создаются разработчиком, имеют имя в конфигураторе и особую пиктограмму в списке. Отличить их от обычных можно по значку, реакции на пометку удаления и списку предопределённых в конфигураторе. Удалять и менять такие элементы без анализа кода и резервной копии нельзя.