1С-Битрикс. Перенос данных о купонах из Highload-блока

02 Apr
Published by Nicholas

Информацию о скидках из 1С выгружаем на сайт в Highload-блок. Затем через подписку на событие (файл init.php) создаем купоны.

 

// Added("Nicholas Mikuslas", "06.10.2015 16:56:01", "Переносим данные о купонах из Highload-блока") {

AddEventHandler('catalog', 'OnSuccessCatalogImport1C', 'customCatalogImportStep');

use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity as EN;

function customCatalogImportStep()

{
$stepInterval = (int) COption::GetOptionString("catalog", "1C_INTERVAL", "-");

$startTime = time();

// Флаг импорта файла торговых предложений
//$isOffers = strpos($_REQUEST['filename'], 'offers') !== false;

$NS = &$_SESSION["BX_CML2_IMPORT"]["NS"];
if (!isset($NS['custom']['lastId'])) {
// Последний отработанный элемент для пошаговости.
$NS['custom']['lastId'] = 0;
$NS['custom']['counter'] = 0;
}

$errorMessage = null;

CModule::IncludeModule('highloadblock');

$rsData = HL\HighloadBlockTable::getList(array('filter' => array('NAME' => 'InformatsionnyeKarty')));

if ( !($arData = $rsData->fetch()) ){

$errorMessage = 'Инфоблок "InformatsionnyeKarty" не найден';

} else {

$Entity = HL\HighloadBlockTable::compileEntity($arData);

//Создадим объект - запрос
$Query = new EN\Query($Entity);

//Зададим параметры запроса, любой параметр можно опустить
$Query->setSelect(array('*'));
//$Query->setFilter(array('ID'=> array(2,12,6)));
//$Query->setOrder(array('UF_SORT' => 'ASC'));

//Выполним запрос
$result = $Query->exec();

//Получаем результат по привычной схеме
$result = new CDBResult($result);
while ($row = $result->Fetch()){

if (CModule::IncludeModule("catalog"))
{
// Создадим купон

$kodKupona = preg_replace('/[^0-9]/', '', trim($row['UF_KOD']));

$arCouponFields = array(
"DISCOUNT_ID" => 2,
"ACTIVE" => "Y",
"ONE_TIME" => "N",
"COUPON" => $kodKupona,
"DATE_APPLY" => false,
"DESCRIPTION" => trim($row['UF_NAME'])
);

$arFilter = array('COUPON' => $kodKupona);
$dbCoupon = CCatalogDiscountCoupon::GetList (array(), $arFilter);
if($arCoupon = $dbCoupon->Fetch())
{
$CID = CCatalogDiscountCoupon::Update($arCoupon['ID'], $arCouponFields);
}
else
{
$CID = CCatalogDiscountCoupon::Add($arCouponFields);
}

$CID = IntVal($CID);
if ($CID <= 0)
{
$ex = $APPLICATION->GetException();
$errorMessage = $ex->GetString();
$error = true;
}

//Удаляем из Хайлоад-блока

$DataClass = $Entity->getDataClass();

$delresult = $DataClass::delete($row['ID']);
if(!$delresult->isSuccess()){ //произошла ошибка
$error = true;
$errorMessage = $delresult->getErrorMessages(); //выведем ошибку
}

} else {
$error = true;
$errorMessage = 'Не удалось подключить модуль "catalog"';
}

if ($error === true) {
break;
}

$NS['custom']['lastId'] = $arItem['ID'];
$NS['custom']['counter']++;

// Прерывание по времени шага
if ($stepInterval > 0 && (time() - $startTime) > $stepInterval) {
break;
}
}

}

if ($arItem != false) {

if ($errorMessage === null) {
print "progress\n";
print "Обработано " . $NS['custom']['counter'] . ' элементов, осталось ' . $res->SelectedRowsCount();
} else {
print "failure\n" . $errorMessage;
}

$contents = ob_get_contents();
ob_end_clean();

if (toUpper(LANG_CHARSET) != "WINDOWS-1251") {
$contents = $GLOBALS['APPLICATION']->ConvertCharset($contents, LANG_CHARSET, "windows-1251");
}

header("Content-Type: text/html; charset=windows-1251");
print $contents;
exit;
}

}

// }

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
CAPTCHA
Вы человек или автоматическая спам-рассылка?
Target Image