Conforme já foi exemplificado no artigo https://www.blogadvpl.com/visualizando-dados-do-protheus-no-word-97-a-2010/, irei agora mostrar um exemplo dentro de um contrato (sem uso de macros).
Crie seu arquivo no MS Word e salve-o com a extensão DOT ou DOTX (formato de modelos do MS Word).
Depois de criado o documento vá nas posições desejadas e inclua as variáveis.
Para mostrar os códigos dos campos no documento, siga estas etapas.
Feito isso ao voltar para o documento a variável ficará destacada { DOCVARIABLE suavariavel \* MERGERFORMAT }
Mas só deixe assim quando quiser modificar o documento, caso contrário você não verá o conteúdo final.
Agora criei seu fonte e defina o conteúdo para as variáveis usando a função OLE_SetDocumentVar.
Exemplo:
OLE_SetDocumentVar(hWord,"cContrato",cContrato)
OLE_SetDocumentVar(hWord,"cNome" ,cNome)
OLE_SetDocumentVar(hWord,"cEmpresa" ,cEmpresa )
OLE_SetDocumentVar(hWord,"cDia",cDia)
OLE_SetDocumentVar(hWord,"cCidade",cCidade)
Nome |
Tipo |
Descrição |
Default |
Obrigatório |
hOleLink |
Numérico |
Handle da conexão entre o SmartClient e a aplicação MS-Office. |
|
X |
cVariable |
Array of Record |
Nome da DocVariable presente no arquivo modelo (.dot.) |
|
X |
cValue |
Array of Record |
Conteúdo a ser atribuido na DocVariable descrita no parametro 2 desta função. |
|
X |
Depois que executar a rotina no Protheus o documento ficará assim:
Agora o código fonte, mas só com alguns campos para exemplificar:
#INCLUDE "PROTHEUS.CH" #INCLUDE "MSOLE.CH" #INCLUDE "TOTVS.CH" user function fModWord() // ------------------------------------------------------------------------// // Area de declaração de variaveis // //-------------------------------------------------------------------------// Local cCadastro := OemtoAnsi("Integração com MS-Word") Local aMensagem :={} Local aBotoes :={} Local nOpca := 0 Local nPos := 0 Private cPerg :=Padr("FMODWORD",10) //------------------------------------------------------------------- // Cria/Verifica as perguntas selecionadas //------------------------------------------------------------------- Pergunte(cPerg,.F.) AjustaSX1() AADD(aMensagem,OemToAnsi("Esta rotina irá imprimir um contrato, clique no botão PARAM para informar o PC a") ) AADD(aMensagem,OemToAnsi("ser impressa e os demais parametros.") ) AADD(aBotoes, { 5,.T.,{|| Pergunte(cPerg,.T. )}}) AADD(aBotoes, { 6,.T.,{|o| nOpca := 1,FechaBatch()}}) AADD(aBotoes, { 2,.T.,{|o| FechaBatch() }} ) FormBatch( cCadastro, aMensagem, aBotoes ) /* +------------------------------------------------------------------ | Variaveis utilizadas para parametros +------------------------------------------------------------------ | Variaveis utilizadas para parametros | mv_par01 // Arquivo Modelo | mv_par02 // Pasta de destino do documento | mv_par03 // Método de saida 1 = Impressora 2 = apenas Arquivo +------------------------------------------------------------------- */ If nOpca == 1 PRIVATE hWord := OLE_CreateLink() PRIVATE cArquivo := Alltrim(mv_par01) PRIVATE cPath := AllTrim(mv_par02) PRIVATE nImpress := mv_par03 nPos := Rat("\",cPath) If nPos <= 0 cPath := cPath + "\" EndIF if(!File(cArquivo)) Alert("Arquivo modelo não existe!") return Endif IF Upper( Subst( AllTrim( cArquivo ), - 3 ) ) != Upper( AllTrim( "DOT" ) ) .AND.; Upper( Subst( AllTrim( cArquivo ), - 4 ) ) != Upper( AllTrim( "DOTM" ) ) .AND.; Upper( Subst( AllTrim( cArquivo ), - 4 ) ) != Upper( AllTrim( "DOTX" ) ) MsgAlert( "Arquivo Invalido!"+CRLF+"Extensões permitidas: DOT ou DOTM ou DOTX" ) Return EndIf If (hWord < "0") Alert("MS-WORD nao encontrado nessa maquina!!!") Return Endif Processa({|| Imprimir() },"Aguarde...") EndIf Return Static Function Imprimir() // ------------------------------------------------------------------------// // Area de declaração de variaveis // //-------------------------------------------------------------------------// Local cNome := "João das Coves" Local cEmpresa := "AC/DC Industrias Ltda" Local cDia := "10" Local cCidade := "São Paulo" Local cAdm := "Pedro AC" Local cNumero := "120" Local cCPF := "123.456.789-00" Local nValor := 2530.25 Local cExtenso := Extenso(nValor) Local cContrato := "000123456" // ------------------------------------------------------------------------// // Abre as tabelas para consulta // //-------------------------------------------------------------------------// set softseek off // Inicializa o Ole com o MS-Word BeginMsOle() If (hWord >= "0") IncProc("Processando documento...") OLE_CloseLink(hWord) //fecha o Link com o Word hWord := OLE_CreateLink() OLE_NewFile(hWord,cArquivo) If nImpress==1 OLE_SetProperty( hWord, oleWdVisible, .F. ) OLE_SetProperty( hWord, oleWdPrintBack, .T. ) Else OLE_SetProperty( hWord, oleWdVisible, .T. ) OLE_SetProperty( hWord, oleWdPrintBack, .F. ) EndIf OLE_SaveAsFile(hWord,cPath+"Contrato" + cContrato + ".doc") //OLE_SaveFile(hWord) OLE_SetDocumentVar(hWord,"cContrato",cContrato) OLE_SetDocumentVar(hWord,"cNome" ,cNome) OLE_SetDocumentVar(hWord,"cEmpresa" ,cEmpresa ) OLE_SetDocumentVar(hWord,"cDia" ,cDia) OLE_SetDocumentVar(hWord,"cCidade" ,cCidade) OLE_SetDocumentVar(hWord,"cAdm" ,cAdm) OLE_SetDocumentVar(hWord,"cNumero" ,cNumero) OLE_SetDocumentVar(hWord,"cCPF" ,cCPF) OLE_SetDocumentVar(hWord,"cValor" ,Transform(nValor,"@E 9,999,999.99")) OLE_SetDocumentVar(hWord,"cExtenso" ,cExtenso) //--Atualiza Variaveis OLE_UpDateFields(hWord) OLE_SaveFile ( hWord ) IF nImpress==1 OLE_SetProperty( hWord, '208', .F. ) OLE_PrintFile( hWord, "ALL",,, 1 ) OLE_CloseLink( hWord )//fecha o Link com o Word else Aviso("Atenção", "Alterne para o programa do Ms-Word para visualizar o contrato contrato" + cContrato + ".doc ou clique no botao para fechar.", {"Fechar"}) OLE_SaveAsFile(hWord,cPath+"Contrato" + cContrato + ".doc") Endif Endif EndMsOle() OLE_CloseLink( hWord )//fecha o Link com o Word Return Static Function AjustaSx1() PutSx1(cPerg,"01","Arquivo Modelo ","","","mv_ch1","C",99,0,0,"G","","DIR","","","mv_par01") PutSx1(cPerg,"02","Pasta Destino ","","","mv_ch2","C",99,0,0,"G","","HSSDIR","","","mv_par02") PutSX1(cPerg,"03","Saída ","","","mv_ch3","N",01,0,0,"C","","","","","mv_par03","Impressora", "", "", "","Arquivo") Return
Fonte arquivo modelo
[sdm_download id="3018" fancy="1" new_window="1" button_text="Copiar agora!"]
Bem simples, não?