Налаштування масового редагування товарів 1С-Бітрікс
Часто до нас приходять із задачею: у каталозі 5000 товарів, у 800 з них потрібно оновити одне поле — скажімо, додати прапорець «Хіт продажів». Редагувати по одному — робочий день. Штатний інструмент масового редагування в адміністративній частині Бітрікса закриває більшість сценаріїв, але має обмеження, які потрібно знати. Ми пропонуємо гібридний підхід: комбінацію стандартних засобів і кастомних скриптів на API, який прискорює оновлення в 5–10 разів. Гарантуємо стабільність результату та даємо 14 днів пост-підтримки.
Коли потрібне кастомне масове редагування товарів?
Стандартний інтерфейс справляється із завданнями на кшталт зміни ціни або активності в десятка товарів. Але як тільки з’являється потреба оновити 500+ записів, встановити значення лише для порожніх полів або зачепити множинні властивості — без власного скрипта не обійтися. Зверніться до нас — ми підберемо оптимальне рішення під вашу задачу.
Як прискорити масове редагування в 10 разів? — налаштування масового редагування
Ключ до швидкості — батчева обробка через D7 API та вимкнення зайвих подій. Наприклад, метод \Bitrix\Catalog\ProductTable::updateMulti виконує один SQL UPDATE з WHERE ID IN (...) замість N окремих запитів. Це дає приріст продуктивності до 70% на вибірках від 500 елементів. Також важливо тимчасово вимикати пошукову переіндексацію (BX_SKIP_SEARCH_REINDEX), щоб кожен виклик Update не генерував подію.
Стандартний механізм: коли спрацює, а коли — ні
В адміністративному списку товарів (/bitrix/admin/iblock_list_admin.php?type=catalog) вибираються потрібні позиції, потім дія «Редагувати вибрані». Відкривається форма, де вказуються лише змінювані поля — решта залишаються без змін. Технічно це працює через CIBlockElement::Update(), що викликається для кожного вибраного ID. Параметр $bWorkFlow = false у виклику — без створення чернетки. При оновленні властивостей Бітрікс перезаписує лише передані властивості, не зачіпаючи решту.
Чому стандартний інструмент не справляється з великими каталогами?
Перше обмеження: не працює з множинними властивостями (тип L з кількома значеннями). Друге: не підтримує умовне оновлення («встановити значення лише якщо поточне пусте»). Третє: при оновленні 500+ елементів браузер починає гальмувати через перезавантаження сторінки з прогресом. Для великих каталогів (від 10000 товарів) стандартний механізм практично непридатний — час виконання нелінійно зростає.
Як ми прискорюємо масове редагування?
Для оновлення великої кількості товарів через скрипт правильніше використовувати D7 API з батчевою обробкою. Наприклад, на одному з проектів ми мали оновити 3000 товарів: додати поле «Хіт продажу» до 1200 товарів і встановити ставку ПДВ для всіх. Стандартний інструмент зайняв би більше години, а наш скрипт на D7 API впорався за 4 хвилини.
$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 окремих запитів.
Порівняння методів оновлення
| Метод | Час на 1000 товарів (1 поле) | Підтримка множинних властивостей | Умовне оновлення | Ризик для БД |
|---|---|---|---|---|
| Стандартний інтерфейс | 15–30 хвилин | Ні | Ні | Низький (поелементно) |
| CIBlockElement::Update (цикл) | 3–5 хвилин | Так | Так (з попереднім фільтром) | Середній (багато запитів) |
| D7 updateMulti | 1–3 хвилини | Ні (лише табличні поля) | Ні | Низький (один запит) |
Порівняння продуктивності при різних розмірах батчу
| Розмір батчу | Час на 5000 товарів (властивість інфоблоку) | Час на 5000 товарів (табличне поле) |
|---|---|---|
| 1 (поелементно) | ~80 хвилин | ~30 хвилин |
| 50 | ~15 хвилин | ~5 хвилин |
| 200 | ~12 хвилин | ~4 хвилини |
Що входить в роботу
- Аудит поточної структури інфоблоків та виявлення вузьких місць.
- Написання скрипта масового оновлення з урахуванням ваших умов.
- Тестування на копії бази (бекап обов’язковий).
- Розгортання на бойовому сервері у вікно низького навантаження.
- Документація по скрипту та навчання співробітників роботі з ним.
- Пост-підтримка: 14 днів після запуску на випадок виявлення помилок.
Покрокова інструкція з налаштування
- Визначте, які поля та властивості необхідно оновити.
- Напишіть скрипт з використанням D7 API або циклом
CIBlockElement::Update. - Вимкніть пошукову переіндексацію через
define('BX_SKIP_SEARCH_REINDEX', true). - Протестуйте на копії бази даних.
- Запустіть скрипт у години низького навантаження.
- Після завершення увімкніть переіндексацію пошуку.
Моніторинг прогресу
При масовому оновленні через веб-інтерфейс Бітрікс використовує механізм «продовження» через параметр 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, а не текстове значення.
Типові помилки при масовому оновленні
- Забувають вимкнути переіндексацію пошуку — кожен виклик Update викликає
CSearch::Index(), що збільшує час у 2–3 рази. Використовуйтеdefine('BX_SKIP_SEARCH_REINDEX', true). - Оновлюють одне поле кількома послідовними викликами Update замість одного. Кожен виклик тригерить події та оновлює кеш — зайві 100 мс на елемент.
- Не перевіряють права доступу у скрипта — якщо скрипт запущено від адміністратора, а користувач потім редагує елемент, можуть виникнути конфлікти з бізнес-процесами.
Терміни і як почати
Орієнтовний термін розробки скрипта масового оновлення — від 2 до 5 робочих днів залежно від складності умов. Якщо вам потрібно оновити товари швидше та без ризику для бойової бази — напишіть нам. Отримайте консультацію безкоштовно: ми оцінимо задачу та запропонуємо оптимальний варіант. Гарантуємо якість та оперативність. Зв’яжіться з нами сьогодні, щоб прискорити роботу вашого каталогу.







