gelöst Zuweisung Zeile 1. Tabelle zu Spalte 2. Tabelle


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst Zuweisung Zeile 1. Tabelle zu Spalte 2. Tabelle

Beitragvon menkto1 » 25.01.2019, 16:14

Hallo zusammen,

ich habe folgendes Problem.

Eine Ausgabe-Tabelle soll als CSV Datei heruntergeladen werden, diese Ausgabe-Tabelle soll aber vordefinierte Überschriften haben, damit anhand der Spaltenüberschrift die Datei in einem Online-Portal hochgeladen werden kann.

Die Ausgabe-Tabelle hat 66 Spalten, da ich die vordefinierte Bezeichungen aber nicht als "Konstante" im Programm hinterlegen möchte, habe ich eine eigene Tabelle mit den Feldern "Feldname" und "Bezeichnung" angelegt.

Jetzt möchte ich zum Feld bzw. zur Spalte der Ausgabetabelle die Bezeichnung aus der "Überschriftentabelle" in der 1. Zeile hinzufügen.

Hier komme ich nicht weiter. Über
Code: Alles auswählen
assign compoment sy-index of structure gs_output to <fs_field>
 

würde ich den Feldnamen der Spalte von Tabelle "gt_output" bekommen, ist das korrekt?

Danach würde ich aus der Tabelle gt_description die Bezeichnung auslesen:
Code: Alles auswählen
read table gt_description assigning <descr> with key fieldname = <fs_field>.
 


Wie bekomme ich jetzt in die 1. Zeile der Ausgabetabelle (gt_output) die Bezeichnung hinzugefügt?
Zunächst eine leere Zeile zur Ausgabetabelle hinzufügen und dann füllen?
Code: Alles auswählen
append initial line to gt_output assiging <output>
assign component (<fs_field>) to <fs>.
<fs> = <descr>-bezeichnung.
 


Und wie setze ich den Wert in die 1. Zeile der Ausgabetabelle?

Beispiel Inhalt der beiden Tabellen:

Code: Alles auswählen
data: begin of gt_output,
         kunnr type kunnr,
         matnr type matnr,
         vbeln  type vbeln,
         posnr type posnr,
.....                                      "insgesamt 66 Felder
end of gt_output.

*Aufbau Tabelle Bezeichnung ( Pflegetabelle angelegt)
data: begin of gt_descr
           feldname     type feldname
           bezeichnung type scrltxt_l
       end of gt_descr.

* Inhalt Tabelle gt_output:
123456;4711;9872511;00010;VX;.....

* Inhalt Tabelle gt_descr
KUNNR; Kunde
MATNR; Material
VBELN; Rechnung
.......

* Ausgabe nach Zusammenführung:
Kunde; Material; Rechnung...
123456;4711;9872511.....
 


Stehe gerade komplett auf dem Schlauch.

Vielen Dank u. viele Grüße
Torsten
menkto1
ForumUser
 
Beiträge: 7
Registriert: 25.08.2011, 14:24
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Zuweisung Zeile 1. Tabelle zu Spalte 2. Tabelle

Beitragvon DeathAndPain » 25.01.2019, 16:36

Dein Fehler ist gleich am Anfang, deshalb kann der Rest dann auch nicht mehr richtig werden.

Hier komme ich nicht weiter. Über
Code: Alles auswählen
assign compoment sy-index of structure gs_output to <fs_field>

würde ich den Feldnamen der Spalte von Tabelle "gt_output" bekommen, ist das korrekt?

Nein. Abgesehen davon, dass es "component" und nicht "compoment" heißt, bekommst Du mit dem Befehl den Inhalt der betreffenden Spalte von gs_output, nicht aber ihren Namen! Wenn Du den Namen haben möchtest, musst Du mit einer der ersten beiden Methoden der Klasse CL_ABAP_STRUCTDESCR arbeiten. Da musste ein bisschen fummeln, aber damit kriegt man über das Attribut CL_ABAP_STRUCTDESCR->COMPONENTS die Spaltennamen ran. Die kannst Du dann der Reihe nach durchgehen und dann anhand der Nummer mit Deinem ASSIGN COMPONENT zu jeder Spalte Deiner eingefügten Leerzeile aus CL_ABAP_STRUCTDESCR->COMPONENTS den passenden Spaltennamen holen.

Finde es übrigens gut, dass Du von den Befehlen her modernen Stil programmierst. Das sieht man hier in Fragen eher selten. 7.40 oder höher hast Du ja offenbar. Lediglich an dem READ TABLE ... ASSIGNING ließe sich kosmetisch noch was verbessern. Statt

Code: Alles auswählen
read table gt_description assigning <descr> with key fieldname = <fs_field>.

kannste nämlich hübscher schreiben:

ASSIGN gt_description[ fieldname = <fs_field> ] to <descr>.

