Предопределённые элементы 1С 8.3: что можно поменять в программе, а что только в конфигураторе

· 10 мин

Содержание

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

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

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

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

Справочники.ВидыНоменклатуры.Товары
ПредопределенноеЗначение("Справочник.ВидыНоменклатуры.Товары")

Отсюда все сложности:

  • 🔗 На имя завязан код. Отчёты, проведение документов и обработки ищут запись не по наименованию, а по имени. Переименование в форме код не ломает, а смена имени в конфигураторе — ломает.
  • 🚫 Удалить интерактивно нельзя без отдельного права. Пометку удаления платформа блокирует.
  • 🧩 Элемент существует в двух местах. Описание — в конфигурации, запись — в таблице базы. Если связь между ними порвётся, программа выдаст ошибку при первом обращении по имени.
  • 🔄 Обновления типовой конфигурации могут менять предопределённые данные. Ваши правки в конфигураторе встанут в конфликт с поставщиком.

Предопределённые бывают у справочников, планов счетов, планов видов характеристик и планов видов расчёта. В плане счетов БП 3.0 предопределённые почти все счета типового плана.

Как узнать, что элемент предопределённый

В списке справочника такие записи отмечены отдельной пиктограммой. Точно проверить можно в конфигураторе: откройте объект, вкладка Прочее → Предопределенные. Там видно имя, код и наименование каждого элемента.

Программно признак читают через свойство Предопределенный (Истина/Ложь), а имя — через ИмяПредопределенныхДанных. Оба поля доступны и в запросе:

ВЫБРАТЬ
    Спр.Ссылка,
    Спр.Наименование,
    Спр.ИмяПредопределенныхДанных
ИЗ
    Справочник.ВидыНоменклатуры КАК Спр
ГДЕ
    Спр.Предопределенный

Запрос удобно выполнить в консоли запросов, чтобы увидеть, какие записи в базе связаны с какими именами.

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

Причин немного, и у каждой свой способ.

ЗадачаСпособРиск
Наименование не подходит компании («Основной склад» → «Склад Химки»)Форма элементаПочти нет
Нужно заполнить реквизиты: ставку, счёт учёта, единицуФорма элементаПочти нет
В базе два элемента с одним именем после обмена или загрузкиКод через ИмяПредопределенныхДанныхСредний, нужна копия
Ошибка «предопределённый элемент не существует» после удаления записиКод или повторная инициализацияСредний
Разработчику нужен новый предопределённый элемент или новое имяКонфигураторВысокий для типовой

Если ваш случай — первые две строки, конфигуратор не нужен вовсе.

Способ 1. Изменить предопределенный элемент в режиме 1С:Предприятие

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

  1. Откройте нужный справочник или план счетов через раздел программы или через Главное меню → Все функции. Если пункта «Все функции» нет, включите его в Сервис и настройки → Параметры флажком «Отображать команду “Все функции”».
  2. Найдите элемент по наименованию и откройте двойным щелчком.
  3. Поменяйте наименование или реквизиты.
  4. Нажмите Записать и закрыть.

Что поменять, как правило, не получится:

  • 📛 Код — у части объектов он заблокирован в форме, если типовая конфигурация защищает предопределённые записи. Так устроены, например, предопределённые счета в плане счетов БП 3.0: их код задаёт поставщик.
  • 🗑️ Пометку удаления — без специального права платформа её не даст поставить.
  • 🗂️ Родителя и вид элемента — зависит от конфигурации; в типовых формах эти поля для предопределённых часто закрыты.

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

Способ 2. Поменять предопределённые данные в конфигураторе

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

Подготовка

  1. Сделайте выгрузку информационной базы в файл .dt (Администрирование → Выгрузить информационную базу) или резервную копию средствами СУБД.
  2. Для типовой конфигурации на поддержке включите возможность изменения: Конфигурация → Поддержка → Настройка поддержки → Включить возможность изменения. Для самого объекта выберите правило «Объект поставщика редактируется с сохранением поддержки».

Снятие с полной поддержки делает обновления ручными: при каждом обновлении придётся сравнивать и объединять изменённый объект. Для небольшой правки наименования это неоправданная цена — используйте способ 1.

