Налаштування масового редагування товарів 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування масового редагування товарів 1С-Бітрікс
Проста
~1 робочий день
Часті питання

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Настройка масового редагування товарів 1С-Бітрікс

У каталозі 5000 товарів, у 800 з них потрібно оновити одне поле — скажімо, додати прапор «Хіт продажу». Редагувати по одному — робочий день. Штатний інструмент масового редагування в адміністративній частині Бітрікса закриває більшість сценаріїв, але має обмеження, які потрібно знати.

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

В адміністративному списку товарів (/bitrix/admin/iblock_list_admin.php?type=catalog) вибираються потрібні позиції, потім дія «Редагувати вибрані». Відкривається форма, де вказуються лише змінювані поля — решта залишаються без змін.

Технічно це працює через CIBlockElement::Update(), викликаний для кожного вибраного ID. Параметр $bWorkFlow = false — без створення чорновика. При оновленні властивостей Бітрікс перезаписує лише передані властивості, не торкаючись інших.

Обмеження стандартного механізму: не працює з множинними властивостями (тип L з кількома значеннями) та не підтримує умовне оновлення («установити значення лише якщо поточне пусте»).

Масове оновлення через API

Для оновлення великої кількості товарів через скрипт правильніше використовувати D7 API з батчевою обробкою:

$productIds = [1001, 1002, 1003, /* ... */];
$batchSize  = 50;
$chunks     = array_chunk($productIds, $batchSize);

foreach ($chunks as $chunk) {
    foreach ($chunk as $id) {
        \CIBlockElement::Update($id, false, [
            'PROPERTY_VALUES' => [
                'IS_HIT' => 'Y',
            ],
        ]);
    }
    // Невеликі затримка між батчами, щоб не перевантажувати MySQL
    usleep(100000); // 100ms
}

Для чисто табличних даних (b_catalog_product, а не властивості інфоблока) швидше пряме оновлення через D7:

\Bitrix\Catalog\ProductTable::updateMulti($productIds, [
    'VAT_ID'       => 3,
    'VAT_INCLUDED' => 'Y',
]);

Метод updateMulti виконує один SQL UPDATE з WHERE ID IN (...) замість N окремих запитів.

Оновлення властивостей з індексацією

При масовому оновленні властивостей інфоблока Бітрікс за замовчуванням оновлює поисковий індекс для кожного елемента — виклик CSearch::Index(). При оновленні 1000 товарів це створює 1000 вставок у b_search_content.

Відключення переіндексації при масовому оновленні:

define('BX_SKIP_SEARCH_REINDEX', true);
// ... масове оновлення ...

// Після — запустити переіндексацію одним агентом
\Bitrix\Main\Config\Option::set('search', 'reindex_pending', 'Y');

Після завершення масового оновлення запускається агент CSearchReindex::AgentReindex(), який пакетно перебудовує індекс.

Зміни полів у одній трансакції

При оновленні кількох полів одного товару всі зміни повинні йти в одному вилику Update(), а не кількома послідовними викликами. Кожен вислів CIBlockElement::Update() запускає події, оновлює кеш та створює запис у історії змін (якщо включений модуль iblock.workflow). Зайві виклики збільшують час операції пропорційно.

Моніторинг прогресу

При масовому оновленні через веб-інтерфейс Бітрікс використовує механізм «продовження» через параметр sessid та приховані поля — кожні N елементів сторінка перезавантажується з прогресом. Для скриптової обробки зручніше писати прогрес у файл і читати його через AJAX:

file_put_contents('/tmp/update_progress.json', json_encode([
    'processed' => $processed,
    'total'     => $total,
    'percent'   => round($processed / $total * 100),
]));

При оновленні властивостей типу «список» (L) масово необхідно попередньо отримати ID значення списку з b_iblock_property_enum — передавати потрібно ID, а не текстове значення.