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