CUtil::JSPostUnescape();
    require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_js.php";
    $max_execution_time = 10;
    if (isset($_REQUEST['max_execution_time']) && 0 < intval($_REQUEST['max_execution_time'])) {
        $max_execution_time = intval($_REQUEST['max_execution_time']);
    }
    COption::SetOptionString("catalog", "max_execution_time", $max_execution_time);
    $converted = isset($_REQUEST['converted']) ? intval($_REQUEST['converted']) : 0;
    $last_id = isset($_REQUEST['last_id']) ? intval($_REQUEST['last_id']) : 0;
    $maxMessage = isset($_REQUEST['maxMessage']) ? intval($_REQUEST['maxMessage']) : 0;
    $maxMessagePerStep = isset($_REQUEST['maxMessagePerStep']) ? intval($_REQUEST['maxMessagePerStep']) : 20;
    if ($converted == 0 && $maxMessage == 0) {
        $maxMessage = CCatalogDiscountConvert::GetCountFormat();
    }
    $strSessID = isset($_REQUEST['DC']) ? $_REQUEST['DC'] : '';
    CCatalogDiscountConvert::$intLastConvertID = $last_id;
    CCatalogDiscountConvert::$intConvertPerStep = 0;
    CCatalogDiscountConvert::$intConverted = $converted;
    CCatalogDiscountConvert::$strSessID = $strSessID;
    CCatalogDiscountConvert::ConvertFormatDiscount($maxMessagePerStep, $max_execution_time);
    if (!CCatalogDiscountConvert::$boolEmptyList) {
        $aboutMinute = ($maxMessage - CCatalogDiscountConvert::$intConverted) / CCatalogDiscountConvert::$intConvertPerStep * $max_execution_time / 60;
        $strAbout = $aboutMinute >= 1 ? str_replace('#MIN#', ceil($aboutMinute), GetMessage('CAT_DISC_CONVERT_TOTAL_MIN')) : str_replace('#SEC#', ceil($aboutMinute * 60), GetMessage('CAT_DISC_CONVERT_TOTAL_SEC'));
        CAdminMessage::ShowMessage(array("MESSAGE" => GetMessage("CAT_DISC_CONVERT_IN_PROGRESS"), "DETAILS" => str_replace(array('#COUNT#', '#PERCENT#', '#TIME#'), array($converted, ceil(CCatalogDiscountConvert::$intConverted / $maxMessage * 100), $strAbout), GetMessage('CAT_DISC_CONVERT_TOTAL')), "HTML" => true, "TYPE" => "OK"));
        ?>
<script type="text/javascript">
			BX.closeWait();
			DoNext(<?php 
        echo CCatalogDiscountConvert::$intConverted;
        ?>
, <?php 
 public static function ConvertFormatDiscount($intStep = 20, $intMaxExecutionTime = 15)
 {
     global $DBType;
     global $DB;
     global $APPLICATION;
     self::InitStep();
     $intStep = intval($intStep);
     if (0 >= $intStep) {
         $intStep = 20;
     }
     $startConvertTime = getmicrotime();
     $obDiscount = new CCatalogDiscount();
     $strTableName = '';
     switch (ToUpper($DBType)) {
         case 'MYSQL':
             $strTableName = 'b_catalog_discount';
             break;
         case 'MSSQL':
             $strTableName = 'B_CATALOG_DISCOUNT';
             break;
         case 'ORACLE':
             $strTableName = 'B_CATALOG_DISCOUNT';
             break;
     }
     if (!CCatalogDiscountConvertTmp::CreateTable()) {
         return false;
     }
     if (0 >= self::$intLastConvertID) {
         self::$intLastConvertID = CCatalogDiscountConvertTmp::GetLastID();
     }
     CTimeZone::Disable();
     self::$boolEmptyList = true;
     $rsDiscounts = CCatalogDiscount::GetList(array('ID' => 'ASC'), array('>ID' => self::$intLastConvertID, 'TYPE' => DISCOUNT_TYPE_STANDART, 'VERSION' => CATALOG_DISCOUNT_NEW_VERSION), false, array('nTopCount' => $intStep), array('ID', 'MODIFIED_BY', 'TIMESTAMP_X', 'CONDITIONS', 'NAME'));
     while ($arDiscount = $rsDiscounts->Fetch()) {
         $mxExist = CCatalogDiscountConvertTmp::IsExistID($arDiscount['ID']);
         if (false === $mxExist) {
             self::$intErrors++;
             return false;
         }
         self::$boolEmptyList = false;
         if (0 < $mxExist) {
             self::$intConverted++;
             self::$intConvertPerStep++;
             self::$intLastConvertID = $arDiscount['ID'];
             continue;
         }
         $arFields = array();
         $arFields['MODIFIED_BY'] = $arDiscount['MODIFIED_BY'];
         $arFields['CONDITIONS'] = $arDiscount['CONDITIONS'];
         $mxRes = $obDiscount->Update($arDiscount['ID'], $arFields);
         if (!$mxRes) {
             self::$intErrors++;
             $strError = '';
             if ($ex = $APPLICATION->GetException()) {
                 $strError = $ex->GetString();
             }
             if (empty($strError)) {
                 $strError = GetMessage('BT_MOD_CAT_DSC_FORMAT_ERR');
             }
             self::$arErrors[] = array('ID' => $arDiscount['ID'], 'NAME' => $arDiscount['NAME'], 'ERROR' => $strError);
             if (!CCatalogDiscountConvertTmp::SetID($arDiscount['ID'])) {
                 return false;
             }
             self::$intConverted++;
             self::$intConvertPerStep++;
             self::$intLastConvertID = $arDiscount['ID'];
         } else {
             $arTimeFields = array('~TIMESTAMP_X' => $DB->CharToDateFunction($arDiscount['TIMESTAMP_X'], "FULL"));
             $strUpdate = $DB->PrepareUpdate($strTableName, $arTimeFields);
             if (!empty($strUpdate)) {
                 $strQuery = "UPDATE " . $strTableName . " SET " . $strUpdate . " WHERE ID = " . $arDiscount['ID'] . " AND TYPE = " . DISCOUNT_TYPE_STANDART;
                 $DB->Query($strQuery, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             }
             if (!CCatalogDiscountConvertTmp::SetID($arDiscount['ID'])) {
                 return false;
             }
             self::$intConverted++;
             self::$intConvertPerStep++;
             self::$intLastConvertID = $arDiscount['ID'];
         }
         if ($intMaxExecutionTime > 0 && getmicrotime() - $startConvertTime > $intMaxExecutionTime) {
             break;
         }
     }
     CTimeZone::Enable();
     if ($intMaxExecutionTime > 2 * (getmicrotime() - $startConvertTime)) {
         self::$intNextConvertPerStep = $intStep * 2;
     } else {
         self::$intNextConvertPerStep = $intStep;
     }
     self::SaveStep();
     return true;
 }