Materialnotiz Button programmieren

Getting started ... Alles für einen gelungenen Start.
45 Beiträge • Vorherige Seite 3 von 3 (current)
45 Beiträge Vorherige Seite 3 von 3 (current)

Re: Materialnotiz Button programmieren

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hallo black_adept,

okay, ich hätte nun die Methode so ausprogrammiert (Siehe Bild) und würde damit dann die Methode ANGELWINGS_TO_DUST aufrufen. Nun wollte ich fragen, wie das gehen würde, dass der Text in dem jeweiligen Feld erscheint?

Ich hätte eher gedacht, dass man dazu die Methode ACTIVATE_ADD_COLUMNS aufrufen müsste, oder?

Vielen Dank im Voraus.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Materialnotiz Button programmieren

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Moin LoW-RiDeR,

da sind ja wieder mehrere Baustellen.
  1. Die Methode ACTIVATE_ADD_COLUMNS ist dazu da, dass die zusätzlichen Felder überhaupt eingeblendet werden und somit sichtbar sind. Der Text, der in diesen zusätlichen Spalten angezeigt wird wird in der Methode FILL_ADD_COLUMNS erzeugt. Da diese Zusatzfelder kaum lang genug sind, um die Materialnotiz anzuzeigen soll diese Methode lediglich herausfinden, ob so ein Text vorhanden ist und wenn ja soll ein Text angezeigt werden, sonst soll das Feld leer sein
  2. Ob eine Materialnotiz vorhanden ist hast du ja herausgefunden. Dein aktuelles Coding macht das allerdings doppelt - einerseits direkt programmiert in der Methode FILL_ADD_COLUMNS und andererseits in der danach von dir aufgerufenen Methode ANGELWINGS_TO_DUST. Doppelt brauchst du das nicht machen, sondern du kannst einfach ein IF ANGELWINGS_TO_DUST( ... ) = abap_true. field_content = Info, dass materialnotiz existiert. ENDIF. schreiben.
  3. Warum normalisierst du deine Materialnummer im Feld gv_matnr. Kommt die tatsächlich falsch von SAP im Feld MDKP-MATNR übergeben daher?
  4. Wenn du die schon normalisieren musst, verwende den Konvertierungexit CONVERSION_EXIT_MATN1_INPUT. Es gibt diverse Firmen, die ihre Materialnummer anders aufbereiten oder gar intern darstellen ( mache eben auch ohne ALPHA-Konvertierung ), so dass du in Teufels Küche mit deiner Vorgehensweise kommst. Ich schätze, dass das in deiner Fa. ok ist - aber im allgemeinen eben nicht
  5. Wofür die recht überflüssigen "FREE" Befehle am Ende der Methode? Wer hat dir denn das beigebracht?
  6. Ich weiß ja nicht, ob in deiner Fa. Namenskonventionen herrschen. Aber ich schätze, dass der Name gv_matnr diesen nicht entspricht. Wenn doch, solltest du vorschlagen, die Namenskonventionen mal zu überarbeiten
Wie dem auch sei - du bist ja schon recht weit.
Melde dich wieder, wenn in der MD06 jetzt in einigen Zeilen die Information, dass eine Materialnotiz vorhanden ist, sichtbar ist oder wenn dir irgendwas noch nicht klar ist.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Materialnotiz Button programmieren

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hallo black_adept,

Okay, ich hätte mein Code nun soweit abgeändert (Siehe Bild 1 ) und es wird der entsprechende Text nun auch ausgegeben (Siehe Bild 2 ). Jetzt wäre für mich halt noch die Schwierigkeit, den entsprechenden Text von der Materialnotiz anzeigen zu lassen und dass die User auch eine Materialnotiz hinterlegen können per Doppelklick auf das Feld.

Re: Materialnotiz Button programmieren

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Moin LoW-RiDeR,

warum rufst du immer noch die Methode ANGELWINGS_TO_DUST auf? Du hast die Entscheidung, welche in dieser Methode gekapselt ist doch schon in deinem Coding vorgesehen, denn nur dann wird doch der IF-Block angesprungen.

Aber ok - machen wir mal weiter.
Ich hatte dir am 1. Oktober vorgeschlagen dir ein Testprogramm zu bauen, welches die Methode DISPLAY_MATERIAL_MEMO aufrufen soll ( Punkt 5 ).
Da solltest du weitermachen, denn dann kannst du das Ganze zunächst außerhalb der MD06 austesten.

Eigentlich sollte ich dich das folgende selber rausfinden lassen - aber du musst ja mal irgendwann zu Ende kommen.
Daher hier die Info: Ruf ( aus deinem Testprogramm heraus ) den Funktionsbaustein MD_MATERIALNOTIZ auf und schaue, ob der das macht, was du brauchst.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Materialnotiz Button programmieren

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hallo black_adept,

