Begin OF-Struktur

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Begin OF-Struktur

Beitrag von Bugfix13 (ForumUser / 97 / 17 / 5 ) »
Guten Tag

Ich möchte gerne mittels einer Begin OF-End OF-Struktur einen eigenen Datentyp definieren. Dazu möchte ich gerne die Felder einer Tabelle mittel INCLUDE STRUCTURE hinzufügen. Dieser Tabellenname ist jedoch in einer Variable gespeichert und variiert von Fall zu Fall -> somit kann ich nicht die Tabelle selbst mitgeben:

Code: Alles auswählen.


DATA: w_tablename          TYPE tablename.

...... w_tablename wird gefüllt ....

DATA : begin of t_import .
            INCLUDE STRUCTURE w_tablename.
            data : description(30) type c,
          end of t_import.

Wenn ich das nun ausführe merkt das System natürlich nicht, dass ich nicht den Datentyp von w_tablename will sondern den Inhalt. Ich habe es schon mit Klammern versucht aber ich bekomme es nicht hin. Gibt es eine Möglichkeit, wie ich den Inhalt(ein Tabellennamen) mitgeben kann??

Ich hoffe ihr versteht was ich meine. Vielen Dank im Voraus!

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


Re: Begin OF-Struktur

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
hi!

Bitte gewöhne dir an mit TYPES zu arbeiten um einen Datentyp (Strukturtyp) zu definieren.
Wenn du das ganze dann an einer anderen Stelle auch noch brauchst (oder als Tabellentyp) kannst du dann immer wieder darauf zurückgreifen und musst es nicht jedesmal neu definieren.

So, nun zu deinem Problem: So wie du dir das denkst geht das nicht.

Bei der Definition von Datentypen und Variablen kannst du nur auf andere vorhandene Datentypen (mit TYPE) und Variablen (mit LIKE) zurückgreifen.
Was du aber machen kannst, ist eine sog. Datenreferenz (TYPE REF TO DATA) zu verwenden.
Das bedeutet aber auch, dass du nicht mehr so wie bisher mit dem - auf die Komponenten deiner Struktur zugreifen kannst.
Außerdem musst du bedenken, dass die eigentlichen Daten NICHT in der Struktur gespeichert werden sondern nur ein Zeiger darauf.

Das ganze würde ungefähr so ausschauen:

Code: Alles auswählen.

types: 
  begin of ts_import,
    value type ref to data,
    name type c length 30,
  end of ts_import.
DATA:
  ls_import TYPE ts_import,
  w_tablename TYPE tablename,
  w_fieldname TYPE fieldname.
FIELD-SYMBOLS: <ls_value> TYPE ANY.

CREATE DATA ls_import-value type (w_tablename).
ASSIGN ls_import-value->* to <ls_value>.
ASSIGN COMPONENT w_fieldname OF structure <ls_value> to <la_field>.
Das ASSIGN COMPONENT musst du natürlich für jedes Feld aus deiner Struktur machen um darauf zuzugreifen.
Mehr zu den einzelnen Befehlen findest du in der Hilfe.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Begin OF-Struktur

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Hallo Bugfix,

willst du einfach eine bestehende Struktur erweitern? Das geht recht einfach mit den RTTI-Klassen von SAP.
Beispiel:

Code: Alles auswählen.

REPORT.

DATA: gt_struc      TYPE cl_abap_structdescr=>component_table,
      gs_part       LIKE LINE OF gt_struc,
      gr_dref_struc TYPE REF TO cl_abap_structdescr,
      gr_dref       TYPE REF TO data.
FIELD-SYMBOLS: <gs_extended_structure> TYPE ANY.

PARAMETERS: p_table TYPE dd03l-tabname DEFAULT 'SFLIGHT'.

END-OF-SELECTION.
  CLEAR gs_part.
  gs_part-name       = space.  " Wenn du hier einen Namen vergibst kannst du die ganze Struktur unter diesem ansprechen
  gs_part-as_include =  'X'.
  gs_part-type       ?= cl_abap_structdescr=>describe_by_name( p_table ).
  APPEND gs_part TO gt_struc.

  DATA: description(30) TYPE c.
  CLEAR gs_part.
  gs_part-name       =  'DESCRIPTION'.
  gs_part-as_include =  ' '.
  gs_part-type       ?= cl_abap_structdescr=>describe_by_data( description ).
  APPEND gs_part TO gt_struc.

  gr_dref_struc ?= cl_abap_structdescr=>create( gt_struc ).
  CREATE DATA gr_dref TYPE HANDLE gr_dref_struc.
  ASSIGN gr_dref->* TO <gs_extended_structure>.
  BREAK-POINT.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Begin OF-Struktur

Beitrag von Bugfix13 (ForumUser / 97 / 17 / 5 ) »
Ich habe mich nun daran versucht, jedoch klappt das im Zusammenhang mit GUI Upload noch nicht. Ich kriege da eine Fehlermeldung. An was könnte das liegen? Geht das überhaupt so? Danke für eure grosse Hilfe.

Code: Alles auswählen.

