Skip to Content

Introdução

Muitas vezes precisamos automatizar um processo de input de informações para o SAP e para essa atividade existem diversas ferramentas disponibilizadas pela SAP, mas vamos focar no SAP GUI Scripting.

Esse artigo demonstra a utilização do SAP GUI Scripting que é uma API(Interface de Programação de Aplicações), que pode ser usada para automação de tarefas (repetitivas), testes e carga de dados.

O SAP GUI Scripting é escrito na linguagem de programação VB (Microsoft VBScrip), o VB é uma linguagem de script de fácil aprendizado usada amplamente no pacote MS Office (principalmente Excel) e sistemas comerciais deste o Windows 98.

Apesar do SAP GUI Scripting não ser uma ferramenta nova, vou apresentar sua atualização básica devido ao grande poder de construção, interação com MS Office e flexibilidade.

Objetivo


O objetivo é demostrar automatização de anulação de compensações usando a transação FBRA com SAP GUI Scripting.


Verificação do ambiente


Passo 01:  Habilitar o SAP GUI Scripting no SAP GUI Configuration conforme a tela abaixo.

/wp-content/uploads/2016/01/s0_s_863793.png.

Passo 02: Na transação rz11 você terá que habilitar o  parâmetro sapgui/user_scripting conforme a nota http://service.sap.com/sap/support/notes/480149.


Criação do Script.


Semelhante ao a LSMW o SAP GUI Scripting precisamos mapear os campos e após o mapeamento o SAP gera o script VB.


Vamos usar a opção “Registro e Reprodução de Scrpit” conforme os passos abaixo:

Passo 01: Criação do script.

S1_S1.png

Passo 02: É necessário informar a pasta e nome do script para o SAP salvar as informações.


S2_S2.png

Passo 03: Para começar a gravar é necessário clicar no botão “Registrar Script” e chamar a transação FBRA e informar os dados normalmente.


/wp-content/uploads/2016/01/s3_s3_863057.png


Passo 04: Vamos usar a transação normalmente e concluir o processo da anulação de partida, após a conclusão vamos clicar no botão “Encerrar”. Nesta etapa o SAP já mapeou o campos e tem as informações necessárias.

/wp-content/uploads/2016/01/s5_s5_863077.png


Passo 05: Vamos abrir o script com o bloco de notas.

/wp-content/uploads/2016/01/s6_s6_863068.png

Passo 06:  Observe que as informações digitas para anulação do documento estão gravadas no script, se executarmos esse scrpit agora ele irá reproduzir no passo 04.


/wp-content/uploads/2016/01/s7_s7_863070.png



Passo 06:  Vamos inserir os blocos (Vermelho) B1 e B2 no nosso script, não é necessário conhecimento de programação.

O bloco B1 vai chamar a planilha (Excel) aberta, ler a planilha, criar uma estrutura de repetição e criar as variáveis com os conteúdos das colunas, com isso substituímos os valores fixos com as variáveis criadas.

O bloco B2 só fecha a instrutura de repetição.

/wp-content/uploads/2016/01/s9_s_863779.png




Código Fonte :



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

REM  B1 INICIO***********************************************

Dim objExcel

Dim objSheet, intRow, i

Set objExcel = GetObject(, “Excel.Application”)         ‘ CHAMA O EXCEL ATIVO 

Set objSheet = objExcel.ActiveWorkbook.ActiveSheet   ‘ LER O CONTEUDO DA PRIMEIRA ABA DO EXECEL

For i = 2 To objSheet.UsedRange.Rows.Count           ‘ LER DA PLANILHA APARTI DA 2 LINHA

    DOCUMENTO = Trim(CStr(objSheet.Cells(i, 1).Value))  ‘A VARIAVEL DOCUMENTO

    EMPRESA   = Trim(CStr(objSheet.Cells(i, 2).Value))  ‘A VARIAVEL EMPRESA

    ANO       = Trim(CStr(objSheet.Cells(i, 3).Value))  ‘A VARIAVEL ANO

    session.findById(“wnd[0]”).maximize

