Настройка массового изменения свойств товаров в 1С-Битрикс

Настройка массового изменения свойств товаров в 1С-Битрикс В каталоге 15 000 товаров нужно проставить новое свойство «Материал» у 8 000 позиций определённой категории, исправить опечатку в значении фасетного фильтра у 2 000 товаров, снять флаг «Рекомендуемый» у половины ассортимента. Через карточ
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка массового изменения свойств товаров в 1С-Битрикс
Простой
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1164

Настройка массового изменения свойств товаров в 1С-Битрикс

В каталоге 15 000 товаров нужно проставить новое свойство «Материал» у 8 000 позиций определённой категории, исправить опечатку в значении фасетного фильтра у 2 000 товаров, снять флаг «Рекомендуемый» у половины ассортимента. Через карточку товара это недели работы. Мы решаем такие задачи пакетным обновлением через API с контролем целостности данных. У нас за плечами более 10 лет опыта в разработке на Битрикс — мы знаем, как обновить свойства тысяч товаров за часы, а не дни. На каталоге из 15 000 товаров ручное обновление заняло бы 3–4 недели, автоматизация сокращает до 1–2 дней. Экономия времени очевидна, а стоимость рассчитывается индивидуально — вы платите только за результат.

Где хранятся свойства

Свойства товаров в Битрикс хранятся в нескольких местах в зависимости от типа:

  • Поля элемента (NAME, PREVIEW_TEXT, ACTIVE и др.) — b_iblock_element
  • Свойства инфоблока — b_iblock_element_property, где IBLOCK_PROPERTY_ID — ID свойства, VALUE — значение
  • Множественные свойства — несколько строк в b_iblock_element_property с одним IBLOCK_ELEMENT_ID и одним IBLOCK_PROPERTY_ID
  • Свойства типа «Список» — VALUE содержит текстовое значение, VALUE_ENUM_ID — ссылку на b_iblock_property_enum

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

Как массово обновить свойства товаров без просадки производительности?

Для небольших объёмов (до 1 000 элементов) подходит CIBlockElement::SetPropertyValues. Код рабочий:

$iblockId = 10; // ID инфоблока каталога $propertyCode = 'MATERIAL'; $newValue = 'Хлопок 100%'; // Получаем список элементов нужной секции $res = \CIBlockElement::GetList( [], ['IBLOCK_ID' => $iblockId, 'SECTION_ID' => 42, 'ACTIVE' => 'Y'], false, false, ['ID'] ); while ($row = $res->Fetch()) { \CIBlockElement::SetPropertyValues( $row['ID'], $iblockId, $newValue, $propertyCode ); } 

Однако на больших объёмах этот метод медленный — он читает текущие значения, сравнивает, обновляет. Каждый вызов — несколько SQL-запросов. Для объёмов от 1 000 элементов настоятельно рекомендуем прямое обновление через D7 ORM.

Быстрое обновление через D7 ORM

Для объёмов от 1 000 элементов используйте прямое обновление b_iblock_element_property:

use Bitrix\Iblock\ElementPropertyTable; // Сначала получаем ID свойства $propertyId = getPropertyIdByCode($iblockId, 'MATERIAL'); // Получаем ID элементов пакетами $elementIds = getElementIdsBySectionBatch($iblockId, $sectionId, 500); foreach (array_chunk($elementIds, 500) as $chunk) { // Проверяем, у кого уже есть запись $existing = ElementPropertyTable::getList([ 'filter' => [ 'IBLOCK_PROPERTY_ID' => $propertyId, 'IBLOCK_ELEMENT_ID' => $chunk, ], 'select' => ['ID', 'IBLOCK_ELEMENT_ID'], ])->fetchAll(); $existingMap = array_column($existing, 'ID', 'IBLOCK_ELEMENT_ID'); foreach ($chunk as $elementId) { if (isset($existingMap[$elementId])) { // Обновляем существующую запись ElementPropertyTable::update($existingMap[$elementId], ['VALUE' => 'Хлопок 100%']); } else { // Вставляем новую ElementPropertyTable::add([ 'IBLOCK_ELEMENT_ID' => $elementId, 'IBLOCK_PROPERTY_ID' => $propertyId, 'VALUE' => 'Хлопок 100%', ]); } } } 

После прямого изменения таблицы нужно сбросить кэш инфоблока:

