Dynamische Interne Tabele mit Kopfzeilen

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

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

Dynamische Interne Tabele mit Kopfzeilen

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
Hallo Experten,
ich habe ein Programm um ein Excel Datei einlesen und in Interne Tabebelle einlegen.
Alles läuft wundabar, ausser ein kleinigkeits, und zwar wenn ich schon tabelle gelesen habe

hier

LOOP AT t_intern ASSIGNING <fs_intern>.
MOVE <fs_intern>-col TO v_index.

ASSIGN COMPONENT v_index OF STRUCTURE <gs_struct_data> TO <gv_value>. "<fs_wtab>
MOVE <fs_intern>-value TO <gv_value>.
AT END OF row.
***Ich brauche noch diese paar variable in meine Tabelle hinzufügen
<gt_table_data>-mandt = sy-mandt. ***************Dann bekomme ich Fehler(<gt_table_data> Tabelle ohne Kopfzeile) sehe Bild.
<gs_struct_data>-spras = sy-langu.

APPEND <gs_struct_data> TO <gt_table_data>.

* CLEAR: ti_table_line.
ENDAT.
ENDLOOP.

Dann bekomme ich Fehler(Tabelle ohne Kopfzeile) sehe Bild.

So habe ich meine Dyn Tabelle Defeniert:
**-----------------------------------
DATA: go_descr TYPE REF TO cl_abap_structdescr,
gt_component TYPE cl_abap_structdescr=>component_table,
gt_component_all LIKE gt_component,
go_structdescr TYPE REF TO cl_abap_structdescr,
go_tabledescr TYPE REF TO cl_abap_tabledescr,
go_table_data TYPE REF TO data,
go_struct_data TYPE REF TO data.

FIELD-SYMBOLS: <gt_table_data> TYPE STANDARD TABLE,
<gs_struct_data> TYPE any,
<gv_value> TYPE any.

go_descr ?=
cl_abap_typedescr=>describe_by_name( p_tab ).
gt_component = go_descr->get_components( ).

APPEND LINES OF gt_component
TO gt_component_all.

go_structdescr = cl_abap_structdescr=>create( gt_component_all ).
go_tabledescr = cl_abap_tabledescr=>create( go_structdescr ).

CREATE DATA go_struct_data TYPE HANDLE go_structdescr.
ASSIGN go_struct_data->* TO <gs_struct_data>.

CREATE DATA go_table_data TYPE HANDLE go_tabledescr.
ASSIGN go_table_data->* TO <gt_table_data>.

Hat jemand Annung , wie kann man mit Kopfzeilen Defenieren?

Danke

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


Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
Du brauchst keine Kopfzeile, du hast doch eine Struktur, die du später an die Tabelle anhängst (APPEND).
Anstatt die Felder in der Tabelle zu ändern, musst du diese in der Struktur ändern. Das machst du schon für das Fels SPRAS:

Code: Alles auswählen.

***Ich brauche noch diese paar variable in meine Tabelle  hinzufügen
*<gt_table_data>-mandt = sy-mandt.    "nicht die Tabelle direkt ändern
<gs_struct_data>-mandt = sy-mandt.    "sondern die Zeile, die später angehangen wird
<gs_struct_data>-spras = sy-langu.

    APPEND <gs_struct_data> TO <gt_table_data>.
Gruß Hendrik

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
Danke, aber gleiche Fehler, habe ich schon Probiert.

LOOP AT t_intern ASSIGNING <fs_intern>.
MOVE <fs_intern>-col TO v_index.

ASSIGN COMPONENT v_index OF STRUCTURE <gs_struct_data> TO <gv_value>. "<fs_wtab>
MOVE <fs_intern>-value TO <gv_value>.
AT END OF row.

<gs_struct_data>-mandt = sy-mandt.
<gs_struct_data>-spras = sy-langu.

APPEND <gs_struct_data> TO <gt_table_data>.

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
autohandel7 hat geschrieben:Danke, aber gleiche Fehler
Stimmt, <gs_struct_data> ist TYPE ANY. Somit kann der Syntax-Check nicht wissen ob es das Feld zur Laufzeit wirklich gibt. Wobei ich eine abweichende Fehlermeldung erwartet hätte.

