Impacted versions: 8.0

Steps to reproduce:
- Create a database with demo data
- Go to sales, product categories & attributes, attribute values
- Click on 'attribute' column name

Current behavior:
Attribute values are sorted by attribute database ID

Expected behavior:
Attribute values are sorted by attribute name

addons/product/product.py
return False
    def _compute_uos_qty(self, cr, uid, ids, uom, qty, uos, context=None):
        '''
        Computes product's invoicing quantity in UoS from quantity in UoM.
        Takes into account the
        :param uom: Source unit
        :param qty: Source quantity
        :param uos: Target UoS unit.
        '''
        if not uom or not qty or not uos:
            return qty
        uom_obj = self.pool['product.uom']
        product_id = ids[0] if isinstance(ids, (list, tuple)) else ids
        product = self.browse(cr, uid, product_id, context=context)
        if isinstance(uos, (int, long)):
            uos = uom_obj.browse(cr, uid, uos, context=context)
        if isinstance(uom, (int, long)):
            uom = uom_obj.browse(cr, uid, uom, context=context)
        if product.uos_id:  
            
            
            
            qty_default_uom = uom_obj._compute_qty_obj(cr, uid, uom, qty, product.uom_id)  
            qty_default_uos = qty_default_uom * product.uos_coeff
            return uom_obj._compute_qty_obj(cr, uid, product.uos_id, qty_default_uos, uos)
        else:
            return uom_obj._compute_qty_obj(cr, uid, uom, qty, uos)
class product_packaging(osv.osv):