Почему после удаления предопределенных элементов в конфигураторе не пропадает признак предопределенности в 1С:Предприятии?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Проанализируем архитектурные особенности платформы 8.3, выясним причину такого поведения и разберем по шагам практические способы корректного удаления и снятия признака предопределенности.

Причина поведения платформы 1С 8.3

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

Начиная с версии 1С:Предприятия 8.3 (при отключенном режиме совместимости с версией 8.2), концепция предопределенных данных была кардинально переработана:

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

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

Способ 1. Программное снятие признака предопределенности

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

Посмотрим на пример программного кода, который можно выполнить во внешней обработке или консоли кода:


// Получаем объект из ссылки
Объект = СсылкаНаЭлемент.ПолучитьОбъект();

// Очищаем имя предопределенного элемента
Объект.ИмяПредопределенныхДанных = "";

// Включаем режим загрузки для обхода возможных проверок логики конфигурации
Объект.ОбменДанными.Загрузка = Истина;

// Записываем изменения
Объект.Записать();

После выполнения данного кода элемент потеряет специальный значок с точкой и его можно будет стандартно пометить на удаление и удалить через процедуру Удаление помеченных объектов.

Способ 2. Интерактивное удаление предопределенных данных в режиме 1С:Предприятие

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

  1. ИнтерактивнаяПометкаУдаленияПредопределенныхДанных
  2. ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных
  3. ИнтерактивноеУдалениеПредопределенныхДанных
  4. ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных

Если у текущей роли установлены эти права, пользователь может нажать клавишу Del на предопределенном элементе прямо в списке, установить пометку удаления и выполнить стандартное удаление объекта.

Способ 3. Использование типовой обработки «Групповое изменение реквизитов»

Если требуется обработать сразу несколько элементов без написания программного кода, воспользуемся стандартной обработкой Групповое изменение реквизитов (входит в состав БСП):

  1. Открываем обработку Групповое изменение реквизитов в режиме 1С:Предприятие.
  2. Переходим в меню Дополнительные параметры и устанавливаем флаг Показывать служебные реквизиты, а также (при необходимости) режим Разработчикам: выполнять в режиме загрузки данных.
  3. Выбираем нужный справочник и настраиваем отбор по элементам, у которых требуется снять предопределенность.
  4. Находим в списке реквизитов ИмяПредопределенныхДанных, отмечаем его флагом и оставляем поле значения пустым.
  5. Нажимаем кнопку Изменить реквизиты.

Способ 4. Тестирование и исправление информационной базы

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

  1. Создаем резервную копию информационной базы.
  2. В конфигураторе открываем меню Администрирование -> Тестирование и исправление....
  3. Включаем проверку Проверка логической целостности информационной базы.
  4. При обнаружении некорректных предопределенных ссылок механизм тестирования очистит неактуальные ссылки на несуществующие метаданные.

Дополнительные параметры и нюансы платформы

При работе с предопределенными данными важно помнить о следующих механизмах:

Свойство «Обновление предопределенных данных»: В свойствах самого объекта метаданных (например, справочника) доступно свойство ОбновлениеПредопределенныхДанных со значениями Авто, Обновлять автоматически и Не обновлять автоматически. Если для объекта выбрано значение Не обновлять автоматически, автоматическая синхронизация элементов при обновлении конфигурации базы данных выполняться не будет.

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

← На главную