VBA

Variante no SAP GUI – conceito e automação com VBA

Escrito por Adriano Pataro
em 22/10/2024

Variante no SAP é uma configuração pré-definida de parâmetros para uma transação ou relatório, que permite ao usuário salvar e reutilizar filtros ou seleções específicas.

As variantes são muito úteis para evitar a repetição de entrada de dados quando os mesmos critérios são usados frequentemente.

Uma variante armazena os valores inseridos em campos de seleção de uma transação ou relatório, como datas, critérios de filtro, números de materiais, centros de custo, entre outros.

Ao invés de inserir essas informações toda vez que você executa uma transação ou relatório, você pode simplesmente carregar uma variante salva que já contém esses parâmetros.

Exemplos de uso

  • Relatórios: se você precisa executar um relatório de vendas frequentemente, com os mesmos filtros de data, cliente e região, pode salvar esses parâmetros como uma variante. Na próxima vez que você abrir o relatório, basta selecionar essa variante.
  • Transações: na transação de pedidos de compra (ME21N), por exemplo, você pode definir uma variante que inclui o fornecedor e a organização de compras que você mais utiliza, tornando o processo mais rápido.

Automatização com VBA

Ao automatizar com Excel VBA, você pode programar o script para selecionar uma variante automaticamente. O código interage com o campo da variante e insere o nome da variante desejada.

Observação: o artigo não foca na criação de variantes no SAP, mas sim em usar o VBA para escolher a variante já criada, com o objetivo de automatizar o processo.

Variante no SAP com Excel VBA

Vamos a um exemplo prático do uso do VBA para escolher a variante no SAP.

  • Comece gravando o código pelo SAP GUI scripting. Se você não sabe como gravar o script, veja este artigo.
  • Entre na transação desejada (no exemplo usei a transação MB25).
  • Clique no botão para Chamar variante.
Variante no SAP

Será exibida a caixa Procurar variante. Esta caixa contém um campo chamado Criado por, onde você pode inserir o nome de um usuário para filtrar as variantes criadas por ele.

Procurar variante no SAP

Se você preencher o campo com o nome de um usuário, o SAP mostrará apenas as variantes criadas por esse usuário específico.

Se o campo for deixado em branco, o SAP listará todas as variantes disponíveis, independentemente de quem as criou.

Isso permite que você veja e escolha variantes criadas por outros usuários, desde que estejam disponíveis para seu uso.

  • Para o exemplo, apague o nome de usuário no campo Criado por e clique no botão Executar (ícone do relógio).
  • Será exibida a caixa de catálogo de variantes. Escolha a variante desejada e clique no botão verde para confirmar.
  • Pare a gravação do script. Será gerado um arquivo com o script gravado.

Veja como ficou o meu código:

If Not IsObject(Application) Then
    Set SapGuiAuto = GetObject("SAPGUI")
    Set Application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(Connection) Then
    Set Connection = Application.Children(0)
End If
If Not IsObject(Session) Then
    Set Session = Connection.Children(0)
End If
If IsObject(WScript) Then
    WScript.ConnectObject Session, "on"
    WScript.ConnectObject Application, "on"
End If

Session.findById("wnd[0]").maximize
Session.findById("wnd[0]/tbar[0]/okcd").Text = "mb25"
Session.findById("wnd[0]").sendVKey 0

Session.findById("wnd[0]/tbar[1]/btn[17]").press
Session.findById("wnd[1]/usr/txtENAME-LOW").Text = ""
Session.findById("wnd[1]/usr/txtENAME-LOW").SetFocus
Session.findById("wnd[1]/usr/txtENAME-LOW").caretPosition = 0
session.findById("wnd[1]/tbar[0]/btn[8]").press
session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").currentCellRow = 20
session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").firstVisibleRow = 15
session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").selectedRows = "20"
session.findById("wnd[1]/tbar[0]/btn[2]").press

Melhorando o código

Este código selecionou a linha na posição do texto /GAP:

session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").currentCellRow = 20
session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").firstVisibleRow = 15
session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").selectedRows = "20"

Para não ficar preso a esta variante específica, vamos inserir este nome em uma célula da planilha e criar uma estrutura de repetição para achar a posição do nome da variante.

Digite o nome da variante em uma célula do Excel. Veja um exemplo:

Nome da variante SAP no Excel.

Para identificar a posição da variante na lista, use este código:

nLin = 0
variante = False
rolagem = Session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").VisibleRowCount
totalLinhasv = Session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").RowCount

Do While nLin < totalLinhasv And Not variante
    On Error Resume Next
    If Session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").GetCellValue(nLin, "VARIANT") = Range("C3").Value Then
        variante = True
    Else
        nLin = nLin + 1 ' Próxima linha
        If nLin Mod rolagem = 0 Then
            Session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").FirstVisibleRow = nLin
        End If
    End If
    On Error GoTo 0
Loop

If variante Then
    Session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").selectedRows = nLin
    Session.findById("wnd[1]/tbar[0]/btn[2]").press
Else
    MsgBox "Variante não encontrada", vbExclamation

End If

Adicionamos muitas linhas de código. Isto é necessário porque, em alguns objetos o SAP GUI Scripting requer que a linha esteja visível na interface gráfica para que você possa selecioná-la.

  • rolagem: define quantas linhas são roladas de uma vez (neste exemplo, a quantidade de linhas visíveis do objeto, retornado pela propriedade VisibleRowCount).
  • FirstVisibleRow: move a barra de rolagem para garantir que a variante seja visível. A rolagem é feita a cada quantidade de linhas visíveis do objeto, o que pode ser ajustado para acelerar o processo.
  • On Error Resume Next: previne o erro quando tenta acessar uma linha que ainda não está visível.

