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