Caso seja data futura, o valor do dólar é calculado baseado nas variações anteriores.
FUNCTION CalcInd()
LOCAL nSelect := Select(), nIndRef, nValorAnt
SELECT jpdolar
GOTO BOTTOM
DO WHILE jpdolar->dlValor == 0 .AND. ! Bof()
SKIP -1
ENDDO
nValorant := jpdolar->dlValor
DO WHILE ( jpdolar->dlValor == 0 .OR. jpdolar->dlValor == nValorant ) .AND. ! Bof()
SKIP -1
ENDDO
IF nValorant == 0 .OR. jpdolar->dlValor == 0
nIndRef := 1
ELSE
nIndRef := nValorant / jpdolar->dlValor
nIndRef := iif( nIndRef < 1, 1, nIndRef )
ENDIF
SELECT ( nSelect )
RETURN nIndRef
FUNCTION CalcDolar( m_Data )
LOCAL mValor, m_QtDias, m_Int7, m_VlTmp, nIndRef, m_DifDias, nSelect := Select()
SELECT jpdolar
IF Encontra( Dtos( m_Data ), "jpdolar","data" )
mValor := jpdolar->dlValor
ELSE
nIndRef := CalcInd()
SEEK Dtos( m_Data ) SOFTSEEK
SKIP -1
IF jpdolar->( Eof() )
mValor := 1
ELSE
m_DifDias := m_Data - jpdolar->dlData
m_Int7 := int( m_DifDias / 7 )
m_Data -= ( m_Int7 * 7 )
m_QtDias := m_Int7 * 5
DO WHILE m_Data > jpdolar->dlData
IF Dow( m_Data ) > 2
m_QtDias += 1
ENDIF
m_Data -= 1
ENDDO
m_VlTmp := ( nIndRef ^ m_QtDias )
IF m_VlTmp <= 0 .OR. m_vlTmp > 9999
mValor := jpdolar->dlValor
ELSE
mValor := Round( jpdolar->dlValor * m_VlTmp, 2 )
ENDIF
ENDIF
ENDIF
SELECT ( nSelect )
RETURN mValor