FORM import USING w_path TYPE string.

  DATA: gt_struc      TYPE cl_abap_structdescr=>component_table,
        gs_part       LIKE LINE OF gt_struc,
        gr_dref_struc TYPE REF TO cl_abap_structdescr,
        gr_dref       TYPE REF TO DATA,
        w_table       TYPE dd03l-tabname.
  FIELD-SYMBOLS: <gs_extended_structure> TYPE ANY.

  MOVE w_tablename TO w_table.

  CLEAR gs_part.
  gs_part-NAME       = SPACE.  " Wenn du hier einen Namen vergibst kannst du die ganze Struktur unter diesem ansprechen
  gs_part-as_include =  'X'.
  gs_part-TYPE       ?= cl_abap_structdescr=>describe_by_name( w_table ).
  APPEND gs_part TO gt_struc.

  DATA: description(30) TYPE c.
  CLEAR gs_part.
  gs_part-NAME       =  'DESCRIPTION'.
  gs_part-as_include =  ' '.
  gs_part-TYPE       ?= cl_abap_structdescr=>describe_by_data( description ).
  APPEND gs_part TO gt_struc.

  gr_dref_struc ?= cl_abap_structdescr=>create( gt_struc ).
  CREATE DATA gr_dref TYPE HANDLE gr_dref_struc.
  ASSIGN gr_dref->* TO <gs_extended_structure>.

  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      FILENAME                      = w_path
      FILETYPE                      = 'ASC'
      HAS_FIELD_SEPARATOR           = 'X'
      READ_BY_LINE                  = 'X'
   TABLES
      data_tab                      = gt_struc
   EXCEPTIONS
     FILE_OPEN_ERROR               = 1
     FILE_READ_ERROR               = 2
     NO_BATCH                      = 3
     GUI_REFUSE_FILETRANSFER       = 4
     INVALID_TYPE                  = 5
     NO_AUTHORITY                  = 6
     UNKNOWN_ERROR                 = 7
     BAD_DATA_FORMAT               = 8
     HEADER_NOT_ALLOWED            = 9
     SEPARATOR_NOT_ALLOWED         = 10
     HEADER_TOO_LONG               = 11
     UNKNOWN_DP_ERROR              = 12
     ACCESS_DENIED                 = 13
     DP_OUT_OF_MEMORY              = 14
     DISK_FULL                     = 15
     DP_TIMEOUT                    = 16
     OTHERS                        = 17
            .
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.

Re: Begin OF-Struktur

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
Bugfix13 hat geschrieben:Ich kriege da eine Fehlermeldung.
Die du uns sicherheitshalber vor enthälst.
Gruß Hendrik

Re: Begin OF-Struktur

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Hi Bugfix,

du hast bisher nur dynamisch eine Struktur erstellt ( wie in deinem 1. Posting gefordert ).
Was du für einen GUI-Upload brauchst ist aber eine Tabelle mit ebendieser Struktur.
Lies dir doch mal die F1-Hilfe zu CREATE DATA an oder die Methoden der Klasse CL_ABAP_TABLEDESCR

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Begin OF-Struktur

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
@Bugfix13:
In deinem Coding hast du leider einen kleinen Denkfehler.
Du hast nur eine Struktur erstellt, GUI_UPLOAD benötig aber eine Tabelle.
Und die GT_STRUCT zu übergeben ist schlicht falsch.
Erstens enthält diese eine Referenzvariable. Daher kommt auch die Fehlermeldung.
Und Zweitens müsstest du wenn, dann die zuvor mit CREATE DATA erstellte Variable verwenden.

Ungefähr so:

Code: Alles auswählen.

DATA: gr_dref_table TYPE REF TO cl_abap_tabledescr
FIELD-SYMBOLS: <gt_extended_table> TYPE ANY TABLE.

  gr_dref_struc ?= cl_abap_structdescr=>create( gt_struc ).
  gr_dref_table ?= cl_abap_tabledescr=>create( gr_dref_struc ).
  CREATE DATA gr_dref TYPE HANDLE gr_dref_table.
  ASSIGN gr_dref->* TO <gt_extended_table>.

      CALL FUNCTION 'GUI_UPLOAD'
        EXPORTING
          FILENAME                      = w_path
          FILETYPE                      = 'ASC'
          HAS_FIELD_SEPARATOR           = 'X'
          READ_BY_LINE                  = 'X'
       TABLES
          data_tab                      = <gt_extended_table>
       EXCEPTIONS
         FILE_OPEN_ERROR               = 1
         FILE_READ_ERROR               = 2
         NO_BATCH                      = 3
         GUI_REFUSE_FILETRANSFER       = 4
         INVALID_TYPE                  = 5
         NO_AUTHORITY                  = 6
         UNKNOWN_ERROR                 = 7
         BAD_DATA_FORMAT               = 8
         HEADER_NOT_ALLOWED            = 9
         SEPARATOR_NOT_ALLOWED         = 10
         HEADER_TOO_LONG               = 11
         UNKNOWN_DP_ERROR              = 12
         ACCESS_DENIED                 = 13
         DP_OUT_OF_MEMORY              = 14
         DISK_FULL                     = 15
         DP_TIMEOUT                    = 16
         OTHERS                        = 17.
lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Bugfix13

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Begin OF-Struktur

Beitrag von Bugfix13 (ForumUser / 97 / 17 / 5 ) »
Hallo ADT

Ja genau! Danke dir. Hatte echt nen Denkfehler drinnen :)
Aber jetzt funktioniert das, was ich wollte.

Gruss Bugfix

Seite 1 von 1

Vergleichbare Themen

2
Antw.
4942
Views
Types: Begin of .. vs Data: Begin of ..
von T.R. » 28.12.2009 22:04 • Verfasst in ABAP® für Anfänger
1
Antw.
1635
Views
Types: begin of... / Icon ALV
von c oco » 22.08.2012 18:00 • Verfasst in ABAP® für Anfänger
1
Antw.
1798
Views
TYPES | DATA : BEGIN OF (gelöst)
von beterman » 17.10.2011 17:13 • Verfasst in ABAP® für Anfänger
2
Antw.
6715
Views
SELECTION-SCREEN BEGIN OF LINE o. Bezeichner
von SwordMaster » 14.12.2007 14:25 • Verfasst in ABAP® Core
2
Antw.
1683
Views
Struktur als Kopie von vorhandener Struktur anlegen
von Marwin » 20.04.2005 15:29 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141