Hello Bruno,
if you have not quant record in table stock_quant for a product (in fact if you have no quantity), you will have no inventory line created, see the method get_inventory_lines and the request done in database on table stock_quant, which return nothing for the case of your client (this method should be override to add all products which are not in stock quant table;) )
@+
def _get_inventory_lines(self, cr, uid, inventory, context=None):
     ...........
            cr.execute('''
               SELECT product_id, sum(qty) as product_qty, location_id, lot_id as prod_lot_id, package_id, owner_id as partner_id
           FROM stock_quant WHERE''' + domain + '''
           GROUP BY product_id, location_id, lot_id, package_id, partner_id
        ''', args)
     vals = []
            for product_line in cr.dictfetchall():
                    #replace the None the dictionary by False, because falsy values are tested later on
                    for key, value in product_line.items():
                            if not value:
                                    product_line[key] = False
         product_line['inventory_id'] = inventory.id
                    product_line['theoretical_qty'] = product_line['product_qty']
                    if product_line['product_id']:
                            product = product_obj.browse(cr, uid, product_line['product_id'], context=context)
                            product_line['product_uom_id'] = product.uom_id.id
                    vals.append(product_line)
            return vals