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