cancel
Showing results for 
Search instead for 
Did you mean: 

Zugriff auf SAP B1 mit Fremdsoftware

Former Member
0 Kudos

Hallo,

wir möchten mit in C# erstellten Programmen auf SAP zugreifen. Habe schon SDK auf dem Entwicklungs-PC installiert.

Was brauche ich auf der Server-Seite, DI-Service muss sicherlich installiert sein oder ?

Was muss ich auf meinem PC eventuell noch installieren ?

Ziel ist es, gewisse SAP-Transaktionen (Wareneingangs-Buchung, Bestandsumlagerung, Bestelldaten auslesen ...) auszuführen.

Nach meinem bisherigen Verständnis muss aus im SAP Funktionen dafür geben, die dann vom Fremdprogramm aufgerufen werden.

Gibt es diese und wo kann man sie im SAP ansehen und eventuell bearbeiten ?

Bin absoluter Neuling im Umgang mit SAP.

mfG Andreas

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hallo,

der Zugriff auf SAP mit meinem externen Programm (C#) funktioniert inzwischen ganz gut.

Wollte das Programm nun mal auf einem Rechner ausprobieren, wo kein SAP-Client installiert ist.

Habe deshalb auf dem Rechner das 32-Bit-DI-API-Setup ausgeführt (meine Anwendung ist 32 Bit), dabei den Linzenzserver und Port mit angegeben.

Wenn ich mich jetzt mit meinem Programm mit dem Company-Objekt verbinden will, bekomme ich den Fehlercode -119 (Servertype not supported) zurück (wir benutzen MS SQL Server 2012).

Muss ich da noch was installieren bzw. irgendwo noch was einstellen oder woran könnte das liegen?

Danke

Former Member
0 Kudos

Hat sich inzwischen erledigt, es musste noch der Native Client Treiber für die SQL-DB installiert werden.

Former Member
0 Kudos

Das wäre auch mein Rat gewesen - Servertype not supported klingt stark nach native SQL Treiber...

Former Member
0 Kudos

Hallo,

suche schon den ganzen Tag und habe noch immer keinen Ansatz gefunden.

Lese mit meinem Programm einen Artikel mit "GetBusinessObject(BoObjectTypes.oItems)" und will ihn dann mit der Update-Methode wieder wegschreiben. Bei besteimmten Artikeln geht es, bei anderen bekomme ich den Fehler:

"10000297 - Geben Sie im Feld "Wert" eine Zahl größer 0 ein [OCR1.PrcAmount]"

Wenn ich so einen fehlerhaften Artiekl im SAP dupliziere und den neuen mit meinem Programm lese und schreibe, geht das. Der ursprüngliche geht aber weiterhin nicht.

In einer anderen Test-Datenbank gehen alle Artikel.

Finde einfach keinen Anstz, wo ich noch suchen soll. Was hat die Tabelle ocr1 mit oitm zu tun?

Hast Du evt. noch eine Idee?

Danke

Former Member
0 Kudos

Naja... so etwas kommt schon mal vor. Das UI (User-Interface) verhält sich anders als das DI (Data-Interface). Ein für das DI "fehlerhafter" Artikel kann auf dem UI durchaus funktionieren. Das liegt sicher an einem Update der SAP Version. Das UI korrigiert den Fehler, das DI nicht.

Abhilfe: Gib ihm, wonach ihm verlangt. Sprich: Dann fülle das Feld halt. Alternativ: Meldung beim SAP - Support machen, die "reparieren" die Fehlerhaften Datensätze dann. Wird aber ein wenig dauern der ganze Prozess.

hdh

Andreas

PS: Das ist eigentlich ein anderes Thema - besser ein neues aufgemacht...!

Former Member
0 Kudos

Da kann ich ja lange suchen, auf so etwas wäre ich nicht gekommen. Muss ich mal sehen, wo cih das fehlerhafte Feld mitgeben kann. In der Struktur vom oitem-Objekt sieht es ja nicht so aus und in der ocr1-Tabelle stehen keine Artikelnummern. Im SAP habe ich bisher noch keinen Punkt gefunden, wo die Einträge aus der ocr1-Tabelle bearbeitet werden können.

Werde dann in Zukunft ein neues Thema aufmachen.

Noch mal, ob ich das richtig verstanden habe:

In der SAP-DB sind einige Artikel fehlerhaft gespeichert. Wenn man mit dem SAP-Clienten arbeitet, wird dieser Fehler automatisch abgefangen, was das DI nicht macht. Damit das DI-Modul wieder richtig arbeitet, müssten die fehlerhaften Datensätze vom SAP-Support in der SAP-DB korrigiert werden.

Da muss man aber hoffentlich nicht alle fehlerhaften Artikelnummern angeben, sondern SAP hat hoffentlich die Mittel, um die Fehler selber zu erkennen und zu reparieren.

Danke

Former Member
0 Kudos

Hallo.

Nichts. Installiert man den Client, wird auch das DI mit installiert (alternativ kann man es standalaone installieren). Damit hat man vollen Zugriff auf SAP B1. Einfach ein Company-Objekt erstellen, und los geht es. Server-seitig braucht nichts installiert zu werden.

Lesend kann natürlich auch über natives SQL auf SAP Daten zugegriffen werden, das ist i.d.R. schneller.

Gibt ein ganz gutes SDK Help (Center) und viele Beispiele im Netz.

Viel Erfolg.

hdh

Former Member
0 Kudos

Hallo,

das hört sich ja gut an.

Bekomme aber beim Connect als Returncode -111 (Connection to SBO-Common has failed) zurück.

Habe CompanyDB, DBServerType, LicenseServer, Server, UserName, Password, DbUserName, DbPassword, lange und UseTrusted bestückt. Allerdings ist mir der Port für den LicenseServer nicht ganz klar. Wo kann man das ablesen?

Wo muss man da weitersuchen?

mfG Andreas

Former Member
0 Kudos

Ich würde erst einmal die Firewall ausstellen um sicher zu gehen.

Port 3000 - 30010 auf jeden Fall freigeben.

Former Member
0 Kudos

Hallo,

es lag daran, dass der DB-Nutzer kein Zugriff auf die SBO-Common hatte.

Connect funktioniert jetzt.

Wie kommt man jetzt zu dem Zusammenspiel zwischen SAP und meinem Programm, um z.B. einen Wareneingang zu buchen oder die Liste aller Geschäftspartner anzuzeigen, ohne das man die Tabelle kennt ?

Ich stelle mir da so eine Art im SAP vordefinierter Funktionen vor, die man von meinem Programm aufruft oder ist die Verfahrensweise anders ?

Danke Andreas

Former Member
0 Kudos

Bitte schau Dir mal das SDK Help Center an. Da sind viele Beispiele enthalten.

Ein paar Tipps: Man erstellt ein (Com) Objekt, z.B. einen Wareneingang. Dem gibt man noch Datum, Artikel und Menge mit, und ruft eine .ADD Methode auf - fertig ist der Wareneingang.

Eine Liste der Geschäftspartner muss man selbst bauen - .NET hat da viele Möglichkeiten, und ein einfaches SQL liefert einem die GP's. Ohne den Tabellennamen zu wissen wird es aber schwierig. Bekommt man aber leicht raus: Im Client einfach "Ansicht" "Systeminformationen" und Maus auf ein Feld halten. Augen nach unten links!

Das sollte als "Anschub" genügen... Viel Erfolg!

Former Member
0 Kudos

Hi,

das mit dem Systeminformationen war schon mal ein sehr nützlicher Hinweis, damit bekommt man wenigstens schon mal die angesprochenen Tabellen mit.

Habe jetzt die ganze Zeit im SDK Help Center gesucht, finde aber einfach nicht den richtigen Ansatz bezüglich einer Schnittstelle zum Buchen eines WE. Wenn man im SAP einen WE bucht, wird ja mindestens eine Zeile in eine Tabelle eingetragen, eventuell auch noch Einträge in andere Tabellen.

Diese Zeile hat wieder Unmengen von Spalten, von denen der Nutzer ja wahrscheinlich nur Datum, Artikel-Nr, Menge eingibt. Wer sorgt denn nun dafür, dass mit diesen 3 Angaben alle Einträge im SAP erfolgen ? Das kann doch sicher nur SAP selber, also müßte ich ja im SAP irgendwie eine Funktion definieren, aber wo und wie bekommt diese SAP-Funktion mitgeteilt, was sie alles machen soll ?

Oder muss ich in meinem Programm wirklich alle Felder selber bestücken, um den Datensatz in die DB schreiben zu können (wie sollte man dann noch eventuelle Abhängigkeiten zu anderen Tabellen raus bekommen) ?

Former Member
0 Kudos

Hallo,

bin jetzt weiter.

habe in der SDK ein STockTransfer-Obejkt für z.B. eine Warenumbuchung gefunden. Wird dann sicherlich auch funktionieren, wenn ich Schreib-Rechte auf die SBO-Common-DB bekomme.

Weißt Du, was man an DLL's vom SAP mit dem externen Programm bereitstellen muss, wenn auf dem PC mit dem externen Programm kein SAP-Client installiert ist?

Danke

Former Member
0 Kudos

Hallo,

gibt es wirklich kein fertiges Object, um z.B. eine Liste aller Produktionsaufträge zu bekommen?

Ein sql-Statement auf die richtige Tabelle geht zwar, aber was passiert, wenn sich bei einem SAP-Update Tabellenstrukturen ändern ? Da wäre doch ein existierendes Object besser. ProductionOrders bringt mir keine Liste der Einträge as der Tabeller OWOR.

Danke

Former Member
0 Kudos

Kruze Antwort: nein. Gibt ein Browser-Objekt, um die (P)Aufträge durchzulesen.

Former Member
0 Kudos

Schreib-Rechte auf der SBO-COMMON? Mitnichten. das hat nichts damit zu tun. Holzweg

Auf jedem Rechner auf dem ein Programm läuft, muss natürlich das DI - API installiert sein. Entweder standlalone, oder mit dem Client zusammen. Das ist das mindeste. Ach ja, und -NET Framework natürlich. Das war es aber. Nichts selber verteilen.

hdh

Former Member
0 Kudos

Hallo,

hatte mich wahrscheinlich falsch ausgedrückt.

Es ging um den DB-Nutzer, der momentan nur Lese-Rechte auf die SBO-Common hatte.

Nachdem er ein Schreibrecht für SEVT-Tabelle bekommen hatte, ging auch die Warenumbuchung.

Nun habe ich noch eine andere Frage:

Wenn das externe Programm von mehreren Mitarbeitern benutzt wird, soll ja nicht jeder Mitarbeiter eine SAP-Lizenz bekommen. Wenn ich aber einen Mitarbeiter anlege, der nur die Lizenzen SAP AddOns, Workflow, B1i und SDK Tools hat, bekomme ich beim Connect den RC 100000048 (was ja wohl soviel bedeutet, wie keine SAP-Lizenz). Die UserSignature vom Company-Object ist ja schreibgeschützt, so dass ich sie nach dem Connect mit einem Nutzer mit Lizenz nicht ändern kann.

Ich möchte ja hinterher im SAP bei allen Transaktionen, die vom externen Programm aus gemacht habe, nicht überall den gleichen Nutzer sehen, sondern den echten Nutzer.

Hast Du eine Idee, wie man das lösen kann?

Danke

Former Member
0 Kudos

Weißt Du eventuell, was man beim Erzeugen eines Wareneingangs wo eintragen muss, damit dieser WE mit einer Bestellung verknüpft ist (wahrscheinlich Bestellnummer oder einen anderen Verweis auf die Bestellung), damit man die Verküpfung später im Verknüpfungsplan sieht ?

Oder muss man evt. in der Bestellung was ergänzen?

Danke

Former Member
0 Kudos

Hallo,

es gibt 2 Wareneingänge im SAP - einmal den in der Lagerverwaltung, einmal den im Einkauf. Will man einen Wareneingang Einkauf auf basis einer Bestellung buchen, so setzt man in der Zeile den Bezug - also Basetype, Baseentry and Baseline. Dann wird die Bestellung "bebucht" und ein Wareneingang auf Basis einer Bestellung erzeugt.

hdh