Esse código garante que a rolagem ocorra automaticamente até que a variante seja encontrada e, em seguida, seleciona a variante corretamente.

Veja o código completo:

Sub EscolherVariante()
Set SapGuiAuto = GetObject("SAPGUI")
Set SapApp = SapGuiAuto.GetScriptingEngine
Set Connection = SapApp.Children(0)
Set Session = Connection.Children(0)

Session.findById("wnd[0]").maximize
Session.findById("wnd[0]/tbar[0]/okcd").Text = "MB25"
Session.findById("wnd[0]").sendVKey 0

Session.findById("wnd[0]/tbar[1]/btn[17]").press
Application.Wait Now + TimeValue("00:00:01")
Session.findById("wnd[1]/usr/txtV-LOW").Text = ""
Session.findById("wnd[1]/usr/ctxtENVIR-LOW").Text = ""
Session.findById("wnd[1]/usr/txtENAME-LOW").Text = ""
Session.findById("wnd[1]/usr/txtAENAME-LOW").Text = ""
Session.findById("wnd[1]/usr/txtMLANGU-LOW").Text = ""

Session.findById("wnd[1]/tbar[0]/btn[8]").press
Application.Wait Now + TimeValue("00:00:01")
nLin = 0
variante = False
rolagem = Session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").VisibleRowCount
totalLinhasv = Session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").RowCount

Do While nLin < totalLinhasv And Not variante
    On Error Resume Next
    If Session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").GetCellValue(nLin, "VARIANT") = Range("C3").Value Then
        variante = True
    Else
        nLin = nLin + 1 ' Próxima linha
        If nLin Mod rolagem = 0 Then
            Session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").FirstVisibleRow = nLin
        End If
    End If
    On Error GoTo 0
Loop

If variante Then
    Session.findById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").selectedRows = nLin
    Session.findById("wnd[1]/tbar[0]/btn[2]").press
Else
    MsgBox "Variante não encontrada", vbExclamation

End If
End Sub

Altere o nome da variante na célula e execute o código novamente para testar.

Variante no SAP – participe

O que achou da Variante no SAP? Deixe sua opinião nos comentários.

Se este conteúdo foi relevante para você, convide seus amigos para que eles também fiquem sabendo deste material.

Precisa desta automação na sua empresa? Entre em contato e vamos conversar.

Um abraço e até a próxima.

Compartilhe este conteúdo

Artigos Relacionados

Page [tcb_pagination_current_page] of [tcb_pagination_total_pages]

Adriano Pataro

Meu nome é Adriano Pataro, sou certificado pela Microsoft como Excel Specialist e autor do livro Dominando o Excel 2019. Graduando ciência de dados, trabalho como analista de dados e uso o Excel há mais de 15 anos. Em 2005 resolvi trazer meu conhecimento para a internet e compartilhar com você aqui no meu site e nas redes sociais.

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}

Fique por dentro das novidades

Cadastre seu e-mail e receba os conteúdos em primeira mão.

>

Damos valor à sua privacidade

Nós e os nossos parceiros armazenamos ou acedemos a informações dos dispositivos, tais como cookies, e processamos dados pessoais, tais como identificadores exclusivos e informações padrão enviadas pelos dispositivos, para as finalidades descritas abaixo. Poderá clicar para consentir o processamento por nossa parte e pela parte dos nossos parceiros para tais finalidades. Em alternativa, poderá clicar para recusar o consentimento, ou aceder a informações mais pormenorizadas e alterar as suas preferências antes de dar consentimento. As suas preferências serão aplicadas apenas a este website.

Cookies estritamente necessários

Estes cookies são necessários para que o website funcione e não podem ser desligados nos nossos sistemas. Normalmente, eles só são configurados em resposta a ações levadas a cabo por si e que correspondem a uma solicitação de serviços, tais como definir as suas preferências de privacidade, iniciar sessão ou preencher formulários. Pode configurar o seu navegador para bloquear ou alertá-lo(a) sobre esses cookies, mas algumas partes do website não funcionarão. Estes cookies não armazenam qualquer informação pessoal identificável.

Cookies de desempenho

Estes cookies permitem-nos contar visitas e fontes de tráfego, para que possamos medir e melhorar o desempenho do nosso website. Eles ajudam-nos a saber quais são as páginas mais e menos populares e a ver como os visitantes se movimentam pelo website. Todas as informações recolhidas por estes cookies são agregadas e, por conseguinte, anónimas. Se não permitir estes cookies, não saberemos quando visitou o nosso site.

Cookies de funcionalidade

Estes cookies permitem que o site forneça uma funcionalidade e personalização melhoradas. Podem ser estabelecidos por nós ou por fornecedores externos cujos serviços adicionámos às nossas páginas. Se não permitir estes cookies algumas destas funcionalidades, ou mesmo todas, podem não atuar corretamente.

Cookies de publicidade

Estes cookies podem ser estabelecidos através do nosso site pelos nossos parceiros de publicidade. Podem ser usados por essas empresas para construir um perfil sobre os seus interesses e mostrar-lhe anúncios relevantes em outros websites. Eles não armazenam diretamente informações pessoais, mas são baseados na identificação exclusiva do seu navegador e dispositivo de internet. Se não permitir estes cookies, terá menos publicidade direcionada.

Visite as nossas páginas de Políticas de privacidade e Termos e condições.

O site utiliza cookies para melhorar sua experiência de navegação.
Success message!
Warning message!
Error message!