Criando um contrato em MS Word e integrando com o Protheus
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.
-
- Clique em Arquivo> Opções > Avançado.
- Em Exibir conteúdo do documento, marque Mostrar códigos de campo e… e clique em OK.
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
#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
Bem simples, não?
Deixe uma resposta