Klassen und Merkmale herauslesen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
69 Beiträge • Vorherige Seite 2 von 5 (current) Nächste
69 Beiträge Vorherige Seite 2 von 5 (current) Nächste

Re: Klassen und Merkmale herauslesen

Beitrag von commolus (Specialist / 153 / 32 / 0 ) »
Dies ist nun das vorläufige Coding

Code: Alles auswählen.

REPORT  z_trda_ber.

*&---------------------------------------------------------------------*
*& Selektion auf die Materialnummern
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

PARAMETERS pa_matnr TYPE matnr.


*&---------------------------------------------------------------------*
*& Deklarierung der Tabellen
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

DATA: lt_object_ident         LIKE api_ob_key OCCURS 0,
      ls_object_ident         LIKE LINE OF lt_object_ident,
      lt_charact_values       like api_val_r  occurs 0,
      ls_charact_values       like line of lt_charact_values,
      lv_charact_value(100),
      lt_charact_values_cond  like api_val_r  occurs 0,
      pvi_matnr LIKE mara-matnr.

CLEAR lt_object_ident.
ls_object_ident-field  = 'MATNR'.
ls_object_ident-value  =  pa_matnr.

APPEND ls_object_ident TO lt_object_ident.


*&---------------------------------------------------------------------*
*& Aufruf des FuBa
*&
*&---------------------------------------------------------------------*
*& Der FuBa sollte funktionieren, die daten liegen nach dem Funktionsbaustein in der Tabelle lt_charact_values
*&
*&---------------------------------------------------------------------*


CALL FUNCTION 'CACL_OBJECT_READ_VALIDATION'
  EXPORTING
*   OBJECT                         =
    object_type                    = 'MARA'
    class_type                     = '001'
    class                          = 'Z_TRDA'
*   WITH_UNASSIGNED_CHARACTS       = 'X'
*   WITH_INHERITED_CHARACTS        = 'X'
*   DATE                           =
*   LANGUAGE                       = SYST-LANGU
*   I_OBJ_NOT_CHK                  = ' '
*   I_AENNR                        =
*   I_EXECUTE_DEP                  = ' '
  TABLES
    object_identification          = lt_object_ident
    charact_values                 = lt_charact_values
 EXCEPTIONS
   error                          = 1
   warning                        = 2
   OTHERS                         = 3
          .
IF sy-subrc <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Wie bekomme ich nun die Daten aus der lt_charact_values in ein workarea oder eine interne Tabelle um mit diesen Daten nun eine Berechnung anstellen zu können?

Danke und ein schönes Wochenende!!!!

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


Re: Klassen und Merkmale herauslesen

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hallo commolus,

was genau klappt denn nicht? lt_charact_values ist doch bereits eine interne Tabelle!

wenn denn unbedingt wo anders hinkopiert werden soll, dann mit

Code: Alles auswählen.


LOOP AT lt_charact_values INTO ls_charact_values.
"aus der ls_charact_values können die Werte woanders kopiert werden
ENDLOOP.

schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Klassen und Merkmale herauslesen

Beitrag von commolus (Specialist / 153 / 32 / 0 ) »
Die Daten die ich nun mit der FUBA gezogen habe sollten nun mit dieser Formel berechnet werden.

Code: Alles auswählen.

it_min = ls_charact_values-Z_TRDA_0980 * ls_charact_values-Z_TRDA_1065 *
'1,02' * lt_charact_values-Z_TRDA_0005 * lt_charact_values-Z_TRDA_0005 * PI / '4' *
lt_charact_values-Z_TRDA_0090 / ( lt_charact_values-Z_TRDA_0005 * lt_charact_values-Z_TRDA_0005 * PI )
/ '4' * lt_charact_values-Z_TRDA_0090 + lt_charact_values-Z_TRDA_0015 * lt_charact_values-Z_TRDA_0015 * PI  /
( '4' * lt_charact_values-Z_TRDA_0095 ) .
it_min sollte nachher als Wert ausgegeben werden.

Das selbe sollte ein 2. Mal mit der it_max berechnet werden.

Re: Klassen und Merkmale herauslesen

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hmmm WO genau ist denn nun das Problem? Du wolltest wissen wie man die Daten aus lt_charact_values in ein Workarea bekommt, dazu habe ich dir den LOOP vorgeschlagen. Möchtest du nun noch wissen wie du die Formel in dem LOOP einbinden sollst? Oder zeigst du uns die Formel einfach so, weil sie so schön lang ist?

eigentlich ist es doch nichts, was du nicht schon mal gemacht hast...
Beachte bei der Berechnung, dass lt_... die Tabelle und ls_... eine Zeile davon ist. In der Formel arbeitest du also immer mit ls_...!

Code: Alles auswählen.

LOOP AT lt_charact_values INTO ls_charact_values.

