Você está na página 1de 8

Integração Protheus x MS Word

Para efetuar a integração entre um documento MS Word e o Protheus devemos criar um modelo
(.dot) no formato desejado e incluir as devidas variáveis.
Antes, porém será útil configurarmos o Word de forma a visualizarmos as variáveis incluídas.

1. Em Ferramentas \ Opções selecione a opção

Para exibição das


variáveis, selecionar o
campo ‘código de
campos’.

Será útil também a


seleção do campo
‘indicadores’ para a
exibição dos indicadores
no caso de utilização de
tabelas dinâmicas, em que
serão necessárias a
implantação de macros.

Obs. Ao término do desenvolvimento não esquecer de demarcar a opção de ‘código de campos’


2. Para a inclusão das variáveis clique em Inserir \ Campo.

Selecione em ‘categorias’
a opção ‘automação de
documento’ e em ‘nomes
de campos’ a opção
‘DocVariable’

Digite o nome da variável


que deverá ser
referenciada no rdmake.
E selecione o botão OK.

Obs.: Repita o passo 2 para todas as partes variáveis do documento.


3. Para a inclusão do indicador.

Após a inclusão de todas as variáveis no sistema,


insira um indicador na tabela para iniciarmos o
tratamento da macro. Posicione o cursor na ultima
coluna da tabela e clique em ‘inserir \ indicador...’

Nomeie o indicador, com o mesmo nome da macro que


será criada no documento e acionada na rotina Protheus
através da função OLE_ExecuteMacro(), e clique no
botão ‘Adicionar’
O indicador foi inserido

Obs. Repita a operação 3 para todas as tabelas a serem inseridas dinamicamente.

4. Para importar uma macro, selecione ‘Ferramentas \ Macro \ Editor do Visual Basic’ para
acionar o editor e a importe através do menu ‘Arquivo \ Importar’, em seguida selecione o
arquivo (.bas) e clique no botão abrir. (conforme demonstrado nas próximas 3 imagens.
5. Após esta a importação da macro, clique no botão salvar, feche o editor e salve o modelo
do documento (.dot)

Obs. Repita as operações 4 e 5 para todas as macros existentes.


Modelo de rotina (.PRW)
#include "rwmake.ch"

User Function intword()


@ 96,012 TO 250,400 DIALOG oDlg TITLE OemToAnsi("Integracao com MS-Word")
@ 08,005 TO 048,190
@ 18,010 SAY OemToAnsi("Impressao de orcamentos")

@ 56,130 BMPBUTTON TYPE 1 ACTION WordImp()


@ 56,160 BMPBUTTON TYPE 2 ACTION Close(oDlg)

ACTIVATE DIALOG oDlg CENTERED

Return()

Static Function WordImp()


Local wcOrcam, wcData, wcCliente, wcNroLinha
Local waCod := {}
Local waDescr := {}
Local waVTot := {}
Local nAuxTot := 0
Local nK
Local cPathDot := "C:\PROTHEUS\AP_PDV\DOT\INTWORD.DOT"
Private hWord

Close(oDlg)

wcNumero := "121212"
wcData := AllTrim(Str(Day(dDataBase),2))+;
' de '+AllTrim(MesExtenso(dDataBase))+' de '+;
AllTrim(Str(Year(dDataBase),4))
wcCliente := "CLIENTE TESTE INTEGRACAO WORD"

for nK := 1 to 10
aAdd(waCod,"PR"+strZero(nK,3))
aAdd(waDescr,"PRODUTO NRO "+strZero(nK,3))
aAdd(waVTot,Transform(nK*100,"@E 999,999,999.99"))
nAuxTot += nK*100
next
//Conecta ao word
hWord := OLE_CreateLink()
OLE_NewFile(hWord, cPathDot )

//Montagem das variaveis do cabecalho


OLE_SetDocumentVar(hWord, 'Prt_numero', wcNumero)
OLE_SetDocumentVar(hWord, 'Prt_Data', wcData)
OLE_SetDocumentVar(hWord, 'Prt_Cliente', wcCliente)
OLE_SetDocumentVar(hWord, 'Prt_nroitens',str(Len(waCod))) //variavel para identificar o numero total de linhas na parte variavel
//Sera utilizado na macro do documento para execucao do for next

//Montagem das variaveis dos itens. No documento word estas variaveis serao criadas //dinamicamente da seguinte forma:
//prt_cod1, prt_cod2 ... prt_cod10
for nK := 1 to Len(waCod)
OLE_SetDocumentVar(hWord,"Prt_Cod"+AllTrim(Str(nK)),waCod[nK])
OLE_SetDocumentVar(hWord,"Prt_Descr"+AllTrim(Str(nK)),waDescr[nK])
OLE_SetDocumentVar(hWord,"Prt_VTot"+AllTrim(Str(nK)),waVTot[nK])
next

OLE_ExecuteMacro(hWord,"tabitens")

OLE_SetDocumentVar(hWord, 'prt_totorc', Transform(nAuxTot,"@E 999,999,999.99"))

OLE_UpdateFields(hWord) // Atualizando as variaveis do documento do Word


If MsgYesNo("Imprime o Documento ?")
Ole_PrintFile(hWord,"ALL",,,1)
EndIf

If MsgYesNo("Fecha o Word e Corta o Link ?")


OLE_CloseFile( hWord )
OLE_CloseLink( hWord )
Endif
Return()
Modelo de macro (.BAS)
Sub tabitens()

' Item Macro


' Macro recorded 31/03/2005 by Adalberto
'
Dim nItens As Integer
Dim Campo As String

Selection.GoTo What:=wdGoToBookmark, Name:="tabitens"


Selection.Find.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With

nItens = Val(ActiveDocument.Variables.ITEM("prt_nroitens").Value)

For K = 1 To nItens

' Insere uma nova linha na tabela


Selection.MoveRight Unit:=wdCell

' Insere o campo Codigo do Produto


Campo = "DOCVARIABLE prt_cod" & Trim(Str(K))
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:=Campo, PreserveFormatting:=True

' Insere o campo Descricao do Produto


Selection.MoveRight
Campo = "DOCVARIABLE prt_descr" & Trim(Str(K))
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:=Campo, PreserveFormatting:=True

' Insere o campo Total


Selection.MoveRight
Campo = "DOCVARIABLE prt_vtot" & Trim(Str(K))
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:=Campo, PreserveFormatting:=True

Next

End Sub

Você também pode gostar