Разработка функционала быстрого заказа по артикулу 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка функционала быстрого заказа по артикулу 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка функционала быстрого заказа по артикулу 1С-Битрикс

На оптовых и B2B-сайтах покупатель знает артикул — он не хочет искать товар через каталог. Ему нужна строка ввода: вбил артикул, указал количество, добавил в корзину. Стандартный поиск Битрикс (search.title) для этого не подходит: он ищет по названию, медленно работает на больших каталогах и не поддерживает массовый ввод. Быстрый заказ по артикулу — отдельный UI-блок с прямым запросом к базе по индексированному полю.

Поиск товара по артикулу

Артикул в Битрикс хранится в свойстве инфоблока (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
  • Обработка ошибок: не найден, нет в наличии, несколько совпадений