Блог Николая Семенцова

Партнер компании 1с-битрикс

1C интеграция bitrix - товарные предложения и цена товара

Не давно столкнулся с такой проблемой при выгрузке  из  1С каталога с товарными предложениями не ставилась цена для товара (цены были в предложениях), но  мне она была необходима так как были самописные ajax фильтры (не хотелось их переделывать).

Для решения этой проблемы я создал в файле /bitrix/php_interface/init.php обработчик на добавление и обновление товара

CModule::IncludeModule("catalog");
CModule::IncludeModule("iblock");
 
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnBeforeIBlockElementAddHandler");
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnBeforeIBlockElementAddHandler");
 
   // создаем обработчик события "OnBeforeIBlockElementUpdate и OnAfterIBlockElementAdd"  для установки цены торгового предложения на сам товар
   function OnBeforeIBlockElementAddHandler(&$arFields)
   {
      $arSelect = Array("ID", "NAME", "PROPERTY_CML2_LINK", "CATALOG_GROUP_1" );
      $res = CIBlockElement::GetList(Array(), Array("ID"=>$arFields['WF_PARENT_ELEMENT_ID']), false, Array("nPageSize"=>50), $arSelect);
 
      while($ar_res = $res->GetNextElement()) {
 
          // вычисление цены из массива
          $i = 1 ;
          foreach ($arFields['PRICES'][0] as $pri) {
            if($i == 3) {
              $price = $pri ;
            }
            $i++ ;
          }
        $ar_res = $ar_res->GetFields();
        if($ar_res['PROPERTY_CML2_LINK_VALUE']) {
            $CATALOG_GROUP_ID_1 = 1;
            $CATALOG_CURRENCY_1 = 'RUB';
            $arFieldsprice = Array(
                "PRODUCT_ID" => $ar_res['PROPERTY_CML2_LINK_VALUE'],
                "CATALOG_GROUP_ID" => $CATALOG_GROUP_ID_1,
                "PRICE" => $price,
                "CURRENCY" => $CATALOG_CURRENCY_1
            );
            $resPrice = CPrice::GetList(
                    array(),
                    array(
                            "PRODUCT_ID" => $ar_res['PROPERTY_CML2_LINK_VALUE'],
                            "CATALOG_GROUP_ID" => $CATALOG_GROUP_ID_1
                        )
                );
 
            if ($arr = $resPrice->Fetch())
            {
                CPrice::Update($arr["ID"], $arFieldsprice);
            }
            else
            {
                CPrice::Add($arFieldsprice);
            }
         }
      }
   }


Теперь при выгрузке товаров на склад он будет брать цену из товарного предложения .


Опубликовано: 29 августа 2011




Помогла заметка? Жмите кнопки ниже


ВКонтакт Facebook Google Plus Одноклассники Twitter Livejournal Liveinternet Mail.Ru





comments powered by Disqus