Árvore de páginas

Produto:

Microsiga Protheus

Ocorrência:

Procedimentos para Impressão de Contratos via Word.

Ambiente:

Protheus P12

Passo a passo:

Exemplo realizado com Contrato de Venda (OGA290).

1 - Acessar Gestão de Agronegócio > Atualização >> Originação >>> Controle de Vendas >>>> Contrato de Venda (OGA290).

Ir em Outras Ações > Mais ações... >> Imprimir Word. Será apresentada a janela de impressão do word.


Na janela de impressão word, possui as opções: Parâmetros, Impr. Variáveis e Impr. Documento.

  1. Parâmetros: informar o local do arquivo word, informar o local para salvar a impressão e se caso a opção permite execução de macros, informar qual a macro ser executada.
  2. Impr. Variáveis: imprime em lista as variáveis disponíveis para configuração do documento word para a impressão. Lista de variáveis baseada na tabela NJR - Contratos (Modelo Clássico).
  3. Impr. Documento: realiza a impressão do documento word conforme sua configuração.





2 - Criar documento word para a impressão.

Para que seja possível a impressão do documento é necessário informar as variáveis para cada informação desejada.

Criar um campo do tipo DocVariable: no word ir em "Inserir > Partes Rápidas >> Campo."


Incluir as variáveis conforme o modelo do documento word a ser criado.


Para visualizar as variáveis no documento word, é necessário selecionar o documento por completo, clicar com o botão direito do mouse e clicar na opção "Alternar códigos de campo".


3 - Criar Macros no documento.

No inicio do documento é de extrema importância criar as variáveis cParam01 e cParam02.

Exemplo:



Essas variáveis controlam as macros no word, identificando conteúdo e quantidade de linhas para a criação de tabela.

  • A variável cParam01 controla conteúdo para a tabela.
  • A variável cParam02 controla quantidade de linhas para a tabela.

As variáveis de controle devem ser criadas no inicio do documento word, como padrão, possui tamanho igual a 1 (um) e com cor da folha utilizada.




Após a criação das variáveis de controle, devemos criar as macros que serão utilizadas.


Macros Word
Sub Atualiza()
    ActiveDocument.Fields.Update            ' Atualiza os campos do documento
    Selection.WholeStory
    Selection.Fields.ToggleShowCodes        'Mostra conteudo var doc
    Selection.HomeKey Unit:=wdStory         'Posiciona o cursor até o inicio do documento
    Application.WindowState = wdWindowStateMaximize  'Maximiza janela do word
End Sub

'PARA NÃO UTILIZAR A MACRO DEVE SER CRIADA A FUNCAO COM O NOME DA MACRO VAZIA
'POIS O EXECMACRO NAO RETORNA SE EXISTE OU NAO
Sub SEMMACRO()  'COLOCAR O NOME DA MACRO
   'MACROS EXISTENTES
   'TABFINAN = ABA FINANCEIRO   NN7
   'TABCADEN = ABA CADENCIA     NNY
   'TABCREDI = ABA CESSAO DE CREDITO NNG
   'TABCORRE = ABA CORRETORAS   NNF
End Sub

