sábado, 30 de novembro de 2013

Função que Transforma o Valor para extenso



// Transforma o valor para extenso
// ===============================================================
// PARAMETROS:
// MoedaNoSingular = REAL
// MoedaNoPlural   = REAIS
// Valor           = 0.00

Function fn_Extenso(MoedaNoSingular, MoedaNoPlural: String ;Valor: Double): String ;
Var
   Lst: TStringList ;
   I: Integer ;
   Aux: String ;
   Grupo: String ;
   Truncado: Longint ;
Begin
   Lst := Nil ;
   Result := '' ;
   Try
      If Valor = 0.0 Then
      Begin
         Result := 'ZERO ' + MoedaNoPlural ;
         Exit ;
      End ;
      Lst := TStringList.Create ;
      Grupo := '' ;
      Aux := FormatFloat('#,##0.00', Valor) ;

      // Separa em grupos
      // ================
      For I := 1 To Length(Aux) Do
         If (Aux[I] = '.') Or (Aux[I] = ',') Then
         Begin
            Lst.Add(Grupo) ;
            Grupo := '' ;
         End Else
            Grupo := Grupo + Aux[I] ;

      // Inclui o ultimo grupo
      Lst.Add(Grupo) ;

      // Trata os bilhões
      // ================
      I := 0 ;
      If Lst.Count > 4 Then
      Begin
         Result := TrataGrupo(Lst[I]) ;
         If StrToInt(Lst[I]) = 1 Then
            Result := Result + ' BILHÃO'
         Else
            Result := Result + ' BILHÕES' ;
         Inc(I) ;
      End ;

      // Trata os milhões
      // ================
      If (Lst.Count > 3) Then
      Begin
         If StrToInt(Lst[I]) <> 0 Then
         Begin
            If Length(Result) > 0 Then Result := Result + ', ' ;
            Result := Result + TrataGrupo(Lst[I]) ;
            If StrToInt(Lst[I]) = 1 Then
               Result := Result + ' MILHÃO'
            Else
               Result := Result + ' MILHÕES' ;
         End ;
         Inc(I) ;
      End ;

      // Trata os milhares
      // =================
      If Lst.Count > 2 Then
      Begin
         If StrToInt(Lst[I]) <> 0 Then
         Begin
            If Length(Result) > 0 Then Result := Result + ', ' ;
            Result := Result + TrataGrupo(Lst[I]) ;
            Result := Result + ' MIL' ;
         End ;
         Inc(I) ;
      End ;

      // Trata as unidades
     // =================
      If StrToInt(Lst[I]) > 0 Then
      Begin
         If Length(Result) > 0 Then Result := Result + ' E ' ;
         Result := Result + TrataGrupo(Lst[I]) ;
      End ;
      Truncado := Trunc(Valor) ;
      If Truncado = 1 Then
         Result := Result + ' ' + MoedaNoSingular
      Else If (Truncado = 1000000) Or
         (Truncado = 10000000) Or
         (Truncado = 100000000) Or
         (Truncado = 1000000000) Then
         Result := Result + ' DE ' + MoedaNoPlural
      Else If Truncado <> 0 Then
         Result := Result + ' ' + MoedaNoPlural ;
      Inc(I) ;

      // Trata os centavos
      // =================
      If StrToInt(Lst[I]) = 0 Then Exit ;
      //      If Truncado > 0 Then Result := Result + ', ' ;
      Result := Result + ', ' ;
      Result := Result + TrataGrupo(Lst[I]) ;
      If StrToInt(Lst[I]) = 1 Then
         Result := Result + ' ' + 'CENTAVO'
      Else
         Result := Result + ' ' + 'CENTAVOS' ;
      If Truncado = 0 Then
         Result := Result + ' DE ' + MoedaNoSingular ;
   Finally
      // Trata tipo texto
      Result := AnsiUpperCase(Result) ;
      If Lst <> Nil Then Lst.Free ;
   End ;
End ;

Nenhum comentário:

Postar um comentário