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

Справочники и Данные · 10 мин

Что значит «предопределённый» в 1С

Что означает «предопределённый» в 1С: предопределённые элементы справочников, планов счетов и видов характеристик, чем они отличаются от обычных и как с ними работать.

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

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

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

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

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

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

Где встречаются предопределённые элементы

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

На практике чаще всего пользователь сталкивается с предопределёнными элементами в таких местах:

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

Как отличить предопределённый элемент от обычного

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

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

bsl
Если СправочникОбъект.Предопределенный Тогда
    Сообщить("Элемент предопределённый, удаление запрещено");
КонецЕсли;

// Получение ссылки по имени предопределённого элемента
ВалютаРубль = Справочники.Валюты.НайтиПоНаименованию("RUB");
СчетМатериалы = ПланыСчетов.Хозрасчетный.Материалы;

Обращение к предопределённому элементу по имени через менеджер объекта (например, ПланыСчетов.Хозрасчетный.Материалы) — самый быстрый способ получить ссылку: платформа кэширует такие обращения и не выполняет запрос к базе данных.

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

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

Обычный и предопределённый элемент

Обычный элемент

Создаётся пользователем, можно удалить, переименовать, изменить любые данные. Код конфигурации на него не опирается.

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

Создаётся разработчиком, удаление запрещено, имя в метаданных фиксировано. Реквизиты и наименование обычно редактируются.

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

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

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

Несколько практических правил помогают избежать типовых проблем:

  1. Давайте предопределённым элементам говорящие имена — они станут частью программного интерфейса конфигурации.
  2. Не полагайтесь на наименование: пользователь может его изменить, обращайтесь к элементу только по имени.
  3. При удалении предопределённого элемента из метаданных проверьте весь код на обращения к нему — иначе получите ошибки компиляции модулей.
  4. При переименовании предопределённого элемента платформа обновит обращения автоматически только в модулях конфигурации; внешние отчёты и обработки придётся править вручную.
  5. Помните про обмен данными: предопределённые элементы синхронизируются по имени, и расхождение имён в узлах РИБ приводит к дублям.

Типичные проблемы и способы их решения

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

Вторая типовая проблема — дубли предопределённых элементов после обмена данными или ручного восстановления. В списке появляются два «одинаковых» счёта или валюты, отчёты начинают вести себя странно. Здесь помогает поиск и удаление дублей штатными средствами с переносом ссылок на «правильный» предопределённый элемент, а не наоборот.

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

Как проверить, что всё работает правильно

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

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

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

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

Типовые элементы присутствуют, без дублей и перечёркнутых пиктограмм

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

Элементы отсутствуют, продублированы или помечены как удалённые из метаданных

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

Документ проводится без сообщений об ошибках

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

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

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

Менеджер объекта возвращает заполненную ссылку

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

Возвращается пустая ссылка или возникает исключение

Если проверка выявила проблемы, безопасный порядок действий такой: сделать резервную копию, повторно запустить обновление конфигурации базы данных в конфигураторе, затем протестировать на копии. Прямые вмешательства в таблицы базы средствами СУБД — крайняя мера, требующая понимания структуры хранения 1С.

Итог

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

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

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

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

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

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

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

Что означает перечёркнутая пиктограмма у предопределённого элемента?

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

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

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

Почему после обмена данными появились дубли счетов или валют?

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