Как очистить «зачеркнутые» дополнительные реквизиты в 1С при групповом изменении?

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

При работе с каталогом товаров в программах 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация 2 пользователи часто сталкиваются с ситуацией, когда в карточке номенклатуры появляются «зачеркнутые» дополнительные реквизиты. Это происходит в тех случаях, когда у товара был изменен Вид номенклатуры, а в новом виде данные реквизиты не предусмотрены. Несмотря на то, что визуально они зачеркнуты, данные физически остаются в базе, могут мешать выгрузке на сайт или попадать в отчеты. Попытка очистить их через стандартную обработку Групповое изменение реквизитов обычным способом часто не приносит результата.

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

Почему дополнительные реквизиты становятся «зачеркнутыми»? ( Анализ структуры метаданных )

Проанализируем архитектуру хранения данных. В системе 1С дополнительные реквизиты не являются жестко заданными полями таблицы. Они хранятся в специальной табличной части объекта (например, справочника Номенклатура), которая называется ДополнительныеРеквизиты. Связь между товаром и его характеристиками осуществляется через Наборы дополнительных реквизитов и сведений, которые привязаны к Виду номенклатуры.

Когда мы меняем Вид номенклатуры, система обращается к новому набору свойств. Если в новом наборе нет тех реквизитов, которые были в старом, программа помечает старые данные как неактуальные. Они «зачеркиваются» в интерфейсе, так как логически больше не принадлежат этому объекту, но записи в табличной части никуда не исчезают. Групповая обработка по умолчанию видит только те реквизиты, которые входят в текущий актуальный набор свойств, поэтому простая попытка «не заполнять значение» для невидимого реквизита не срабатывает.

Способ 1: Временный возврат вида номенклатуры (самый простой)

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

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

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

Способ 2: Временная модификация Набора свойств

Если товаров очень много (десятки тысяч) и менять вид номенклатуры у каждой позиции долго, проанализируем ситуацию с точки зрения настроек системы. Вместо изменения данных в карточках товаров, мы можем временно изменить саму модель данных.

Разберем этот процесс по шагам:

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

Способ 3: Использование произвольного алгоритма (для продвинутых)

Если вы обладаете правами администратора, мы можем воспользоваться мощным инструментом внутри обработки Групповое изменение реквизитов — выполнением произвольного кода. Это позволит нам напрямую обратиться к табличной части ДополнительныеРеквизиты и удалить ненужные строки, не обращая внимания на то, зачеркнуты они или нет.

Посмотрим на пример алгоритма, который можно вставить в поле «Выполнить произвольный алгоритм» (доступно в дополнительных параметрах обработки):


// Перебираем строки табличной части дополнительных реквизитов
КоличествоСтрок = Объект.ДополнительныеРеквизиты.Количество();
Индекс = КоличествоСтрок - 1;

Пока Индекс >= 0 Цикл
    СтрокаРеквизита = Объект.ДополнительныеРеквизиты[Индекс];
    
    // Проверяем по наименованию или ссылке на свойство
    Если СтрокаРеквизита.Свойство.Наименование = "Доп. состав" Тогда
        Объект.ДополнительныеРеквизиты.Удалить(Индекс);
    КонецЕсли;
    
    Индекс = Индекс - 1;
КонецЦикла;

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

Нюанс с типом значения «Дополнительное значение»

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

Для этого в колонке «Значение» нажмите на кнопку выбора, и если откроется список значений, убедитесь, что вы выбрали команду Очистить. В поле должно отображаться значение <Объект не найден> или просто пустая строка, в зависимости от версии конфигурации. Если поле зачеркнуто, система может игнорировать команду «пусто», поэтому возвращаемся к Способу 1 или Способу 3.

Резюме и рекомендации

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

Основные выводы:

Всегда делайте резервную копию базы данных перед проведением массовых изменений реквизитов, особенно если планируете использовать произвольные алгоритмы на языке 1С.

← На главную