Редактирование товара#

Kоманда Характеристики -> атрибуты#

Эта команда находится на странице редактирования товара , в верхних действиях формы.

Назначение команды: взять данные из поля Характеристики (specs) и перенести их в фильтры/атрибуты товара, которые используются как структурированные фильтры и значения.

Что именно делает команда#

Команда:

  1. Берет текущий список характеристик товара из формы редактирования.
  2. Ищет подходящие атрибуты товара по имени характеристики.
  3. Преобразует текстовые значения характеристик в нужный тип атрибута.
  4. Записывает результат в:
    • Свободные значения для обычных значений,
    • Заданные варианты для атрибутов с вариантами выбора.

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

  1. PAV — сколько свободных значений было создано или обновлено.
  2. PAO — сколько атрибутов с заданными вариантами было обновлено.
  3. skipped — сколько значений пропущено.
  4. unchanged — сколько значений уже совпадало и не потребовало записи.

Что команда не делает#

Команда:

  1. не создает новые глобальные фильтры;
  2. не создает новые заданные варианты фильтров;
  3. не привязывает атрибут к категории;
  4. не заменяет мастер Масового изменения товаров Характеристики → фильтры;
  5. не переписывает логику отображения вкладки Характеристики на сайте;
  6. не сохраняет всю карточку товара целиком.

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

Если глобальный фильтр с именем параметра существует, но не привязан к основной категории товара, команда его проигнорирует.

Откуда берутся данные#

Команда читает характеристики из текущего состояния формы редактирования.

Это значит:

  1. если вы только что изменили характеристики в форме и еще не нажали Сохранить, команда все равно возьмет эти текущие значения;
  2. при этом сама команда не сохраняет остальные изменения формы автоматически;
  3. если после синхронизации закрыть страницу без сохранения, атрибуты уже могут быть записаны в базу, а сами изменения в в таблице характеритик нет.

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

Какие фильтры участвуют в синхронизации#

Команда работает не со всеми атрибутами в системе, а только с кандидатами:

  1. фильтры, которые уже заполнены у этого товара;
  2. фильтры основной категории товара.

Если у товара не задана основная категория, команда сможет обновлять только те фильтры, которые уже были привязаны к товару раньше.

Если фильтр существует в системе, но:

  1. не привязан к основной категории товара;
  2. или еще не заполнен у товара,

то команда его не подхватит, даже если имя характеристики совпадает.

Иными словами, для изменения или создания фильтра будет достаточно одного из двух условий: - фильтр уже “привязан к основной категории товара”; - фильтр “уже есть у товара”;

Команда не сработает только если фильтр и не в основоной категории, и отсутствует у товара.

Как происходит сопоставление по имени#

Сравнение идет не по “сырому” тексту, а по нормализованному имени.

Нормализация делает следующее:

  1. убирает лишние пробелы, переносы строк и неразрывные пробелы;
  2. приводит строку к нижнему регистру;
  3. приводит разные тире и кавычки к одному виду;
  4. может убрать единицу измерения в конце имени, если она известна системе.

Пример:

Параметр в характеристиках:  Диапазон затемнения, DIN
Фильтр в системе:       Диапазон затемнения

Такое сопоставление считается валидным, если DIN известна как единица измерения.

Что происходит с дублями#

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

Пример:

Мощность = 1 кВт
Мощность = 2 кВт

В синхронизацию пойдет 2 кВт.

Рекомендуемый порядок работы#

  1. Убедитесь, что у товара указана правильная основная категория.
  2. Убедитесь, что нужные фильтры уже существуют и привязаны к этой категории.
  3. Заполните или поправьте таблицу Характеристики на конкретном товаре.
  4. Запустите команду Характеристики -> атрибуты.
  5. Проверьте счетчики в уведомлении.
  6. Посмотрите Свободные значения и Заданные варианты и убедитесь, что значения легли правильно.
  7. Если вы меняли Характеристики в таблице до запуска команды, сохраните карточку товара.

Когда использовать другую механику#

Если задача состоит не в переносе значений из таблицы в филтры, а в подготовке структуры каталога, эта команда не подойдет.

Нужна другая логика, если требуется:

  1. создать новый фильтр;
  2. привязать фильтр к категории;
  3. создать отсутствующие варианты опций;
  4. массово сопоставить характеристики нескольких товаров с фильтрами категории.

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

Коротко#

Характеристики -> атрибуты — это быстрый синк уже существующих характеристик товара в уже существующую схему фильтров.

Команда хорошо работает, когда:

  1. филтры уже созданы;
  2. основная категория товара настроена;
  3. опции и единицы измерения заведены корректно;
  4. Таблица фильтров этого товара заполнена аккуратно и однозначно.

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

Более подробный разбор работы команды#

Поддерживаемые типы атрибутов#

