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