Árvore de páginas

Assunto

Produto:

ADVPL

Versões:

P11 e P12

Ocorrência:

Integração Protheus x MS Word

Ambiente:

P11

Passo a passo:

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

Observações:

Integração MS Word® -- 38453