Иногда бывает, что нет возможности использовать родной механизм синхронизации данных с 1С, тогда приходится писать самописные скрипты используя API CMS.
В качестве примера покажу, как это делал на одном из проектов под управлением 1С-Битрикс.
У меня был xml-файлик с кодами товаров и привязанными к ним ценами примерно следующей структуры:
00-00000001 287 00-00000002 171
Стояла задача поставить на каждодневное обновление на сайте этих данных.
В коде нет ничего необычного, но так как задача довольно популярна, выкладываю её сюда, чтобы не потерять.
define("NO_KEEP_STATISTIC", true); // отключаем статистику require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php"); //подключаем нужные модули CModule::IncludeModule("iblock"); CModule::IncludeModule("sale"); CModule::IncludeModule("catalog"); // путь на сервере до файла $xml = simplexml_load_file('/1c/price.xml'); // 2 служебных массива для сбора данных $arCodePrice = array(); $arCode = array(); // запишем все коды в массив, чтобы не дергать поочереди каждый foreach ($xml as $product){ $code = trim((string) $product->id); $price = (string) $product->price; $arCodePrice[$code] = $price; $arCode[] = $code; } if(!empty($arCodePrice)){ $arSelect = Array("ID", "IBlOCK_ID", "NAME", "PROPERTY_CODE"); // в моем случае ищем в двух ИБ (основной каталог и каталог с ТП) $arFilter = Array("IBLOCK_ID"=>array(2,3), "PROPERTY_CODE" => $arCode); $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); while($ob = $res->Fetch()) { // если нужно переводим в другую валюту //$priceRub = CCurrencyRates::ConvertCurrency($arCodePrice[$ob["PROPERTY_CODE_VALUE"]], "USD", "RUB"); $arFields = Array( "PRODUCT_ID" => $ob["ID"], "CATALOG_GROUP_ID" => 1, "PRICE" => $arCodePrice[$ob["PROPERTY_CODE_VALUE"]], "CURRENCY" => "USD", "QUANTITY_FROM" => 1, "QUANTITY_TO" => 100 ); $resPrice = CPrice::GetList( array(), array( "PRODUCT_ID" => $ob["ID"], "CATALOG_GROUP_ID" => 1 ) ); // само обновление/добавление if ($arr = $resPrice->Fetch()) { CPrice::Update($arr["ID"], $arFields); } else { CPrice::Add($arFields); } } }
После, можно поставить этот скрипт на cron через допустим wget.
Вот и всё, пользуйтесь на здоровье!:)