Guten Tag, Habr!
Ich möchte die Erfahrung einer interessanten Aufgabe zur einfachen Interaktion mit SAP-Systemen mit Python teilen - es spielt keine Rolle, welches Modul oder welche Version der Plattform.
Wenn nur die technische Lösung interessant ist, überspringen Sie alle Texte und sehen Sie sich eine Beispielimplementierung an.
Text
Alles lief darauf hinaus, dass einer der Kunden Daten aus seinem SAP-ERP-System herunterladen musste, indem er bereits erstellte Berichte manipulierte und per E-Mail an interessierte Personen schickte, sowie andere Aktionen.
Tatsächlich haben wir als Auftragnehmer bei der Erörterung der Lösung eines solchen Problems verschiedene Optionen vorgeschlagen. Eine der naheliegendsten Möglichkeiten besteht darin, alles mithilfe der internen SAP-Funktionalität auf einfache Weise unter den „Pionieren“ für Zed mit ABAP zu tun.
Das erste, was uns begegnete, waren die Kriterien für die Auswahl von Daten, die aus den Worten des Kunden nicht vollständig transparent sind, nämlich die Daten, welche Tabellen, warum, warum, welche Aktionen mit ihnen ausgeführt werden sollten. Wenn Sie ein Beispiel nennen, musste der Kunde die Anwesenheit von Büromitarbeitern mit Daten im Zusammenhang mit Arbeitszeitnachweisen und Ferien entladen. 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 werde sagen, dass die aufgewendete Zeit die Produktivität beeinflusst. Um dies herauszufinden, müssen Sie die Arbeitszeit mit dem Ergebnis der Arbeit und vielem berechnen ein anderer. 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 werden könnten, aber der Kunde war mit den geschätzten Kosten der Lösung und der nicht bequemsten Flexibilität nicht sehr zufrieden.
Python-Lösung
Dann dachte ich an meinen eigenen Kopf über einen Artikel über eine Ressource über die Pyrfc-Bibliothek, und da ich kein Python-Programmierer war, aber einmal darüber gelesen hatte, beschloss ich, ihn zu Hause zu studieren, und zu meiner Überraschung war ich ein Amateur, der sich wohl fühlte Bei dieser Programmiersprache stellte ich fest, dass die Verbindung zu einem beliebigen SAP-System unglaublich einfach ist und außerdem 20 Minuten dauert.
Zwanzig Minuten CARL !!!
Stellen Sie sich vor, Sie können die Verbindungsschnittstelle mit dem SAP-ERP-System konfigurieren, ohne dort in so kurzer Zeit Datenbusse und alle Arten von PI \ XI zu verwenden.
Implementierung
Nachdem ich endlich sichergestellt hatte, dass dies eine funktionierende Lösung ist und den Kunden zufriedenstellt, studierte ich mehrere Plattformen (ich studierte sie, las sie etwa alle 10 Minuten) und entschied mich unter anderem für die Odoo-Plattform, da sie einfacher bereitzustellen ist und alle erforderlichen Eigenschaften aufweist, z. B.: Gut Schnittstelle, Zugriffsrechtssystem, mobile Anwendung, Mailserver, gute Datenbankschnittstelle (psql).
Außerdem ist alles sehr einfach.
Installieren Sie
Odoo auf der virtuellen Maschine des Kunden (ich habe Version 8 verwendet), weil es ist im Moment das einfachste, ich weiß, dass Version 12 bereits ist, aber die Aufgabe erfordert nicht alle coolen neuen Produkte.
Installierte alle notwendigen Bibliotheken, insbesondere pyrfc - ein
Link zu einem Artikel über Installation und Verbindung .
Außerdem musste für die Konnektivität nur ein kleines Modul in die Odoo-Plattform selbst geschrieben werden, und es gab zahlreiche Tools 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 BAPI an, um Benutzerinformationen zu erhalten
b_result = conn.call('BAPI_USER_GET_DETAIL', USERNAME = 'user', CACHE_RESULTS = ' ')
Benutzerwechsel
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 es um Tabellen geht, ist das Funktionsmodul RFC_READ_TABLE. Es gibt andere Module in der SAP-Plattform, die aufgerufen werden können. Es muss eine Einstellung vorhanden sein, die besagt, dass sie mit RFC aufgerufen werden können.
Zum Beispiel:
from pyrfc import Connection, ABAPApplicationError, ABAPRuntimeError, LogonError, CommunicationError from ConfigParser import ConfigParser from pprint import PrettyPrinter def main(): try: config = ConfigParser() config.read('sapnwrfc.cfg') -
Ergebnis
In diesem Bild eine Liste der Berichte, die mit dieser Methode entladen wurden, sowie ein Beispiel für einen dieser Berichte.

Zusammenfassung
Im Großen und Ganzen eröffnet diese Methode große Möglichkeiten, sehr teure SAP-Tools und andere durch flexiblere und offenere zu ersetzen.
Codebeispiele stammen aus Open Source. Ich habe keine Rechte zur Verwendung von Kundencode in dem Artikel, und ich bin kein Python-Programmierer. Ich hätte irgendwo einen Fehler machen können.
Ich möchte hinzufügen, dass wir dieses Tool bereits in einer Vielzahl von Aufgaben im Zusammenhang mit der KPI-Berechnung, der Ausgabe von Daten an andere Quellen (Websites, Lieferanten- und Kundendatenbanken), dem Senden von Informationen aus Systemen basierend auf Daten von SAP und vielem mehr verwenden.
Im Allgemeinen war eine solche Gelegenheit eine Entdeckung für mich. Wenn jemand eine ähnliche Erfahrung hat, würde ich gerne zuhören.
PS Ich habe das Problem der Lizenzierung nicht angesprochen, daher kann ich zu diesem Thema mit Sicherheit nichts sagen.
Vielen Dank!
Habr LinkMit freundlichen Grüßen SAP Consultant