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