Nur kannst Du dann den code-Tag hier im Forum nicht mehr nutzen, da der nicht mit eckigen Klammern (und Ampersands) klarkommt. Außerdem liefert der ASSIGN keinen SY-TABIX (wohl aber den SY-SUBRC). Solange Du den SY-TABIX nicht brauchst, ist der ASSIGN aber schöner. 8)

Für diese Nachricht hat DeathAndPain einen Dank bekommen :
menkto1
DeathAndPain
Expert
 
Beiträge: 934
Registriert: 05.05.2006, 10:14
Dank erhalten: 218 mal
Ich bin: Entwickler/in

Re: Zuweisung Zeile 1. Tabelle zu Spalte 2. Tabelle

Beitragvon menkto1 » 25.01.2019, 16:52

Super, vielen Dank für den Hinweis!! :up:
Werde es ausprobieren - aber erst Montag. :)

....Ich werde berichten. :)

PS:
Das Coding habe ich auf die Schnelle selbst hier reingeschrieben, daher die Schreibfehler im "CODE".
Hatte es noch nicht im Programm umgesetzt. :|

Unsere Firma hat Systeme von 4.6c bis ECC 6.0 EHP7, da versuche ich flexibel zu sein und immer so modern wie möglich zu programmieren... und natürlich an unseren Programmierrichtlinien halten :D
menkto1
ForumUser
 
Beiträge: 7
Registriert: 25.08.2011, 14:24
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Zuweisung Zeile 1. Tabelle zu Spalte 2. Tabelle

Beitragvon DeathAndPain » 26.01.2019, 06:40

4.6c, um Himmels willen - das war ja vor 10 Jahren schon alt!

Meine alternative Syntax geht erst ab 7.40. (musste unter Menü System -> Status nachsehen) Generell bringt 7.40 eine Menge neuer Syntaxmöglichkeiten, die den alten von der Lesbarkeit und Effizienz her um Größenordnungen überlegen sind. Details hier:

https://blogs.sap.com/2013/07/22/abap-n ... lease-740/

Bis 7.20 habe ich noch mit Tabellenkopfzeilen gearbeitet, weil ich das Hantieren mit den sperrigen Workareas schrecklich fand (auch von der Lesbarkeit her, wobei ich mich mit der Einstellung bei einigen hier im Forum etwas unbeliebt gemacht habe :) ). Seit 7.40 ist das Thema vom Tisch, weil man mit der neuen Syntax die Workareas fast gar nicht mehr benötigt und ich damit auch keinen Grund mehr hatte, auf Kopfzeilen zu setzen. Ein Beispiel habe ich Dir ja gerade geboten.
DeathAndPain
Expert
 
Beiträge: 934
Registriert: 05.05.2006, 10:14
Dank erhalten: 218 mal
Ich bin: Entwickler/in

Re: Zuweisung Zeile 1. Tabelle zu Spalte 2. Tabelle

Beitragvon menkto1 » 28.01.2019, 09:11

Naja, viele Gesellschaften mit eigenen SAP Systemen... Es soll bald HANA kommen, dann wird sich das ändern.
Sind jetzt schon am Migrieren ohne Ende, dass die ganzen kleinen Sales Gesellschaften in ein SAP System kommen...

Aber nochmals danke für den Tipp, mit diesem Coding hat es geklappt! :)

Code: Alles auswählen
*# get fieldnames of table gt_outputdl
    go_struct ?= cl_abap_structdescr=>describe_by_data( gt_outputdl ).

    CLEAR: gs_outputdl.

    LOOP AT go_struct->components ASSIGNING <comp>.

*# read table zsovost0001 to get header description
      READ TABLE gt_zsovost0001 ASSIGNING <zsovost0001> WITH KEY field = <comp>-name.

      IF sy-subrc = 0 AND
         <zsovost0001> IS ASSIGNED.
*# add header description to structure gs_outputdl
        ASSIGN COMPONENT <comp>-name OF STRUCTURE gs_outputdl TO <fs_field>.
        <fs_field> = <zsovost0001>-scrtext_l.
      ENDIF.
    ENDLOOP.

*# insert header description to table gt_outputdl
    INSERT gs_outputdl INTO gt_outputdl INDEX 1.
 
menkto1
ForumUser
 
Beiträge: 7
Registriert: 25.08.2011, 14:24
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Zuweisung Zeile 1. Tabelle zu Spalte 2. Tabelle

Beitragvon DeathAndPain » 28.01.2019, 11:54

Naja, viele Gesellschaften mit eigenen SAP Systemen...

Das erklärt für mich trotzdem nicht, wie man mit einem Release leben kann, dass meines Wissens von der SAP schon lange nicht mehr supportet wird. Klar, wenn man Geld in die Hand nimmt, kriegt man für alles Support, aber das soll kostengünstiger sein als einmalig ein koordiniertes Releaseupgrade? Abgesehen von den Beraterstunden, die man ggf. für die Durchführung braucht, sowie etwas Downtime und Testung hat solch Upgrade ja auch keine Nachteile. Der ganze alte Code läuft ja in aller Regel unverändert weiter.

