You need tables like:
tblItems: ItemID, ItemName, ...;
tblCustomers: CustomerID, CustomerName, ...;
tblCustomerItems: CustomerItemID, ItemID, CustomerID, CustomerITemCode.
Now, whenever you create e.g. an invoice for customer (and you have a tables like tblInvoices: InvoiceID, CustomerID, InvoiceDate,..., and tblInvoiceRows:InvoiceRowId, InvoiceID, ItemID, ItemQty, ItemPrice) , you can use a query as source for invoice report like
Code:
SELECT inv.InvoiceID, inv.InvoiceDate, inv.CustomerID, cust.CustomerName, invr.ItemID, Nz(ci.CustomerItemCode, invr.ItemName) AS ItemCode, ... FROM (((tblInvoices inv LEFT JOIN tblInvoiceRows invr ON invr.InvoiceID = inv.InvoiceID) LEFT JOIN tblCustomerItems ci ON ci.CustomerID = inv.CustomerID AND ci.ItemID = invr.ItemID) LEFT JOIN tblCustomers cust ON cust.CustomerID = inv.CustomerID) tblItems item ON item.ItemID = invr.ItemID
Using NZ() copes with cases where there is not defined an alternative item code/name for this customer.