Заказать обратный звонок
Написать письмо
+375 (29) 108-04-58 Беларусь

Новости

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

Иван Рудковский

07 сентября 2022

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

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

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

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

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

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

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

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

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

В нашем случае клиентом была поставлена задача интегрировать в выгрузку из системы учёта 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С-Битрикс: Управление сайтом» (куда же без безопасности).

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

Резюме

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

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

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

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

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

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

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

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



Решения
B2B портал
349 900 руб.
314 910 руб.
B2BShop
259 900 руб.
233 910 руб.
11 Отзывов
B2B кабинет
199 900 руб.
179 910 руб.
5 Отзывов
Оригами
39 900 руб.
35 910 руб.
11 Отзывов
SEO умного фильтра
14 990 руб.
13 491 руб.
182 Отзыва
Парсер контента
19 990 руб.
17 991 руб.
129 Отзывов
Сотбит: Мультирегиональность
14 990 руб.
13 491 руб.
37 Отзывов
Мультикорзина
24 990 руб.
22 491 руб.
Коммерческие предложения
39 990 руб.
35 991 руб.
B2BMobile
49 990 руб.
SEO умного поиска
9 990 руб.
8 991 руб.
3 Отзыва
Индивидуальные цены
39 900 руб.
35 910 руб.
Рекламации
39 900 руб.
35 910 руб.
Сотбит: CRM инструменты
4 990 руб.
4 491 руб.
Комплексные отзывы
9 990 руб.
8 991 руб.
3 Отзыва
1С инструменты
9 990 руб.
8 991 руб.
8 Отзывов
Расширенная регистрация
9 990 руб.
8 991 руб.
2 Отзыва
Перекрестные продажи
9 990 руб.
8 991 руб.
2 Отзыва
Микроразметка Schema.org
4 990 руб.
4 491 руб.
OpenGraph
4 990 руб.
4 491 руб.
Сотбит: Проверка контрагента
4 990 руб.
4 491 руб.
1 Отзыв
Быстрая загрузка картинок
4 990 руб.
4 491 руб.
1 Отзыв
Похожие товары
4 990 руб.
4 491 руб.
2 Отзыва
Интеграция с Контур.Эльба
9 990 руб.
8 991 руб.
1 Отзыв
Счет на почту в PDF
4 990 руб.
4 491 руб.
3 Отзыва
Сотбит: REST API
Бесплатно
Заказ по телефону
Бесплатно
Еще решения


Сотбит
Веб интегратор занимается разработкой сайтов на 1С-Битрикс, разработкой типовых решений, входит в ТОП-10 разработчиков для Маркетплейса 1С-Битрикс.
192029
Россия
Ленинградская область
Санкт-Петербург
м. «Петроградская», пр-т Медиков, д. 3-5, лит. А, оф. 211
+7 (812) 670-07-40
sale@sotbit.ru
,
Обратная связь