it_min = ls_charact_values-Z_TRDA_0980 * ls_charact_values-Z_TRDA_1065 *
'1,02' * ls_charact_values-Z_TRDA_0005 * ls_charact_values-Z_TRDA_0005 * PI / '4' *
ls_charact_values-Z_TRDA_0090 / ( ls_charact_values-Z_TRDA_0005 * ls_charact_values-Z_TRDA_0005 * PI )
/ '4' * ls_charact_values-Z_TRDA_0090 + ls_charact_values-Z_TRDA_0015 * ls_charact_values-Z_TRDA_0015 * PI  /
( '4' * ls_charact_values-Z_TRDA_0095 ) .

it_max = ....

write: pa_matnr, it_min, it_max.

ENDLOOP.
um auf Nummer sicher zu gehen könntest du noch bei den Formeln versuchen Division durch null und Feldüberlauf abzufangen
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Klassen und Merkmale herauslesen

Beitrag von black_adept (Top Expert / 4134 / 131 / 956 ) »
Argh - was ist denn das für eine Formel?

1.) ... * '1,02' führt zu einem Dump, da "1,02" keine interne Zahldarstellung ist ( das muss "1.02" heißen ).
2.) Überhaupt ist * '...' ein doofes Konstrukt, da intern der String '...' erstmal in eine Zahl umgewandelt werden muss. Schöner ist also immer statt "* '4'" gleich ein "* 4" zu schreiben.
3.) Auch '1.02' lässt sich leicht durch 102/100 ersetzen.
4.) In der Schule lernt man zu kürzen! Bei deiner Formel lässt sich nicht nur die Variable ls_charact_values-Z_TRDA_0005 vollständig aus der Formel rauskürzen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Klassen und Merkmale herauslesen

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
ich muss gestehen so genau habe ich mir die Formel nicht angeschaut, es waren zu viele Zeichen ;-) Neben den bereits angesprochenen Punkten könntest du die Formel verkleinern, indem du das Potenzieren mit ** machst.

Aus

Code: Alles auswählen.

ls_charact_values-Z_TRDA_0015 * ls_charact_values-Z_TRDA_0015
wird also

Code: Alles auswählen.

ls_charact_values-Z_TRDA_0015 ** 2
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Klassen und Merkmale herauslesen

Beitrag von commolus (Specialist / 153 / 32 / 0 ) »
Morgen!

Mir ist es eigentlich darum gegangen wie ich nun die Formel am besten berechne (es geht jetzt nicht um die Richtigkeit der Formel, die ist mir jetzt egal, da ich weder mathematiker noch techniker bin. Für die Richtigkeit der Formel müssen andere in der Firma sorge tragen ;) ).

Da sich die ls_charact_... ja erst mit jedem Schleifendurchlauf aufbaut kann ich meine Formel ja nicht innerhalb des Loops einbauen sondern danach.

Hätte mir das in etwa so vorgestellt.

Code: Alles auswählen.

CALL FUNCTION 'CACL_OBJECT_READ_VALIDATION'
  EXPORTING
*   OBJECT                         =
    object_type                    = 'MARA'
    class_type                     = '001'
    class                          = 'Z_TRDA'
*   WITH_UNASSIGNED_CHARACTS       = 'X'
*   WITH_INHERITED_CHARACTS        = 'X'
*   DATE                           =
*   LANGUAGE                       = SYST-LANGU
*   I_OBJ_NOT_CHK                  = ' '
*   I_AENNR                        =
*   I_EXECUTE_DEP                  = ' '
  TABLES
    object_identification          = lt_object_ident
    charact_values                 = lt_charact_values
 EXCEPTIONS
   error                          = 1
   warning                        = 2
   OTHERS                         = 3
          .
IF sy-subrc <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

*&---------------------------------------------------------------------*
*& Ab hier entsteht nun die Berechnung
*&
*&---------------------------------------------------------------------*
*& Die Daten liegen in lt_charact_values; ev. kann ich direkt die Felder aus dieser für die Berechnung ziehen
*& ev. eine interne Tabelle anlegen welche mit den Min. und Max. Daten befüllt werden und dann zur ausgabe
*& gebracht werden;; eventuell kann ich die Fehlermeldung mit einem loop von der lt_ in die ls_ lösen
*&---------------------------------------------------------------------*
Data: it_min type p LENGTH 5 DECIMALS 2,
      it_max type p LENGTH 5 DECIMALS 2.

data: lt_charact like lt_charact_values[].

LOOP AT lt_charact_values INTO ls_charact_values.


ENDLOOP.

