SAP- und Python-Integration oder wie Daten einfacher aus SAP übernommen werden können

Guten Tag, Habr!

Ich möchte die Erfahrung einer interessanten Aufgabe zur einfachen Interaktion mit SAP-Systemen mit Python mitteilen - unabhängig davon, welches Modul oder welche Version der Plattform verwendet wird.

Wenn nur die technische Lösung interessant ist, überspringen Sie alle Texte und sehen Sie sich das Implementierungsbeispiel an.

Lyrics


Es kam darauf an, dass einer der Kunden Daten aus seinem SAP-ERP-System hochladen musste, um mittels Manipulationen Berichte zu erstellen und per E-Mail an interessierte Personen zu versenden sowie andere Aktionen.

Wenn wir über die Lösung eines solchen Problems diskutieren, haben wir als Auftragnehmer verschiedene Möglichkeiten angeboten. Eine der naheliegendsten Möglichkeiten ist, dies mit Hilfe der internen SAP-Funktionalität zu tun, und zwar auf einfache Art und Weise unter den "sappers" für "Zeating" - alles mit Hilfe von ABAP.

Das erste, was uns gegenübersteht, ist aus den Worten des Kunden nicht völlig transparent. Die Kriterien für die Auswahl der Daten, nämlich die Daten, welche Tabellen, warum, warum, welche Maßnahmen sollten mit ihnen ergriffen werden. Wenn Sie ein Beispiel geben, muss der Kunde die Anwesenheit von Büropersonal mit Daten im Zusammenhang mit Arbeitszeitplänen und Urlauben abladen. Es war auch notwendig, Berichte über die Leistung der Mitarbeiter mit Analysen zu seiner Zeit am Arbeitsplatz zu erstellen. Ich werde nicht auf Details eingehen, aber ich würde sagen, dass die aufgewendete Zeit sich auf die Produktivität auswirkt. Um dies herauszufinden, müssen Sie jedoch die Arbeitszeit mit dem Arbeitsergebnis und viel berechnen eine andere Dies ist nur ein Beispiel für einen Bericht, und der Kunde hat während der Diskussionen viel generiert.

Nach langen Gesprächen stellten wir fest, dass SAP Query oder BI \ BO eine solche Lösung sein könnte. Der Kunde war jedoch nicht sehr zufrieden mit den kalkulierten Kosten der Lösung und nicht mit der am besten geeigneten Flexibilität.

Python-Lösung


Auf meinem Kopf erinnerte ich mich an einen Artikel über die Ressource über die pyrfc-Bibliothek, und so war ich wie ich kein Python-Programmierer, aber nachdem ich diesen Artikel zu Hause gelesen hatte, habe ich ihn einmal gelesen. Zu meiner Überraschung kann ich leicht als Amateur zu Hause sein Diese Programmiersprache hat es unglaublich leicht gemacht, sich an jedes SAP-System anzuschließen, außerdem dauert es 20 Minuten.

20 Minuten CARL !!!

Stellen Sie sich vor, Sie können eine Verbindungsschnittstelle mit dem ERP-System von SAP einrichten, ohne Datenbusse und PI \ XI für all diese winzige Zeit verwenden zu müssen.

Umsetzung


Um sicher zu gehen, dass dies eine durchaus funktionierende Lösung ist und den Kunden zufriedenstellt, habe ich mehrere Plattformen studiert (ich untersuchte, dass ich etwa 10 Minuten gelesen habe). Ich entschied mich für die Odoo-Plattform, da sie unter anderem gleich ist, da sie einfacher zu implementieren ist und alle notwendigen Eigenschaften aufweist, wie z Schnittstelle, System der Zugriffsrechte, mobile Anwendung, Mailserver, gute Schnittstelle mit Datenbank (psql).

Dann ist alles sehr einfach.

Installieren Sie auf der virtuellen Maschine des Odoo- Kunden (ich habe Version 8 genommen), weil Im Moment ist es am einfachsten, ich weiß, dass Version 12 bereits verfügbar ist, aber die Aufgabe erfordert nicht alle coolen neuen Produkte.

