Página 1 de 1

Extenso de valor

Enviado: 09 Abr 2014 09:55
por EANDRIOLI
Amigos:

Estou abrindo um arquivo documento no Word com várioas campos de contrato de venda que são preenchidos em variáveis de nome &EXEMPLO.

Um deles tem o campo, por exemplo, &VALOR.

Noutro que preencher com o valor por extenso (&EXTENSO).

Pergunto:

Alguém tem uma função em que eu mande o VALOR e ele retorne um texto e que possa "jogar" ele para o campo &EXTENSO no Word?

Obrigado!

Extenso de valor

Enviado: 09 Abr 2014 10:03
por Toledo
Amigo, veja se esta função serve:

https://pctoledo.org/forum/filebase.php?d=1&id=13

Abraços,

Extenso de valor

Enviado: 09 Abr 2014 11:10
por Kapiaba
Veja se ajuda, adapte para a sua necessidade:

Código: Selecionar todos

// Imprimir Recibo de Pagamento

//----- Definicao de comando SAY para TdosPrn ---------------------------------
//
#xcommand @ <nRow>,<nCol> SAY <cText> ;
             OF <oPrinter>            ;
       => ;
           <oPrinter>:Say(<nRow>, <nCol>, <cText> )

FUNCTION IMPRIME_RECIBO( DbClientes, DbApagarReceb, DbNunNf, XVALOR, XT )

    FIELD DEST_NOME

    LOCAL oPrn, nTotItens, aux, dc, cData, CCIDA

    MEMVAR XNNF

    PUBLIC NLINHA,  XVAL,    XTOTEXT, XNOMEEMP, XFILIAL, XCGCDIR, XTELDIR,         ;
           XENDDIR, XBAIDIR, XCIDDIR, XCOMP,    XDA,     XCODVEND

    nlinha      := 0
    nTotItens   := 10 // teste -> Tirar

    EXTERNAL ISPRINTER

    IF .NOT. ISPRINTER()

        Checa_Imp() // Checar Se a Impressora Está  Ativa..

        Return Nil

    ENDIF

    // Configura‡äes Para a Impressora de Cupons
    oPrn:= TDosPrn():New( "RELAT.TXT" ) // para ir para um arquivo .txt (teste)
    // nste Comando, Liga a Impressora. NÆo Tirar Nunca
    oPrn:StartPage()                    // da Start(inicializa) na p gina.
    oPrn:lZeraBuffer := .T.             // Inibe o Pulo da P gina

    NLINHA := 0

    @ ROWW(),0 SAY CHR(15) OF OPRN

    XVAL := XVALOR

    XTOTEXT := EXTENSO( XVAL )+SPACE(200)

    Select(DbClientes:cAlias)

    @ ROWW(),0 SAY "|"+REPL("-",38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+LEFT(XNOMEEMP,38)+"|" OF OPRN
    @ ROWW(),0 SAY "|CNPJ: "+LEFT(xCgcDir,18)+"Tel: "+LEFT(xTelDir,9)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+LEFT(xEndDir,38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+LEFT(xBaiDir,38)+SPACE(8)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+LEFT(xcidDir,38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+REPL("-",38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+SPACE(38)+"|" OF OPRN
    @ ROWW(),0 SAY "|R E C I B O   D E   P A G A M E N T O |" OF OPRN
    @ ROWW(),0 SAY "|"+SPACE(38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+REPL("-",38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+SPACE(38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+SPACE(38)+"|" OF OPRN
    @ ROWW(),0 SAY "|Recebemos de Sr(a),"+SPACE(19)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+LEFT(DEST_NOME,38)+"|" OF OPRN

    @ ROWW(),0 SAY "|a Importancia de R$ "+TRANSFORM(XVAL,"@E 999,999.99")+SPACE(8)+"|" OF OPRN
    @ ROWW(),0 SAY "|("+LEFT(xtotext,36)+IIF(LEN(ALLTRIM(xtotext))>36," ",")")+"|" OF OPRN

    IF LEN(ALLTRIM(XTOTEXT))>36
       @ ROWW(),0 SAY "|"+SUBS(XTOTEXT,37,37)+IIF(LEN(ALLTRIM(XTOTEXT))>73," ",")")+"|" OF OPRN
    ENDIF

    IF LEN(ALLTRIM(XTOTEXT))>73
       @ ROWW(),0 SAY "|"+SUBS(XTOTEXT,74,37)+IIF(LEN(ALLTRIM(XTOTEXT))>110," ",")")+"|" OF OPRN
    ENDIF

    IF LEN(ALLTRIM(XTOTEXT))>110
       @ ROWW(),0 SAY "|"+SUBS(XTOTEXT,111,37)+IIF(LEN(ALLTRIM(XTOTEXT))>148," ",")")+"|" OF OPRN
    ENDIF

    IF LEN(ALLTRIM(XTOTEXT))>148
       @ ROWW(),0 SAY "|"+SUBS(XTOTEXT,185,37)+IIF(LEN(ALLTRIM(XTOTEXT))>222," ",")")+"|" OF OPRN
    ENDIF

    IF XT = 0
       @ ROWW(),0 SAY "|Referente ao Pagamento da Parcela do  |" OF OPRN
       @ ROWW(),0 SAY "|Titulo No "+STRZERO(XNNF,10)+" "+XCOMP+SPACE(15)+"|" OF OPRN
    ELSE
       @ ROWW(),0 SAY "|Referente ao Pagamento da Parcela de  |" OF OPRN
       @ ROWW(),0 SAY "|Varios Titulos"+SPACE(24)+"|" OF OPRN
    ENDIF

    @ ROWW(),0 SAY "|"+SPACE(38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+SPACE(38)+"|" OF OPRN

    AUX := 9*(MONTH(XDA))-8

    DC := TRIM(SUBSTR('JANEIRO  FEVEREIROMARCO    ABRIL    MAIO     JUNHO    JULHO    AGOSTO   SETEMBRO OUTUBRO  NOVEMBRO DEZEMBRO ',AUX,9))

    CCIDA := ALLTRIM(XCIDDIR)
    CDATA := STRZERO(DAY(XDA),2)+" DE "+ALLTRIM(DC)+" DE "+STRZERO(YEAR(XDA),4)+"."+SPACE(38)

    @ ROWW(),0 SAY "|"+LEFT(CCIDA,38)+SPACE(02)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+LEFT(CDATA,38)+"|" OF OPRN

    @ ROWW(),0 SAY "|"+SPACE(38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+SPACE(38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+REPLICATE("-",38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+LEFT(XNOMEEMP,38)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+REPLICATE("-",38)+"|" OF OPRN

    @ ROWW(),0 SAY "|Operador do Caixa: "+LEFT(XCODVEND,19)+SPACE(17)+"|" OF OPRN
    @ ROWW(),0 SAY "|"+REPLICATE("-",38)+"|" OF OPRN

    @ ROWW(),0 SAY "" OF OPRN
    @ ROWW(),0 SAY "" OF OPRN
    @ ROWW(),0 SAY "" OF OPRN
    @ ROWW(),0 SAY "" OF OPRN
    @ ROWW(),0 SAY "" OF OPRN
    @ ROWW(),0 SAY "" OF OPRN
    @ ROWW(),0 SAY "" OF OPRN
    @ ROWW(),0 SAY "" OF OPRN
    @ ROWW(),0 SAY "" OF OPRN
    @ ROWW(),0 SAY "" OF OPRN

    @ ROWW(),0 SAY CHR(18)  OF OPRN

    oPrn:EndPage()
    oPrn:End()

    //--- imprime no spool do windows, liberando o micro para trabalhar.
    ImpSpool( "RELAT.TXT",, .T. )
    //--- opcionamente pode-se apagar o arquivo passando .t. no 3o. parametro.

    Select(DbApagarReceb:cAlias)
    SET ORDER TO 01

RETURN( XVAL )

STATIC FUNCTION ROWW()

   PUBLIC NLINHA

RETURN( NLINHA := NLINHA+1 )

STATIC FUNCTION Extenso()

    PARAMETER XVLEXT

    PUBLIC VV,     B1,    B2,   B3,   B4,   B5,   TB1,   TB2,   TB3,   ;
           TCENT,  TCRU,  SEPC, SEP1, SEP2, SEP3, EXTB1, EXTB2, EXTB3, ;
           EXTB4,  EXTB5, AA

    PUBLIC EXTN, CONT, P, S, T, VEXTBL //, CEN, DEZ1, DEZ, UNI, DEZ1

    MEMVAR XVALOR

    DECLARE UNI[9], DEZ[9], DEZ1[9], CEN[9]

    UNI[1]  = "UM"
    UNI[2]  = "DOIS"
    UNI[3]  = "TRES"
    UNI[4]  = "QUATRO"
    UNI[5]  = "CINCO"
    UNI[6]  = "SEIS"
    UNI[7]  = "SETE"
    UNI[8]  = "OITO"
    UNI[9]  = "NOVE"
    DEZ[1]  = "ONZE"
    DEZ[2]  = "DOZE"
    DEZ[3]  = "TREZE"
    DEZ[4]  = "QUATORZE"
    DEZ[5]  = "QUINZE"
    DEZ[6]  = "DEZESSEIS"
    DEZ[7]  = "DEZESSETE"
    DEZ[8]  = "DEZOITO"
    DEZ[9]  = "DEZENOVE"
    DEZ1[1] = "DEZ"
    DEZ1[2] = "VINTE"
    DEZ1[3] = "TRINTA"
    DEZ1[4] = "QUARENTA"
    DEZ1[5] = "CINQUENTA"
    DEZ1[6] = "SESSENTA"
    DEZ1[7] = "SETENTA"
    DEZ1[8] = "OITENTA"
    DEZ1[9] = "NOVENTA"
    CEN[1]  = "CEM"
    CEN[2]  = "DUZENTOS"
    CEN[3]  = "TREZENTOS"
    CEN[4]  = "QUATROCENTOS"
    CEN[5]  = "QUINHENTOS"
    CEN[6]  = "SEISCENTOS"
    CEN[7]  = "SETECENTOS"
    CEN[8]  = "OITOCENTOS"
    CEN[9]  = "NOVECENTOS"
    XVALOR  = XVLEXT
    XVALOR  = XVALOR*100

    VV      = STR(XVALOR,14,0)
    B1      = VAL(SUBSTR(VV,1,3))
    B2      = VAL(SUBSTR(VV,4,3))
    B3      = VAL(SUBSTR(VV,7,3))
    B4      = VAL(SUBSTR(VV,10,3))
    B5      = VAL(SUBSTR(VV,13,2))

    TB1    := ""
    TB2    := ""
    TB3    := ""
    TCENT  := ""
    TCRU   := ""
    SEPC   := ""
    SEP1   := ""
    SEP2   := ""
    SEP3   := ""
    EXTB1  := ""
    EXTB2  := ""
    EXTB3  := ""
    EXTB4  := ""
    EXTB5  := ""

    IF B1 # 0

        EXTB1 = BLOCOTRI(B1)

        IF B1 = 1
            TB1 = " BILHAO"
        ENDIF

        IF B1 > 1
            TB1 = " BILHOES"
        ENDIF

        IF B2 = 0 .AND. B3 = 0 .AND. B4 = 0
            TCRU = " DE REAIS"
        ENDIF
    ENDIF

    IF B2 # 0

        EXTB2 = BLOCOTRI(B2)

        IF B2 = 1
            TB2 = " MILHAO"
        ENDIF

        IF B2 > 1
            TB2 = " MILHOES"
        ENDIF

        IF B3 = 0 .AND. B4 = 0
            TCRU = " DE REAIS"
        ENDIF
    ENDIF

    IF B3 # 0
        EXTB3 = BLOCOTRI(B3)
        TB3 = " MIL"
        IF B4 = 0
            TCRU = " REAIS"
        ENDIF
    ENDIF

    IF B4 # 0
        EXTB4 = BLOCOTRI(B4)
        IF B4 = 1 .AND. B1 = 0 .AND. B2 = 0 .AND. B3 = 0
            TCRU = " REAL"
         ELSE
            TCRU = " REAIS"
        ENDIF
    ENDIF

    **SEP3
    IF B1 # 0 .AND. B2 # 0 .AND. B3 # 0 .AND. B4 # 0
        SEP1 = ", "
        SEP2 = ", "
        SEP3 = " E "
     ELSEIF B1 # 0 .AND. B2 # 0 .AND. B3 = 0 .AND. B4 # 0
        SEP1 = ", "
        SEP2 = ", "
        SEP3 = " E "
     ELSEIF B1 # 0 .AND. B2 = 0 .AND. B3 # 0 .AND. B4 # 0
        SEP1 = ", "
     ELSEIF B1 # 0 .AND. B2 = 0 .AND. B3 = 0 .AND. B4 # 0
        SEP1 = " E "
     ELSEIF B1 # 0 .AND. B2 # 0 .AND. B3 = 0 .AND. B4 = 0
        SEP1 = " E "
     ELSEIF B1 # 0 .AND. B2 # 0 .AND. B3 # 0 .AND. B4 = 0
        SEP1 = ", "
    ENDIF

    IF B1 # 0 .AND. B2 = 0 .AND. B3 # 0 .AND. B4 # 0
        SEP3 = " E "
    ENDIF

    IF B1 # 0 .AND. B2 # 0 .AND. B3 # 0 .AND. B4 = 0 .OR. B1 # 0 .AND. B2 = 0 .AND. B3 # 0 .AND. B4 = 0
        SEP2 = " E "
     ELSEIF B1 = 0 .AND. B2 # 0 .AND. B3 # 0 .AND. B4 # 0
        SEP2=", "
     ELSEIF B1 = 0 .AND. B2 # 0 .AND. B3 # 0 .AND. B4 = 0
        SEP2=" E "
    ENDIF

    IF B1 = 0 .AND. B2 # 0 .AND. B3 # 0 .AND. B4 = 0 .OR. B1 = 0 .AND. B2 # 0 .AND. B3 # 0 .AND. B4 # 0 .OR. B1 = 0 .AND. B2 = 0 .AND. B3 # 0 .AND. B4 # 0
        AA=0
        IF B4 # 0
            SEP3 = " E "
        ENDIF
    ENDIF

    IF B5 # 0
        IF XVALOR > 99
            SEPC = " E "
        ENDIF

        EXTB5 = BLOCOTRI(B5)

        IF B5 = 1
            TCENT = " CENTAVO"
         ELSE
            TCENT = " CENTAVOS"
        ENDIF
    ENDIF

    EXTN = EXTB1 + TB1 + SEP1 + EXTB2 + TB2 + SEP2 + EXTB3 + TB3 + SEP3 + EXTB4  + TCRU + SEPC + EXTB5 + TCENT

    IF SUBSTR(EXTN,1,2)="UM"
        EXTN = "H" + EXTN
    ENDIF

    CONT=" "

RETURN(extn)

STATIC FUNCTION BLOCOTRI()

    PARAMETER TRIO

    PUBLIC EXTN, CONT, P, S, T, VEXTBL, CEN, DEZ_2, DEZ, UNI

    IF TRIO > 99
        P := VAL(SUBSTR(STR(TRIO,3,0),1,1))
     ELSE
        P := 0
    ENDIF

    IF TRIO > 9
        S := VAL(SUBSTR(STR(TRIO,3,0),2,1))
     ELSE
        S := 0
    ENDIF

    T := VAL(SUBSTR(STR(TRIO,3,0),3,1))

    VEXTBL := ""

    IF P > 0 .AND. S = 0 .AND. T = 0
        VEXTBL := CEN[P]
     ELSEIF P > 0 .AND. (S # 0 .OR. T # 0)
        IF P = 1
            VEXTBL := "CENTO E "
         ELSE
            VEXTBL := CEN[P] + " E "
        ENDIF

        IF S # 0
            IF T = 0
                VEXTBL := VEXTBL + DEZ_2[S]
             ELSE
                IF S = 1
                   VEXTBL := VEXTBL + DEZ[T]
                 ELSE
                    VEXTBL := VEXTBL + DEZ_2[S] + " E " + UNI[T]
                ENDIF
            ENDIF
         ELSE
            VEXTBL := VEXTBL + UNI[T]
        ENDIF

     ELSEIF P = 0

        IF S # 0
            IF T = 0
                VEXTBL := VEXTBL + DEZ_2[S]
             ELSE
                IF S = 1
                    VEXTBL := VEXTBL + DEZ[T]
                 ELSE
                    VEXTBL := VEXTBL + DEZ_2[S] + " E " + UNI[T]
                ENDIF
            ENDIF
         ELSE
            VEXTBL := VEXTBL + UNI[T]
        ENDIF

    ENDIF

RETURN(VEXTBL)