Página 1 de 1

Cálculo de dólar

Enviado: 12 Jan 2017 14:39
por JoséQuintas
Estou retirrando as rotinas do meu aplicativo, então deixar aqui pra quem precisar, ou se algum dia eu precisar novamente.
Caso seja data futura, o valor do dólar é calculado baseado nas variações anteriores.

Código: Selecionar todos

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

Cálculo de dólar

Enviado: 12 Jan 2017 15:46
por fladimir
Obrigado