Dann bleibt dir nur der dynamische Zugriff über den Feldnamen:

Code: Alles auswählen.

  ASSIGN COMPONENT 'MANDT' OF STRUCTURE <gs_struct_data> TO <gv_value>. 
    IF sy-subrc = 0.
      <gv_value> = sy-mandt.
   ENDIF.

  ASSIGN COMPONENT 'SPRAS' OF STRUCTURE <gs_struct_data> TO <gv_value>. 
    IF sy-subrc = 0.
      <gv_value> = sy-spras.
   ENDIF.

  APPEND <gs_struct_data> TO <gt_table_data>.
Gruß Hendrik

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
Danke, wieder Fehler jetzt mit sy-spras(shee Bild), kann sein dass fehler bei difinizion von Tabellen?

LOOP AT t_intern ASSIGNING <fs_intern>.
MOVE <fs_intern>-col TO v_index.


ASSIGN COMPONENT v_index OF STRUCTURE <gs_struct_data> TO <gv_value>. "<fs_wtab>
MOVE <fs_intern>-value TO <gv_value>.
AT END OF row.

*<gs_struct_data>-mandt = sy-mandt.
*<gs_struct_data>-spras = sy-langu.

ASSIGN COMPONENT 'MANDT' OF STRUCTURE <gs_struct_data> TO <gv_value>.
IF sy-subrc = 0.
<gv_value> = sy-mandt.
ENDIF.

ASSIGN COMPONENT 'SPRAS' OF STRUCTURE <gs_struct_data> TO <gv_value>.
IF sy-subrc = 0.
<gv_value> = sy-spras.
ENDIF.

APPEND <gs_struct_data> TO <gt_table_data>.

ENDAT.
ENDLOOP.

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
sy-spras gibt es nicht, sy-langu ist richtig.

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
autohandel7

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
Hi Ralf noch eine Frage,
wenn ich als p_tab - (name fon tabele in Dictionare) falsch schreibe z. B ok ist "ZMM_C_TREND_T", wenn ich falsch z.B ZMM_C_TREND_ schreibe,
dann hier
CREATE DATA: gt_table TYPE STANDARD TABLE OF (p_tab)."ZMM_C_TREND_T,
bekomme ich fehler(sehe bild).
wie kann ich Pruffung screiben :
if p_tap falsch
write:" Tabelenname ist falsch
exit

Danke

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Du willst echt Schreibfehler in deinem Programm abgreifen?

Code: Alles auswählen.

data: tabname type tabname.

select single tabname 
into tabname from dd03l
where tab name eq  p_tab.

if sy-subrc ne 0.
*** Fehler: DDIC-Struktur existiert nicht
endif.
In 7.40 geht der select etwas eleganter und ohne Datentransport:

Code: Alles auswählen.

data: exists type abap_bool.

select single 'X'
into @exists from dd03l
where tabname eq  @p_tab.

if sy-subrc ne 0.
*** Fehler: DDIC-Struktur existiert nicht
endif.

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
autohandel7

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
Danke, ich lerne mich, deschalb habe ich versucht nicht select, sondern uber Funktionsbausteine,
ein habe ich gefunden
CALL FUNCTION 'DB_EXISTS_TABLE'
EXPORTING
tabname = p_tab
* IMPORTING
* SUBRC =

IF sy-subrc <> 0.
WRITE: 'Die Tabellenname',p_tab,'ist falsch' .
exit.
ENDIF.

aber er liefert mir kein sy-subrc, obwohl in doku steht wenn sy-subrc =4 tabele nicht angelegt
wiesst du ,warscheinlich gibt es anderen baustein, und was meinst du, bessere wenn ich select benutze oder Funktionsbaustein?

Danke

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Der Funktionsbaustein macht nichts anderes als den SELECT. Wenn du IMPORTING SUBRC = auskommentierst, ist klar dass du keinen zurückbekommst.

