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