* it_min = ls_charact_values-Z_TRDA_0980 * ls_charact_values-Z_TRDA_1065 *
*'1,02' * ls_charact_values-Z_TRDA_0005 * ls_charact_values-Z_TRDA_0005 * PI / '4' *
*ls_charact_values-Z_TRDA_0090 / ( ls_charact_values-Z_TRDA_0005 * ls_charact_values-Z_TRDA_0005 * PI )
*/ '4' * ls_charact_values-Z_TRDA_0090 + ls_charact_values-Z_TRDA_0015 * ls_charact_values-Z_TRDA_0015 * PI  /
*( '4' * ls_charact_values-Z_TRDA_0095 ) .
*
 write: pa_matnr, it_min, it_max.
Sicht auf die ls_charact_... im Debugger
ls_charact_values.JPG
Wenn ich jedoch versuche die Formel ein zu bauen kommt es zu dieser Fehlermeldung.
Fehlermeldung.JPG
LG und Danke

Re: Klassen und Merkmale herauslesen

Beitrag von wreichelt (Top Expert / 1068 / 31 / 193 ) »
Hallo,

ist der Feldname nicht ATNAM, der Wert ist natürlich Z_TRDA_.....

Gruß
Wolfgang

Re: Klassen und Merkmale herauslesen

Beitrag von JHM (Top Expert / 1211 / 2 / 202 ) »
commolus hat geschrieben:, da ich weder mathematiker noch techniker bin.
Was bist du denn dann?

Du mußt die Tabelle mit den Merkmalen so umformen, dass die Werte in der Berechnung einzeln zur verfügung stehen, z.B. in einer Struktur:

Code: Alles auswählen.

* Struktur mit allen Merkmalen definier, BITTE den Datentyp auf deine Bedürfnisse ändern
TYPES: BEGIN OF ts_merkmale,
         Z_TRDA_0980 TYPE i,
         Z_TRDA_1065 TYPE i,
         Z_TRDA_0005 TYPE i,
         .....                                  "für jedes Merkmal aus der Formel ein Feld einfügen!
       END OF ts_merkmlae.

DATA: ls_merkmale TYPE ts_merkmale

CALL FUNCTION 'CACL_OBJECT_READ_VALIDATION'
 ....
 EXCEPTIONS
   error                          = 1
   warning                        = 2
   OTHERS                         = 3
          .
IF sy-subrc <> 0.
* Hie gehört ein vernüpftiges Fehlerhandling hin!
ENDIF.

*&---------------------------------------------------------------------*
*& Ab hier entsteht nun die Berechnung
*&
*&---------------------------------------------------------------------*
*& Die Daten liegen in lt_charact_values; 
*&---------------------------------------------------------------------*
CLEAR: ls_merkmale.

LOOP AT lt_charact_values INTO ls_charact_values.
* Merkmale aus der ITAB in die Strucktur übernehmen:
  CASE ls_charact_values-charact.
    WHEN 'Z_TRDA_0980'.
      ls_merkmal-Z_TRDA_0980 = ls_charact_values-value.
    WHEN 'Z_TRDA_1065'.
      ls_merkmal-Z_TRDA_1065 = ls_charact_values-value.
    WHEN ...                                          "für jedes Merkmal in der Formel müssen die Werte übernommen werden.
    WHEN OTHERS.
      CONTINUE.                                     "dieses Merkmal interessiert uns nicht!
  ENDCASE.

ENDLOOP.

* Jetzt rechnen mit den Werten der einzelnen Merkmalen aus der Struktur:
 it_min = ls_merkmal-Z_TRDA_0980 * ls_merkmal-Z_TRDA_1065 * .......

 write: pa_matnr, it_min, it_max.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
commolus

Gruß Hendrik

Re: Klassen und Merkmale herauslesen

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hallo,
bei meiner Antwort habe ich nicht bedacht, dass die Interne Tabelle die Merkmale einzeln auflistet. Wie du die Werte in die Struktur bekommst wurde ja schon gesagt. Eins wollte ich noch loswerden:
commolus hat geschrieben: ...es geht jetzt nicht um die Richtigkeit der Formel, die ist mir jetzt egal, da ich weder mathematiker noch techniker bin. Für die Richtigkeit der Formel müssen andere in der Firma sorge tragen...
Ich würde diese Einstellung überdenken. Die Formel kommt von jemand anders, aber es fällt dir auf die Füsse, denn es ist in deinem Programm verbaut! Wenn du das Programm so gestalten möchtest, dass du es später nicht so oft anfassen musst (oder leichter warten kannst), so solltest du dich schon im Vorfeld damit auseinander setzen. Dazu gehört zum Beispiel der Versuch die Lesbarkeit der Formel zu verbessern, für den Fall, dass du in 1-2 Jahren das Programm verändern möchtest und nicht mehr weisst was hier eigentlich passiert. Dazu gehört auch der Versuch potentiell mögliche Fehler zu erkennen wie Division durch Null oder Feldüberlauf, wenn das Ergebnis der Formel zu gross ist, um in die Zielvariable geschrieben zu werden.
Schreiben Sie Ihren Code so, als wäre der Typ, der Ihren Code warten muss, ein pathologischer Amokläufer, der Ihre Adresse kennt
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Klassen und Merkmale herauslesen

