Odczyt informacji z systemu SAP za pomoca makra VBA

Wednesday, October 15, 2008, autor: Rafał

Ponieważ w ostatnim czasie kilka osób pytało mnie o sposób połączenia makr VBA wykorzystywanych w MS Office z systemami SAP, postanowiłem opisać prosty przykład takiego połączenia. Kilka miesięcy temu opracowałem go sobie na własny użytek. Skorzystałem z dokumentacji SAP i materiałów dostępnych w Internecie. Zakładam, że ktokolwiek chciałby skorzystać z mojego przykładu, zna podstawy pisania makr Visual Basic for Applications i wie co to są obiekty BAPI.

W omawianym przykładzie, makro VBA wykonywane w dokumencie Worda pozwala na odczyt podstawowych informacji na temat dokumentu sprzedaży (ang. sales order).  Makro jest wykonywane na komputerze z zainstalowanym MS Office 2003 Pro i programem SAPGUI (dzięki temu zainstalowane są odpowiednie kontrolki). W moim przypadku zainstalowane było SAPGUI 710.

Poniżej pokazany jest dokument, w którym wykonujemy makro. Uruchomienie makra spowoduje pojawienie się widocznego na poniższym zrzucie ekranu okienka logowania (wykorzystywana jest kontrolka ActiveX). Informacje o systemach odczytywane są z SAPGUI.

Logowanie do systemu SAP

Wystarczy, że zalogujemy się do wybranego systemu podając użytkownika i hasło.

Logowanie do systemu SAP

Po podaniu danych do zalogowania, system odczyta informacje o wybranym dokumencie.

Odczyt informacji z systemu SAP

Porównując odczytane dane z zamówieniem widocznym na poniższym zrzucie ekranu, widać że makro poprawnie odczytało dane.

Przykładowe zamówienie

W tym przykładzie dokument był zdefiniowany w makrze, ale każdy, kto zna makra będzie wiedział jak je rozbudować i np. przed odczytem danych poprosić użytkownika o podanie numeru dokumentu. Można też zdefiniować parametry logowania, choć ze względów bezpieczeństwa lepiej wymuszać logowanie przed pobraniem danych.

Samo makro jest bardzo proste i wygląda tak:

Option Explicit

Public Sub WstawInfo()

Dim MyText1, MyText2, MyText3, MyText4, MyText5 As String
Dim MyRange, oBAPICtrl, oBAPILogon, oSalesOrder As Object
Dim SalesOrderNr As String

Set MyRange = ActiveDocument.Range

‘ Inicjalizacja kontrolki SAP ActiveX.
Set oBAPICtrl = CreateObject(”sap.bapi.1″)

‘ Inicjowanie kontrolki logowania SAP ActiveX
Set oBAPILogon = CreateObject(”sap.logoncontrol.1″)

‘ Inicjalizacja obiektu logowania.
Set oBAPICtrl.Connection = oBAPILogon.NewConnection
oBAPICtrl.Connection.Logon

‘odczytanie informacji o danym dokumencie (w tym przykładzie “0000012070″)
SalesOrderNr = “0000012070″
Set oSalesOrder = oBAPICtrl.GetSAPObject(”SalesOrder”, SalesOrderNr)

‘Odczyt informacji
MyText1 = “Dokument: ” & oSalesOrder.salesdocument & Chr(13)
MyText2 = “Wartość netto: ” & oSalesOrder.netvalue & Chr(13)
MyText3 = “Numer klienta: ” & oSalesOrder.orderingparty.customerno & Chr(13)
MyText4 = “Data dokumentu: ” & oSalesOrder.documentdate & Chr(13)
MyText5 = “Ilość pozycji w dokumencie: ” & oSalesOrder.items.Count & Chr(13)

MyRange.InsertAfter (MyText1)
MyRange.InsertAfter (MyText2)
MyRange.InsertAfter (MyText3)
MyRange.InsertAfter (MyText4)
MyRange.InsertAfter (MyText5)

‘wylogowanie i zamkniecie obiektu
oBAPICtrl.Connection.Logoff
Set oBAPILogon = Nothing
Set oBAPICtrl = Nothing

End Sub

Możemy je łatwo rozbudowywać odczytując dodatkowe informacje o obiekcie. Pomocna w tym zakresie będzie znajomość obiektów BAPI. Przy stosunkowo podstawowej wiedzy z zakresu programowania obiektowego dużo użytecznych informacji o obiektach BAPI odczytamy uruchamiając transakcję BAPI.

BAPI - sales order

Załączony powyżej zrzut (najlepiej kliknąć na nim i zobaczyć w powiększeniu) zawiera listę atrybutów dla Sales Order. W przedstawionym przykładzie wykorzystałem tylko niektóre z nich.



 

 

 



Zostaw komentarz


 


 


 


 

*
Wpisz słowo z obrazka. Kliknij na obrazku aby usłyszeć angielską wersję audio
Kliknij na obrazku aby usłyszeć angielską wersję audio