Битрикс в админке не запоминает сортировку нескольких таблиц, находящихся на одной странице

19 сентября 2021
В версии 19 есть проблема, что Битрикс в админке не запоминает сортировку разных таблиц, выводящихся на одной странице. 

Пример ситуации. В собственном модуле на странице /bitrix/admin/eshop.goods_items_list.php выводится список категорий товаров, отсортированных по полю «Название» в алфавитном порядке.  А на странице /bitrix/admin/eshop.goods_items_list.php?CATEGORY_ID=5 (адреса отличаются наличием get-параметра CATEGORY_ID) выводится список товаров выбранной категории, настроенный на сортировку по цене.

По факту видим, что обе таблицы отсортированы по полю «Название», хотя вторая таблица (список товаров) должна сортироваться по колонке «Цена».

За сортировку таблиц отвечает класс CAdminSorting, объявленный в файле /bitrix/modules/main/interface/admin_lib.php. В конструкторе класса сортировка запоминается в сессии в элементе $_SESSION["SESS_SORT_BY"][$uniq], где $uniq это md5-хэш от адреса текущей страницы без get-параметров, то есть $uniq = md5($APPLICATION->GetCurPage());

Таким образом, соответствие таблицы и сортировки привязано не к идентификатору таблицы $table_id, а привязано к адресу страницы и по этой причине у нескольких таблиц, располагающихся на одной странице, будет задано одинаковое поле сортировки.

Для решения проблемы можно заменить строку $uniq = md5($APPLICATION->GetCurPage());
на $uniq = md5($APPLICATION->GetCurPage().'_'.$table_id);