Have a look at Order Entry (which will also produce an invoice. It would allow you to set up common item numbers and then create alternative price lists.
So for example test A (item A) could then have an alternative price for every customer (though I'd recommend trying to avoid this as its a lot of work to maintain). You could then assign customers to an alternative price list so that when you bill them their price is used for item A. If price is project based then use the project to identify the alternative price list and have the correct project (alternative price list) selected during invoicing.