'REALIZA A IMPRESSAO DA TABELA FINANCEIRA DO CONTRATO NN7
Sub TABFINAN()
    'Variaveis de controle
    Dim nPos As Integer
    Dim cMemo As String
    Dim cText As String
    Dim nContador As Integer
    Dim lEof As Boolean
    Dim nLin As Integer
    Dim nCol As Integer
    Dim nReg As Integer
    
    ActiveDocument.ActiveWindow.View.FieldShading = _
                   wdFieldShadingWhenSelected
    
    'Conta a variavel cMemo que retorna da rotina OGRR342
    nContador = ActiveDocument.Fields.Count
    If nContador >= 1 Then
            With ActiveDocument.Fields(1)
                .Update
                cMemo = Trim(.Result.Text)
                .Result.Text = ""
            End With
            With ActiveDocument.Fields(2)
                .Update
                nReg = Val(Trim(.Result.Text))
                .Result.Text = ""
            End With
    End If
    
    'Informa que será impresso na seção 2 [Count:=2]
    Selection.GoTo What:=wdGoToSection, Which:=wdGoToFirst, Count:=2, Name:=""
    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
    
    'Criando a tabela
    Set myTable = _
    ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=nReg, _
        NumColumns:=8)
        
    myTable.AutoFormat Format:=wdTableFormatProfessional, _
        ApplyBorders:=True, ApplyShading:=True, ApplyFont:=False, ApplyColor:=True _
        , ApplyHeadingRows:=False, ApplyLastRow:=False, ApplyFirstColumn:=False, _
        ApplyLastColumn:=False, AutoFit:=True
  
    
    'alinha o texto ao meio horizontal e vertical
    myTable.Select
        Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
    
    'a soma InchesToPoints não devem passar 6.6     - AJUSTA O TAMANHO DAS COLUNAS
    myTable.Columns(1).Width = InchesToPoints(0.5)
    myTable.Columns(2).Width = InchesToPoints(0.8)
    myTable.Columns(3).Width = InchesToPoints(1.1)
    myTable.Columns(4).Width = InchesToPoints(0.7)
    myTable.Columns(5).Width = InchesToPoints(0.8)
    myTable.Columns(6).Width = InchesToPoints(0.4)
    myTable.Columns(7).Width = InchesToPoints(1)
    myTable.Columns(8).Width = InchesToPoints(0.4)
    
    'cabeçalho da tabela - DEVE SER IMPRESSO TODAS AS COLUNAS AQUI DESCRITAS
    myTable.Columns(1).Cells(1).Range.Text = "PARC"
    myTable.Columns(2).Cells(1).Range.Text = "VENCTO"
    myTable.Columns(3).Cells(1).Range.Text = "VALOR"
    myTable.Columns(4).Cells(1).Range.Text = "BANCO"
    myTable.Columns(5).Cells(1).Range.Text = "AGENCIA"
    myTable.Columns(6).Cells(1).Range.Text = "DG"
    myTable.Columns(7).Cells(1).Range.Text = "CONTA"
    myTable.Columns(8).Cells(1).Range.Text = "DG"
                   
    'Alinha o conteudo das linhas e colunas
    myTable.Columns(1).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(2).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(3).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
    myTable.Columns(4).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(5).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(6).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(7).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(8).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    
    'Trata estilo da tabela
    '[primeira linha alinhado ao centro/negrito/cor]
    myTable.Rows(1).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.Font.Bold = wdToggle
    'Altera_Fundo
    
    'Passar informacoes de coluna e linha
    '[qual coluna e linha que deve comecar a preencher]
    lEof = True
    nCol = 1
    nLin = 2
    
    'Realiza a impressao do campo memo que a rotina OGRR342 transmite
    While (lEof)
        nPos = InStr(cMemo, "#*")
        cText = Mid(cMemo, 1, nPos - 1)
        cMemo = Mid(cMemo, nPos + 2)
        
        'Imprime o texto na coluna e linha informada
        myTable.Cell(nLin, nCol).Range.Text = cText
        
        'Soma a coluna ate chegar na coluna 8 [definido pela rotina OGRR342]
        'Se for maior que 8 entra no IF para somar a linha
        nCol = nCol + 1
        If nCol > 8 Then
            nCol = 1
            nLin = nLin + 1
        End If
        
        'Se imprimiu tudo sai do while e termina a impressao
        If IsEmpty(cMemo) Or nLin > (nReg) Then
            lEof = False
        End If
    Wend
End Sub

