Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Цитата от сюда:
Вот об опыте импорта тех самых "других" типов скидок я и хочу рассказать в данной статье. В частности, об импорте скидок, которые применяются к определенному товару вне зависимости от каких-либо условий. (В сезон распродажи или на залежалый товар/размер).
Данную задачу мы (я и мой помощник Вадим Соловьев) решали для того же самого проекта, для которого я незадолго до этого подогнала импорт под готовую структуру инфоблоков (см. статью ). В этом проекте у нас уже был унаследован класс CIBlockCMLImport, был кастомизирован компонент catalog.import.1c для работы именно с этим классом.
class CIBlockCMLCustomImport extends CIBlockCMLImport{}
и была перегружена функция ImportElement
Этот же перегруженный метод ImportElement мы и дополнили функционалом для импорта из 1С безусловных скидок на товар.
Информация о скидках приходила к нам из 1С Предприятия в следующем виде:
И торговые предложения, у которых в секции СкидкиНаценки присутствовала скидка указанного вида нам нужно было интерпретировать как торговые предложения, на которые действует безусловная процентная скидка.
В самом начале метода мы смотрим, есть ли для указанного элемента безусловная процентная скидка. Если есть, пишем ее в переменную $discount_perc. Если нет - эта переменная остается равной 0.
Далее, ниже секции, в которой в стандартном методе ImportElement определяются скидки на товары в зависимости от их количества в заказе, мы вставили код, создающи/обновляющий/удаляющий наши безусловные процентные скидки. В этом коде мы пошли на небольшую хитрость и ставим каждой новой скидке ID равный ID элемента, для которого данная скидка была создана.
И безусловные скидки на товары были успешно импортированы из 1С Предприятия в Битрикс.
Решение не претендует на идеальность, но оно имеет место быть, успешно внедрено и не перегружает достаточно стандартную виртуальную хостинговую площадку.
Данная статья - перепост из моего blogspot блога Люблю blogspot. Жаль, что кросспостить в блоги веб-разработчиков Битрикс оттуда приходится вручную. А вот на своем сайте bedrosova.ru я организовала автоматический кросспостинг анонсов из своего блога посредством своего же бесплатного компонента из Маркетплейс Битрикс .
Назад в раздел
Наверх
то ждем ваше обращение в нашей службе тех поддержки.
Импорт скидок номенклатуры из 1С Предприятия в 1С Битрикс
Начну с цитаты|
...если документом "Установка скидок номенклатуры" определены скидки на товары в зависимости от их количества в заказе, то данная информация поступит на сайт и скидка будет применяться и при продаже в Интернет-магазине. Кроме этого, модуль на стороне 1С выгружает в CommerceML и другие типы скидок, но их автоматический импорт в 1С-Битрикс предлагается реализовать разработчикам интернет-магазина, поскольку их применение очень сильно зависит от особенностей ценообразования для каждого конкретного случая. |
Вот об опыте импорта тех самых "других" типов скидок я и хочу рассказать в данной статье. В частности, об импорте скидок, которые применяются к определенному товару вне зависимости от каких-либо условий. (В сезон распродажи или на залежалый товар/размер).
Данную задачу мы (я и мой помощник Вадим Соловьев) решали для того же самого проекта, для которого я незадолго до этого подогнала импорт под готовую структуру инфоблоков (см. статью ). В этом проекте у нас уже был унаследован класс CIBlockCMLImport, был кастомизирован компонент catalog.import.1c для работы именно с этим классом.
class CIBlockCMLCustomImport extends CIBlockCMLImport{}
и была перегружена функция ImportElement
Этот же перегруженный метод ImportElement мы и дополнили функционалом для импорта из 1С безусловных скидок на товар.
Информация о скидках приходила к нам из 1С Предприятия в следующем виде:
|
<СкидкиНаценки> <СкидкаНаценка> <Условие>Количество одного товара в документе превысило</Условие> <Процент>20</Процент> <Валюта>руб</Валюта> <Получатель>8a21ac94-2ac6-11e0-8e8a-00265abc1d64</Получатель> </СкидкаНаценка> ... </СкидкиНаценки> |
Думая о том, как организовать хранение этих скидок в Битрикс, я хотела дописывать торговые предложения, на которые действует скидка в условия для существующих в системе процентных скидок (желтая стрелочка на рисунке). Вадим предложил заводить отдельную скидку для каждого торгового предложения (зеленая стрелочка на рисунке). И я отдала предпочтение решению Вадима, так как оно предполагает меньшее количество запросов к БД при импорте ссылок (особенно в случаях когда в 1С удалена скидка на товар, к-я ранее была импортирована на сайт и которую нужно удалить и на сайте в процессе импорта), хотя результат и не так красиво смотрится в админке.
Итак, в нашем перегруженном методе ImportElement мы дописали следующее: В самом начале метода мы смотрим, есть ли для указанного элемента безусловная процентная скидка. Если есть, пишем ее в переменную $discount_perc. Если нет - эта переменная остается равной 0.
|
$discount_perc = 0.0; if(isset($arXMLElement[GetMessage("IBLOCK_XML2_DISCOUNTS";)])) { foreach($arXMLElement[GetMessage("IBLOCK_XML2_DISCOUNTS";)] as $key=>$discount) { if( isset($discount[GetMessage("IBLOCK_XML2_DISCOUNT_CONDITION";)]) && $discount[GetMessage("IBLOCK_XML2_DISCOUNT_CONDITION";)]===GetMessage("IBLOCK_XML2_DISCOUNT_COND_VOLUME";) ) { $discount_perc = $this->ToFloat($discount[GetMessage("IBLOCK_XML2_DISCOUNT_COND_PERCENT";)]); } } } |
|
$discount_id = intval($arElement["ID"]); $arDiscount = array(); $arDiscount = CCatalogDiscount::GetByID($discount_id); if ($discount_perc == 0.0) { if($arDiscount) CCatalogDiscount::Delete($discount_id); } else { if($arDiscount) { if($arDiscount["VALUE"] != $discount_perc) { $arDiscount["VALUE"] = $discount_perc; CCatalogDiscount::Update($discount_id, $arDiscount); } } else { if ($discount_perc>0){ $arLogic = array ( "CLASS_ID" => "CondGroup", "DATA" => array ( "All" => "OR", "True" => "True", ), "CHILDREN" => array ( "0" => array ( "CLASS_ID" => "CondIBElement", "DATA" => array ( "logic" => "Equal", "value" => $discount_id, ), ), ), ); $arDiscount = array ( "ID" => $discount_id, "SITE_ID" => "s1", "ACTIVE" => "Y", "NAME" => strval($discount_id), "MAX_USES" => 0, "COUNT_USES" => 0, "COUPON" => "", "SORT" => 100, "MAX_DISCOUNT" => 0.0000, "VALUE_TYPE" => "P", "VALUE" => $discount_perc, "CURRENCY" => "RUB", "MIN_ORDER_SUM" => 0.0000, "NOTES" => "", "RENEWAL" => "N", "ACTIVE_FROM" => "", "ACTIVE_TO" => "", "PRIORITY" => 1, "LAST_DISCOUNT" => "Y", "CONDITIONS" => serialize($arLogic), ); CCatalogDiscount::Add($arDiscount); } } } |
Решение не претендует на идеальность, но оно имеет место быть, успешно внедрено и не перегружает достаточно стандартную виртуальную хостинговую площадку.
Данная статья - перепост из моего blogspot блога Люблю blogspot. Жаль, что кросспостить в блоги веб-разработчиков Битрикс оттуда приходится вручную. А вот на своем сайте bedrosova.ru я организовала автоматический кросспостинг анонсов из своего блога посредством своего же бесплатного компонента из Маркетплейс Битрикс .
Назад в раздел
Подписаться на новые материалы раздела:
Загрузка...
Наверх