Nimm den Select.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
autohandel7 hat geschrieben:aber er liefert mir kein sy-subrc, obwohl in doku steht wenn sy-subrc =4 tabele nicht angelegt
Der SUBRC wird dir vom FuBa zurück gegeben. Du nimmst ihn aber nicht entgegen (IMPORTING subrc = ist ausgesternt).
Wenn du den SUBRC entgegen nimmst, könntest du dagegen prüfen.
autohandel7 hat geschrieben:wiesst du ,warscheinlich gibt es anderen baustein, und was meinst du, bessere wenn ich select benutze oder Funktionsbaustein?
Kommt drauf an was dein Ziel ist. Ralfs Coding prüft ob die Tabelle im DDIC angelegt ist (also SAP intern bekannt ist), der FuBa prüft ob die Tabelle auch in der darunter liegenden DB wirklich existiert. Die Prüfung gegen die DB braucht mehr Laufzeit und ist eigentlich unnötig, da es sehr selten vorkommen sollte, dass die Tabelle im DDIC angelegt, aber nicht auf der DB vorhanden ist.
Von daher reicht die Prüfung gegen das DDIC in diesem Programm.

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

Gruß Hendrik

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von autohandel7 (Specialist / 186 / 67 / 0 ) »
Ich brauche wieder deine hilfe, es geht um glecihe Programm,
mein Sheff will, dass ich prüfe, ob der Wert "SPRAS" leer ist, falls es das Feld in der Zielstruktur gibt.
Wenn leer, dann mit SY-LANGU füllen, aber nur wenn es nicht schon gefüllt wurde durch die Eingabedaten!
erlich zusagen, habe kein Ahnnug, wie kann mann es programmieren?


p_tab -- name von db-Tabelle in Sap
gt_intern -excel tabelle die ich importiere und lese
-----------------------------------------------------------------------
LOOP AT gt_intern ASSIGNING <gs_intern>.
MOVE <gs_intern>-col TO gv_index.
*******************************************
ASSIGN COMPONENT gv_index OF STRUCTURE <gs_table> TO <gv_value>.
MOVE <gs_intern>-value TO <gv_value>.
AT END OF row.

----if field 'spras' in gt_intern leer ist
und in p_tab gibt
dann:



ASSIGN COMPONENT 'SPRAS' OF STRUCTURE <gs_table> TO <gv_value>.
IF sy-subrc = 0.
<gv_value> = sy-langu.
ENDIF.
*****************************************************************************
ENDIF.
APPEND <gs_table> TO <gt_table>.


ENDAT.
ENDLOOP.

Danke

Re: Dynamische Interne Tabele mit Kopfzeilen

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
autohandel7 hat geschrieben: ASSIGN COMPONENT 'SPRAS' OF STRUCTURE <gs_table> TO <gv_value>.
IF sy-subrc = 0 AND <gv_value> is initial.
<gv_value> = sy-langu.
ENDIF.
Siehe rote Einfügung.

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
autohandel7

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1139
Views
Excel lesen in ein Interne Tabele mit anderen Struktur
von autohandel7 » 20.08.2015 11:14 • Verfasst in ABAP® für Anfänger
3
Antw.
2133
Views
Dynamische interne Tabelle
von c0lt.seavers » 01.08.2007 09:55 • Verfasst in ABAP® für Anfänger
1
Antw.
1886
Views
Dynamische Interne Tabellen
von AEONFLUX » 23.10.2007 08:05 • Verfasst in ABAP Objects®
4
Antw.
6299
Views
Interne Tabelle - dynamische Spaltenabfrage?
von MacLeod » 13.10.2011 11:48 • Verfasst in ABAP® für Anfänger
8
Antw.
4610
Views
dynamische interne Tabelle füllen
von cuncon » 20.03.2018 16:04 • Verfasst in ABAP® für Anfänger

Ü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

Aktuelle Forenbeiträge

Updates der Daten, Fehlermeldung
vor 21 Stunden von Egzon gelöst 1 / 47
Wie benutze ich COMMIT WORK richtig
vor 2 Tagen von msfox 17 / 429

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

Updates der Daten, Fehlermeldung
vor 21 Stunden von Egzon gelöst 1 / 47
Wie benutze ich COMMIT WORK richtig
vor 2 Tagen von msfox 17 / 429

Unbeantwortete Forenbeiträge

Updates der Daten, Fehlermeldung
vor 21 Stunden von Egzon 1 / 47
Zwischensumme Adobe Forms
vor 5 Wochen von Lucyalison 1 / 269
Group Items auf einer Filterbar
letzen Monat von Bright4.5 1 / 321