'REALIZA A IMPRESSAO DA TABELA CADENCIA DO CONTRATO NNY
Sub TABCADEN()
    'Variaveis de controle
    Dim nPos As Integer
    Dim cMemo As String
    Dim cText As String
    Dim nContador As Integer
    Dim lEof As Boolean
    Dim nLin As Integer
    Dim nCol As Integer
    Dim nReg As Integer
    
    ActiveDocument.ActiveWindow.View.FieldShading = _
                   wdFieldShadingWhenSelected
    
    'Conta a variavel cMemo que retorna da rotina OGRR342
    nContador = ActiveDocument.Fields.Count
    If nContador >= 1 Then
            With ActiveDocument.Fields(1)
                .Update
                cMemo = Trim(.Result.Text)
                .Result.Text = ""
            End With
            With ActiveDocument.Fields(2)
                .Update
                nReg = Val(Trim(.Result.Text))
                .Result.Text = ""
            End With
    End If
    
    'Informa que será impresso na seção 3 [Count:=3]
    Selection.GoTo What:=wdGoToSection, Which:=wdGoToFirst, Count:=3, Name:=""
    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
    
    'Criando a tabela
    Set myTable = _
    ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=nReg, _
        NumColumns:=5)
        
    myTable.AutoFormat Format:=wdTableFormatProfessional, _
        ApplyBorders:=True, ApplyShading:=True, ApplyFont:=False, ApplyColor:=True _
        , ApplyHeadingRows:=False, ApplyLastRow:=False, ApplyFirstColumn:=False, _
        ApplyLastColumn:=False, AutoFit:=True
  
    
    'alinha o texto ao meio horizontal e vertical
    myTable.Select
        Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
    
    'a soma InchesToPoints não devem passar 6.6     - AJUSTA O TAMANHO DAS COLUNAS
    myTable.Columns(1).Width = InchesToPoints(0.8)
    myTable.Columns(2).Width = InchesToPoints(0.8)
    myTable.Columns(3).Width = InchesToPoints(1.1)
    myTable.Columns(4).Width = InchesToPoints(1.9)
    myTable.Columns(5).Width = InchesToPoints(1.9)

    
    'cabeçalho da tabela - DEVE SER IMPRESSO TODAS AS COLUNAS AQUI DESCRITAS
    myTable.Columns(1).Cells(1).Range.Text = "DT INI"
    myTable.Columns(2).Cells(1).Range.Text = "DT FIN"
    myTable.Columns(3).Cells(1).Range.Text = "QUANTIDADE"
    myTable.Columns(4).Cells(1).Range.Text = "ENT ORIGEM"
    myTable.Columns(5).Cells(1).Range.Text = "ENT DESTINO"

                   
    'Alinha o conteudo das linhas e colunas
    myTable.Columns(1).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(2).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(3).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
    myTable.Columns(4).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
    myTable.Columns(5).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft

    myTable.Rows(1).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.Font.Bold = wdToggle
    
    
    'Passar informacoes de coluna e linha
    '[qual coluna e linha que deve comecar a preencher]
    lEof = True
    nCol = 1
    nLin = 2
    
    'Realiza a impressao do campo memo que a rotina OGRR342 transmite
    While (lEof)
        nPos = InStr(cMemo, "#*")
        cText = Mid(cMemo, 1, nPos - 1)
        cMemo = Mid(cMemo, nPos + 2)
        
        'Imprime o texto na coluna e linha informada
        myTable.Cell(nLin, nCol).Range.Text = cText
        
        'Soma a coluna ate chegar na coluna 8 [definido pela rotina OGRR342]
        'Se for maior que 8 entra no IF para somar a linha
        nCol = nCol + 1
        If nCol > 5 Then
            nCol = 1
            nLin = nLin + 1
        End If
        
        'Se imprimiu tudo sai do while e termina a impressao
        If IsEmpty(cMemo) Or nLin > (nReg) Then
            lEof = False
        End If
    Wend
End Sub

