WORD + DBF + REPLACE + TWORD

Post Reply
EANDRIOLI
Posts: 3
Joined: Fri Feb 03, 2012 12:27 am

WORD + DBF + REPLACE + TWORD

Post by EANDRIOLI »

Amigos, tenho a seguinte rotina que quando manda abrir o Word e um respectivo documento (usando mala direta) e o arquivo CTOWORD.DBF como base de dados da mala direta, nao mostra os dados do arquivo .DBF (atualizados). Dá a impressao que o .DBF não é localizado. Todos _/path sao passados corretamente se nao me engano. Uma observação que faço é que quando abro um desses documentos com mala direta pelo Word via Windows, ele pergunta na tela:

--------------------------------------------------------------------------------------------
"Quando este documento for aberto, o seguinte comando SQL será executado:

SELECT * FROM CTOWORD

Os dados do banco de dados serão inseridos no documento. Deseja continuar?
(SIM) (NÃO)
--------------------------------------------------------------------------------------------

... clicando em SIM o Word abre o arquivo documento com os dados do CTOWORD.DBF mesclados corretamente. Uso a versao 2003 do Word e lembro que num Word de versao anterior (2000) isso nao ocorria.

* outra observação: uso o Xharbour 0.99.70 e nao gostaria de utilizar a classe TWORD e a FIVEWIN por muitas mudanças que terei de fazer.

Segue o fonte:

Code: Select all

