ok, I figured out the problem. Your app was using a fixed pah to the dict, and I happened to have a dict with that name in that place. I renamed mine so when your app opened it promoted me for the new dict name.
You'll need build 7.11 (coming soon) for this to work.
The code you want to embed is
loc:SubTotal = InvoiceTotal(p_web.GSV('INV:ID'))
p_web.SSV('loc:SubTotal',loc:SubTotal)
p_web.SSV('loc:Tax1', loc:SubTotal*.1)
p_web.SSV('loc:Tax2', loc:SubTotal*.05)
p_web.SSV('loc:Total', loc:SubTotal + (loc:SubTotal*.1) + (loc:SubTotal*.05) )
Note that you're setting session values here, as is the usual case when manipulating form fields.
The best embed for it is the top of the Value::loc:SubTotal routine. So whenever the loc:Subtotal field is displayed it is recalculated.
Note we're using the value routine here, not the validate routine, because these fields are a result of something else changing, they don't change by themselves. I could have used the Validate routine for the Browse Field, but then they would still need to be primed when the form opens. So the Value routine works for both of those.
I've added these 4 total fields to the Client-Side Reset list for the Browse control. Let me say that again. The Browse field on the form. Go to the Client-Side tab, and add the "dependent" fields there in the Reset List - just like you would do for any form field.
(Aside Note: I have to tweak the code in the InvoiceTotal procedure because it had a bug which was exposed when called in this way. But I don't think that's important to this conversation.)
Cheers
Bruce