Розробка функціоналу швидкого замовлення за артикулом 1С-Бітрікс

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

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

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

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

  • 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С-Бітрікс

На оптових і B2B-сайтах покупець знає артикул — він не хоче шукати товар через каталог. Йому потрібен рядок введення: вбив артикул, вказав кількість, додав до кошика. Стандартний пошук 1С-Бітрікс (search.title) для цього не підходить: він шукає за назвою, повільно працює на великих каталогах і не підтримує масове введення. Швидке замовлення за артикулом — окремий UI-блок з прямим запитом до бази за індексованим полем.

Пошук товару за артикулом

Артикул у 1С-Бітрікс зберігається у властивості інфоблока (PROPERTY_ARTICLE) або в полі XML_ID елемента. Для торгових пропозицій — у властивості офферів (PROPERTY_CML2_ARTICLE при імпорті з 1С).

AJAX-контролер пошуку:

public function searchByArticleAction(string $query): array
{
    $result = [];

    // Пошук серед торгових пропозицій
    $offerIblockId = \CCatalogSKU::GetInfoByProductIBlock(CATALOG_IBLOCK_ID)['IBLOCK_ID'];

    $rs = \CIBlockElement::GetList(
        ['NAME' => 'ASC'],
        [
            'IBLOCK_ID' => $offerIblockId,
            'PROPERTY_CML2_ARTICLE' => '%' . $query . '%',
            'ACTIVE' => 'Y',
        ],
        false,
        ['nTopCount' => 10],
        ['ID', 'NAME', 'IBLOCK_ELEMENT_ID', 'PROPERTY_CML2_ARTICLE']
    );

    while ($item = $rs->Fetch()) {
        $result[] = [
            'sku_id'   => (int)$item['ID'],
            'product_id' => (int)$item['IBLOCK_ELEMENT_ID'],
            'article'  => $item['PROPERTY_CML2_ARTICLE_VALUE'],
            'name'     => $item['NAME'],
        ];
    }
    return $result;
}

Для продуктивності на каталогах від 50 000 SKU — індекс на колонку властивості:

CREATE INDEX idx_iblock_prop_article
ON b_iblock_element_property (IBLOCK_PROPERTY_ID, VALUE)
WHERE VALUE IS NOT NULL;

Інтерфейс швидкого замовлення

Блок являє собою таблицю з динамічними рядками: кожен рядок — це поле артикула з автодоповненням, поле кількості і кнопка видалення. Внизу кнопка «Додати все до кошика».

Автодоповнення реалізується через debounce(300ms) на полі введення: при введенні від 3 символів відправляється AJAX-запит до searchByArticleAction, результати показуються в дропдауні. При виборі товару рядок заповнюється даними, показується превью (мініатюра, назва, поточна ціна).

Масове введення — додаткова вкладка, де можна вставити текст у форматі:

АРТИКУЛ КІЛЬКІСТЬ
ABC-123 5
XYZ-456 10

Парсинг на JS, потім пакетний AJAX-запит для резолвінгу всіх артикулів одразу.

Додавання до кошика

Після підтвердження — пакетне додавання до кошика через \Bitrix\Sale\BasketItem:

$basket = \Bitrix\Sale\Basket::loadItemsForFUser(
    \Bitrix\Sale\Fuser::getId(), SITE_ID
);

foreach ($items as $item) {
    $basketItem = $basket->createItem('catalog', $item['product_id']);
    $basketItem->setFields([
        'QUANTITY' => $item['quantity'],
        'PRODUCT_PROVIDER_CLASS' => \Bitrix\Catalog\Product\Basket::class,
        'MODULE' => 'catalog',
    ]);
}
$basket->save();

При додаванні торгових пропозицій передається PRODUCT_ID оферу з прив'язкою до батьківського елемента через PROPS — обов'язково при використанні SKU.

Обробка помилок

  • Артикул не знайдено → рядок підсвічується червоним, підказка «Товар не знайдено»
  • Товар не в наявності → попередження з кількістю на залишку з b_catalog_store_product
  • Кілька збігів за артикулом → діалог вибору потрібного SKU

Що входить у розробку

  • AJAX-контролер пошуку за артикулом з підтримкою торгових пропозицій
  • UI-блок з динамічними рядками, автодоповненням і превью товару
  • Режим масового введення (вставка списку артикул + кількість)
  • Пакетне додавання до кошика через \Bitrix\Sale\Basket
  • Обробка помилок: не знайдено, немає в наявності, кілька збігів