Super!

Es würde jetzt wirklich alles funktionieren, bloß eine letzte Kleinigkeit würde mir noch fehlen und zwar wie kann ich herausfinden, ob der User einen Doppelklick in das jeweilige Feld gemacht hat?

Auf diese Art würde es ja wieder nicht gehen, weil es in einer Methode drin ist:

Code: Alles auswählen.

FORM usercommand USING r_ucomm
                       ls_selfield TYPE slis_selfield.      "#EC CALLED
 
*&---Looking for Double click on ALV
  IF r_ucomm = '&IC1'.
    READ TABLE it_mseg_mat ASSIGNING <mseg> INDEX ls_selfield-tabindex.
    IF sy-subrc = 0.
        SET PARAMETER ID 'BLN' FIELD <mseg>-mblnr.
        SET PARAMETER ID 'BUK' FIELD <mseg>-bukrs.
        SET PARAMETER ID 'GJR' FIELD <mseg>-mjahr.
 
        CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
    ENDIF.
  ENDIF.
ENDFORM.   
Vielen Dank : )

Re: Materialnotiz Button programmieren

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Moin LoW-RiDeR,

aktuell solltest du ( wenn du alles bisher richtig umgesetzt hast ) bei einem Doppelklick in der MD06 auf dem BREAK-POINT in der Methode ZCL_MD06_ENHANCEMENTS=>MD06_NAVIGATION landen und diese Methode hat 2 Eingabeparameter: Hast du dir die mal genauer im Debugger angeschaut, wenn du auf dem BREAK-POINT landest.
Vergleiche, was das drin steht, je nachdem ob du in der Liste auf dein Zusatzfeld oder ein Standardfeld doppelklickst.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Materialnotiz Button programmieren

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Super, es hat funktioniert :) .

Vielen vielen Dank. Du hast mir echt mega geholfen.

Re: Materialnotiz Button programmieren

Beitrag von Murdock (Specialist / 126 / 60 / 10 ) »
black_adept hat geschrieben:
14.10.2021 15:03
Ich weiß ja nicht, ob in deiner Fa. Namenskonventionen herrschen. Aber ich schätze, dass der Name gv_matnr diesen nicht entspricht. Wenn doch, solltest du vorschlagen, die Namenskonventionen mal zu überarbeiten[/list]
Hi black_adept,

da es mir sonst keine Ruhe lässt, eine Frage am Rande: was spricht denn gegen den Namen "gv_matnr"?

Danke,
Murdock

Re: Materialnotiz Button programmieren

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Moin Murdock,

wenn man mit der ungarischen Notation arbeitet (ich persönlich mache das fast immer, wenn keine anderen Vorgaben des Kunden vorliegen) ist es Usus, lokale Variablen mit "l" und globale Variablen mit "g" ( oder globale Klassenattribute mit "m" (= member)) beginnen zu lassen.

Der Screenshot mit dem Codeauszug, welcher die Variable gv_matnr enthält ist der für die Methode "interface~FILL_ADD_COLUMNS".
Alle dort definierten Variablen haben einen Vorsatz lv_ oder gv_ was auf die ungarische Notation hindeutet.
gv_matnr ist eine dieser innerhalb dieser Methode definieren Variablen und somit eine lokale Variable wohingegen der Vorsatz "gv_" auf eine globale Variable hindeutet.

Das passt einfach nicht zusammen...

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
MurdockDeathAndPain

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Materialnotiz Button programmieren

Beitrag von Murdock (Specialist / 126 / 60 / 10 ) »
black_adept hat geschrieben:
27.10.2021 17:05

Der Screenshot mit dem Codeauszug, welcher die Variable gv_matnr enthält ist der für die Methode "interface~FILL_ADD_COLUMNS".
Alle dort definierten Variablen haben einen Vorsatz lv_ oder gv_ was auf die ungarische Notation hindeutet.
gv_matnr ist eine dieser innerhalb dieser Methode definieren Variablen und somit eine lokale Variable wohingegen der Vorsatz "gv_" auf eine globale Variable hindeutet.
Ach so, alles klar. ich dachte Du störst dich generell an der ungarischen Notation oder hier an dem Suffix "matnr".

