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