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

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

Что произойдет, если удалить предопределенный элемент в 1С

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

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

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

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

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

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

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

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

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

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

Однако ссылочная проверка не видит обращения из кода по имени. Если конфигурация получает элемент как Справочники.Валюты.USD, а вы удалили этот элемент, платформа при следующем обращении выдаст ошибку формата «Предопределенный элемент отсутствует в данных» или вернет неопределенное значение — поведение зависит от способа обращения и версии платформы. Функция ПредопределенноеЗначение() в такой ситуации обычно возвращает пустую ссылку, что приводит к скрытым ошибкам: документы проводятся с пустыми реквизитами, отчеты показывают неполные данные.

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

Последствия для кода, документов и отчетов

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

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

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

Элемент помечен на удалениеДанные еще на месте

Достаточно снять пометку — последствий нет

Элемент удален физическиСсылок в документах не было

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

В списках видно «Объект не найден»Есть битые ссылки

Нужно восстанавливать элемент или заменять ссылки

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

Восстановить элемент с тем же именем в конфигураторе и базе

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

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

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

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

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

Удаление предопределенного элемента в конфигураторе

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

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

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

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

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

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

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

Маршрут решения

Как выбрать действие

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

Типичные ошибки и ограничения

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

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

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

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

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

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

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

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

Список справочника
Норма

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

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

Элемент отсутствует или дублируется

Проведение документов
Норма

Проводятся без сообщений об ошибках

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

Ошибка обращения к предопределенному элементу

Отчеты и журнал регистрации
Норма

Нет записей «Объект не найден» и ошибок предопределенных данных

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

Битые ссылки в движениях, ошибки в журнале

Обмены данными
Норма

Синхронизация завершается без предупреждений

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

Обмен падает на объектах с пустыми ссылками

Итог

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

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

Частые вопросы

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

Защита реализована подписками на события и процедурами Библиотеки стандартных подсистем: при попытке пометить элемент на удаление код проверяет признак предопределенности и отказывает в операции. Это сделано, потому что типовые механизмы обращаются к таким элементам по имени, и их удаление гарантированно ломает проведение документов или отчеты.

Можно ли переименовать предопределенный элемент вместо удаления?

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

Что означает ошибка «Предопределенный элемент отсутствует в данных»?

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

Восстановятся ли ссылки в документах, если создать элемент заново?

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

Как найти все предопределенные элементы в базе?

В конфигураторе откройте нужный справочник или план счетов и перейдите на вкладку с предопределенными элементами — там полный список имен. В пользовательском режиме можно выполнить запрос к таблице справочника с отбором по полю «Предопределенный» равному Истина.

Опасно ли удалять предопределенные элементы в плане счетов?

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