Здравствуйте, уважаемые пользователи и партнеры 1С-Битрикс! Вас приветствует компания Сотбит.
В нашем блоге мы делимся актуальными новостями из стана Сотбит: освещаем последние релизы и обновления наших решений, рассказываем про запуск новых услуг и другие важные события.
Чтобы разнообразить информационный контент более прикладным материалом, компания Сотбит запускает цикл полезных статей от своих технических специалистов.
В рамках этих статей Вы сможете ознакомиться с конкретными кейсами и вопросами, с которыми сталкивается наша команда в процессе работы, и какие способы мы находим для их решения.
В первой статье из этого цикла обсудим такую проблему, как выгрузка кратности товара из 1С.
И так, начинаем!
За девятилетний опыт практики мы провели несколько сотен интеграций с разными сайтами, и, казалось, в этом вопросе нас сложно удивить. Но в процессе работы начали поступать интересные и нетривиальные задачи, например, такие, как вышеупомянутая выгрузка кратности.
C какой проблемой мы столкнулись
В нашем случае клиентом была поставлена задача интегрировать в выгрузку из системы учёта 1С кратности товара и наполнять корзину товарами с определённой кратностью.
Казалось бы, ничего сверхъестественного, ведь механизм кратности в системе «1С-Битрикс: Управление сайтом» работает прямо из коробки, но всё же есть некоторая особенность.
Так уж исторически сложилось, что выгрузка товаров из 1С не подразумевает обработку кратности. Но наш пытливый ум не мог позволить просто спустить этот вопрос «на тормозах» и поставить заказчика перед фактом невозможности выполнения его задания.
В процессе поиска ответа на этот вопрос мы разработали 2 сценария доработки обмена кратностью товара. Давайте подробнее рассмотрим каждый из них.
Первый вариант решения проблемы
Именно этот вариант был реализован нашей командой в рамках описанной выше задачи.
Ключ к решению проблемы крылся, где бы Вы думали, в свойствах товара. Для доработки обмена данными с системой 1С мы стали передавать кратность в качестве реквизита товара, который в последующем обрабатывался в событии после изменения или создания элемента из выгрузки 1С.
Для реализации данной доработки необходимо разместить любезно предоставленный нами ниже код по пути /bitrix/php_interface/init.php.
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnAfterIBlockElementUpdateHandler"); AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockElementUpdateHandler"); function OnAfterIBlockElementUpdateHandler($arFields) { if (isset($_SESSION['BX_CML2_IMPORT'])) { $ratioProperty = CIBlockElement::GetProperty( $arFields['IBLOCK_ID'], $arFields['ID'], "sort", "asc", [ // здесь необходимо разместить символьный код свойства, в котором хранится кратность "CODE" => "MULTIPLICITY" ] ); if ($obRatio = $ratioProperty->Fetch()) { $productRatio = $obRatio['VALUE']; $resRatio = \Bitrix\Catalog\MeasureRatioTable::getList( [ 'filter' => [ 'PRODUCT_ID' => $arFields['ID'] ] ] ); if ($obRatio = $resRatio->Fetch()) { if ($productRatio != $obRatio['RATIO']) { \Bitrix\Catalog\MeasureRatioTable::Update($obRatio['ID'], ['PRODUCT_ID' => $arFields['ID'], 'RATIO' => $productRatio]); } } else { \Bitrix\Catalog\MeasureRatioTable::Add(['PRODUCT_ID' => $arFields['ID'], 'RATIO' => $productRatio, 'IS_DEFAULT' => 'Y']); } } } }
В результате выполнения кода обработчик будет изменять кратность при обновлении товара выгрузкой из 1С.
Таким образом, проблема была решена! Мы не только порадовали клиента качественно выполненной задачей, но и при этом не нарушили концепцию архитектуры 1С-Битрикс.
Однако, выбранный нашим клиентом вариант несмотря на простоту в реализации, на наш скромный взгляд, не является самым правильным выходом из этой ситуации, и поэтому мы хотим предложить более элегантный способ решения.
Второй вариант решения проблемы
Проблема выгрузки кратности через свойства товара заключается в том, что использование дополнительного реквизита влечёт за собой генерацию лишней информации, которая в последующем приводит к увеличению объёма данных, хранимых в базе данных.
Казалось бы, как может простое число, хранящееся в товаре, существенно загрузить сайт?
Поверьте нам, ещё как может! Поскольку подобных товаров может быть десятки и сотни, при этом каждый будет содержать в себе определённое свойство и его значение, возникновение большого объёма лишней информации в базе данных неизбежно.
Как же решить эту критическую проблему?
Лично мы нашли ответ в REST API. При данной реализации 1С инициирует обмен массивом с набором данных на сторону сайта в формате JSON, где идентификатором выступает внешний код товара, а значением — его кратность, и конечно же, с логином и паролем от пользователя 1С в системе «1С-Битрикс: Управление сайтом» (куда же без безопасности).
Сайт же, в свою очередь, получая этот набор данных, после их проверки запускает обработчик, который ищет товары по их внешнему коду, и заносит кратность в их данные.
Резюме
В конечном итоге мы получаем работу сайта с кратностью, а что самое главное, получаем её, не нарушая механизм Битрикс.
Но всё же при выборе между первым и вторым вариантами решения проблемы наша команда настоятельно рекомендует выбирать именно второй.
Если необходимо более подробное разъяснение по каждому из описанных способов, свяжитесь с нами любым удобным способом — мы с радостью проконсультируем Вас.
Теперь, когда одним вопросом стало меньше, специалисты Сотбит готовы поделиться своим опытом в решении не менее злободневных задач. Не сомневайтесь, с нашим девятилетним стажем мы накопили огромное количество кейсов, о которых будем рады рассказать в будущих статьях.
Оставайтесь на связи, чтобы ничего не пропустить!
И помните, дорогие друзья: если у Вас возникли вопросы и трудности при работе с платформой Битрикс, смело обращайтесь в компанию Сотбит — и мы Вам обязательно поможем!
Последние новости
Все новостиЗимняя акция со скидками 25% на продукты Сотбит и до 35% на Битрикс и Битрикс24!
Сотбит поздравляет Вас с первыми днями зимы! Впереди время чудес, тепла и радости, а вместе с ними — традиционная зимняя акция.
Сотбит: Розница — эталон скорости для интернет-магазинов на 1С-Битрикс
В этой статье мы расскажем, почему скорость имеет значение и как Сотбит: Розница достигла лидерства по этому параметру.