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

Разработка и Конфигурация · 11 мин

Предопределенные значения в 1С: что это и как с ними работать

Что такое предопределенное значение в 1С, где оно хранится, как обратиться к нему из кода и формы, типичные ошибки и способы проверки результата.

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

Главная задача предопределенных значений — дать коду надежную ссылку на конкретный объект. Например, типовая конфигурация «знает», что счет 10 «Материалы» или валюта «Рубль» всегда присутствуют в базе, поэтому проводки и расчеты могут обращаться к ним напрямую по имени, а не искать по наименованию, которое пользователь способен переименовать.

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

Что такое предопределенное значение и где оно применяется

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

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

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

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

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

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

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

Как обратиться к предопределенному значению из кода

Основной способ — обращение через менеджер объекта по имени предопределенного элемента. Для справочника валют это выглядит так: Справочники.Валюты.Рубль. Платформа вернет ссылку на элемент без запроса к базе по наименованию, что быстрее и надежнее поиска. Аналогично работают конструкции ПланыСчетов.Хозрасчетный.Материалы и ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ИмяЭлемента.

Если имя элемента формируется динамически, используйте метод НайтиПоИмени либо получение ссылки через предопределенное имя: ПредопределенноеЗначение("Справочник.Валюты.Рубль"). Функция ПредопределенноеЗначение удобна еще и для перечислений и системных значений, например ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20").

bsl
ВалютаРубль = Справочники.Валюты.Рубль;
СчетМатериалы = ПланыСчетов.Хозрасчетный.Материалы;
Ставка = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20");
Если НЕ ЗначениеЗаполнено(ВалютаРубль) Тогда
	ВызватьИсключение "Предопределенный элемент не найден";
КонецЕсли;

В запросах предопределенные значения передаются как параметры: Запрос.УстановитьПараметр("Валюта", Справочники.Валюты.Рубль). Это исключает сравнение по строковым наименованиям, которое ломается при переименовании элементов пользователем.

Обращение из формы и в тонком клиенте

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

Для отбора в динамических списках и настройках СКД предопределенные элементы выбираются как обычные ссылки. Если нужно задать значение по умолчанию в настройках отчета, укажите ссылку через ПредопределенноеЗначение в модуле объекта отчета при инициализации настроек.

Обновление конфигурации и режим совместимости

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

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

Типичные ошибки и как их избежать

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

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

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

Как проверить корректность настройки

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

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

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

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

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

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

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

Элемент отсутствует или выглядит как обычный

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

Справочники.Валюты.Рубль возвращает заполненную ссылку

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

Исключение «Предопределенный элемент не найден» или пустая ссылка

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

Документы, использующие элемент, проводятся без ошибок

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

Ошибки при проведении, пустые проводки

Обмен данными
Норма

В базе-приемнике элемент сопоставлен с предопределенным

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

Создаются дубли обычных элементов

Альтернативы предопределенным значениям

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

Сравнение вариантов хранения постоянных значений

Предопределенный элемент

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

Константа

Подходит для одиночных настроек, которые меняет администратор. Ограничение: одно значение на базу, нет табличной структуры

Регистр сведений

Подходит для наборов настроек с историей или разрезами. Ограничение: требует разработки формы настройки

Обычный элемент с фиксированным кодом

Подходит, когда пользователь должен видеть и дополнять список. Ограничение: элемент можно удалить, код нужно защищать проверками

Итог

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

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

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

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

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

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

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

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

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

Как обратиться к предопределенному значению в запросе?

Напрямую по имени в тексте запроса обратиться нельзя — передайте ссылку как параметр: Запрос.УстановитьПараметр("Валюта", Справочники.Валюты.Рубль). В тексте запроса используйте параметр: ГДЕ Валюта = &Валюта.

Работает ли ПредопределенноеЗначение на клиенте?

Да, функция ПредопределенноеЗначение доступна в тонком и веб-клиенте и возвращает ссылку без серверного вызова для кэшированных объектов. Прямое обращение вида Справочники.Валюты.Рубль на клиенте недоступно — оно работает только в серверном контексте.

Что происходит с предопределенными элементами при обмене данными?

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