Beitrag von commolus (Specialist / 153 / 32 / 0 ) »
Ihr habt natürlich beide recht.
Hab aber so eine Formel noch nie ein ABAP eingebaut. Wenn der ABAP läuft kann ich mich um die Formel kümmern. Leider ist es noch nicht so weit!!!


@JHM Danke sollte funktionieren. Danke für den Rat jetzt weiss ich wo mein Fehler lag!!!!

Nun hab ich aber ein anderes Porblem!
Ich habe nun bemerkt dass auch die Einheit in das gleiche Feld übernommen wird (mm, mm², kv, kw, ...) und dies macht mir in der Berechnung probleme.
fehler2.JPG
Was haltet ihr von dem Ansatz diese letzten Zeichen mit "replace regex 'D\s*$' in" zu entfernen. Funktioniert nur leider nicht so wie ich das wollte.


Hat jemand dazu Erfahrung?


Danke

Re: Klassen und Merkmale herauslesen

Beitrag von JHM (Top Expert / 1211 / 2 / 202 ) »
commolus hat geschrieben:Was haltet ihr von dem Ansatz diese letzten Zeichen mit "replace regex 'D\s*$' in" zu entfernen.
Mittels SPLIT beim SPACE in zwei Teile zerlegen. Benötigt wird nur der erste Teil, wobei da dann noch das Komma durch einen Punkt ersetzt werden muss.
Gruß Hendrik

Re: Klassen und Merkmale herauslesen

Beitrag von black_adept (Top Expert / 4134 / 131 / 956 ) »
commolus hat geschrieben:Was haltet ihr von dem Ansatz diese letzten Zeichen mit "replace regex 'D\s*$' in" zu entfernen. Funktioniert nur leider nicht so wie ich das wollte.
Hat jemand dazu Erfahrung?
Das hört sich jetzt vielleicht blöd an - aber versuch mal beim Aufbau der Tabelle mittels des FuBa CACL_OBJECT_READ_VALIDATION den Importparameter LANGUAGE mit einer bei euch nicht installierten Sprache ( z.B. trad. Chinesisch = M oder arabisch = A ) aufzurufen und schau dir dann an, was in der Tabelle zurückgegeben wird.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Klassen und Merkmale herauslesen

Beitrag von ewx (Top Expert / 4885 / 319 / 644 ) »
Nach Feld "INSTANCE" kommt das Feld VALUE_NEUTRAL... 8)

Re: Klassen und Merkmale herauslesen

Beitrag von commolus (Specialist / 153 / 32 / 0 ) »
black_adept hat geschrieben:
commolus hat geschrieben:Was haltet ihr von dem Ansatz diese letzten Zeichen mit "replace regex 'D\s*$' in" zu entfernen. Funktioniert nur leider nicht so wie ich das wollte.
Hat jemand dazu Erfahrung?
Das hört sich jetzt vielleicht blöd an - aber versuch mal beim Aufbau der Tabelle mittels des FuBa CACL_OBJECT_READ_VALIDATION den Importparameter LANGUAGE mit einer bei euch nicht installierten Sprache ( z.B. trad. Chinesisch = M oder arabisch = A ) aufzurufen und schau dir dann an, was in der Tabelle zurückgegeben wird.
Geht leider nicht. Das Ergebnis bleibt das Gleiche

Vergleichbare Themen

20
Antw.
6013
Views
Globale Klassen oder Lokale Klassen
von ZF_SAPler » 29.11.2022 13:47 • Verfasst in ABAP® für Anfänger
9
Antw.
6591
Views
Lokale Klassen in globalen Klassen
von ralf.wenzel » 20.04.2020 22:55 • Verfasst in ABAP Objects®
1
Antw.
5257
Views
Klassifizierung und Merkmale
von JohnLocklay » 25.08.2017 08:31 • Verfasst in ABAP® Core
0
Antw.
1021
Views
Rubrikunterteilung der Merkmale
von liberado » 23.04.2007 14:24 • Verfasst in ABAP® Core
0
Antw.
1503
Views
Merkmale Klassifizierung
von SUSI » 22.08.2005 08:16 • Verfasst in Sales and Distribution

Aktuelle Forenbeiträge

RFC vs. ODATA
vor 6 Tagen von DeathAndPain 8 / 2271
FUBA 'HR_INFOTYPES_OPERATION'
vor 6 Tagen von DeathAndPain 2 / 1389
Frage zur redefinierten Methode
vor einer Woche von ralf.wenzel 12 / 2673

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.