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
Atenciosamente, ERASMO.