Installierte alle notwendigen Bibliotheken, insbesondere pyrfc - Link zu dem Artikel, der sich mit Installation und Anschluss befasst .

Außerdem war es nur notwendig, ein kleines Modul für die Verbindung in die Odoo-Plattform selbst zu schreiben, und es verfügt über zahlreiche Werkzeuge zur Visualisierung von Daten.

Verbindung zum Kundensystem herstellen:

from pyrfc import Connection
user = 'user'
passwd = 'secretuser'
saprouter = '/H/192.168.0.140/S/3297'
conn = Connection(user=user, passwd=password,
                  mshost='CLient',
                  msserv='192.168.0.140',
                  sysid='01',
                  group="SPACE",
                  saprouter=saprouter, 
                  client=‘900')

Rufen Sie das BAPI an, um Informationen zum Benutzer zu erhalten

b_result = conn.call('BAPI_USER_GET_DETAIL',
                     USERNAME = 'user',
                     CACHE_RESULTS  = ' ')

Benutzer wechseln

updated_address['CITY'] = u'Moscow'
r = conn.call('BAPI_USER_CHANGE',
               USERNAME='user',
               ADDRESS=updated_address)

Das wichtigste Werkzeug zum Abrufen von Daten aus SAP, wenn wir über Tabellen sprechen, ist der Funktionsbaustein RFC_READ_TABLE. Es gibt weitere Module in der SAP-Plattform, die aufgerufen werden können. Diese müssen eingerichtet werden, dh sie können mittels RFC aufgerufen werden.

Zum Beispiel:

from pyrfc import Connection, ABAPApplicationError, ABAPRuntimeError, LogonError, CommunicationError
from ConfigParser import ConfigParser
from pprint import PrettyPrinter
defmain():try:
        config = ConfigParser()
        config.read('sapnwrfc.cfg') - #читаем конфиг, где лежат данные о логоне в систему SAP ERP
        params_connection = config._sections['connection']
        conn = Connection(**params_connection) #создаем коннект с системой
        options = [{ 'TEXT': "FCURR = 'USD'"}]
        pp = PrettyPrinter(indent=4)
        ROWS_AT_A_TIME = 10 
        rowskips = 0whileTrue:
            printu"----Begin of Batch---"
            result = conn.call('RFC_READ_TABLE', \
                                QUERY_TABLE = 'TCURR', \
                                OPTIONS = options, \
                                ROWSKIPS = rowskips, ROWCOUNT = ROWS_AT_A_TIME)
            pp.pprint(result['DATA'])
            rowskips += ROWS_AT_A_TIME
            if len(result['DATA']) < ROWS_AT_A_TIME:
                breakexcept CommunicationError:
        printu"Could not connect to server."raiseexcept LogonError:
        printu"Could not log in. Wrong credentials?"raiseexcept (ABAPApplicationError, ABAPRuntimeError):
        printu"An error occurred."raise

Das Ergebnis


In diesem Bild eine Liste der Berichte, die mit dieser Methode hochgeladen werden, und ein Beispiel für eine davon.



Das Ergebnis


Im Großen und Ganzen eröffnet diese Methode enorme Möglichkeiten, sehr teure und andere Werkzeuge durch flexiblere und offenere zu ersetzen.

Codebeispiele stammen aus offenen Quellen, weil Ich habe kein Recht, den Kundencode im Artikel zu verwenden, und ich bin kein Python-Programmierer. Ich hätte irgendwo einen Fehler begehen können.

Ich möchte hinzufügen, dass wir dieses Tool bereits für eine Vielzahl von Aufgaben im Zusammenhang mit der KPI-Berechnung verwenden, Daten in andere Quellen (Sites, Lieferanten und Kundendatenbanken) ausgeben, Informationen aus Systemen senden, die auf Daten von SAP basieren, und vieles mehr.
Für mich war es im Allgemeinen eine Entdeckung im Allgemeinen, eine solche Gelegenheit. Wenn jemand eine ähnliche Erfahrung macht, würde ich das gerne hören.

PS: Ich habe das Thema Lizenzen nicht angesprochen, daher kann ich dazu nichts sagen.
Danke!

Link zu Habr
C Respect, SAP-Berater

Jetzt auch beliebt: