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