Generischen Structurpfad auswerten?

Getting started ... Alles für einen gelungenen Start.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Generischen Structurpfad auswerten?

Beitrag von littlepeopleman78 (ForumUser / 5 / 0 / 0 ) »
Hallo,

ich habe ein verzwicktes Problem. Ich übergebe an ein Unterprogramm 2 unterschiedliche Strukturen. Die 1. wird nach Währungen durchsucht und die Werte werden formatiert. Dann möchte ich den Wert an die 2. Struktur übergeben, welche nur Währungsfelder besitzt, die aber den gleichen Namen haben.

Wie schaffe ich aber die Zuweisung von dem Wert zu dem richtigen Struktur-Feld, da ich diesen ja erst zur Laufzeit kenne.

Code: Alles auswählen.

FORM convert_amount_to_char17 USING structdata     TYPE any
                                    struct_of_list TYPE any
                                    act_curr       TYPE any.

  DATA: descr_ref        TYPE REF TO cl_abap_structdescr,
        lv_buffer        TYPE char17,
        ls_usdefaults    TYPE usdefaults,
        lv_c             TYPE p VALUE 0,
        lv_cellname      type string.

  FIELD-SYMBOLS: <comp_wa> TYPE abap_compdescr,
                 <fs_my> type any.

  descr_ref ?= cl_abap_typedescr=>describe_by_data( struct_of_list ).

  LOOP AT descr_ref->components ASSIGNING <comp_wa>.
    lv_c = lv_c + 1.

    IF <comp_wa>-type_kind EQ 'P' AND <comp_wa>-decimals EQ 2.
      ASSIGN COMPONENT lv_c OF STRUCTURE struct_of_list TO <fs_my>.
      
      lv_cellname = <comp_wa>-name.
      
* Write amount to buffer
      WRITE <fs_my> TO lv_buffer CURRENCY act_curr.

      CALL FUNCTION 'SUSR_USER_DEFAULTS_GET'
        EXPORTING
          user_name           = sy-uname
        IMPORTING
          user_defaults       = ls_usdefaults
        EXCEPTIONS
          user_name_not_exist = 1
          OTHERS              = 2.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

      IF ls_usdefaults-dcpfm <> space.
        REPLACE '.' WITH ':' INTO lv_buffer.
        REPLACE ',' WITH '.' INTO lv_buffer.
        REPLACE ':' WITH ',' INTO lv_buffer.
      ENDIF.

* set the negativ sign in the front of the Value.
      IF <fs_my> < 0.
        SHIFT lv_buffer RIGHT DELETING TRAILING '-'.
        CONDENSE lv_buffer NO-GAPS.
        CONCATENATE '-' lv_buffer INTO lv_buffer.
      ELSE.
        CONDENSE lv_buffer NO-GAPS.
      ENDIF.

"Hier müßte ich denn Strukturpfad angeben. Der Feldname liegt in "<comp_wa>-name
     "??? ->structdata-(Inhalt von <comp_wa>-name verwenden)<-??? = lv_buffer.
    ENDIF.

  ENDLOOP.
ENDFORM.

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


Beitrag von littlepeopleman78 (ForumUser / 5 / 0 / 0 ) »
Gibt es sonst eine Möglichkeit Types oder Datas dynamisch anzulegen. Das heißt das ich den Namen der Variable dynamisch erzeuge und dann daraus eine Variable erstellen will?

Code: Alles auswählen.

var_name = import_string.

"Hier sollte er aber den Inhalt von var_name als Name nehmen. Wie würde das funktionieren?

types: begin of ls_s,
         var_name(17) type c,
end of ls_s.

data:
lv_buffer type ls_s.

"oder.........................

data: var_name(17)  type c.

Hat sonst jemand eine Anregung. Ich glaube ich steh so tief im Wald, ich seh keine Bäume mehr! :?: [/code]

Beitrag von black_adept (Top Expert / 3950 / 105 / 886 ) »

Code: Alles auswählen.

REPORT.

DATA: dref TYPE REF TO data.
FIELD-SYMBOLS: <tab> TYPE table.

PARAMETERS: tabname TYPE dd02l-tabname OBLIGATORY DEFAULT 'MARA'.

START-OF-SELECTION.
  CREATE DATA dref TYPE STANDARD TABLE OF (tabname).
  CHECK sy-subrc = 0.
  ASSIGN dref->* TO <tab>.
  SELECT * UP TO 100 ROWS FROM (tabname) INTO CORRESPONDING FIELDS OF TABLE <tab>.
  BREAK-POINT.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von FS_CD (ForumUser / 13 / 0 / 0 ) »
black_adept hat geschrieben:

Code: Alles auswählen.

REPORT.

DATA: dref TYPE REF TO data.
FIELD-SYMBOLS: <tab> TYPE table.

PARAMETERS: tabname TYPE dd02l-tabname OBLIGATORY DEFAULT 'MARA'.

START-OF-SELECTION.
  CREATE DATA dref TYPE STANDARD TABLE OF (tabname).
  CHECK sy-subrc = 0.
  ASSIGN dref->* TO <tab>.
  SELECT * UP TO 100 ROWS FROM (tabname) INTO CORRESPONDING FIELDS OF TABLE <tab>.
  BREAK-POINT.
Jetzt noch eine Frage kann man hier auch dynamisch eine where Bedingung zusatzlich noch rein Pflanzen und wenn ja wie ?

Beitrag von black_adept (Top Expert / 3950 / 105 / 886 ) »

Code: Alles auswählen.

REPORT.

DATA: dref TYPE REF TO data.
FIELD-SYMBOLS: <tab> TYPE table.

PARAMETERS: tabname TYPE dd02l-tabname OBLIGATORY DEFAULT 'MARA'.
parameters: p_where type string default 'LVORM = ''X'' OR MATNR LIKE ''%V%'' '.

START-OF-SELECTION.
  CREATE DATA dref TYPE STANDARD TABLE OF (tabname).
  CHECK sy-subrc = 0.
  ASSIGN dref->* TO <tab>.
  SELECT * UP TO 100 ROWS
    FROM (tabname)
    INTO CORRESPONDING FIELDS OF TABLE <tab>
    where (p_where).
  BREAK-POINT.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von FS_CD (ForumUser / 13 / 0 / 0 ) »
Mann dankt und freut sich auf das Feierabend Bier 8)

Seite 1 von 1

Vergleichbare Themen

1
Antw.
3379
Views
ArchiveLink mit den generischen Objektdiensten
von void » 13.08.2007 11:26 • Verfasst in ABAP® Core
2
Antw.
3016
Views
Zeilentyp einer generischen Tabelle
von horn » 08.08.2008 20:35 • Verfasst in ABAP® für Anfänger
3
Antw.
2036
Views
Typkonflikte bei generischen Typen zur Laufzeit
von abakus » 01.12.2013 20:18 • Verfasst in ABAP Objects®
0
Antw.
914
Views
Zugriff auf Anlagen von generischen Objektdiensten
von urk » 27.03.2005 23:04 • Verfasst in Basis
1
Antw.
1863
Views
Darstellung einer Tabelle mit generischen Listbausteinen
von Chrisp83 » 22.10.2007 08:29 • Verfasst in Dialogprogrammierung

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.