58855577 Integracao Protheus x Word[1]

Embed Size (px)

Citation preview

  • Integrao Protheus x MS Word

    Para efetuar a integrao entre um documento MS Word e o Protheus devemos criar um modelo (.dot) no formato desejado e incluir as devidas variveis.Antes, porm ser til configurarmos o Word de forma a visualizarmos as variveis includas.

    1. Em Ferramentas \ Opes selecione a opo

    Obs. Ao trmino do desenvolvimento no esquecer de demarcar a opo de cdigo de campos

    Para exibio das variveis, selecionar o campo cdigo de campos.

    Ser til tambm a seleo do campo indicadores para a exibio dos indicadores no caso de utilizao de tabelas dinmicas, em que sero necessrias a implantao de macros.

  • 2. Para a incluso das variveis clique em Inserir \ Campo.

    Obs.: Repita o passo 2 para todas as partes variveis do documento.

    Selecione em categorias a opo automao de documento e em nomes de campos a opo DocVariable

    Digite o nome da varivel que dever ser referenciada no rdmake.E selecione o boto OK.

  • 3. Para a incluso do indicador.

    Aps a incluso de todas as variveis 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 atravs da funo OLE_ExecuteMacro(), e clique no boto Adicionar

  • Obs. Repita a operao 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 atravs do menu Arquivo \ Importar, em seguida selecione o arquivo (.bas) e clique no boto abrir. (conforme demonstrado nas prximas 3 imagens.

    O indicador foi inserido

  • 5. Aps esta a importao da macro, clique no boto salvar, feche o editor e salve o modelo do documento (.dot)

    Obs. Repita as operaes 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, wcNroLinhaLocal waCod := {}Local waDescr := {}Local waVTot := {}Local nAuxTot := 0Local nKLocal 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 10aAdd(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 wordhWord := OLE_CreateLink()OLE_NewFile(hWord, cPathDot )

    //Montagem das variaveis do cabecalhoOLE_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_cod10for 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 WordIf 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 )

    EndifReturn()

  • Modelo de macro (.BAS)Sub tabitens()

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

    Selection.GoTo What:=wdGoToBookmark, Name:="tabitens"Selection.Find.ClearFormattingWith Selection.Find .Text = "" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = FalseEnd 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

    Integrao Protheus x MS WordObs. Ao trmino do desenvolvimento no esquecer de demarcar a opo de cdigo de campos