IF LASTKEY() = -7
   * obtendo vars para o contrato no Word...
   WD_CPF=""
   TCODY=CLIENTE
   CLI->(DBSEEK(TCODY))
   WD_LOC   = CLI->NOME
   WD_PJPF  = CLI->PESSOA
   IF WD_PJPF    = "F"
      WD_CPF = ALLTRIM(TRANS(CLI->CPF_CGC,"@R 999.999.999-99"))
   ELSEIF WD_PJPF= "J"
      WD_CPF = ALLTRIM(TRANS(CLI->CPF_CGC,"@R 99.999.999/9999-99"))
   ENDIF
   WD_ENDER = CLI->ENDERECO
   WD_BAI   = CLI->BAIRRO
   WD_CEP   = CLI->CEP
   WD_CID   = CLI->CIDADE
   WD_UF    = CLI->UF
   WD_FONE  = CLI->FONE
   WD_IERG  = CLI->RG

   TCODX=VEICULO
   VEI->(DBSEEK(TCODX))
   WD_PLACA = SUBST(VEI->PLACA,1,3)+"-"+SUBST(VEI->PLACA,4,4)

   * Memorizando a Marca\Fabricante...
   IF     VEI->marca='1'
      fabrica='VOLKSWAGEM'
   ELSEIF VEI->marca='2'
      fabrica='CHEVROLET '
   ELSEIF VEI->marca='3'
      fabrica='FIAT      '
   ELSEIF VEI->marca='4'
      fabrica='FORD      '
   ELSEIF VEI->marca='5'
      fabrica='MOTOS     '
   ELSEIF VEI->marca='6'
      fabrica='OUTROS    '
   ELSEIF VEI->marca='7'
      fabrica='RENAULT   '
   ELSEIF VEI->marca='8'
      fabrica='HONDA     '
   ELSEIF VEI->marca='9'
      fabrica='TOYOTA    '
   ELSE
      fabrica=''
   ENDIF

   WD_MARCA = fabrica
   WD_VEIC  = VEI->MODELO
   WD_TIPO  = "PASSEIO"
   WD_EMISS = DTOC(DATACAD)
   WD_CHASSI= VEI->CHASSIS
   WD_DTSAI = DTOC(DATASAI)
   WD_HSSAI = HORASAI
   WD_ODOME = STR(ODOMETR1)
   WD_DTDEVO= DTOC(PREVIDT)

   TCODM=MOTORIST
   CLI->(DBSEEK(TCODM))
   WD_MOTORI= CLI->NOME
   WD_IDENTI= CLI->RG
   WD_EMISI = "**"
   WD_DTISI = "**"
   WD_HABILI= CLI->CNH
   WD_EMIH  = "**"
   WD_DTEMH = "**"
   WD_QTDIA = STR(QTDIARIA)
   WD_VLRDIA= ALLTRIM(TRANS(DIARIA,"@E 999,999.99"))
   WD_SINAL = ALLTRIM(TRANS(SINAL,"@E 999,999.99"))
   WD_DESCO = ALLTRIM(TRANS(DESCONTO,"@E 999,999.99"))
   WD_KMEXCE= ALLTRIM(TRANS(KMEXCEVAL,"@E 999,999.99"))
   WD_TOTAL = ALLTRIM(TRANS(TOTAL,"@E 999,999.99"))
   WD_FOPAG = OBS1
   
   * Abrindo doc para o word mala-direta...
   // cCurDir:= CurDrive() + ":\" + CurDir()
   SELE 99
   USE C:\LOC\CTOWORD ALIAS CTOWO
   ZAP
   DBAPPEND()
   REPLACE LOCATARIO  WITH WD_LOC
   REPLACE CPF_CNPJ   WITH WD_CPF
   REPLACE ENDERECO   WITH WD_ENDER
   REPLACE BAIRRO     WITH WD_BAI
   REPLACE CEP        WITH WD_CEP
   REPLACE CIDADE     WITH WD_CID
   REPLACE UF         WITH WD_UF
   REPLACE FONE       WITH WD_FONE
   REPLACE IE_RG      WITH WD_IERG
   REPLACE PLACA      WITH WD_PLACA
   REPLACE MARCA      WITH WD_MARCA
   REPLACE VEICULO    WITH WD_VEIC
   REPLACE TIPO       WITH WD_TIPO
   REPLACE EMISSAO    WITH WD_EMISS
   REPLACE CHASSI     WITH WD_CHASSI
   REPLACE DT_SAIDA   WITH WD_DTSAI
   REPLACE HS_SAIDA   WITH WD_HSSAI
   REPLACE ODOMETRO   WITH WD_ODOME
   REPLACE DT_DEVOLU  WITH WD_DTDEVO
   REPLACE MOTORI     WITH WD_MOTORI
   REPLACE IDENTIF    WITH WD_IDENTI
   REPLACE EMISSORI   WITH WD_EMISI
   REPLACE DT_EMIS    WITH WD_DTISI
   REPLACE HABILI     WITH WD_HABILI
   REPLACE EMISSORH   WITH WD_EMIH
   REPLACE DT_EMIH    WITH WD_DTEMH
   REPLACE QT_DIARIA  WITH WD_QTDIA
   REPLACE VLR_DIARIA WITH WD_VLRDIA
   REPLACE SINAL      WITH WD_SINAL
   REPLACE DESCONTO   WITH WD_DESCO
   REPLACE KMEXCEVAL  WITH WD_KMEXCE
   REPLACE TOTAL      WITH WD_TOTAL
   REPLACE FORMAPAG   WITH WD_FOPAG
   DBCOMMIT()
   CLOSE CTOWO

   // abrindo arquivo no WinWord com os dados gravados acima (Mala Direta)...
   COPY FILE C:\LOC\ENTRLOBK.DOC TO C:\LOC\ENTREGA.DOC   // usando o Backup...
   COPY FILE C:\LOC\CHEKLOBK.DOC TO C:\LOC\CHEKLIST.DOC  // usando o Backup...
   COPY FILE C:\LOC\NPLOCBK.DOC  TO C:\LOC\NPLOC.DOC     // usando o Backup...
   COPY FILE C:\LOC\TERMLOBK.DOC TO C:\LOC\TERMOLOC.DOC  // usando o Backup...
   cARQ2="C:\LOC\ENTREGA.DOC"
   cARQ3="C:\LOC\CHEKLIST.DOC"
   cARQ4="C:\LOC\NPLOC.DOC"
   cARQ5="C:\LOC\TERMOLOC.DOC"

   COPY FILE C:\LOC\CTOLOCBK.DOC TO C:\LOC\CTOLOC.DOC    // usando o Backup...
   cARQ="C:\LOC\CTOLOC.DOC"

   TRY
      oWord := GetActiveObject(  "Word.Application" )
   CATCH
      TRY
         oWord := CreateObject( "Word.Application" )  
      CATCH
         MsgBOX1("NÆo foi poss¡vel achar o Word instalado!!!")
         RETURN
      END
   END
   * abrindo documentos complementares...
   oDoc2 := oWord:Documents:Open(cARQ2)  //ABRE O WORD
   oDoc3 := oWord:Documents:Open(cARQ3)  //ABRE O WORD
   oDoc4 := oWord:Documents:Open(cARQ4)  //ABRE O WORD
   oDoc5 := oWord:Documents:Open(cARQ5)  //ABRE O WORD
   * abrindo o contrato principal com Mala Direta....

   * oDoc := oWord:Replace('[CAMPO]',cARQ)

   oDoc := oWord:Documents:Open(cARQ)    //ABRE O WORD

   oWord:visible:= .T.    // para visualizar...
   oWord:WindowState:=1   // maximizar
   * oWord:PrintOut()     // para imprimir direto...

   SELE LOC
ENDIF

 
Uma ultima coisa amigos:
Seu eu uso o comando na linha: oDoc := oWord:Replace('[CAMPO]',cARQ)
ocorrem erros na execucao do programa. Há algum outro comando que faça a substituição _ no arquivo documento???

Obrigado!!!

Erasmo
Post Reply