Тисячі торгових пропозицій висять без прив'язки до товару — після масового імпорту з 1С або міграції з іншої платформи. В результаті в картці товару пусто, ціни та залишки не передаються, кошик не працює. Відновити прив'язку вручну для 10 000 SKU — тиждень рутини. Ми вирішуємо це завдання за допомогою скриптів масового прив'язування за XML_ID, артикулом або зовнішньою таблицею. Економія до 70% часу порівняно з ручною працею. Досвід більше 10 років і 500+ успішних проектів дозволяють гарантувати коректну роботу каталогу. Отримайте консультацію — проведемо безкоштовний аналіз бази даних і запропонуємо оптимальне рішення.
Кейс: магазин одягу з 15 000 SKU
Після міграції з OpenCart на Бітрікс всі пропозиції відв'язалися. Ми за 2 години написали скрипт, який зіставив артикули за XML_ID, і відновили прив'язку. Каталог запрацював протягом дня.Чому важливо правильно прив'язувати торгові пропозиції?
Без коректної прив'язки через властивість CML2_LINK Бітрікс не може зібрати єдиний торговий каталог. Пропозиції не відображаються в картці товару, ціни та залишки не передаються в кошик, а фільтр за фасетами видає порожні результати. Особливо критично для інтернет-магазинів з великим асортиментом — помилка прив'язки веде до втрати конверсії та зростання повернень. Вартість такої помилки може досягати десятків тисяч гривень втраченої виручки за день.
Як масово відновити прив'язку торгових пропозицій?
Крок 1. Аналіз структури даних
Визначаємо інфоблоки товарів (catalogIblockId) і пропозицій (offersIblockId). Перевіряємо властивість CML2_LINK в b_iblock_property.
SELECT COUNT(*) FROM b_iblock_element ie WHERE ie.IBLOCK_ID = {offers_iblock_id} AND NOT EXISTS ( SELECT 1 FROM b_iblock_element_property iep INNER JOIN b_iblock_property ip ON ip.ID = iep.IBLOCK_PROPERTY_ID WHERE iep.IBLOCK_ELEMENT_ID = ie.ID AND ip.CODE = 'CML2_LINK' AND iep.VALUE IS NOT NULL ); Крок 2. Масове прив'язування за XML_ID
Найпоширеніший сценарій — товари та пропозиції мають артикул з 1С у полі XML_ID. Ми створюємо карту відповідності та встановлюємо CML2_LINK пакетами по 200 записів. Це в 20 разів швидше ручного прив'язування.
$offersIblockId = 11; $propRes = \Bitrix\Iblock\PropertyTable::getList([ 'filter' => ['IBLOCK_ID' => $offersIblockId, 'CODE' => 'CML2_LINK'], 'select' => ['ID'], ])->fetch(); $linkPropertyId = $propRes['ID']; $catalogIblockId = 10; $productMap = []; $productsRes = \CIBlockElement::GetList([], ['IBLOCK_ID' => $catalogIblockId], false, false, ['ID', 'XML_ID']); while ($row = $productsRes->Fetch()) { $productMap[$row['XML_ID']] = $row['ID']; } $offersRes = \CIBlockElement::GetList([], ['IBLOCK_ID' => $offersIblockId], false, false, ['ID', 'XML_ID']); $batch = []; while ($row = $offersRes->Fetch()) { $parentXmlId = substr($row['XML_ID'], 0, 8); if (!isset($productMap[$parentXmlId])) continue; $parentId = $productMap[$parentXmlId]; $batch[] = ['offer_id' => $row['ID'], 'parent_id' => $parentId]; if (count($batch) >= 200) { bindOffersToProducts($batch, $offersIblockId, $linkPropertyId); $batch = []; } } if (!empty($batch)) { bindOffersToProducts($batch, $offersIblockId, $linkPropertyId); } function bindOffersToProducts(array $batch, int $iblockId, int $propId): void { foreach ($batch as $item) { $existing = \Bitrix\Iblock\ElementPropertyTable::getList([ 'filter' => ['IBLOCK_ELEMENT_ID' => $item['offer_id'], 'IBLOCK_PROPERTY_ID' => $propId], 'select' => ['ID'], ])->fetch(); if ($existing) { \Bitrix\Iblock\ElementPropertyTable::update($existing['ID'], ['VALUE' => $item['parent_id']]); } else { \Bitrix\Iblock\ElementPropertyTable::add([ 'IBLOCK_ELEMENT_ID' => $item['offer_id'], 'IBLOCK_PROPERTY_ID' => $propId, 'VALUE' => $item['parent_id'] ]); } } } Крок 3. Прив'язка через CSV-маппінг
Якщо логіка визначення батька складніша (наприклад, за кольором і розміром), використовуємо зовнішню таблицю. Приклад файлу:
offer_xml_id,parent_xml_id SKU-001-RED,PROD-001 SKU-001-BLUE,PROD-001 Скрипт завантажує маппінг, знаходить ID елементів за XML_ID і встановлює CML2_LINK. Продуктивність — до 10 000 прив'язок на хвилину.
Як перевірити коректність прив'язки?
Після виконання прив'язки обов'язково:
- Вибірково перевірте картки товарів на публічній частині — пропозиції повинні відображатися.
- Скиньте тегований кеш інфоблоків.
- Переіндексуйте фасетний фільтр, якщо пропозиції беруть участь у фільтрації.
\Bitrix\Iblock\InformationBlock::cleanTagCache($catalogIblockId); \Bitrix\Iblock\InformationBlock::cleanTagCache($offersIblockId); \Bitrix\Iblock\PropertyIndex\Manager::markIblockToReindex($offersIblockId); Порівняння ручного та автоматичного прив'язування
| Параметр | Ручне прив'язування | Автоматичне прив'язування |
|---|---|---|
| Час на 10 000 SKU | ~1 тиждень | 2–4 години |
| Ризик помилки | Високий (людський фактор) | Мінімальний (алгоритмічний контроль) |
| Масштабованість | Низька | Висока (пакетна обробка) |
| Економія | Висока вартість години роботи | Зниження витрат у десятки разів |
Що входить в послугу
- Документація щодо поточної структури прив'язки.
- Тестовий скрипт на копії бази (staging).
- Запуск масової прив'язки на бойовій базі.
- Звіт про результати: скільки пропозицій прив'язано, скільки пропущено.
- Консультація щодо подальшої інтеграції з CommerceML для запобігання повторним збоям.
Типові помилки при прив'язуванні
- Відсутність унікального ключа — коли XML_ID дублюються або порожні.
- Різні шаблони генерації артикулів — доводиться писати кастомні парсери.
- Ігнорування кешування — після прив'язки обов'язково скидати кеш інфоблоків.
- Неповна переіндексація — фасетний фільтр показує старі дані.
Терміни та вартість
| Обсяг пропозицій | Орієнтовний час |
|---|---|
| До 1 000 | 2–4 години |
| 1 000 – 20 000 | 1 день |
| 20 000+ | 2–3 дні (з налагодженням маппінгу) |
Вартість розраховується індивідуально. Отримайте консультацію — оцінимо проект безкоштовно. Замовте відновлення каталогу — і ваші товари знову будуть у продажу.
Чому обирають нашу команду
Наш досвід у відновленні великих каталогів налічує сотні успішних проектів. Ми працюємо з магазинами, де кількість торгових пропозицій перевищує 100 000 одиниць. Кожен проект індивідуальний, і ми враховуємо специфіку зберігання даних у вашій базі. Використання пакетної обробки та оптимізованих SQL-запитів дозволяє нам працювати з навантаженими базами даних без ризику блокувань. Після завершення роботи надаємо детальний звіт про результати та рекомендації щодо профілактики подібних проблем у майбутньому. Наші спеціалісти пройшли офіційне навчання з архітектури 1С-Бітрікс та мають сертифікати розробників, що гарантує високу якість виконання роботи у всіх випадках.
Наш підхід до вирішення
Кожна задача потребує індивідуального аналізу та ретельного планування. Ми не використовуємо шаблонні рішення — кожен проект адаптується під конкретні вимоги та існуючу інфраструктуру. Наша команда має досвід роботи з проектами різного масштабу: від невеликих магазинів до високонавантажених платформ з мільйонами операцій на день.
Гарантії та підтримка
Ми даємо гарантію на виконану роботу терміном на 12 місяців. Протягом цього періоду виправляємо будь-які проблеми, що виникають, безкоштовно. Після завершення проекту надаємо повну документацію та навчання для вашої команди. Технічна підтримка доступна протягом 30 днів після запуску — ми допоможемо усунути будь-які питання.







