Блог разработчика 1С-Битрикс

Как настроить поиск по артикулу торговых предложений в 1С-Битрикс

Веб-сайты на платформе 1С-Битрикс часто используют каталог товаров с торговыми предложениями (SKU), где каждый товар может иметь несколько вариаций (например, разные размеры, цвета или другие характеристики). Однако стандартный поиск в Битрикс не всегда поддерживает возможность поиска по артикулу торговых предложений, что может стать проблемой для пользователей. В этой статье мы расскажем, как с помощью простого скрипта и дополнительного поля можно заставить поиск работать по артикулу торговых предложений, а также предложим решение для автоматизации этого процесса.

Как настроить поиск по артикулу торговых предложений в 1С-Битрикс

Задача

Нам нужно организовать поиск товаров по артикулу их торговых предложений (SKU) в системе 1С-Битрикс. Это можно сделать, создав дополнительное поле, в котором будут храниться артикулы всех торговых предложений товара. Однако для удобства работы с большим количеством товаров и торговых предложений нужно автоматизировать заполнение этого поля.

Что потребуется

Для решения задачи нам понадобятся следующие шаги:

  1. Создадим дополнительное поле для хранения артикулов торговых предложений.
  2. Напишем скрипт для автоматического заполнения этого поля.
  3. Перезапустим процесс индексации поиска, чтобы новые данные стали доступны для поиска.

Шаг 1: Создание дополнительного поля для хранения артикулов торговых предложений

Первым шагом необходимо создать новое дополнительное поле для товара, в котором будут храниться артикулы его торговых предложений, разделённые запятыми. Пример кода для создания поля:

  1. В административной панели Битрикс перейдите в раздел КонтентТипы инфоблоков.
  2. Выберите нужный инфоблок товаров и добавьте новое поле, например, с кодом OFFERSES_ARTICLES.

Шаг 2: Написание скрипта для автоматического заполнения поля

Теперь, когда дополнительное поле создано, нужно автоматизировать процесс заполнения этого поля для всех товаров. Для этого создадим PHP-скрипт, который будет извлекать артикулы всех торговых предложений и записывать их в созданное дополнительное поле. Скрипт можно разместить в папке /local/php_interface/, например, под именем offers-articles.php.

Вот пример кода:

<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");

$iblockId = 2; // ID основного каталога товаров
$offersIblockId = 3; // ID инфоблока торговых предложений
$fieldCode = 'ARTNUMBER'; // Код поля с артикулом

// Получаем список всех товаров
$arSelect = Array('ID', 'NAME');
$arFilter = Array("IBLOCK_ID" => $iblockId);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);

while($ob = $res->GetNextElement()) {
    $articles = ''; // Строка для хранения артикулов

    // Получаем информацию о товаре
    $arFields = $ob->GetFields();
    $offers = CCatalogSKU::getOffersList($arFields['ID'], $iblockId);

    // Если у товара есть торговые предложения
    if(!empty($offers[$arFields['ID']]) && count($offers[$arFields['ID']]) > 0) {
        foreach ($offers[$arFields['ID']] as $offer) {
            // Получаем артикул из свойства торгового предложения
            $db_props = CIBlockElement::GetProperty($offersIblockId, $offer['ID'], array("sort" => "asc"), Array("CODE" => $fieldCode));
            $ar_props = $db_props->Fetch();
            // Добавляем артикул в строку
            $articles .= $ar_props['VALUE'] . ', ';
        }
    }

    // Если артикулы найдены, записываем их в дополнительное поле товара
    if(!empty($articles)) {
        // Убираем последнюю запятую и пробел
        $articles = rtrim($articles, ', ');
        // Записываем артикулы в дополнительное поле
        CIBlockElement::SetPropertyValueCode($arFields["ID"], "OFFERSES_ARTICLES", $articles);
    }
}
?>

Шаг 3: Запуск скрипта

Теперь, чтобы запустить скрипт, откройте его в браузере, перейдя по адресу:

http://yourdomain.local/local/php_interface/offers-articles.php

После этого скрипт пройдет по всем товарам, найдет их торговые предложения и запишет артикулы в дополнительное поле OFFERSES_ARTICLES.

Шаг 4: Переиндексация поиска

После того как скрипт выполнит свою работу, необходимо переиндексировать поисковую систему Битрикс, чтобы новые данные стали доступны в поиске. Для этого:

  1. Перейдите в административную панель Битрикс.
  2. Откройте раздел НастройкиИнструментыПоиск.
  3. Выберите Переиндексация.
  4. Убедитесь, что не стоит галочка "Переиндексировать только измененные", и запустите полную индексацию.

Что делает этот код?

  • Скрипт проходит по всем товарам в каталоге (инфоблок с ID 2).
  • Для каждого товара он извлекает все связанные торговые предложения.
  • Из каждого торгового предложения он получает значение артикулов (свойство с кодом ARTNUMBER).
  • Все артикулы собираются в одну строку, разделённую запятыми, и записываются в дополнительное поле товара OFFERSES_ARTICLES.

Заключение

Теперь, когда артикулы торговых предложений записаны в дополнительное поле товара, поиск по этим артикулам будет возможен. Этот способ позволяет легко организовать поиск по артикулу без необходимости вручную заполнять дополнительные поля для каждого товара. Скрипт можно запускать по мере необходимости, и он автоматически обновит информацию по товарам.

Таким образом, даже если в вашем каталоге тысячи товаров с сотнями торговых предложений, этот способ позволит эффективно управлять и индексировать товары для поиска по артикулу.

Теги: поиск по артикулу, торговые предложения, SKU, автоматизация, скрипт


Валерий Макеев
10.09.2025 17:11
Этот код автоматически обновляет поле товара артикулами всех его торговых предложений при каждом редактировании товара.
Код
<?php
// Файл /local/php_interface/init.php

AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", function(&$arFields) {
    if ($arFields['IBLOCK_ID'] == 2) { // ID инфоблока товаров
        CModule::IncludeModule("catalog");
        
        $offers = CCatalogSKU::getOffersList(
            $arFields['ID'],
            0,
            array("ACTIVE" => "Y"),
            array("ID"),
            array("CODE" => "ARTNUMBER")
        );

        $articles = array();
        foreach ($offers[$arFields['ID']] as $offer) {
            if (!empty($offer['PROPERTIES']['ARTNUMBER']['VALUE'])) {
                $articles[] = $offer['PROPERTIES']['ARTNUMBER']['VALUE'];
            }
        }

        $arFields['PROPERTY_VALUES']['OFFERSES_ARTICLES'] = implode(', ', array_unique($articles));
    }
});

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Техническая поддержка

выполняется с сайтами на основе любых CMS

от 5 000 рублей
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Модули и компоненты для «1С-Битрикс»

оценка производится на основе предоставленного Технического Задания

от 20 000 рублей
Разработка дополнительных модулей для 1С-Битрикс, расширение функционала, внедрение любых решений, требующихся для выполнения ваших бизнес-задач.

* стоимость зависит от конкретной задачи, ее объема и сложности выполняемых работ.