Re: Materialnotiz Button programmieren

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Murdock hat geschrieben:
28.10.2021 07:39
ich dachte Du störst dich generell an der ungarischen Notation
Ich bin nicht Ralf 😊

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Murdock

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Materialnotiz Button programmieren

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Ich bin genauso wenig Fan der ungarischen Notation wie Ralf, sehe es aber zugleich auch wie black_adept: Wenn man sie schon verwendet, dann sollte sie wenigstens stimmen, sonst gehen jegliche Argumente, die für ihre Verwendung sprechen, den Bach runter. Das habe ich bei Codes anderer Leute leider schon zu oft gesehen, dass blind alle Variablen mit lv_ beginnen, egal on sie lokal, global oder Im/Exportparameter sind. Da merkt man dann, dass der Betreffende nicht mal mehr verstanden hat, was er da eigentlich tut, sondern blind lv_ schreibt, weil er es bei anderen so gesehen hat. Und dann ist dieses Präfix definitiv nur noch Wasserkopfmüll.
black_adept hat geschrieben:
27.10.2021 17:05
...ist es Usus, lokale Variablen mit "l" und globale Variablen mit "g" ( oder globale Klassenattribute mit "m" (= member)) beginnen zu lassen.
Das ist ja gerade das Verlogene an der objektorientierten Programmierung: "globale Klassenattribute" sind bei Licht betrachtet nichts anderes als globale Variablen der Klasse. Mit dem Verweis auf die Tugendhaftigkeit von OO als Ausrede wird von sauberer Parametrisierung der Unterprogramme abgewichen und wieder wie in grauer Programmiersteinzeit als "Attribute" verbrämte globale Variablen verwendet, mit all den damit verbundenen Nachteilen, dass man nämlich, wenn man ein Stück Code anschaut, rätselraten darf, wo deren Wert herkommt und wo er nachher hingeht. Ich habe schon bei mehr als einem Programmierer Programme gesehen, deren Hauptprogramm nicht mehr als eine Kette parameterloser (!) Methodenaufrufe war und man dann anfangen durfte zu forschen, auf welche Weise diese Methoden zusammenhängen bzw. welche Daten von wo nach wo laufen (oder anders ausgedrückt: wie das Programm überhaupt arbeitet). Das macht es unendlich viel schwerer, einen Fehler zu finden oder den Code zu erweitern. Was man da an Zeit verbrennt, ist locker das Tausendfache der Zeit, die es den ursprünglichen Programmierer gekostet hätte, seine Methoden diszipliniert zu parametrisieren.

Den Vorsatz "m" kenne ich eigentlich nur als globalen REF TO DATA, wo dann dynamisch eine globale Variable gefüllt wird. Aber das habe ich bislang nur selten gesehen und bin mir daher nicht sicher, ob es "offiziell" so definiert ist.

Re: Materialnotiz Button programmieren

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
DeathAndPain hat geschrieben:
28.10.2021 12:59
Das ist ja gerade das Verlogene an der objektorientierten Programmierung: "globale Klassenattribute" sind bei Licht betrachtet nichts anderes als globale Variablen der Klasse. Mit dem Verweis auf die Tugendhaftigkeit von OO als Ausrede wird von sauberer Parametrisierung der Unterprogramme abgewichen und wieder wie in grauer Programmiersteinzeit als "Attribute" verbrämte globale Variablen verwendet, mit all den damit verbundenen Nachteilen, dass man nämlich, wenn man ein Stück Code anschaut, rätselraten darf, wo deren Wert herkommt und wo er nachher hingeht.
Mit dem 1. Teil "Attribute = globale Klassenattribute" gebe ich dir völlig recht. Aber in Reports mit lokalen Klassen gibt es innerhalbe einer Methode halt 3 Sichtbarkeiten: Lokal, global innerhalb der Klasse, global innerhalb des Reports.
Mit dem 2. Teil kann ich nur sagen: Wer so was schreibt, wird in Reports genau so einen Mist verzapfen.
Aber globale Klassenvariablen (=Attribute) haben dann einen Sinn, wenn man eine Klasse nicht nur als Modularierungsersatz sieht sondern tatsächlich den Objekt-Aspekt ausnutzen möchte, nämlich dass eine Klasseninstanz alle variablen Eigenschaften des zu repräsentierenden Objekts hält. Wie man nachher mit diesen Variablen umgeht und ob es dann noch wartbar ist, liegt - wie eigentlich immer - beim Entwickler. Du da findest du halt solche und solche...
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Materialnotiz Button programmieren

Beitrag von DeathAndPain (Top Expert / 1961 / 261 / 415 ) »
Mit dem 2. Teil kann ich nur sagen: Wer so was schreibt, wird in Reports genau so einen Mist verzapfen.
Du machst den Fehler, rational zu denken. 😜 Das tun die Leute aber nicht, sondern folgen Prinzipien, die ihnen eingehämmert worden sind. Bei klassisch-prozeduraler Programmierung bestehen diese Prinzipien aus: "Globale Variablen sind böse und sollten nicht benutzt werden. Verwende stattdessen Parameter!" Also machen die Leute das.

