SAP Excel

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von abl489.

    Guten Tag liebe Community,

    ich habe eine Problemstellung vor mir und würde gerne eure Meinung hören.
    Ich habe absolut keine Ahnung von VB oder VBA und würde bei 0 anfangen müssen.
    Mein Ziel: Ein Programm / Tool

    Ich muss eine Aufgabe lösen in der es um die Zeiterfassung geht. Gerne würde ich dafür ein Programm erstellen
    Dies sollte einmal eine Startmaske haben, wo Parameter eingestellt werden
    2. Maske der Ist-Zustand mit den automatisch ermittelten Daten (quasi Auftragslage aus SAP gezogen)
    3. Maske (aufgerufen durch ein Botten) wo man Zeitstempel generieren kann in dem man auf einen Button klickt
    4. Maske die nach den Kriterien aus der 3. Maske bestimmte Infos anzeigt

    Beispiel:
    Maske 1: Mitarbeiter: Hans Arbeitsplatz: 10
    Maske 2: Alle Aufträge der Woche (automatisch aus SAP gezogen, weil vorher die Angabe PLatz 10 gemacht wurde) -> unten links Button STÖRUNG
    Maske 3 nach Betätigen des Buttons Störung -> 2 Dropdownlisten -> 1. Kategorie zB Maschine, 2.Störung zB Werkzeug kaputt dann Button Störung melden -> wenn man diesen klickt = 1. Zeitstempel
    Maske 4: Anleitung zum Beheben der Störung (hier: Werkzeugwechsel) -> Button Störung behoben -> wenn dieser geklickt ist = 2. Zeitstempel

    Danach kehrt man zu Maske 2 zurück
    Die Daten müssten natürlich in eine Excel-Datei übertragen werden (Zeitstempel)
    Schöne Zusatzfunktion wäre diese im Programm aufrufen zu können



    Ohje ich hoffe ihr habt mich verstanden :S

    Der Knackpunkt für mich ist: wie zieht der sich die Daten aus Sap und ist es möglich von einer maske in eine neue zuspringen?

    Ich hab wirklich 0 Ahnung und darum auch die Frage: Woher würde ich diese Codes überhaupt bekommen? Es sind ja keine fertigen Formeln wie bei Excel zum Beispiel. Woher kann ich mir das Wissen aneignen?
    Ist mein Programm schwierig zu erstellen?


    Vielen Dank für eure Hilfe!
    Hi,

    Woher würde ich diese Codes überhaupt bekommen?
    - Aus deinem Kopf oder jemanden beauftragen

    Woher kann ich mir das Wissen aneignen?
    - Bücher, google, diese Forum

    Ist mein Programm schwierig zu erstellen?
    - Ohne Grundkenntnisse: Ja
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    oK...
    Erstmal danke für deine zwar knappe aber direkte Antwort.

    Ich persönlich finde, dass das Prgramm an sich ja nicht viel können muss.
    Hab auch lediglich das Gefühl, dass das Abrufen aus SAP das schwierigste ist.
    Und da such ich mich grad schon dumm und dusselig im Internet und finde leider nichts.
    Hier im Forum gibt es eine Liste von Büchern mit denen man VB lernen kann. Die Bücher von Löffelmann haben sich hier als ausgesprochen Lehrreich erwiesen.
    Fang mit den Basics an, und arbeite dich vorran, bis du GUI-Gestaltung und Datenverarbeitung hinter dir hast. Dann können wir nochmal über deine Aufgabe reden.

    Denn mit

    abl489 schrieb:

    wirklich 0 Ahnung
    ist dein Vorhaben einfach überambitioniert.

    abl489 schrieb:

    wie zieht der sich die Daten aus Sap
    Über den SAP Client. In unserer Firma war auch mal eine SAP Firma da. Ich hab die dann gefragt, wie man die Daten aus dem System ziehen kann. Darauf war dann die Antwort, dass man dem SAP Client die Daten nur über SQL Statements entlocken kann. Der muss nämlich prüfen, ob die Daten dann auch wieder konsistent sind. Wobei ich mir denke: Wie kann da ne Inkonsistenz dabei rauskommen, wenn ich nur LESEN will?? Aber naja Gut, is halt SAP.

    abl489 schrieb:

    ist es möglich von einer maske in eine neue zuspringen
    Kannst du. Da die Klasse Form die Methoden Show() und ShowDialog() implementieren (Unterschied kommt gleich), kannst du in der ersten Form die zweite aufrufen und anzeigen.
    Der Unterschied zwischen den Beiden ist der, dass ShowDialog() einen modalen Dialog erzeugt (d.h.: Der Benutzer muss aktiv den Dialog wieder beenden, um wieder mit dem aufrufenden Dialog interagieren zu können). Show() hingegen zeigt den Dialog nur an und man kann mit dem aufrufenden weiter arbeiten (stackoverflow.com/a/20859112/6635287)

    abl489 schrieb:

    Woher kann ich mir das Wissen aneignen?
    Wie in Post #2: Internet. Aber bevor du dich an sowas ranwagst, informiere dich bitte über die Grundlagen (Basics, Sprache, Syntax, Variablenzuweisung, Vererbung (OOP), Daten, Datenbindung, ...)

    abl489 schrieb:

    Ist mein Programm schwierig zu erstellen?
    Lass es mich so sagen: Als blutiger Anfänger wirst du es schwer haben. Nicht weil du nicht weißt, WIE du etwas machen kannst (das kann man sich rauslesen), sondern eher, weil du am Anfang einfach keinen Plan von der Sprache hast und eventuell keine Ahnung hast, WAS für Möglichkeiten du überhaupt hast (Backgrounding, Threading, ...). Außerdem wirst du dich ein wenig in die API Doku des SAP Client einlesen müssen.

    abl489 schrieb:

    Abrufen aus SAP das schwierigste ist
    Würd ich ned sagen. Im Prinzip ist das Abrufen der kleinste Teil. Dazu eine Klasse definieren, welche dir die Results liefert (am besten eine IList(Of T) oder ein IEnumerable(Of T) und jeweils eigene Typen für das Ergebnis definieren und SQL Resultat auf das brauchbare Result parsen. Kannst auch einen OR-Mapper verwenden). Der Rest (das was dann wirklich Können vorraussetzt, ist dann das Daten auf das UI bringen.

    Lg Radinator

    Edit:

    abl489 schrieb:

    VB oder VBA
    VBA wirst du hier auch ned brauchen. VBA ist das abgespeckte, Krüppelkind aus VB6 und VBS (=Visual Basic Script). Was du suchen musst/solltest ist VB.NET. Das ist das aktuelle und objekt orientierte VB!

    abl489 schrieb:

    Ich habe absolut keine Ahnung
    Ja, hast du vielleicht schon in anderen Sprachen (Java) Erfahrung? Wenn ja, dann schau dich mal in C# um. Sitz genau so wie VB.NET auf den .NET Framework auf, ist halt von der Syntax nur eher Richtung Java (Geschwungene Klammern {}, ArrayIndexer [], Semokon ; sowie Variablendefinition Type variablenName = Wert;


    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Radinator“ ()

    Hey Radinator,

    vielen lieben Dank für deine ausführliche Antwort!

    Ich kann in der Firma leider nur mit VBA arbeiten. Hab soeben die Ablehnung für andere Programme aus Kostengründen bekommen.
    Das ist aber gar nicht so wild. Hab heute echt ein bisschen was auf die Beine gestellt bekommen. Sprich Maskenwechsel, Excel im Hintergrund verschwinden lassen etc.
    Soll ja wirklich nur ein gaaanz einfaches Tool werden, wo der MA paar Sachen auswählen und einige Buttons drücken kann.

    Aber nun zum Problem SAP :D Da bin ich einfach 0 bei dir durchgestiegen und heute auch leider nicht schlau geworden :/

    Das einzige was ich weiß ist, dass SAP hier über Citrix läuft.
    Hilft das?^^

    abl489 schrieb:

    aus Kostengründen
    Visual Studio 2015 Community Edition is die Voll-Version (sofern man davon sprechen kann) also mit allen Features für lau (sofern der Umsatz/Jahr < 1 Mio)
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Der Umsatz liegt weitaus drüber...Darum muss es käuflich erworben werden und die Lizenz kostet nicht gerade wenig.Ist halt ein studentisches Projekt. Da rentiert sich das nicht, dass die Firma das extra kauft und so hoch sind die Anforderungen an das Tool wirklich nicht.

    abl489 schrieb:

    Ist halt ein studentisches Projekt
    Das würde ich doch mal als "Academic Research" klassifizieren.
    Damit kannst du es im Rahmen dieses Projekt verwenden, nur nicht darüber hinaus.
    An unlimited number of users within an organization can use Visual Studio Community for the following scenarios: in a classroom learning environment, for academic research, or for contributing to open source projects.
    For all other usage scenarios:In non-enterprise organizations, up to five users can use Visual Studio Community. In enterprise organizations (meaning those with >250 PCs or >$1 Million US Dollars in annual revenue), no use is permitted beyond the open source, academic research, and classroom learning environment scenarios described above.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich bin mir grad ned sicher, ob das überhaupt möglich ist, mit VBA auf externe Anwendungen über eine API zuzugreifen.
    Man kann zwar in VBA auf .NET Libaries zugreifen (stackoverflow.com/questions/40…-rights/40261416#40261416), aber ob sich das auch mit einem SAP Client lösen lässt, dem man raw SQL Statetments schickt?
    Vielleicht geht schicken ja noch, aber das empfangen und parsen wird dann eine haarige Sache.

    Und @abl489: Das mit der Community Edition war nur ein Vorschlag. Wenn du willst, kannst du auch die Express Version verwenden, die is glaub ich komplett kostenlos - aber nicht umsonst :D
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Auch wenn der TE alles hinbekommen würde, muss er sich trotzdem mit der Struktur der SAP Datenbank auseinander setzen. Auch wenn ich diese nicht kenne, schätze ich das ein Laie diese nicht verstehen wird und ergo auch keine korrekte abfrage schreiben können wird.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    petaod schrieb:

    Das würde ich doch mal als "Academic Research" klassifizieren.
    Damit kannst du es im Rahmen dieses Projekt verwenden, nur nicht darüber hinaus.


    Wieso sollte ich was schreiben, was danach im Grab verschwindet??
    Es sollte danach schon einsetzbar sein..


    Ok, alles klar. Ich geb es auf...
    Schade.

    Hab im Internet oft gelesen, dass es möglich ist - über Funktionsbausteine.

    Ich dachte es wäre nicht so schwer und irgendwer könnte mir das erklären.

    Ich studiere Maschinenbau (Produktionsmanagement). Will einfach nur ein Tool, was funktioniert. Bin ja keine Informatikerin, die auf einmal die Welt vom Programmieren verstehen will.
    Wie gesagt: Es sind auch eigentlich keine hohen Anforderungen an das Tool.
    Da ich bisher mit dem SAP Client noch nicht gearbeitet habe, ich geh aber mal davon aus, dass aufgrund der Tatsache, dass ABAP die Sprache in SAP ist, der Client auch in ABAP geschrieben ist.

    Ich hab mal schnell gegoogelt und bin auf zwei Einträge gestoßen, wie man aus VBA Funktionen aus nativen C/C++ DLLs aufrufen kann:
    MSDN
    sites.google.com

    Wie das allerdings mit ABAP geht, muss ich mich noch erkundigen :D
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Direkt auf die DB lässt SAP im Normalfall keine Anwendung drauf.
    Dafür gibt's Schnittstellen.

    Du Dummy-Variante wäre, per VBA das Netweaver-GUI zu scripten:
    stackoverflow.com/questions/19…data-from-sap-for-dummies

    Die elegantere Lösung, wäre der Einstieg über RFC.
    archive.sap.com/discussions/thread/1698680

    Ein interessanter Ansatz ist hier beschrieben:
    blogs.sap.com/2012/08/22/sap-connectivity-with-ms-excel/

    Allerdings habe alle Ansätze eines gemeinsam:
    Ohne Programmiererfahrung und SAP-Kenntnisse ist das ein steiniger Weg.

    abl489 schrieb:

    Bringt die Info etwas, dass der SAP Logon über Citrix läuft?
    Das ist vermutlich ein KO-Kriterium, da du auf dem lokalen Windows keine SAP-Komponenten installiert hast, die du programmtechnisch referenzieren könntest.

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „petaod“ ()

    abl489 schrieb:

    Hab im Internet einen Code gefunden
    Könntes du uns den verlinken?

    petaod schrieb:

    Direkt auf die DB lässt SAP im Normalfall keine Anwendung drauf.
    Wie bereits von mir gesagt: Du kannst auf die HANA Datenbank nur über den SAP Client

    petaod schrieb:

    Dafür gibt's Schnittstellen.
    SAP Client
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Ok, ich raste gleich aus :D

    Ich hatte eine andere Herangehensweise, aber die funktioniert auch nicht -.- Wollte erstmal eine Verknüpfung auf dem Desktop zur Transaktion erstellen und dann in VBA über ein Button aufrufen. Der Code funktioniert auch: also wenn ich das mit einem Bild als Test mache öffnet er das. Aber die Verknüpfung von SAP streikt schon. Kann sie einfach nicht öffnen, nicht mal durch direkten Zugriff per Mausklick auf dem Desktop.

    Ich glaube mir fehlen einfach jegliche Berechtigungen.. Hatte auch was von den Transaktionen se37 und se38 gelesen für die Funktionsbausteine
    aber selbst dazu fehlt mir die Berechtigung


    Der Code, den ich probiert habe lautet:

    'Anmeldung am SAP R/3 System
    ' Deklaration der Variablen.
    Dim functionCtrl As Object
    Dim sapConnection As Object
    ' Funktionsobjekte erstellen.
    Set functionCtrl = CreateObject("SAP.Functions")
    Set sapConnection = functionCtrl.Connection

    'Logon mit Initialwerten für MiniSap.
    sapConnection.Client = "000"
    sapConnection.user = "bcuser"
    sapConnection.Password = "****"
    sapConnection.Language = "DE"

    'Überprüfung ob SAP R/3 System erreichbar.
    If sapConnection.LogOn(0, False) <> True
    Then MsgBox "Keine Verbindung zum R/3!"
    Exit Sub 'Programm beenden.
    End If

    natürlich hab ich meine Daten angepasst, aber da kommt nur die Meldung Laufzeitfehler 429: oBjekterstellung durch ActiveX-KOmponente nicht möglich
    In welcher Zeile kommt der Fehler?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Set functionCtrl = CreateObject("SAP.Functions")

    Noch ein Nachtrag: Hab nun an den Rechnern der MA getestet, ob sie die berechtigung für se37 haben. Leider auch nicht.
    Kann es sein, dass es deshalb nicht funktioniert?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „abl489“ ()