Команда умеет синхронизировать два больших класса данных:

  1. свободные значения:
    • text
    • number
    • boolean
    • range
  2. значения через опции:
    • select
    • multiselect

Ниже описано поведение по каждому типу.

Тип text#

Для текстового атрибута команда:

  1. берет строку как есть;
  2. обрезает пробелы по краям;
  3. записывает значение в value_text.

Пустая строка не записывается и считается пропуском.

Тип boolean#

Для булевых атрибутов команда понимает ограниченный набор значений.

Положительные значения:

  1. 1
  2. true
  3. yes
  4. да
  5. есть
  6. on

Отрицательные значения:

  1. 0
  2. false
  3. no
  4. нет
  5. off

Если значение не распознано, атрибут попадет в skipped.

Пример:

Пылеудаление = да

Будет записано как true.

Тип number#

Для числовых атрибутов команда:

  1. извлекает из строки число;
  2. пытается определить единицу измерения;
  3. при необходимости переводит значение в базовую единицу атрибута;
  4. записывает результат в числовые поля значения.

Примеры:

Мощность = 2 кВт

Если базовая единица атрибута Вт, в атрибут будет записано 2000.

Напряжение = 220

Если единица в значении не указана, считается, что число уже задано в базовой единице атрибута.

Важно:

  1. если в строке найдено несколько чисел, для типа number берется первое;
  2. если единица указана, но не может быть однозначно сопоставлена с единицей атрибута, значение будет пропущено;
  3. если у атрибута не настроена базовая единица, конвертация невозможна и значение будет пропущено.

Тип range#

Для диапазона команда:

  1. извлекает одно или два числа;
  2. при необходимости переводит их в единицу атрибута;
  3. записывает минимум и максимум в диапазонные поля.

Примеры:

Диапазон затемнения = 5-13
Диапазон затемнения = 5 — 13 DIN

Оба варианта корректно распознаются как диапазон.

Если найдено только одно число, оно будет использовано и как минимум, и как максимум.

Если числа указаны в обратном порядке, команда поменяет их местами автоматически.

Типы select и multiselect#

Для атрибутов с вариантами выбора команда:

  1. разбивает строку на кандидаты;
  2. ищет каждый вариант среди уже существующих attribute_options;
  3. записывает найденные option_id.

Разделителями считаются:

  1. запятая;
  2. точка с запятой;
  3. вертикальная черта |;
  4. перенос строки;
  5. в отдельном случае / с пробелами по краям.

Примеры:

Цвет = Красный, Синий
Комплектация = База | Тумба

Особенности:

  1. для select должен получиться ровно один вариант, иначе будет skipped;
  2. для multiselect можно передать несколько вариантов;
  3. если хотя бы один вариант не найден в справочнике опций этого атрибута, весь атрибут будет пропущен;
  4. команда не создает отсутствующие опции автоматически.

Как сопоставляются единицы измерения#

Единица определяется по текстовому токену из значения и сравнивается с единицами, доступными атрибуту.

Для сопоставления используются:

  1. symbol;
  2. name;
  3. base_symbol.

Сравнение тоже нормализуется:

  1. без учета регистра;
  2. без пробелов;
  3. без точек;
  4. с приведением верхних и нижних индексов цифр к обычным цифрам.

Если одна и та же подпись может подойти к нескольким единицам атрибута, значение считается неоднозначным и будет пропущено.

Когда значение считается неизменным#

Команда не переписывает данные без необходимости.

Значение считается неизменным, если:

  1. у boolean уже записан тот же true/false;
  2. у number текущее и новое число совпадают с учетом допуска 0.000001;
  3. у range совпадают и минимум, и максимум;
  4. у text совпадает текст после trim;
  5. у select и multiselect совпадает набор выбранных опций.

Такие случаи попадают в unchanged.

Почему появляются skipped#

Типовые причины:

  1. имя характеристики совпало, но значение нельзя разобрать под тип атрибута;
  2. булево значение не входит в допустимый словарь;
  3. для select пришло несколько вариантов вместо одного;
  4. один или несколько вариантов опции отсутствуют в справочнике атрибута;
  5. указана неизвестная или неоднозначная единица измерения;
  6. у числового атрибута не настроена базовая единица;
  7. атрибут не попал в список кандидатов, потому что не связан с первичной категорией и еще не заполнен у товара.

Где смотреть результат в админке#

После синхронизации проверьте группу связей Фильтры у товара:

  1. Свободные значения — сюда попадут text, number, boolean, range;
  2. Заданные варианты — сюда попадут select и multiselect.

Если вы ожидали изменения на витрине во вкладке Характеристики, важно помнить:

  1. вкладка Характеристики на странице товара строится из specs;
  2. блоки и механики, использующие структурированные атрибуты, читают уже синхронизированные атрибуты;
  3. сама синхронизация не заменяет и не очищает исходный список specs.