Bei OO-Programmierung wird hingegen gepredigt: "In Attributen wird der Zustand des Objektes festgehalten. Sie sind gut, gegen ihre Nutzung ist nichts einzuwenden, da man an ihnen immer den Zustand des Objektes ablesen kann." Was davon hängenbleibt, ist: "Attribute sind gut und dürfen benutzt werden." Also machen die Leute das. (Und was man alles als "zum Zustand des Objektes gehörig" betrachtet, ist eine hervorragend dehnbare Ansichtssache.)

OO war mal lieb gemeint. Man kann damit ganz tolle Sachen machen. Aber: Das Gros der Entwickler ist mit den dahinterstehenden Konzepten überfordert. Sie haben die dahinterstehenden Philosophien schlicht und ergreifend nicht ausreichend kapiert. Vielleicht ist das auch ein Problem mangelhafter Lehre, kann schon sein.

Aber das Endergebnis sieht so aus, dass die Masse des vorhandenen OO-Codes erheblich schwerer zu verstehen und zu warten ist als der prozedurale Code. Und zwar auch bei Anforderungen, bei denen man die Spezialitäten von OO wie Abstrahierung usw. überhaupt nicht braucht (und das ist die Masse). Ich verweise auf mein Lieblingszitat, das ich mal irgendwo gelesen habe: "I don’t know the answer but I do know that debugging what happens after pressing a command in VA01 is easier to follow than the equivalent in ME21N. Or is that just because I am an OO novice?"

Und damit bin ich der Meinung, ein mächtiges Werkzeug, mit dem kaum einer richtig umgehen kann, aber trotzdem alle arbeiten (mit den entsprechend pfuschligen Ergebnissen) wirkt sich in der Praxis schlechter aus als ein einfacher strukturiertes, dessen richtige Verwendung in den Köpfen zumindest zu einem erheblich größeren Anteil ankommt. Und selbst wenn man es verstanden hat: bei einer Aufgabe, bei der die größere Mächtigkeit des komplexeren Werkzeugs keine Vorteile bringt, ist das einfachere Werkzeug - die Formroutine - leichter zu schreiben und leichter zu verstehen als die Methode mit ihrem Klassenoverhead. Deswegen nutze ich sie noch immer gerne und baue nur dort Klassen und Methoden, wo sie aus meiner Sicht Vorteile versprechen, anstatt es aus ideologischen Gründen immer zu tun.

Re: Materialnotiz Button programmieren

Beitrag von ewx (Top Expert / 4854 / 313 / 644 ) »
Prozedurales Programmieren ist Spaghetti, objektorientier Ravioli... 😂

Du magst Recht haben, dass viele OO-Programmierung nicht richtig verstehen.

Das Argument "ich nutze es nur da, wo ich einen Vorteil" sehe hört sich so an wie: "ich drehe die Schraube lieber mit dem Schraubendreher rein, weil es zu aufwändig ist, mit der Leiter den Koffer mit dem Akkuschrauber aus dem obersten Schrank zu holen, den Koffer aufzumachen und vielleicht noch den Akku laden zu müssen. oh man, jetzt muss ich auch noch den passenden Bit raussuchen...".

Vergleichbare Themen

2
Antw.
805
Views
(Exportieren Tabellenkalkulation) Button programmieren Wie ??
von Armin93 » 03.09.2019 12:46 • Verfasst in ABAP® für Anfänger
1
Antw.
404
Views
statt Button F8 Button Close setzen
von HH_ABAP » 18.05.2023 21:16 • Verfasst in ABAP® für Anfänger
5
Antw.
4706
Views
Per Button klick ein symbol in den Button einfügen
von alex1986 » 03.08.2011 15:57 • Verfasst in ABAP® für Anfänger
4
Antw.
3225
Views
Uhr programmieren
von donossi » 17.11.2011 11:50 • Verfasst in ABAP® für Anfänger
1
Antw.
1233
Views
Liste programmieren
von ostpower » 22.07.2011 14:34 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor einer Woche von rob_abc gelöst 8 / 8528
ABAP - Mail so10 Text
vor einer Woche von retsch 6 / 2431
selection-screen comment mit icon
vor einer Woche von DeathAndPain 9 / 3710

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor einer Woche von rob_abc gelöst 8 / 8528
ABAP - Mail so10 Text
vor einer Woche von retsch 6 / 2431
selection-screen comment mit icon
vor einer Woche von DeathAndPain 9 / 3710

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor einer Woche von Manfred K. 1 / 2842
BUSOBJEKT zu CMIS PHIO ermitteln
vor 4 Wochen von snooga87 1 / 4651