Правка

  1. В дереве конфигурации откройте объект (справочник, план счетов).
  2. Перейдите на вкладку Прочее и нажмите Предопределенные.
  3. В открывшемся списке измените нужное поле: имя, код, наименование, родителя. Здесь же добавляют новые элементы и удаляют лишние.
  4. Сохраните конфигурацию и обновите конфигурацию базы данных (F7).

После обновления структуры платформа сопоставит описание с записями базы. Изменённое в конфигураторе наименование не перезапишет то, которое пользователь уже поменял в форме: запись в базе живёт своей жизнью.

Если меняете имя

Имя — это то, к чему привязан код. Перед переименованием найдите все обращения: Правка → Глобальный поиск (или Ctrl+Shift+F) по старому имени во всех модулях. Ищите оба варианта: .СтароеИмя и строку "Справочник.ИмяОбъекта.СтароеИмя" внутри ПредопределенноеЗначение.

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

Способ 3. Привязать или отвязать элемент кодом

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

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

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

// Выполняется на сервере, под пользователем с полными правами
Лишний = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000012").ПолучитьОбъект();
Лишний.ИмяПредопределенныхДанных = "";
Лишний.ПометкаУдаления = Истина;
Лишний.Записать();

Код 000000012 здесь условный: сначала выполните запрос из первого раздела и посмотрите, какая из записей лишняя. Ориентир — на какую запись нет ссылок в документах: удаление помеченных объектов само покажет, если на запись кто-то ссылается, и не даст её удалить.

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

Объект = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товары", Истина).ПолучитьОбъект();
Объект.ИмяПредопределенныхДанных = "Товары";
Объект.Записать();

Если записи нет совсем, менеджер объекта создаст недостающие предопределённые методом ИнициализироватьПредопределенныеДанные():

Справочники.ВидыНоменклатуры.ИнициализироватьПредопределенныеДанные();

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

Код с записью объектов запускайте сначала на копии базы. Выполнять его удобно во внешней обработке или в консоли кода в режиме 1С:Предприятие под администратором.

Ошибки при изменении предопределённых элементов и что с ними делать

Большинство проблем появляется не в момент правки, а позже: при обмене, обновлении или проведении.

Диагностика: выберите симптом

Откуда берутся дубли в распределённой базе

Классическая причина — свойство объекта Обновление предопределенных данных на вкладке Прочее. Варианты: Авто, Обновлять автоматически, Не обновлять автоматически.

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

Можно обойтись без правки предопределённого

Часто задача решается так, что предопределённые данные остаются нетронутыми.

  • ➕ Создать обычный элемент рядом. Нужен ещё один вид номенклатуры или склад — добавьте запись в форме. Предопределённый для этого не трогают.
  • 📌 Сменить значение по умолчанию. Если не устраивает, что программа подставляет предопределённую запись, ищите настройку в разделе Администрирование или в персональных настройках пользователя: во многих типовых значения по умолчанию задаются там, а не жёстко в коде.
  • 🧱 Расширение конфигурации. Нужен новый реквизит или своя логика вокруг элемента — сделайте её в расширении (Конфигурация → Расширения конфигурации). Основная конфигурация останется на поддержке, обновления пройдут без ручного объединения.
  • 🔁 Субсчёт вместо правки счёта. В плане счетов вместо изменения предопределённого счёта добавьте к нему свой субсчёт с нужной аналитикой.
Что нужно поменять в предопределённом элементе?

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

Защита строится на правах и на коде формы.

Права ролей

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

Блокировка полей в форме

Если нужно запретить и правку наименования, закройте поля формы для предопределённых записей. В модуле формы элемента:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Объект.Предопределенный Тогда
        Элементы.Наименование.ТолькоПросмотр = Истина;
    КонецЕсли;
КонецПроцедуры

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

Проверка при записи

Форма защищает только интерактивную правку. Чтобы обработки и загрузки тоже не меняли запись, добавьте проверку в обработчик ПередЗаписью модуля объекта: если Предопределенный равно Истина и пользователь не администратор — Отказ = Истина с сообщением. Учтите, что обмен данными пишет объекты с ОбменДанными.Загрузка = Истина; такие записи проверку обычно пропускают, иначе обмен остановится.

Перед правкой предопределённого элемента
Выполнено: 0 / 6

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

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