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.
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:
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:
Para todas as rotinas no browser inicial, selecionar o contrato desejado, ir em "Outras ações > Mais ações... >> Imprimir Word". |