Immerhin weißt Du offenbar, was Du tust. Du hast sogar das geisteskranke Casting hingekriegt, um von TYPEDESCR zu STRUCTDESCR zu kommen.
DeathAndPain
Expert
 
Beiträge: 934
Registriert: 05.05.2006, 10:14
Dank erhalten: 218 mal
Ich bin: Entwickler/in

Re: Zuweisung Zeile 1. Tabelle zu Spalte 2. Tabelle

Beitragvon menkto1 » 28.01.2019, 12:11

Ehrlich gesagt, ist das für mich Neuland. Hab viel gegoogelt und mich eingelesen und dann im QAS getestet ohne Ende :)
DeathAndPain hat geschrieben:Immerhin weißt Du offenbar, was Du tust. Du hast sogar das geisteskranke Casting hingekriegt, um von TYPEDESCR zu STRUCTDESCR zu kommen.


######
Bin bei der Firma fest angestellt, daher keine Beraterstunden. Haben ein eigenes SAP Team für alle Module, verteilt auf mehrere Zeitzonen. ;)
Die 4.6c Systeme sind kleinere Vertriebsgesellschaften, bei denen vor zig Jahren SAP eingeführt wurde. Bis jetzt musste nichts geändert werden, da die Prozesse laufen.
Für ein Upgrade auf ECC6.0 fehlt die Kapazität im SAP Team. Unser Unternehmen hat fast 20 Produktivsysteme, da ist es schwierig, einen Upgrade Termin zu finden. :D
menkto1
ForumUser
 
Beiträge: 7
Registriert: 25.08.2011, 14:24
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Zuweisung Zeile 1. Tabelle zu Spalte 2. Tabelle

Beitragvon DeathAndPain » 28.01.2019, 13:25

Wer sagt denn, dass die alle gleichzeitig hochgezogen werden müssen? Ich hätte gesagt, das macht man der Reihe nach, eins nach dem anderen.
DeathAndPain
Expert
 
Beiträge: 934
Registriert: 05.05.2006, 10:14
Dank erhalten: 218 mal
Ich bin: Entwickler/in

Re: Zuweisung Zeile 1. Tabelle zu Spalte 2. Tabelle

Beitragvon menkto1 » 28.01.2019, 15:31

Wir sind ein Produktionsunternehmen, einige Gesellschaften produzieren 24/7. Da bekommt man kaum freie Termine (Wochenenden), wo der Upgrade durchgeführt werden darf.

Wir planen für ein Upgrade ca 2-3 Monate ein. Da neben der IT auch die Fachbereiche involviert werden, müssen entsprechende Termine gefunden werden und die Mitarbeiter-Ressourcen frei sein.
Zudem haben wir viele Schnittstellen, AddOns und Eigenentwicklungen, die getestet werden müssen. Glaub mir, das ist bei uns nicht so einfach! War vor 2-3 Jahren selbst Projekleiter beim Upgrade (4.6c auf ECC 6.0) einer Produktionsgesellschaft in Osteuropa, die 24/7 produziert. Da bekommst Du die Krise, einen richtigen Termin zu finden. ;)

Aber das ist ein anderes Thema :D
menkto1
ForumUser
 
Beiträge: 7
Registriert: 25.08.2011, 14:24
Dank erhalten: 0 mal
Ich bin: Entwickler/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Adobe Forms - Download - Keine Seiten
vor 11 Stunden von shimsham 2 Antw.
UTF-8 mit Funktionsbaustein
vor 13 Stunden von a-dead-trousers 4 Antw.
gelöst Fehler SAVE NOT ALLOWED bei F4IF_START_VALUE_REQUEST
vor 10 Stunden von AdrianSchm 1 Antw.
SAP Logon bei Aufruf WebGUI
Gestern von msfox 0 Antw.
Formatierung Textdatei aus Query und ABAP
vor 13 Stunden von wreichelt 5 Antw.

  Ähnliche Beiträge beta
Bestimmte Spalte einer bestimmten Zeile in einer itab
19.10.2005, 16:38 von Gast 6 Antw.
REUSE_ALV_GRID_DISPLAY und Spalte aus anderer Tabelle
05.12.2005, 16:33 von Andrea F. 5 Antw.
gelöst spalte einer internen Tabelle befüllen
21.09.2017, 08:52 von CSZ_Berater 2 Antw.
Zeile an interne Tabelle anfügen...?
13.06.2008, 16:15 von b0rsti 5 Antw.
Leer/Überschrift Zeile in ALV Tabelle
24.04.2014, 13:39 von black_adept 5 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]