REM B1 FIM *************************************************

    session.findById(“wnd[0]/tbar[0]/okcd”).Text = “/nfbra”

    session.findById(“wnd[0]”).sendVKey 0

    session.findById(“wnd[0]/usr/txtRF05R-AUGBL”).Text  = DOCUMENTO

    session.findById(“wnd[0]/usr/ctxtRF05R-BUKRS”).Text = EMPRESA

    session.findById(“wnd[0]/usr/txtRF05R-GJAHR”).Text  = ANO

    session.findById(“wnd[0]/usr/txtRF05R-GJAHR”).SetFocus

    session.findById(“wnd[0]/usr/txtRF05R-GJAHR”).caretPosition = 4

    session.findById(“wnd[0]/tbar[0]/btn[11]”).press

    session.findById(“wnd[0]”).sendVKey 0

    session.findById(“wnd[1]/usr/btnSPOP-OPTION1”).press

    session.findById(“wnd[1]/usr/ctxtRF05R-STGRD”).Text = “01”

    session.findById(“wnd[1]/tbar[0]/btn[0]”).press

    session.findById(“wnd[0]”).sendVKey 0

REM B2 ************************************************

Next

REM ****************************************************

Passo 07:  Criação da Planilha Excel, só é necessário criar a planilha com colunas DOCUMENTO, EMPRESA e ANO conforme o print abaixo.

S8_S.png

Passo 08: Para executar o script é necessário que a planilha (Excel) esteja aberta e com isso vamos usar a opção “Registro e Reprodução de Scrpit”, selecionar o botão “Processar Script” conforme o print abaixo.


Com isso SAP vai interpretar o arquivo script executando a transação FBRA com SAP  e lendo as informações da planilha(Excel).

S1_S1.png




/wp-content/uploads/2016/01/s10_s_863789.png


Conclusão


Poderíamos usar LSMW para fazer essa atividade que foi descrita acima, mas a ideia é desvincular da LSMW e apresentar SAP GUI Scripting.

Muitas empresas têm verdadeiros sistemas em planilhas Excel que posteriormente seus resultados precisam ser integrados com o SAP.

A automação dessas tarefas não substitui a inteligência no SAP, mais complementa na utilização do SAP com o usuário final, com isso, dando mais opções ao consultor para desenhar soluções.

O SAP GUI Scripting x MS Office abre leque de possibilidades que vão muito além do que foi apresentado neste artigo, caso queiram conhecer um pouco mais, segue link abaixo.

Caso alguém encontrei algum divergência ou inconsistência, por favor fique a vontade para a devida colaboração.

Abaixo link com maiores informações caso queriam apreender mais.

SAP Connectivity with MS Excel

http://scn.sap.com/docs/DOC-31015

Introduction to SAP Gui Scripting

http://scn.sap.com/community/gui/blog/2012/10/08/introduction-to-sap-gui-scripting

The SAP GUI Scripting API

https://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/80aaac18-2dfe-2a10-bbb1-ec9b3760ea4c&overridelayout=true


SAP GUI Scripting API Documentation


VBScript User’s Guide

https://msdn.microsoft.com/en-us/library/sx7b3k7y(v=vs.85).aspx

Artur Paulino Da Silva Cardoso

Claudio Rafael

To report this post you need to login first.

9 Comments

