Página 1 de 1

WORD e DBF

Enviado: 18 Jan 2012 23:22
por EANDRIOLI
Buenas amigos, voltei...

Utilizo o Word e um arquivo .DBF para gerar arquivos documentos com dados mesclados do banco de dados.

Tenho um problema relacionado em que quando o Word é aberto com um arquivo que é passado pelo programa e esse arquivo .doc está "linkado" no modo mala-direta a um arquivo .dbf.

Ocorre que o Word é aberto naturalmente, o documento .doc é aberto naturalmente, mas o conteudo dos campos oriundos do .dbf dentro do documento, não são atualizados. Me parece ser um problema com a versao do Word que utilizo (2003), parece que na versao anterior do Word (2000/97) isso nao ocorria.

Num teste, se pelo Windows eu abro o Word e após o documento (.doc), o Word mostra a mensagem:

"Quando este documento for aberto, o seguinte comando SQL será executado:
SELECT * FROM CTOWORD
Os dados do banco de dados serao inseridos no documento. Deseja continuar?"

Clicando em SIM o arquivo documento é mesclado com os dados do arquivo .dbf corretamente.

A seguir vai parte do .prg que utilizo e gostaria de saber onde está o problema:

Código: Selecionar todos

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:Documents:Open(cARQ)    //ABRE O WORD
   oWord:visible:= .T.    // para visualizar...
   oWord:WindowState:=1   // maximizar
   * oWord:PrintOut()     // para imprimir direto...

   SELE LOC
ENDIF
Restando apenas agradecer aos Mestres,

Atenciosamente, ERASMO.