Archiwum Odczyt informacji z systemu SAP za pomoca makra VBA

1 Comment

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.

One Response to “Odczyt informacji z systemu SAP za pomoca makra VBA”

  1. Wieslav Says:

    Witam. Mam pytanie, jak by wygladała funkcja która dodaje dokument w SAP. Żywo sie tym tematem interesuje.
    Pozdrawiam.

Leave a Reply

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word