You must be Logged on to comment or reply to a post.

  1. Marssel Vilaça

    Muito boa opção para processamento massivo. A LSMW é a mais utilizada porém é importante conhecer outros métodos que também são simples e eficazes.

    Valeu

    Abraço

    (0) 
  2. Beatriz Lima

    Boa tarde,

    Estou iniciando agora a automatizar minhas atividades e tentei copiar conforme o exemplo, porém não consegui, será que poderiam me ajudar?

    Aparece a informação ao realizar o passo 8 “Invalid Character -”

     

    Segue abaixo o código com as informações que modifiquei, podem me ajudar por favor?

    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

    REM  B1 INICIO***********************************************

    Dim objExcel

    Dim objSheet, intRow, i
    Set objExcel = GetObject(, “Excel.Application”)         ‘ CHAMA O EXCEL ATIVO

    Set objSheet = objExcel.ActiveWorkbook.ActiveSheet   ‘ LER O CONTEUDO DA PRIMEIRA ABA DO EXECEL
    For i = 2 To objSheet.UsedRange.Rows.Count           ‘ LER DA PLANILHA APARTI DA 2 LINHA

    Centro = Trim(CStr(objSheet.Cells(i, 1).Value))  ‘A VARIAVEL Centro

    LINHA   = Trim(CStr(objSheet.Cells(i, 2).Value))  ‘A VARIAVEL LINHA

    DATA_INICIO = Trim(CStr(objSheet.Cells(i, 3).Value))  ‘A VARIAVEL DATA INICIO

    DATA_FIM   = Trim(CStr(objSheet.Cells(i, 4).Value))  ‘A VARIAVEL DATA FIM

    VARIANTE   = Trim(CStr(objSheet.Cells(i, 5).Value))  ‘A VARIAVEL VARIANTE

    session.findById(“wnd[0]”).maximize

    REM B1 FIM *************************************************

    session.findById(“wnd[0]/tbar[0]/okcd”).text = “/nzmnpprep0006”
    session.findById(“wnd[0]”).sendVKey 0
    session.findById(“wnd[0]/usr/ctxtS_WERKS-LOW”).text = CENTRO
    session.findById(“wnd[0]/usr/ctxtS_ARBPL-LOW”).text = LINHA
    session.findById(“wnd[0]/usr/ctxtS_GSTRI-LOW”).text = INICIO
    session.findById(“wnd[0]/usr/ctxtS_GSTRI-HIGH”).text = FIM
    session.findById(“wnd[0]/usr/ctxtP_VARI”).text = VARIANTE
    session.findById(“wnd[0]/usr/ctxtP_VARI”).setFocus
    session.findById(“wnd[0]/usr/ctxtP_VARI”).caretPosition = 11
    session.findById(“wnd[0]”).sendVKey 8
    session.findById(“wnd[0]/tbar[1]/btn[45]”).press
    session.findById(“wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]”).select
    session.findById(“wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]”).setFocus
    session.findById(“wnd[1]/tbar[0]/btn[0]”).press
    session.findById(“wnd[1]/usr/ctxtDY_PATH”).text = “c:\script1”
    session.findById(“wnd[1]/usr/ctxtDY_FILENAME”).text = “zmnpprep0006.xls”
    session.findById(“wnd[1]/usr/ctxtDY_FILENAME”).caretPosition = 16
    session.findById(“wnd[1]/tbar[0]/btn[11]”).press
    REM B2 ************************************************

    Next

    REM ****************************************************

     

     

    OBRIGADA

     

     

     

    (0) 
  3. Alysson de Barros

    Boa tarde pessoal!

    Criei o script abaixo mas está dando o erro “The control could not be found by id.-“.

    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
    REM B1 INICIO***********************************************
    Dim objExcel

    Dim objSheet, intRow, i

    Set objExcel = GetObject(, “Excel.Application”) ‘CHAMA O EXCEL ATIVO

    Set objSheet = objExcel.ActiveWorkbook.ActiveSheet ‘LER O CONTEUDO DA PRIMEIRA  ABA DO EXECEL

    For i = 2 To objSheet.UsedRange.Rows.Count ‘LER DA PLANILHA APARTI DA 2 LINHA

    NUMERO_RUA = Trim(CStr(objSheet.Cells(i, 1).Value)) ‘A VARIAVEL NUMERO_RUA
    CEP_DNE = Trim(CStr(objSheet.Cells(i, 2).Value)) ‘A VARIAVEL CEP_DNE
    session.findById(“wnd[0]”).maximize
    REM B1 FIM *************************************************

    session.findById(“wnd[0]/tbar[0]/okcd”).text = “/nZMED95”
    session.findById(“wnd[0]/tbar[0]/btn[0]”).press
    session.findById(“wnd[0]/usr/ctxtADRSTREET-STRT_CODE”).Text = NUMERO_RUA
    session.findById(“wnd[0]/usr/ctxtADRSTREET-STRT_CODE”).caretPosition = 6
    session.findById(“wnd[0]/tbar[1]/btn[2]”).press
    session.findById(“wnd[0]/usr/tblSAPLZMED_LOGRADOUROTC_SECAO_RUA/ctxtTI_SECAO_RUA-POST_CODE[5,0]”).Text = CEP_DNE
    session.findById(“wnd[0]/usr/tblSAPLZMED_LOGRADOUROTC_SECAO_RUA/ctxtTI_SECAO_RUA-POST_CODE[5,0]”).SetFocus
    session.findById(“wnd[0]/usr/tblSAPLZMED_LOGRADOUROTC_SECAO_RUA/ctxtTI_SECAO_RUA-POST_CODE[5,0]”).caretPosition = 0
    session.findById(“wnd[0]”).sendVKey 0
    session.findById(“wnd[1]/usr/btnBUTTON_1”).press
    session.findById(“wnd[0]/tbar[0]/btn[11]”).press
    REM B2 ************************************************
    Next
    REM ****************************************************

    Obrigado!

     

    Alysson

    (0) 

Leave a Reply