Вот решение которое работает для меня (в Observer модуля):
$collection = $observer->getCollection();
$collection->getSelect()
->joinLeft(
array('_inventory_table'=>$collection->getTable('cataloginventory/stock_item')),
'_inventory_table.product_id = e.entity_id',
array('is_in_stock', 'manage_stock')
);
$collection->joinField(
'inventory_qty',
'cataloginventory_stock_item',
'qty',
'product_id=entity_id'
)->setOrder('inventory_qty', 'desc');По умолчанию при сортировке по «позиции» все товары с нулевым количеством перемещаются в конец списка. Но с другими вариантами сортировки (по имени, цене) этот код не работает и все продукты отображаются вместе. Кто-нибудь может помочь с этим вопросом?