FabioBrambo ha scritto:
...
Procederò quindi a usare la funzione direttamente nella query, in modo tale da poterla utilizzare.
Cercherò di trovare (e qui chiedo ancora aiuto sul dove trovarlo ed integrarlo all'interno della funzione) il comando che "resetta" la funzione al modificarsi del valore di un campo.
...
Come avevo anticipato nel mio primo intervento avevo detto che a quel tempo ero inesperto e che forse quanto contenuto in quel thread eccedeva la tua necessità.
Fin da subito m'era balenata un'altra idea che semplificherebbe di molto il lavoro e che se ne infischia degli intervalli di tempo.
Il ragionamento più volte evidenziato è quello di trovare il prezzo d'acquisto per quel prodotto più prossimo (ma antecedente) alla data di vendita.
Si crea una funzione che apre un recordset su una stringa SQL costruita ad hoc passando come parametri i campi che inserisci nella query.
Abbozzo la funzione e integro questo post o ne aggiungo uno
====
Ipotizzando una Qry1 che mette in relazione SaleDoc e SaleDocDetail e che l'articolo sia identificato con un valore numerico, dove Purch_Price è il prezzo d'acquisto
Public Function RecentPrice(dtaSaleDocument as Date, lngArticolo as long) As Long
Dim rst As DAO.Recordset
Dim strSQL as String
strSQL = "SELECT TOP 1 Purch_Price FROM Qry1 WHERE Purch_Art = " & lngArticolo
strSQL = strSQL & " AND Purch_Date < #" & dtaSaleDocument & "# ORDER BY Purch_date DESC"
debug.print strSQL 'per vedere nella finestra immediata
Set rst = CurrentDB.OpenRecordset(strSQL, dbOpenDynaset)
GetRecentPrice = rst![Purch_Price].Value
Rst.Close
Set rst = Nothing
End Function
(ho scritto tutto su editor di testo normale, potrebbero esserci errori di sintassi)
La sostanza è tutta in "TOP 1" e "ORDER BY" così restituisce 1 record solo, con il prezzo corrispondente alla data d'acquisto più elevata
Il valore restituito è Long. Se servono i decimali bisogna cambiare.
Probabilmente c'è da lavorare sul formato della data usando Format (vedi il suggerimento di Gibra).
La strada è tracciata e secondo me molto più semplice della gestione degli "intervalli di validità" (come invece era nel più volte citato vecchio thread)