• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/delivery/externallocationmap.php
  • Класс: BitrixSaleDeliveryfor
  • Вызов: for::fillNormalizedTable
static function fillNormalizedTable($startId = false, $timeout = 0)
{
	set_time_limit(0);
	$startTime = mktime(true);
	$lastProcessedId = 0;
	$con = BitrixMainApplication::getConnection();
	$sqlHelper = $con->getSqlHelper();

	if(intval($startId) <= 0)
		$con->queryExecute("DELETE FROM b_sale_hdaln");

	$query = "SELECT
		  L.ID,
		  L.LEFT_MARGIN,
		  L.RIGHT_MARGIN,
		  N.NAME_UPPER
		FROM
		  b_sale_location AS L
			INNER JOIN b_sale_loc_name AS N ON L.ID = N.LOCATION_ID
			INNER JOIN b_sale_loc_type AS T ON L.TYPE_ID = T.ID		
		WHERE
		  N.LANGUAGE_ID = 'ru'
		  AND (T.CODE = 'VILLAGE' OR T.CODE = 'CITY')";

	if($startId !== false)
		$query .= " AND L.ID > ".strval(intval($startId));

	$query .= " ORDER BY ID ASC";
	$res = $con->query($query);

	while($loc = $res->fetch())
	{
		$con->queryExecute("
			INSERT INTO
				  b_sale_hdaln (LOCATION_ID, LEFT_MARGIN, RIGHT_MARGIN, NAME)
			VALUES(
				".intval($loc['ID']).",
				".intval($loc['LEFT_MARGIN']).",
				".intval($loc['RIGHT_MARGIN']).",
				'".$sqlHelper->forSql(
						preg_replace(
								'/s*((.*))/i'.BX_UTF_PCRE_MODIFIER,
								'',
								BitrixSaleLocationComparator::flatten($loc['NAME_UPPER']))
				)."'
			)
		");

		$lastProcessedId = $loc['ID'];

		if($timeout > 0 && (mktime(true)-$startTime) >= $timeout)
			break;
	}

	return $lastProcessedId;
}