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

Администрирование · 11 мин

Предопределённый элемент отсутствует в данных в 1С: причины и исправление

Разбираем ошибку «Предопределённый элемент отсутствует в данных» в 1С: причины, тестирование и исправление, обновление предопределённых данных, профилактика.

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

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

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

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

Чтобы выбрать правильный способ исправления, нужно понять, как именно разорвалась связь между метаданными и таблицей данных. На практике встречается несколько типовых сценариев.

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

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

Ошибка появилась после обновленияНе созданы новые предопределённые элементы

Проверьте журнал регистрации на ошибки обработчиков обновления

Ошибка после обмена даннымиКонфликт идентификаторов элементов

Сравните элементы по имени в обеих базах

Ошибка у одного пользователяВозможны права или кэш

Очистите кэш и проверьте под другим пользователем

Ошибка при любом обращении к объектуЭлемент физически удалён

Запустите проверку предопределённых данных

Как определить, какой именно элемент потерян

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

Если текст ошибки неинформативен, откройте журнал регистрации (в режиме предприятия: Администрирование → Обслуживание → Журнал регистрации) и отфильтруйте события с уровнем «Ошибка» за момент возникновения проблемы. Там будет стек вызовов и точное имя отсутствующего элемента.

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

Способ 1. Обновление предопределённых данных штатными средствами

Самый безопасный путь — заставить платформу заново создать недостающие предопределённые элементы. В зависимости от ситуации используются три варианта.

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

bsl
// Консоль кода: пересоздание предопределённых элементов справочника
Справочники.Валюты.ОбновитьПредопределенныеДанные();
// Для плана видов характеристик
ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ОбновитьПредопределенныеДанные();
Порядок действий при обновлении предопределённых данных
  1. 1
    Сделайте резервную копию базы (выгрузка в dt или копия каталога для файловой базы)
  2. 2
    Зафиксируйте точное имя отсутствующего элемента из текста ошибки
  3. 3
    Запустите обновление предопределённых данных для нужного объекта метаданных
  4. 4
    Перезапустите сеанс и повторите операцию, вызывавшую ошибку
  5. 5
    Проверьте в списке справочника, что элемент появился и помечен как предопределённый

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

Способ 2. Тестирование и исправление информационной базы

Если обновление предопределённых данных не помогло или элементов потеряно много, используйте штатную утилиту «Тестирование и исправление». Она запускается из конфигуратора: Администрирование → Тестирование и исправление. Для клиент-серверных баз ту же проверку можно выполнить утилитой командной строки.

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

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

Способ 3. Ручное восстановление элемента и привязка имени

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

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

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

Обновление предопределённых данных

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

Тестирование и исправление

Подходит при массовых повреждениях и неясной причине. Ограничение: долго, нужен монопольный доступ и копия

Ручное восстановление

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

Частые ошибки и риски при исправлении

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

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

Типичные ошибки
01
Удаление дублей предопределённых элементов без проверки ссылок — появляются битые ссылки в документах и регистрах
02
Исправление на рабочей базе без резервной копии — при сбое восстановить данные будет нечем
03
Вывод о неудаче без очистки кэша — старая ошибка сохраняется из-за кэшированных метаданных
04
Игнорирование журнала регистрации — исправляется не тот элемент, и ошибка возвращается

Профилактика: как не столкнуться с ошибкой снова

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

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

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

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

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

Присутствует, помечен как предопределённый

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

Отсутствует или снят признак предопределённого

Операция, вызывавшая ошибку
Норма

Выполняется без сообщений

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

Ошибка повторяется после очистки кэша

Журнал регистрации
Норма

Нет новых ошибок по предопределённым данным

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

Ошибки появляются при каждом обращении

Итог

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

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

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

Можно ли просто создать элемент с таким же наименованием вручную?

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

Ошибка появляется только у одного пользователя. База повреждена?

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

Поможет ли загрузка dt-копии недельной давности?

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

Тестирование и исправление зависло на несколько часов. Что делать?

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

Можно ли отключить проверку предопределённых элементов, чтобы ошибка не мешала?

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