_inv = record.invoice and inv_obj.browse(cr, uid, record.invoice, context=context) or False
inv_status[record.id] = _inv and _inv.state or '' <-- error is from this line. How can I fix it?
return inv_status

@Abdullah, can you share the log (server or javascript console) that indicates that the line causing the problem is indeed that line? I've commented in your other question that u'..' is a unicode. Also, I can't find the exact error message in OpenERP v7 (your code is v7/old API style), are you using other version?

Hi Abdullah,
Make sure you have to check state field in 'account.invoice' object.
Because you are taking value of 'account.invoice' object. Define your line in below.
_inv = record.invoice and inv_obj.browse(cr, uid, record.invoice, context=context) or False
Here inv_obj is 'account.invoice' object.
Otherwise, If you want to solve out this issue immediately Checked if condition define below code.
_inv = record.invoice and inv_obj.browse(cr, uid, record.invoice, context=context) or False
if _inv:
inv_status[record.id] = _inv and _inv.state or ''
else:
inv_status[record.id] = False
Otherwise specify in functional field which value you want to browse because I can't understood why you are browsing account.invoice object and checking with current current object.
Thanks,

@Hiren store=False has nothing to do with accessing the value of state field. The _inv here is a browse_object, an ORM object that will have all the fields values, regardless of stored or not. It will just calculate the value if functional field if not stored.

My mean is to check status field of 'account.invoice' object not your 'invoice_status' field.
_inv = record.invoice and inv_obj.browse(cr, uid, record.invoice, context=context) or False
Because in particular line you are taking value of 'account.invoice' object
And Sorry to say you but you are browsing value in wrong way Let me brief explain:
You are taking value like this :
_inv = record.invoice and inv_obj.browse(cr, uid, record.invoice, context=context) or False
Means you are browsing 'account.invoice' with id 'record.invoice'.
'record.invoice' is the value of your current object.
If you are passing nothing then it will take False value of your "_inv" variable.
If in your current object you are passing 2 for invoice field then it will browse account.invoice object which have ID contain 2.
Then you have to simply check in database that what ever value you are passing for your current object define field :
'invoice': fields.integer('Invoice'),
This field value you have to consider as a id as per your code.
Suppose you are passing 5 in this particular field.
Then you have to check in 5 number ID in account.invoice object and this particular state will be return.
Thanks