'REALIZA A IMPRESSAO DA TABELA CORRETORAS DO CONTRATO NNF
Sub TABCORRET()
    'Variaveis de controle
    Dim nPos As Integer
    Dim cMemo As String
    Dim cText As String
    Dim nContador As Integer
    Dim lEof As Boolean
    Dim nLin As Integer
    Dim nCol As Integer
    Dim nReg As Integer
    
    ActiveDocument.ActiveWindow.View.FieldShading = _
                   wdFieldShadingWhenSelected
    
    'Conta a variavel cMemo que retorna da rotina OGRR342
    nContador = ActiveDocument.Fields.Count
    If nContador >= 1 Then
            With ActiveDocument.Fields(1)
                .Update
                cMemo = Trim(.Result.Text)
                .Result.Text = ""
            End With
            With ActiveDocument.Fields(2)
                .Update
                nReg = Val(Trim(.Result.Text))
                .Result.Text = ""
            End With
    End If
    
    'Informa que será impresso na seção 4 [Count:=4]
    Selection.GoTo What:=wdGoToSection, Which:=wdGoToFirst, Count:=4, Name:=""
    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
    
    'Criando a tabela
    Set myTable = _
    ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=nReg, _
        NumColumns:=4)
        
    myTable.AutoFormat Format:=wdTableFormatProfessional, _
        ApplyBorders:=True, ApplyShading:=True, ApplyFont:=False, ApplyColor:=True _
        , ApplyHeadingRows:=False, ApplyLastRow:=False, ApplyFirstColumn:=False, _
        ApplyLastColumn:=False, AutoFit:=True
  
    
    'alinha o texto ao meio horizontal e vertical
    myTable.Select
        Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
    
    'a soma InchesToPoints não devem passar 6.6     - AJUSTA O TAMANHO DAS COLUNAS
    myTable.Columns(1).Width = InchesToPoints(2.2)
    myTable.Columns(2).Width = InchesToPoints(2.2)
    myTable.Columns(3).Width = InchesToPoints(1.2)
    myTable.Columns(4).Width = InchesToPoints(1)

    
    'cabeçalho da tabela - DEVE SER IMPRESSO TODAS AS COLUNAS AQUI DESCRITAS
    myTable.Columns(1).Cells(1).Range.Text = "ENTIDADE"
    myTable.Columns(2).Cells(1).Range.Text = "CORRETORA"
    myTable.Columns(3).Cells(1).Range.Text = "VLR COMISSÃO"
    myTable.Columns(4).Cells(1).Range.Text = "% COMISSÃO"

                   
    'Alinha o conteudo das linhas e colunas
    myTable.Columns(1).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
    myTable.Columns(2).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
    myTable.Columns(3).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
    myTable.Columns(4).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphRight

    myTable.Rows(1).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.Font.Bold = wdToggle
    'Altera_Fundo
    
    'Passar informacoes de coluna e linha
    '[qual coluna e linha que deve comecar a preencher]
    lEof = True
    nCol = 1
    nLin = 2
    
    'Realiza a impressao do campo memo que a rotina OGRR342 transmite
    While (lEof)
        nPos = InStr(cMemo, "#*")
        cText = Mid(cMemo, 1, nPos - 1)
        cMemo = Mid(cMemo, nPos + 2)
        
        'Imprime o texto na coluna e linha informada
        myTable.Cell(nLin, nCol).Range.Text = cText
        
        'Soma a coluna ate chegar na coluna 8 [definido pela rotina OGRR342]
        'Se for maior que 8 entra no IF para somar a linha
        nCol = nCol + 1
        If nCol > 4 Then
            nCol = 1
            nLin = nLin + 1
        End If
        
        'Se imprimiu tudo sai do while e termina a impressao
        If IsEmpty(cMemo) Or nLin > (nReg) Then
            lEof = False
        End If
    Wend
End Sub

