Ситуация, когда после обновления конфигурации (особенно часто это встречается в 1С:Управление нашей фирмой) перестает открываться карточка номенклатуры или возникает ошибка при создании нового элемента, является классической проблемой рассинхронизации метаданных и фактических записей в базе данных. Ошибка «Предопределенный элемент отсутствует в данных» говорит нам о том, что в конфигурации описание объекта существует, но в таблицах базы данных запись с конкретным уникальным идентификатором (GUID) отсутствует или повреждена.
Рассмотрим подробно причины возникновения этой проблемы и разберем по шагам все доступные методы ее решения — от простых административных действий до программного восстановления связей.
Предопределенные элементы — это объекты (справочники, планы видов характеристик и др.), которые создаются разработчиком в конфигураторе. Платформа 1С:Предприятие 8.3 связывает эти объекты с записями в базе данных по их внутреннему идентификатору. Если в процессе обновления произошел сбой, или если обработчики обновления не завершили свою работу, возникает ситуация «битой ссылки»: код программы обращается к элементу Справочники.Номенклатура.ОсновнаяЕдиницаИзмерения, платформа ищет его в базе, но не находит записи с соответствующим UUID.
В случае с номенклатурой проблема часто кроется не в самом справочнике Номенклатура, а в связанных с ним объектах: ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения или предопределенных единицах измерения. Проанализируем основные способы восстановления работоспособности системы.
Это самый надежный и проверенный способ, который помог автору темы на форуме. Если у вас есть резервная копия базы до обновления (или база того же релиза, где ошибка отсутствует), мы можем «подложить» нужный элемент в проблемную базу.
ПланыВидовХарактеристик или справочнике единиц измерения)..xml. Важно: убедитесь, что выгружается именно предопределенный элемент со своим уникальным идентификатором.Иногда платформа «теряет» связь с объектами, хотя они физически присутствуют. Мы можем заставить систему пересчитать эти связи. Для этого воспользуемся встроенным методом УстановитьОбновлениеПредопределенныхДанных. Выполнить этот код можно через внешнюю обработку или «Консоль кода».
Рассмотрим пример кода для справочника Номенклатура (если проблема в нем):
// Устанавливаем режим обновления в "Авто" для принудительной синхронизации
Справочники.Номенклатура.УстановитьОбновлениеПредопределенныхДанных(ОбновлениеПредопределенныхДанных.Авто);
// Если ошибка в Плане видов характеристик (часто для доп. реквизитов)
ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.УстановитьОбновлениеПредопределенныхДанных(ОбновлениеПредопределенныхДанных.Авто);
После выполнения этого кода рекомендуется перезапустить сеанс. Платформа при обращении к объекту попытается сопоставить данные заново.
Существует специальный параметр командной строки, который инициирует заполнение предопределенных данных при запуске системы. Это помогает, если обработчики обновления были пропущены или выполнены некорректно.
/C СтартЗаполненияПредопределенныхДанных (обратите внимание на слеш и заглавную букву C).В конфигурациях на базе БСП (Библиотеки стандартных подсистем), к которым относится и УНФ, процесс обновления состоит из двух этапов: внесение изменений в структуру и выполнение отложенных обработчиков данных. Если второй этап не завершен, справочники могут работать некорректно.
Проанализируем ситуацию через интерфейс программы:
Номенклатурой, Характеристиками и Единицами измерения.Если программные методы не помогают, стоит прибегнуть к стандартному механизму проверки целостности базы данных. Перед выполнением обязательно сделайте резервную копию! Для автоматизации регулярного резервного копирования и тестирования нескольких баз без участия пользователя применяется программа автоматического обслуживания 1С.
Иногда ошибка является «фантомной» и вызвана некорректным кэшем на стороне пользователя или сервера. Если вышеперечисленные действия не помогли, попробуйте следующее:
Во-первых, удалите базу из списка в окне запуска и добавьте ее заново. Это полностью очистит локальный пользовательский кэш метаданных.
Во-вторых, если база серверная, администратору необходимо перезапустить службу Агент сервера 1С:Предприятие и очистить содержимое папок в каталоге snccntx на сервере.
Подводя итог, можно сказать, что наиболее эффективным методом при ошибке «Предопределенный элемент отсутствует в данных» остается восстановление через XML из исправной копии, так как это гарантирует сохранение правильного UUID, на который завязана логика программного кода в обновленной конфигурации.