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

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

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

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

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

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

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

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

Первый признак — сообщение об ошибке при открытии документов, проведении или запуске обработок: «Предопределенный элемент "<Имя>" отсутствует в данных» или «Значение не найдено». Также типична ситуация, когда в справочнике элемент визуально есть, но программа его «не видит», потому что утрачена связь с предопределенным именем.

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

Элемент есть, но код его не находитУтрачена связь с предопределенным именем

Сравните имя предопределенного элемента в конфигураторе с данными базы

Элемента нет в списке справочникаЭлемент удален физически

Проверьте, осталась ли резервная копия, и попробуйте обновление конфигурации БД

Ошибка появилась после обмена даннымиКонфликт синхронизации

Проверьте настройки сопоставления предопределенных элементов в плане обмена

Ошибка после обновления конфигурацииОбновление завершилось не полностью

Проверьте журнал обновления и выполните повторное обновление базы данных

Подготовка: резервная копия и проверка прав

Перед восстановлением сделайте выгрузку информационной базы через конфигуратор (Администрирование → Выгрузить информационную базу) или штатное резервное копирование средствами СУБД, если база клиент-серверная. Восстановление предопределенных элементов затрагивает системные механизмы платформы, и ошибка может усугубить ситуацию.

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

Способ 1. Обновление конфигурации базы данных

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

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

Порядок действий
  1. 1
    Сделайте резервную копию базы
  2. 2
    Откройте конфигуратор под учетной записью администратора
  3. 3
    Проверьте, что конфигурация базы данных актуальна
  4. 4
    Выполните обновление конфигурации базы данных (F7), при необходимости — с формальным изменением для запуска реструктуризации
  5. 5
    Откройте пользовательский режим и проверьте наличие предопределенного элемента в справочнике

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

Способ 2. Восстановление через код на встроенном языке

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

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

bsl
// Пример: привязка существующего элемента к предопределенному имени
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Валюты ГДЕ Наименование = &Наименование");
Запрос.УстановитьПараметр("Наименование", "RUB");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    Объект = Выборка.Ссылка.ПолучитьОбъект();
    Объект.ИмяПредопределенныхДанных = "Рубль";
    Объект.Записать();
КонецЕсли;

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

Способ 3. Восстановление из резервной копии или эталонной базы

Если элемент содержал важные заполненные реквизиты (счета учета, настройки, связанные данные), проще всего перенести его из резервной копии. Разверните копию базы рядом с рабочей, найдите нужный элемент и перенесите его либо вручную (переписав значения реквизитов), либо через обработку выгрузки-загрузки данных.

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

Сравнение вариантов

Обновление конфигурации БД

Подходит, когда элемент полностью отсутствует; не восстанавливает пользовательские значения реквизитов

Программное создание

Подходит при утрате связи с именем и для точечного восстановления; требует навыков работы с кодом

Перенос из копии

Подходит, когда важны заполненные реквизиты элемента; требует наличия актуальной резервной копии

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

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

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

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

Проверка результата

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

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

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

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

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

Отображается с пиктограммой предопределенного

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

Присутствует, но без признака предопределенного

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

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

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

Ошибка повторяется при тех же действиях

Ссылочная целостность
Норма

Тестирование не находит битых ссылок

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

Есть объекты со ссылками на несуществующий элемент

Как предотвратить повторение проблемы

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

Также не переименовывайте предопределенные элементы в метаданных без необходимости: при обновлении платформа будет искать элемент по новому имени и может создать дубликат. Регулярные резервные копии остаются последней линией защиты при любых сбоях.

Итог

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

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

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

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

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

Обновление конфигурации БД не восстановило элемент. Что дальше?

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

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

Предопределенный элемент описан в конфигураторе и имеет уникальное имя предопределенных данных, по которому к нему обращается код (например, Справочники.Валюты.Рубль). Обычный элемент создается пользователем и доступен только по ссылке или поиску. Визуально предопределенные элементы выделяются отдельной пиктограммой.

Что делать, если после обмена появились дубли предопределенных элементов?

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

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

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