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

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

Для каких объектов конфигурации 1С возможен ввод предопределённых значений

Разбираем, для каких объектов конфигурации 1С возможен ввод предопределённых значений: справочники, планы счетов, виды характеристик, перечисления и другие.

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

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

Полный перечень объектов с поддержкой предопределённых значений

Платформа 1С:Предприятие 8 поддерживает ввод предопределённых элементов для четырёх типов объектов конфигурации:

  • Справочники — предопределённые элементы и группы (например, валюта «Рубль», группа «Собственные организации»);
  • Планы видов характеристик — предопределённые виды характеристик (например, «Цвет», «Размер» в механизме дополнительных реквизитов);
  • Планы счетов — предопределённые счета бухгалтерского или управленческого учёта (например, счёт 01 «Основные средства»);
  • Планы видов расчёта — предопределённые виды расчёта (например, «Оклад», «Премия», «НДФЛ»).

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

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

Справочники: самый частый случай

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

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

Обращение из встроенного языка выполняется через менеджер справочника:

bsl
Рубль = Справочники.Валюты.НайтиПоНаименованию("RUB");
// Надёжнее — обращение по предопределённому имени:
Рубль = Справочники.Валюты.Рубль;

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

Планы счетов и планы видов расчёта

Планы счетов практически всегда содержат предопределённые счета: весь типовой план счетов бухгалтерского учёта (01, 02, 10, 41, 62 и так далее) создаётся именно как предопределённый. Пользователь может добавлять собственные субсчета, но не может удалить предопределённые счета без снятия конфигурации с поддержки. Это гарантирует, что проводки, формируемые типовым кодом, всегда найдут нужный счёт.

Признак «Запретить использовать в проводках» у предопределённого счёта тоже задаётся разработчиком — обычно для счетов-групп, которые служат только для объединения субсчетов.

Планы видов расчёта используют предопределённые виды расчёта в механизмах расчёта зарплаты: «Основной оклад», «Районный коэффициент», «Больничный» и другие. Предопределённость здесь критична, потому что механизм вытеснения и зависимости видов расчёта (ведущие, вытесняющие) часто настраиваются именно на предопределённых элементах.

Планы видов характеристик и перечисления

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

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

Что выбрать: перечисление или предопределённый элемент

Перечисление

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

Предопределённый элемент справочника

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

План видов характеристик

Подходит для расширяемых механизмов свойств, где предопределённые виды задают типовой каркас, а пользователь добавляет свои характеристики.

Как создать предопределённый элемент: порядок действий

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

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

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

Обновление, переименование и удаление: ограничения

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

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

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

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

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

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

bsl
Проверяемый = Справочники.Валюты.Рубль;
Если Проверяемый.Пустая() Тогда
    Сообщить("Предопределённый элемент не найден");
КонецЕсли;
Контрольные точки

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

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

Элемент виден в режиме предприятия и отмечен как предопределённый

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

Элемент отсутствует или появился дубль с похожим наименованием

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

Обращение по имени возвращает заполненную ссылку

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

Возвращается пустая ссылка или возникает ошибка времени выполнения

Целостность после обновления
Норма

Проводки и отчёты формируются без ошибок

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

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

Когда предопределённые значения не нужны: альтернативы

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

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

Маршрут решения

Как выбрать подход

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

Часто задаваемые вопросы

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

Нет. Документы, как и регистры, журналы, бизнес-процессы и задачи, не поддерживают предопределённые элементы. Если нужен «особый» документ, его создают программно при первом запуске или в обработчике обновления, а ссылку сохраняют в константе или регистре сведений.

Что произойдёт, если пользователь переименует предопределённый элемент?

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

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

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

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

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

Чем предопределённый элемент отличается от значения перечисления?

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

Как программно проверить, что предопределённый элемент существует в базе?

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

Итог

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

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