Как полностью удалить дополнительные реквизиты номенклатуры в 1С и очистить базу для обмена с Битрикс?

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

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

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

Почему удаленные свойства остаются в системе и отображаются зачеркнутыми?

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

В результате возникают две технические коллизии:

  1. Отображение «зачеркнутых» реквизитов: Если в базе данных хотя бы у одного товара в табличной части ДополнительныеРеквизиты сохранено значение для удаленного свойства, система считает его устаревшим («сиротским»). Чтобы пользователь не потерял эти данные, платформа выводит такое свойство на форму элемента номенклатуры, но делает его шрифт серым и зачеркнутым, а рядом выводит кнопку очистки (красный крестик).
  2. Блокировка удаления через ПВХ: Дополнительные реквизиты и сведения физически хранятся в специальном объекте метаданных — Плане видов характеристик (ПВХ) ДополнительныеРеквизитыИСведения. Стандартное действие «Удаление помеченных объектов» не сможет стереть элемент этого ПВХ, пока на него ссылается хотя бы одна строка табличной части любого товара или другого объекта в базе данных.

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

Пошаговый алгоритм полного удаления дополнительного реквизита

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

Шаг 1. Поиск скрытого неиспользуемого свойства

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

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

Шаг 2. Очистка значений реквизита в элементах номенклатуры

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

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

Шаг 3. Физическое удаление элемента из базы данных

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

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

После проведения данных процедур обязательно выполните полную синхронизацию с 1С-Битрикс (или очистите кэш метаданных в модуле обмена), чтобы структура свойств на сайте полностью обновилась и пришла в соответствие с учетной системой.

Важное руководство для разработчиков: как избежать ошибок в коде

Очень часто программисты совершают критическую ошибку при попытке программно прочитать или заполнить дополнительный реквизит у объекта. Они используют поиск элемента по наименованию:


// ПРИМЕР НЕПРАВИЛЬНОГО И ОПАСНОГО КОДА!
МассивСтруктур = Новый Массив;
МассивСтруктур.Добавить(Новый Структура(
    "Свойство, Значение",
    ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Цвет", Истина),
    ЦветЗначение
));
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Номенклатура, МассивСтруктур);

В чем заключается опасность такого подхода? Метод НайтиПоНаименованию возвращает первый попавшийся элемент ПВХ с указанным наименованием. Если в базе было создано несколько свойств с именем "Цвет" (например, старое удаленное и новое актуальное), платформа может вернуть ссылку на старое «сиротское» свойство. В итоге программа запишет значение в скрытый реквизит, который мгновенно отобразится на форме номенклатуры как зачеркнутый, а пользователь не поймет, почему данные не отображаются в активном поле.

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


// ПРИМЕР ПРАВИЛЬНОГО КОДА С ИСПОЛЬЗОВАНИЕМ УНИКАЛЬНОГО ИМЕНИ
ИмяСвойства = "Цвет_b90dfd06_e817_11ed_80e0_00155d013e02"; // Уникальное имя из карточки доп. реквизита
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяСвойства);

Если ЗначениеЗаполнено(СвойствоСсылка) Тогда
    МассивСтруктур = Новый Массив;
    МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", СвойствоСсылка, ЗначениеСвойства));
    УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ОбъектНоменклатуры, МассивСтруктур);
Иначе
    ЗаписьЖурналаРегистрации("Свойства.Ошибка", УровеньЖурналаРегистрации.Предупреждение, , , "Не найдено свойство: " + ИмяСвойства);
КонецЕсли;

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


// Получение значения свойства через стандартный механизм БСП
ЗначениеРеквизита = УправлениеСвойствами.ЗначениеСвойства(ОбъектНоменклатуры, СвойствоСсылка);

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

← На главную