Как изменить тип значения или удалить дополнительные реквизиты и сведения в 1С:УТ 11?

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

При работе с современными конфигурациями на базе Библиотеки стандартных подсистем (БСП), такими как «Управление торговлей 11», «ERP» или «Комплексная автоматизация», специалисты часто сталкиваются с жесткими ограничениями платформы при попытке отредактировать уже созданные дополнительные реквизиты. Система блокирует изменение типа значения, а при попытке удаления выдает сообщение о наличии ссылок, даже если реквизит кажется абсолютно новым и неиспользуемым. Разберем детально, почему это происходит и как решить задачу корректно.

Почему блокируется изменение типа значения?

Рассмотрим архитектурную особенность БСП. Как только элемент справочника ДополнительныеРеквизитыИСведения записан в базу данных, поле ТипЗначения становится недоступным для редактирования. Это не ошибка программы, а механизм защиты целостности данных. Если мы изменим тип реквизита (например, со «Строки» на «Число»), а в документах уже сохранены строковые значения, это приведет к критическим ошибкам при чтении объектов и нарушит работу запросов.

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

  1. Создание нового реквизита: Это самый «чистый» способ. Мы создаем новый элемент с правильным типом, а старый помечаем на удаление. Если старый реквизит уже был выведен в формы, его придется заменить.
  2. Принудительное изменение через групповую обработку: Если мы точно уверены, что реквизит не заполнен ни в одном объекте, воспользуемся стандартным инструментом ГрупповоеИзменениеРеквизитов.

Разберем по шагам, как разблокировать поле программно-инструментальными средствами:

  1. Откроем обработку «Групповое изменение реквизитов» (в разделе «Администрирование» — «Обслуживание» — «Корректировка данных»).
  2. Выберем объект Дополнительные реквизиты и сведения.
  3. Настроим отбор по нашему конкретному реквизиту, чтобы не изменить лишнего.
  4. Нажмем кнопку «Дополнительные параметры» и установим флаг «Показывать служебные реквизиты».
  5. В списке доступных для изменения полей найдем Тип значения. После включения служебных реквизитов система позволит перезаписать это поле.

Почему не удаляются дополнительные реквизиты: поиск скрытых ссылок

Часто возникает ситуация: реквизит помечен на удаление, значения в документах не заполнены, но стандартная обработка «Удаление помеченных объектов» выдает ошибку: «Объект не может быть удален, так как на него ссылаются другие объекты». Выясним причину такого поведения системы.

Дополнительный реквизит в 1С никогда не существует «сам по себе». Он всегда является частью структуры метаданных БСП. Проанализируем основные места, где могут скрываться ссылки:

  1. Наборы дополнительных реквизитов и сведений: Это основная причина блокировки. Каждый реквизит привязан к справочнику НаборыДополнительныхРеквизитовИСведения. Например, если вы создали реквизит для справочника «Номенклатура», он автоматически добавился в набор «Общие свойства номенклатуры». Пока строка с этим реквизитом присутствует в табличной части набора, основной объект не будет удален.
  2. Регистр сведений «Дополнительные сведения»: Если вы работаете не с реквизитами, а со сведениями, информация о них хранится в отдельном регистре. Даже если вы не заполняли значение, в базе могла создаться пустая запись-заготовка при открытии карточки объекта.
  3. Система версионирования: Если в «УТ 11» включено версионирование объектов, то ссылка на реквизит могла попасть в ИсторияДанных или регистр ВерсииОбъектов. В этом случае система будет видеть ссылку в архиве изменений.

Алгоритм полного удаления реквизита

Рассмотрим последовательность действий для успешной очистки базы от ненужного доп. реквизита:

  1. Зайдем в раздел «Администрирование» — «Общие настройки» — «Дополнительные реквизиты и сведения».
  2. Найдем наш реквизит в списке. Обратите внимание, в какой группе (наборе) он находится.
  3. Откроем этот набор и вручную удалим строку с нашим реквизитом из списка. Именно это действие разрывает основную связь.
  4. Если реквизит используется в нескольких наборах (общий реквизит), процедуру нужно повторить для каждого.
  5. Снова запустим «Удаление помеченных объектов». Если ссылка все еще висит, нажмем кнопку «Далее» или «Посмотреть ссылки» в окне удаления.

Программные способы решения проблемы

В некоторых случаях, когда ссылок слишком много (например, реквизит ошибочно попал в сотни версий объектов), интерактивное удаление становится слишком трудоемким. Посмотрим на пример кода, который позволяет найти и проанализировать ссылки программно:


// Пример поиска ссылок на объект
СсылкаНаОбъект = Справочники.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("НашОшибочныйРеквизит");
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(СсылкаНаОбъект);

ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);
Для Каждого СтрокаСсылок Из ТаблицаСсылок Цикл
    Сообщить("На объект ссылается: " + СтрокаСсылок.Данные);
КонецЦикла;

Если мы убедились, что данные реквизита не несут ценности, и нам нужно принудительно очистить базу, можно использовать метод УдалитьОбъекты с отключением проверки ссылочной целостности. Внимание: это экстремальный метод, который следует использовать только на копии базы или будучи полностью уверенным в последствиях.


// Принудительное удаление без проверки ссылок (опасно!)
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаРеквизит);
УдалитьОбъекты(МассивОбъектов, Ложь); 

Параметр Ложь во втором аргументе функции УдалитьОбъекты отключает проверку «выходных» ссылок. Это позволит удалить элемент справочника, даже если он указан в наборах или версиях. Однако после такого удаления в наборах доп. реквизитов останутся «битые ссылки» (объект не найден), которые придется вычищать отдельно или с помощью тестирования и исправления ИБ.

Особенности кэширования в УТ 11.3

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

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

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

← На главную