\Bitrix\Iblock\InformationBlock::cleanTagCache($iblockId); \Bitrix\Main\Application::getInstance()->getTaggedCache()->clearByTag('iblock_id_' . $iblockId); 

Почему после массового обновления свойств не работает фасетный фильтр?

После изменения свойств, которые используются в умном фильтре (catalog.smart.filter), необходимо перестроить фасетный индекс. Иначе значения не обновятся в фильтре. Мы всегда включаем переиндексацию в процесс работ.

\Bitrix\Iblock\PropertyIndex\Manager::markIblockToReindex($iblockId); // или принудительно: $indexer = new \Bitrix\Iblock\PropertyIndex\Indexer($iblockId); $indexer->startIndex(); $indexer->continueIndex(0); $indexer->endIndex(); 

На каталоге 50 000+ товаров переиндексация занимает несколько минут — запускайте в фоне через агент или cron. Согласно документации 1С-Битрикс, рекомендуется запускать переиндексацию в фоновых процессах, чтобы не блокировать пользователей.

Детали переиндексации Фасетный индекс строится на основе таблиц `b_iblock_element_property` и `b_iblock_property_enum`. Если вы обновляете свойства напрямую через SQL, индекс может не соответствовать актуальным данным. Перестройка индекса через `PropertyIndex\Manager` гарантирует синхронизацию. Для больших каталогов (от 100 000 товаров) используйте поэтапную индексацию через агент с шагом по 1000 элементов.

Особенности обновления списковых свойств

Свойства типа «Список» (используются в фасетном фильтре) хранят в VALUE текстовое значение, а в VALUE_ENUM_ID — ID из b_iblock_property_enum. При изменении значения нужно обновлять оба поля.

// Находим ID нового значения в перечислении $enumRes = \CIBlockPropertyEnum::GetList( [], ['PROPERTY_ID' => $propertyId, 'VALUE' => 'Синий'] ); $enum = $enumRes->Fetch(); $enumId = $enum['ID']; // Обновляем ElementPropertyTable::update($existingPropId, [ 'VALUE' => 'Синий', 'VALUE_ENUM_ID' => $enumId, ]); 

Если нужного значения ещё нет в перечислении — сначала добавьте его через CIBlockProperty::SetEnumValues() или напрямую в b_iblock_property_enum.

Импорт CSV как альтернатива

Для нетехнических пользователей или регулярных обновлений лучше подходит импорт CSV через Каталог → Импорт. Шаблон файла: первая строка — заголовки с кодами полей (ID, PROPERTY_MATERIAL, PROPERTY_COLOR). Битрикс обновляет только те свойства, колонки которых присутствуют в файле.

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

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

  1. Анализ структуры: выяснить, какие свойства и сколько элементов нужно обновить.
  2. Выбор метода: для <500 товаров — SetPropertyValues, для больших — D7 ORM.
  3. Разработка скрипта с учётом типа свойств (простые, множественные, списковые).
  4. Тестирование на копии базы или небольшой выборке (10-20 элементов).
  5. Запуск обновления с логированием и контролем ошибок.
  6. Сброс кэша инфоблока и перестроение фасетного индекса.
  7. Валидация: проверить, что свойства обновились, фильтр работает корректно.

Что входит в настройку массового изменения свойств

В рамках работы мы:

  • Анализируем текущую структуру свойств и данные
  • Выбираем оптимальный метод обновления (API, D7 ORM, импорт CSV)
  • Пишем скрипты с контролем ошибок и логированием
  • Тестируем на небольшой выборке
  • Запускаем полное обновление и перестраиваем кэш и фасетный индекс
  • Предоставляем документацию по процессу

Мы гарантируем сохранность данных и минимизацию времени простоя.

Сроки выполнения

Объём Метод Время
До 500 товаров Admin UI / SetPropertyValues 1–3 часа
500–5 000 товаров D7 пакетное обновление 3–6 часов
5 000–50 000 товаров D7 + очередь + переиндексация 1–2 дня

Сравнение методов обновления

Метод Скорость Сложность Поддержка условий
SetPropertyValues Медленно (до 1000 эл.) Низкая Нет
D7 ORM Быстро (от 1000 эл.) Средняя Да (в коде)
CSV-импорт Средне Низкая Только по ID

Как заказать настройку

Если вам нужно массово обновить свойства товаров, свяжитесь с нами. Мы оценим объём работ и предложим решение под ключ. Получите консультацию — просто напишите. Ваш каталог будет приведён в порядок без боли и простоев.