По просьбе старого знакомого. Для магазинов на Virtuemart 1.1.*
Необходимо в списке товаров независимо от выбранной сортировки всегда сначала показывать товар, который есть в наличии (у которого есть остаток - product_in_stock > 0 ).
Открываем /administrator/components/com_virtuemart/html/shop_browse_queries.php и в конце файла
вместо
$q .= "\n ORDER BY $orderbyField $DescOrderBy";
пишем
$q .= "\n ORDER BY IF(`#__{vm}_product`.`product_in_stock` > 0, 1, 0) DESC, $orderbyField $DescOrderBy";
Сохраняем. Все.