'REALIZA A IMPRESSAO DA TABELA CESSAO DE CREDITO NNG
Sub TABCESSC()
    'Variaveis de controle
    Dim nPos As Integer
    Dim cMemo As String
    Dim cText As String
    Dim nContador As Integer
    Dim lEof As Boolean
    Dim nLin As Integer
    Dim nCol As Integer
    Dim nReg As Integer
    
    ActiveDocument.ActiveWindow.View.FieldShading = _
                   wdFieldShadingWhenSelected
    
    'Conta a variavel cMemo que retorna da rotina OGRR342
    nContador = ActiveDocument.Fields.Count
    If nContador >= 1 Then
            With ActiveDocument.Fields(1)
                .Update
                cMemo = Trim(.Result.Text)
                .Result.Text = ""
            End With
            With ActiveDocument.Fields(2)
                .Update
                nReg = Val(Trim(.Result.Text))
                .Result.Text = ""
            End With
    End If
    
    'Informa que será impresso na seção 5 [Count:=5]
    Selection.GoTo What:=wdGoToSection, Which:=wdGoToFirst, Count:=5, Name:=""
    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
    
    'Criando a tabela
    Set myTable = _
    ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=nReg, _
        NumColumns:=8)
        
    myTable.AutoFormat Format:=wdTableFormatProfessional, _
        ApplyBorders:=True, ApplyShading:=True, ApplyFont:=False, ApplyColor:=True _
        , ApplyHeadingRows:=False, ApplyLastRow:=False, ApplyFirstColumn:=False, _
        ApplyLastColumn:=False, AutoFit:=True
  
    
    'alinha o texto ao meio horizontal e vertical
    myTable.Select
        Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
    
    'a soma InchesToPoints não devem passar 6.6     - AJUSTA O TAMANHO DAS COLUNAS
    myTable.Columns(1).Width = InchesToPoints(1)
    myTable.Columns(2).Width = InchesToPoints(1)
    myTable.Columns(3).Width = InchesToPoints(1.1)
    myTable.Columns(4).Width = InchesToPoints(0.7)
    myTable.Columns(5).Width = InchesToPoints(0.8)
    myTable.Columns(6).Width = InchesToPoints(0.4)
    myTable.Columns(7).Width = InchesToPoints(1)
    myTable.Columns(8).Width = InchesToPoints(0.4)
    
    'cabeçalho da tabela - DEVE SER IMPRESSO TODAS AS COLUNAS AQUI DESCRITAS
    myTable.Columns(1).Cells(1).Range.Text = "FAVORECIDO"
    myTable.Columns(2).Cells(1).Range.Text = "QTD CESSÃO"
    myTable.Columns(3).Cells(1).Range.Text = "VALOR PGTO"
    myTable.Columns(4).Cells(1).Range.Text = "BANCO"
    myTable.Columns(5).Cells(1).Range.Text = "AGENCIA"
    myTable.Columns(6).Cells(1).Range.Text = "DG"
    myTable.Columns(7).Cells(1).Range.Text = "CONTA"
    myTable.Columns(8).Cells(1).Range.Text = "DG"
                   
    'Alinha o conteudo das linhas e colunas
    myTable.Columns(1).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(2).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(3).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
    myTable.Columns(4).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(5).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(6).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(7).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    myTable.Columns(8).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    
    'Trata estilo da tabela
    '[primeira linha alinhado ao centro/negrito/cor]
    myTable.Rows(1).Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.Font.Bold = wdToggle
    Altera_Fundo
    
    'Passar informacoes de coluna e linha
    '[qual coluna e linha que deve comecar a preencher]
    lEof = True
    nCol = 1
    nLin = 2
    
    'Realiza a impressao do campo memo que a rotina OGRR342 transmite
    While (lEof)
        nPos = InStr(cMemo, "#*")
        cText = Mid(cMemo, 1, nPos - 1)
        cMemo = Mid(cMemo, nPos + 2)
        
        'Imprime o texto na coluna e linha informada
        myTable.Cell(nLin, nCol).Range.Text = cText
        
        'Soma a coluna ate chegar na coluna 8 [definido pela rotina OGRR342]
        'Se for maior que 8 entra no IF para somar a linha
        nCol = nCol + 1
        If nCol > 8 Then
            nCol = 1
            nLin = nLin + 1
        End If
        
        'Se imprimiu tudo sai do while e termina a impressao
        If IsEmpty(cMemo) Or nLin > (nReg) Then
            lEof = False
        End If
    Wend
End Sub


Deve ser criada seções para cada macro(tabela), pois as seções são responsáveis para a impressão das tabelas. Criar conforme exemplo abaixo.



Com isso, está pronto o documento word para a impressão de contrato. Lembrando que cada contrato tem sua particularidade de macros.

Observações:

Opção disponível para as rotinas:

  • Gestão de Agronegócio > Atualização >> Originação >>> Controle Depto de 3 >>>> Contrato Depto de 3 (OGA260).
  • Gestão de Agronegócio > Atualização >> Originação >>> Controle Depto em 3 >>>> Contrato Depto em 3 (OGA270).
  • Gestão de Agronegócio > Atualização >> Originação >>> Controle de Compras >>>> Contrato de Compra (OGA280).
  • Gestão de Agronegócio > Atualização >> Originação >>> Controle de Vendas >>>> Contrato de Venda (OGA290).

Para todas as rotinas no browser inicial, selecionar o contrato desejado, ir em "Outras ações > Mais ações... >> Imprimir Word".