Отписываюсь. Потому что наверняка кому-то понадобиться может вдруг.
В этой версии битрикса в файле /bitrix/modules/sale/admin/order.php есть несколько косяков.
Один из них исправлен точно сейчас.
В версии этой была строчка
[CODE]$rsSites = CSite::GetList($by="id", $order="asc", Array("ACTIVE" => "Y"));
[/CODE]Сейчас такого нет насколько я просмотрел в новой версии (Самой последней по крайней мере).
Далее в этом файле есть вывод всех полей абсолютно, которые можно установить как фильтр - поля просто выводятся скрытыми (display: none ;)
Так вот в случае, если есть хотя бы одно свойство заказа созданое типа SELECT, то при генерации полей фильтра используется такой код - чтобы дёрнуть список вариантов выбора SELECT этого:
[CODE]$db_vars = CSaleOrderPropsVariant::GetList(($by="SORT"), ($order="ASC"), Array("ORDER_PROPS_ID" => $key));
[/CODE]
Значение переменной $by , которое устанавливается попадает в $GLOBALS.
В классе CAdminSorting, который отвечает за сортировку - направление и столбец выбираются последовательно:
1. Проверяется есть ли входные параметры - by,order.
2. Если входных нет - то пытаемся взять из сессии - последнюю сортировку которая проводилась - там хранится массив вида:
[CODE]["SESS_SORT_BY"]=> array(1) { ["a6bd7c82a1f36bc1dae392525b82da1a"]=> string(2) "ID"}
["SESS_SORT_ORDER"]=> array(1) { ["a6bd7c82a1f36bc1dae392525b82da1a"]=> string(3) "asc"}
[/CODE]
a6bd7c82a1f36bc1dae392525b82da1a - хэш генерируется:
[CODE]$uniq = md5($APPLICATION->GetCurPage());
[/CODE]
3. Это из базы подгружает сортировку по умолчанию - которую можно выставить в окне Настройки в админки
4. Это параметры передающиеся по умолчанию при создании экземпляра класса CAdminSorting.
Так вот - входные параметры берутся следующим образом (пункт 1):
[CODE]if(isset($GLOBALS[$this->by_name]))
$_SESSION["SESS_SORT_BY"][$uniq] = $GLOBALS[$this->by_name];
[/CODE]
$GLOBALS[$this->by_name] - это элемент $GLOBALS["by"] - т.е. к параметрам сортировки, которые передаются через $_GET обращение идет через $GLOBALS - он содержит в себе $_GET, $_POST и.т.п.
Так вот если есть хоть одно свойство заказа SELECT , то переменная $by перепишется на "SORT" и сортировка при нажатии на столбцы в таблице заказов работать правильно не будет - в частности не будет меняться направление сортировки.
Помимо SELECT там RADIO тоже такого же плана судя по коду.
Заменил:
[CODE]$db_vars = CSaleOrderPropsVariant::GetList(($by="SORT"), ($order="ASC"), Array("ORDER_PROPS_ID" => $key));
на
$db_vars = CSaleOrderPropsVariant::GetList(Array("SORT"=>"ASC"), Array("ORDER_PROPS_ID" => $key));
[/CODE]Хотя странно, что сортировка работала в одном направлении - не менялась.. но разбираться уже не стал, сейчас работает нормально всё вроде пока :-)