If what ever you've come up with works then that's great! Another approach to consider might be instead of having multiple [Unitprice] fields that you could have an optional field in the SalesInvoiceSub table that is the User ID of the person working on the invoice, call it OverrideUserID for example. If [OverrideUserID] Is Null then your app would be designed to automatically calculate and update [SalesInvoiceSub].[Unitprice004], however if it is not null then the app would skip updating the price for this item because the calculated price is 'overridden'. The sql to update the unit prices for an invoice while skipping overridden items might look like this:
Code:
UPDATE
t02SalesInvoiceSub
SET
t02SalesInvoiceSub.UnitPrice004 = q04CogsUnitPrice02.Unitprice011
FROM
t02SalesInvoiceSub
INNER JOIN
q04CogsUnitPrice02
ON
t02SalesInvoiceSub.[ITEM ID HERE] = q04CogsUnitPrice02.IntItmID011
WHERE
t02SalesInvoiceSub.SalInv_ID004 = [SALES INVOICE ID HERE]
AND
t02SalesInvoiceSub.[OVERRIDE USER ID] Is Null