You can't edit 2 different tables in same form at same time. With table it is easy - a form can have a single table as source. When you have a query as source, it must be editable. And when it is, you can edit fields of one table in query only. As such query in your case must be aggregate one, there is no chance for it!
Anyway you manage part prices in Parts form, not in Services form. So your choices are:
1. Add a field PurchasePrice into table ServicePart. Base ServiceParts form on table ServicePart.
Create saved queries like (on fly)
qLastPriceDate
Code:
SELECT PartID, MAX(PriceBalidFrom) AS LastPriceDate FROM Price GROUP BY PartID
and
qCurrentPrice
Code:
SELECT price.PartID, Iif(Nz(lpd.PartID,0) = 0, 0, price.PurchasePrice) AS [PurchasePrice] FROM Price price LEFT JOIN qLastPriceDate lpd ON WHERE lpd.PartID = price.PartID WHERE price.PriceValidFrom = lpd.LastPriceDate
On subform for service parts, write an AfterUpdate event for control linked to combo where you select part. The event checks the value of purchase price of part in control, and when it is empty, sets the value for parts purchase price using DLookup() from qCurrentPrice. It is up to you, are you allowing to edit purchase price afterwards, or you disable editing for the control completly.
2. The another way is to have the price in subform calculated in unbound control, without having the price stored in table ServicePart. For this you need an UDF, which returns the valid price for part at given date. I posted such function in one of forums here lately - check for ValidValue() when you are interested.