Sap Script

Anexar arquivos no SAP com Excel VBA SAP Gui Scripting

Essa solução foi desenvolvida em conjunto com Jose Eduardo Chamon criador do site http://ensinandoexcel.com.br/ que me procurou através deste canal. Trocamos ideias e conhecimentos, ele me apresentou um sistema RPA chamado AutoIt que também apresentou um solução satisfatória e aumentou minhas opções em automação. Assim tenho me beneficiado desse canal, aumentando meu networking, adquirindo, passando e repassando conhecimento.

AutoIt é um programa que grava as ações do usuário e depois replica, é como gravar uma macro que pode ser acessado e customizado por código VBA, apesar de apresentar uma solução satisfatória não será a solução apresentada nessa postagem. Isso porque identificamos duas desvantagens. A primeira por ser um software ele precisa ser instalado e hoje nas organizações nem sempre isso é permitido, a segunda é que ele repete ações gravadas com base na posição da tela, como a solução tende a ser executada em telas de formatos diferentes isso pode gerar um erro. Mas é uma excelente ferramenta de RPA e para propósitos específicos é muito útil.

A solução que vou apresentar nessa postagem consiste em uma combinação de VBA e VBS, vou anexar um arquivo a um documento contábil através da transação FB03, mas a mesma funcionalidade pode ser aplicada a qualquer transação que utilize a chamada Windows padrão para selecionar arquivos.

Primeiro devemos verificar se a opção Exibir caixa de diálogo nativa de Microsoft Windows está ativa.

Na janela de SAP Logon clique em Opções…

Depois verifique se a opção destacada abaixo está selecionada.

Estou utilizando o arquivo de conexão disponibilizado na postagem Sap Script & VBA – Conexão, primeiro vamos criar uma rotina dentro do modulo basTransaction chamada CriarVBS

‘A função abaixo cria um arquivo VBS customizado para o caminho abaixo
Public Sub CriarVBS(ByVal strCaminho As String, ByVal strNomeJanela As String)
‘Referencia à Microsoft Scripting Runtime
Dim myFso As Scripting.FileSystemObject
Dim myTxt As Scripting.TextStream
Dim i As Long

‘Carregando variavel de objeto
Set myFso = CreateObject(“Scripting.FileSystemObject”)

‘Criar o arquivo VBS
Set myTxt = myFso.CreateTextFile(Filename:=ThisWorkbook.Path & “\FileOpen.vbs”, _
OverWrite:=True)

‘Criando o arquivo VBS
With myTxt
.Write “Set Wshell = CreateObject(“”WScript.Shell””)” & vbCrLf
.Write “Do” & vbCrLf
.Write “bWindowFound = Wshell.AppActivate(“”” & strNomeJanela & “””)” & vbCrLf
.Write “WScript.Sleep 1000” & vbCrLf
.Write “Loop Until bWindowFound” & vbCrLf
.Write “bWindowFound = Wshell.AppActivate(“”” & strNomeJanela & “””)” & vbCrLf
.Write “If (bWindowFound) Then” & vbCrLf
.Write “Wshell.appActivate “”” & strNomeJanela & “””” & vbCrLf
.Write “WScript.Sleep 100” & vbCrLf
.Write “Wshell.sendkeys “”” & “” & “%n” & strCaminho & “””” & vbCrLf
.Write “WScript.Sleep 100” & vbCrLf
.Write “Wshell.sendkeys “”{ENTER}””” & vbCrLf
.Write “WScript.Sleep 100” & vbCrLf
.Write “End if”
.Close
End With

‘Descarregando variaveis
Set myTxt = Nothing
Set myFso = Nothing
End Sub

Agora vamos inserir o código que ira fazer a chamada a função acima, o detalhe é que devemos criar o arquivo VBS e chamar sua execução antes da solicitação pelo SAP à chamada do arquivo, porque esse VBS é que ira incluir o caminho do arquivo e depois fechar essa caixa de dialogo permitindo assim a continuidade do código VBA.

Public Sub Executar()
‘Declarando variaveis
Dim strCaminho As String
Dim Wshell As Object

‘Capturando caminho do arquivo a ser anexado
strCaminho = Cells(6, 2).Value

‘Criando arquivo VBS passando o caminho e nome da janela
Call CriarVBS(strCaminho, “Abrir”)

‘Execuntado arquivo VBS
Set Wshell = CreateObject(“WScript.Shell”)
Wshell.Run ThisWorkbook.Path & “\FileOpen.vbs”, 1, False

‘Executando código Sap Scripting
Session.findById(“wnd[0]/tbar[0]/okcd”).Text = Cells(3, 2).Value
Session.findById(“wnd[0]”).sendVKey 0
Session.findById(“wnd[0]/usr/txtRF05L-BELNR”).Text = Cells(4, 2).Value
Session.findById(“wnd[0]/usr/ctxtRF05L-BUKRS”).Text = Cells(5, 2).Value
Session.findById(“wnd[0]”).sendVKey 0
Session.findById(“wnd[0]/titl/shellcont/shell”).pressContextButton “%GOS_TOOLBOX”
Session.findById(“wnd[0]/titl/shellcont/shell”).selectContextMenuItem “%GOS_PCATTA_CREA”

‘Caso queira deletar o arquivo criado em tempo de execução
‘É necessario aguardar alguns segundos para que ele preencha a janela
‘Mas caso não queira aguarda mantenha o arquivo VBS salvo
Application.Wait (Now + TimeValue(“0:00:05”))
‘Deletando o arquivo VBS criado anteriormente
Kill ThisWorkbook.Path & “\FileOpen.vbs”

‘Descarregando variaveis
Set Wshell = Nothing

End Sub

Verifique a linha 10 do código acima [ Call CriarVBS(strCaminho, “Abrir”) ] aqui está o “pulo do gato”, você deve colocar nesse argumento o caminho do arquivo e principalmente o nome que irá aparecer na barra de titulo da sua caixa de dialogo que nesse exemplo é “Abrir”.

Clique aqui para baixar o arquivo Excel com o código dessa postagem

Duvidas, sugestões e comentários são sempre bem vindos, aproveite também o fórum para duvidas.

6 thoughts on “Anexar arquivos no SAP com Excel VBA SAP Gui Scripting

  • Paulo Stos

    Boa Noite Fábio ! Tem como criar esse anexo por um Loop no VBA?

    Resposta
  • Tatiana

    Olá Fabio, Boa Tarde na sua publicação em relação ao sap logon não aparece os botões que devem ser ativados. Quais são ?

    Resposta
  • Tatiana

    Olá Fábio, consegui ativar as ferramentas. Porém o “pulo do gato” que você informa no arquivo disponibilizado permanece com o problema de colocar o nome ao anexar. Mesmo executando manualmente o script via reprodução será que faltou alguma coisa ?

    Resposta
  • haroldo1

    Tenho interesse em uma opção ao contrario desta, baixar anexos do SAP de alguma transação, tipo o pdf da Nota fiscal na transação de protocolo, ou alguma coisa anexada a um pedido de compras, tipo um email que foi anexado em arquivo pdf, pois é comum anexarem conversas de e-mail desta forma para justificar ou documentar alguma ação em compras.

    Resposta
  • Lorena

    Olá. Boa noite.
    É possível fazer o contrário? Pegar o arquivo que foi anexado na FB03 e salvar em uma pasta específica?

    Resposta

Deixe uma resposta