Россия

region-img

Выгрузка кратности товара из 1С в Битрикс. Проблемы и способы реализации

author
Иван Рудковский 7 сентября 2022
Время чтения: 4 мин

Здравствуйте, уважаемые пользователи и партнеры 1С-Битрикс! Вас приветствует компания Сотбит.

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

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

В рамках этих статей Вы сможете ознакомиться с конкретными кейсами и вопросами, с которыми сталкивается наша команда в процессе работы, и какие способы мы находим для их решения.

В первой статье из этого цикла обсудим такую проблему, как выгрузка кратности товара из 1С.    

Выгрузка кратности товара из 1С

И так, начинаем!

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

1

C какой проблемой мы столкнулись

В нашем случае клиентом была поставлена задача интегрировать в выгрузку из системы учёта 1С кратности товара и наполнять корзину товарами с определённой кратностью

Казалось бы, ничего сверхъестественного, ведь механизм кратности в системе «1С-Битрикс: Управление сайтом» работает прямо из коробки, но всё же есть некоторая особенность.  

Кратность товара в 1С-Битрикс: Управление сайтом

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

В процессе поиска ответа на этот вопрос мы разработали 2 сценария доработки обмена кратностью товара. Давайте подробнее рассмотрим каждый из них.

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С-Битрикс.

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

3

Второй вариант решения проблемы

Проблема выгрузки кратности через свойства товара заключается в том, что использование дополнительного реквизита влечёт за собой генерацию лишней информации, которая в последующем приводит к увеличению объёма данных, хранимых в базе данных. 

Казалось бы, как может простое число, хранящееся в товаре, существенно загрузить сайт?

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

Как же решить эту критическую проблему? 

Лично мы нашли ответ в REST API. При данной реализации 1С инициирует обмен массивом с набором данных на сторону сайта в формате JSON, где идентификатором выступает внешний код товара, а значением — его кратность, и конечно же, с логином и паролем от пользователя 1С в системе «1С-Битрикс: Управление сайтом» (куда же без безопасности).

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

Резюме

В конечном итоге мы получаем работу сайта с кратностью, а что самое главное, получаем её, не нарушая механизм Битрикс.

Но всё же при выборе между первым и вторым вариантами решения проблемы наша команда настоятельно рекомендует выбирать именно второй

Если необходимо более подробное разъяснение по каждому из описанных способов, свяжитесь с нами любым удобным способом — мы с радостью проконсультируем Вас.

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

Оставайтесь на связи, чтобы ничего не пропустить!

И помните, дорогие друзья: если у Вас возникли вопросы и трудности при работе с платформой Битрикс, смело обращайтесь в компанию Сотбит — и мы Вам обязательно поможем!

Последние новости

Все новости

Остались вопросы по статье?

Оставьте свой контакт и наш менеджер вас проконсультирует.

ФИО:*
E-mail:*
Телефон:
Подтвердите, что вы не робот:*
Сообщение: