FUNCTION ExtensoDolar( nValor )
LOCAL cTxt
cTxt := Extenso( nValor )
cTxt := StrTran( cTxt, "REAIS", "DOLARES" )
cTxt := StrTran( cTxt, "REAL", "DOLAR" )
RETURN cTxt
FUNCTION Extenso( xValue, xFull )
LOCAL cTxt := ""
hb_Default( @xFull, .F. )
IF ValType( xValue ) == "N"
cTxt := ze_ExtensoDinheiro( xValue )
ELSEIF ValType( xValue ) == "D"
IF ! xFull
cTxt := StrZero( Day( xValue ), 2 ) + " DE " + ze_ExtensoMes( xValue ) + " DE " + StrZero( Year( xValue ), 4 )
ELSE
cTxt := ze_ExtensoNumero( Day( xValue ) )
cTxt += " DE " + ze_ExtensoMes( xValue ) + " DE "
cTxt += ze_ExtensoNumero( Year( xValue ) )
DO WHILE Space(2) $ cTxt
cTxt := StrTran( cTxt, Space(2), Space(1) )
ENDDO
ENDIF
ENDIF
RETURN cTxt
FUNCTION ze_ExtensoDinheiro( nValor )
LOCAL cTxt := "", cStrValor, nInteiro, nDecimal
nValor := Abs( nValor )
cStrValor := Str( nValor, 18, 2 )
nInteiro := Val( Substr( cStrValor, 1, At( ".", cStrValor ) - 1 ) )
nDecimal := Val( Substr( cStrValor, At( ".", cStrValor ) + 1 ) )
IF nInteiro != 0 .OR. nDecimal == 0
cTxt += ze_ExtensoNumero( nInteiro ) + " " + iif( nInteiro == 1, "REAL", "REAIS" )
ENDIF
IF nDecimal != 0
IF nInteiro != 0
cTxt += " E "
ENDIF
cTxt += ze_ExtensoNumero( nDecimal ) + " " + iif( nDecimal == 1, "CENTAVO", "CENTAVOS" )
ENDIF
RETURN cTxt
STATIC FUNCTION ze_ExtensoNumero( nValor, nGrupo )
LOCAL cTxt := "", cStrValor, nCentena, nResto, cTxtGrupo := "", lNegativo
LOCAL aList := { "", "MIL", "MILHAO", "BILHAO", "TRILHAO", "QUATRILHAO", ;
"QUINTILHAO", "SEPTILHAO", "OCTILHAO", "NONILHAO", "DECILHAO" }
hb_Default( @nGrupo, 1 )
lNegativo := ( nValor < 0 )
nValor := Abs( nValor )
cStrValor := StrZero( nValor, 16 )
nCentena := Val( Right( cStrValor, 3 ) )
nResto := Val( Substr( cStrValor, 1, Len( cStrValor ) - 3 ) )
IF nCentena != 0
IF nCentena > 0
cTxtGrupo := aList[ nGrupo ]
IF nCentena > 1
cTxtGrupo := StrTran( cTxtGrupo, "LHAO", "LHOES" )
ENDIF
ENDIF
cTxt := ze_ExtensoCentena( nCentena ) + " " + cTxtGrupo
ENDIF
IF nResto != 0 .AND. nGrupo < Len( aList )
cTxt := ze_ExtensoNumero( nResto, nGrupo + 1 ) + " E " + cTxt
ENDIF
IF nGrupo == 1
IF nValor == 0
cTxt := "ZERO"
ENDIF
cTxt := iif( lNegativo, "*NEGATIVO* ", "" ) + AllTrim( cTxt )
ENDIF
RETURN cTxt
STATIC FUNCTION ze_ExtensoUnidade( nValor )
LOCAL aList := { "UM", "DOIS", "TRES", "QUATRO", "CINCO", "SEIS", ;
"SETE", "OITO", "NOVE", "DEZ", "ONZE", "DOZE", "TREZE", ;
"QUATORZE", "QUINZE", "DEZESSEIS", "DEZESSETE", "DEZOITO", ;
"DEZENOVE" }
RETURN aList[ nValor ]
STATIC FUNCTION ze_ExtensoDezena( nValor )
LOCAL aList := { "DEZ", "VINTE", "TRINTA", "QUARENTA", "CINQUENTA", "SESSENTA", ;
"SETENTA", "OITENTA", "NOVENTA" }
LOCAL cTxt := "", nDezena, nUnidade
IF nValor > 0
nDezena := Int( nValor / 10 )
nUnidade := Mod( nValor, 10 )
IF nValor < 20
cTxt += ze_ExtensoUnidade( nValor )
ELSE
cTxt += aList[ nDezena ]
IF nUnidade != 0
cTxt += " E " + ze_ExtensoUnidade( nUnidade )
ENDIF
ENDIF
ENDIF
RETURN cTxt
STATIC FUNCTION ze_ExtensoCentena( nValor )
LOCAL aList := { "CENTO", "DUZENTOS", "TREZENTOS", "QUATROCENTOS", ;
"QUINHENTOS", "SEISCENTOS", "SETECENTOS", "OITOCENTOS", ;
"NOVECENTOS" }
LOCAL nCentena, nDezena, cTxt := ""
nCentena := Int( nValor / 100 )
nDezena := Mod( nValor, 100 )
IF nValor > 0
IF nCentena == 1 .AND. nDezena == 0
cTxt += "CEM"
ELSE
IF nCentena != 0
cTxt += aList[ nCentena ]
ENDIF
IF nDezena != 0
IF nCentena != 0
cTxt += " E "
ENDIF
cTxt += ze_ExtensoDezena( nDezena )
ENDIF
ENDIF
ENDIF
RETURN cTxt
STATIC FUNCTION ze_ExtensoMes( xMes )
LOCAL cNomeMes := ""
LOCAL aList := { "JANEIRO", "FEVEREIRO", "MARCO", "ABRIL", "MAIO", "JUNHO", "JULHO", ;
"AGOSTO", "SETEMBRO", "OUTUBRO", "NOVEMBRO", "DEZEMBRO" }
IF ValType( xMes ) == "D"
xMes := Month( xMes )
ENDIF
DO WHILE xMes > 12
xMes -= 12
ENDDO
IF xMes > 0
cNomeMes := aList[ xMes ]
ENDIF
RETURN cNomeMes
STATIC FUNCTION ze_ExtensoSemana( dData )
LOCAL aList := { "", "DOMINGO", "SEGUNDA", "TERCA", "QUARTA", "QUINTA", "SEXTA", "SABADO" }
RETURN aList[ Dow( dData ) + 1 ]
Faltam estas duas:
FUNCTION ze_ExtensoDinheiro( nValor )
LOCAL cTxt := "", cStrValor, nInteiro, nDecimal
nValor := Abs( nValor )
cStrValor := Str( nValor, 18, 2 )
nInteiro := Val( Substr( cStrValor, 1, At( ".", cStrValor ) - 1 ) )
nDecimal := Val( Substr( cStrValor, At( ".", cStrValor ) + 1 ) )
IF nInteiro != 0 .OR. nDecimal == 0
cTxt += ze_ExtensoNumero( nInteiro ) + " " + iif( nInteiro == 1, "REAL", "REAIS" )
ENDIF
IF nDecimal != 0
IF nInteiro != 0
cTxt += " E "
ENDIF
cTxt += ze_ExtensoNumero( nDecimal ) + " " + iif( nDecimal == 1, "CENTAVO", "CENTAVOS" )
ENDIF
RETURN cTxt
STATIC FUNCTION ze_ExtensoNumero( nValor, nGrupo )
LOCAL cTxt := "", cStrValor, nCentena, nResto, cTxtGrupo := "", lNegativo
LOCAL aList := { "", "MIL", "MILHAO", "BILHAO", "TRILHAO", "QUATRILHAO", ;
"QUINTILHAO", "SEPTILHAO", "OCTILHAO", "NONILHAO", "DECILHAO" }
hb_Default( @nGrupo, 1 )
lNegativo := ( nValor < 0 )
nValor := Abs( nValor )
cStrValor := StrZero( nValor, 16 )
nCentena := Val( Right( cStrValor, 3 ) )
nResto := Val( Substr( cStrValor, 1, Len( cStrValor ) - 3 ) )
IF nCentena != 0
IF nCentena > 0
cTxtGrupo := aList[ nGrupo ]
IF nCentena > 1
cTxtGrupo := StrTran( cTxtGrupo, "LHAO", "LHOES" )
ENDIF
ENDIF
cTxt := ze_ExtensoCentena( nCentena ) + " " + cTxtGrupo
ENDIF
IF nResto != 0 .AND. nGrupo < Len( aList )
cTxt := ze_ExtensoNumero( nResto, nGrupo + 1 ) + " E " + cTxt
ENDIF
IF nGrupo == 1
IF nValor == 0
cTxt := "ZERO"
ENDIF
cTxt := iif( lNegativo, "*NEGATIVO* ", "" ) + AllTrim( cTxt )
ENDIF
RETURN cTxt