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

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

Восстановление предопределенных элементов справочника в 1С

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

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

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

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

Почему предопределенные элементы исчезают

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

Типичные причины потери:

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

Какой именно элемент указан в тексте ошибки

Элемент есть в списке, но ошибка остаетсяУтерян признак предопределенности

Пометку элемента в конфигураторе или через запрос

Элемента нет в списке вообщеЭлемент удален

Журнал регистрации на предмет удаления

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

Повторное обновление конфигурации базы данных

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

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

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

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

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

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

Порядок действий
  1. 1
    Завершите работу всех пользователей и откройте конфигуратор в монопольном режиме
  2. 2
    Убедитесь, что конфигурация базы данных соответствует конфигурации поставщика (нет непримененных изменений)
  3. 3
    Выполните «Конфигурация → Обновить конфигурацию базы данных»
  4. 4
    Если платформа предложит реструктуризацию — подтвердите и дождитесь завершения
  5. 5
    Откройте режим предприятия и проверьте наличие элемента в справочнике

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

Способ 2. Восстановление через конфигуратор вручную

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

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

Если элемента нет вообще

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

Способ 3. Программное восстановление

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

bsl
НовыйЭлемент = Справочники.Валюты.СоздатьЭлемент();
НовыйЭлемент.Наименование = "RUB";
НовыйЭлемент.НаименованиеПолное = "Российский рубль";
НовыйЭлемент.ИмяПредопределенныхДанных = "Рубль";
НовыйЭлемент.Записать();

// Проверка:
Сообщить(Справочники.Валюты.Рубль.НаименованиеПолное);

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

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

Особые случаи и ограничения

Обмен данными и РИБ

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

Удаленный элемент с ссылками

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

Типичные ошибки
01
Создание элемента только с правильным наименованием без установки имени предопределенных данных — код его не находит
02
Работа в рабочей базе без резервной копии — при ошибке откатить изменения нечем
03
Опечатка в имени предопределенных данных — создается дубликат, ошибка остается
04
Исправление в узле РИБ вместо главного узла — при следующем обмене изменения затираются
05
Игнорирование битых ссылок в документах после восстановления элемента с новой ссылкой

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

После восстановления проверьте три вещи: элемент отображается в списке справочника, обращение из кода Справочники.ИмяСправочника.ИмяЭлемента возвращает ссылку без ошибки, а типовая операция, которая раньше падала (проведение документа, заполнение отчета), выполняется штатно.

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

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

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

Элемент присутствует, реквизиты заполнены корректно

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

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

Обращение из кода
Норма

Возвращается ссылка на элемент

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

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

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

Документы проводятся без ошибок

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

Ошибки ссылок «Объект не найден»

Повторный обмен (для РИБ)
Норма

После обмена элемент на месте

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

Ошибка возвращается после синхронизации

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

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

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

Итог

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

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

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

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

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

Элемент на месте, а ошибка остается. Что делать?

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

Что будет с документами, ссылавшимися на удаленный элемент?

Они сохранят битые ссылки («Объект не найден»), потому что восстановленный элемент получит новую внутреннюю ссылку. Потребуется поиск и замена ссылок в базе либо восстановление из резервной копии, если копия сделана до удаления.

Почему после обновления конфигурации элемент не восстановился?

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

Опасно ли удалять предопределенные элементы, которые «не используются»?

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