Code: Alles auswählen.
REPORT Z_AUSWERTUNG_ROLLEN.
Types: BEGIN OF ty_itab,
agr_name type agr_define-agr_name,
agr_text type agr_texts-line,
END OF ty_itab.
data lt_itab type TABLE OF ty_itab.
data lt_rol Type TABLE OF agr_define.
data lt_rol_txt TYPE TABLE OF agr_texts.
FIELD-SYMBOLS: <z1> type agr_define, <z2> TYPE agr_texts.
* Abfrage der gewünschten Rollen
Select * FROM agr_define into CORRESPONDING FIELDS OF TABLE lt_rol
where agr_define~agr_name LIKE 'Z:%'.
SORT lt_rol ASCENDING.
* Abfrage der gewünschten Langtexte
Select * FROM agr_texts into CORRESPONDING FIELDS OF TABLE lt_rol_txt
where agr_texts~agr_name LIKE 'Z:%'.
SORT lt_rol_txt ASCENDING.
data ls_roltxt type ty_itab-agr_text.
data wa_itab type ty_itab.
* Zusammenfügen der Rollen und der entspechenden Langtexte in neuer Datenstruktur.
loop at lt_rol ASSIGNING <z1>.
loop at lt_rol_txt ASSIGNING <z2>
where agr_name = <z1>-agr_name.
while sy-subrc = 0.
CONCATENATE <z2>-text ' ' INTO ls_roltxt.
ENDWHILE.
endloop.
Write: <z1>-agr_name to wa_itab-agr_name, ls_roltxt to wa_itab-agr_text.
Append wa_itab to lt_itab.
clear: ls_roltxt, wa_itab.
endloop.
Code: Alles auswählen.
Types: BEGIN OF ty_itab,
agr_name type agr_define-agr_name,
agr_text type string,
END OF ty_itab.
Code: Alles auswählen.
loop at lt_rol ASSIGNING <z1>.
loop at lt_rol_txt ASSIGNING <z2>
where agr_name = <z1>-agr_name.
CONCATENATE <z2>-text ' ' INTO ls_roltxt.
endloop.
Hmm, wie gerne würde man mancham "With Header line " anfügen."WA_ITAB-AGR_TEXT" muß ein zeichenartiges Feld sein (Datentyp C, N, D
Code: Alles auswählen.
Write: <z1>-agr_name to wa_itab-agr_name, ls_roltxt to wa_itab-agr_text.
Code: Alles auswählen.
wa_itab-agr_name = <z1>-agr_name.
wa_itab-agr_text = ls_roltxt.
Code: Alles auswählen.
data ls_roltxt type string.
loop at lt_rol ASSIGNING <z1>.
loop at lt_rol_txt ASSIGNING <z2>
where agr_name = <z1>-agr_name.
CONCATENATE ls_roltxt ' ' <z2>-text ' ' INTO ls_roltxt.
endloop.
wa_itab-agr_name = <z1>-agr_name.
wa_itab-agr_text = ls_roltxt.
APPEND wa_itab to lt_itab.
clear: ls_roltxt, wa_itab.
endloop.
Code: Alles auswählen.
Types:
BEGIN OF ty_itab,
agr_name type agr_define-agr_name,
agr_text type string,
END OF ty_itab.
data:
lt_itab type standard table of ty_itab with default key.
field-symbols:
<ls_itab> type ty_itab.
loop at lt_rol ASSIGNING <z1>.
append initial line to lt_itab assigning <ls_itab>.
loop at lt_rol_txt ASSIGNING <z2> where agr_name EQ <z1>-agr_name.
CONCATENATE <ls_itab>-agr_text <z2>-text INTO <ls_itab>-agr_text separated by space.
endloop.
shift <ls_itab>-agr_text by 1 places left.
endloop.
Wie meinst du das? Hast du schon im Debugger kontrolliert ob die Tabelle wirklich nicht richtig befüllt ist oder verlässt du dich auf deine Ausgabe? ALV-Grid bzw. SALV können nicht mehr als 255 Zeichen anzeigen. Ich sehe da nämlich keinen Grund warum die Texte nicht vollständig concateniert werden. Hast du deine Datenbankabfrage kontrolliert? Vielleicht ließt du nur 3 Zeilen aus.Spookykid hat geschrieben:Was stimmt hier nicht? Nach der dritten Zeile im Langtext wird abgebrochen. Obwohl nur ein String im CONCATENATE vorkommt.
An was könnte das liegen?Falls das Zielfeld result eine feste Länge hat und diese größer als die benötigte Länge ist, wird es rechts mit Leerzeichen bzw. hexadezimal 0 aufgefüllt. Falls die Länge des Zielfelds kürzer ist, wird die Verkettung rechts abgeschnitten. Falls das Zielfeld ein String ist, wird seine Länge entsprechend angepasst.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Spookykid
Code: Alles auswählen.
data:
ld_name type agr_define-agr_name.
loop at lt_rol ASSIGNING <z1>.
ld_name = <z1>-agr_name.
loop at lt_rol_txt ASSIGNING <z2> where agr_name EQ <z1>-agr_name.
new-line.
write: ld_name, <z2>-text.
clear ld_name.
endloop.
endloop.
Code: Alles auswählen.
data:
ld_name type agr_define-agr_name.
loop at lt_rol ASSIGNING <z1>.
ld_name = <z1>-agr_name.
loop at lt_rol_txt ASSIGNING <z2> where agr_name EQ <z1>-agr_name.
new-line.
write: ld_name, <z2>-text.
clear ld_name.
endloop.
if ld_name is not initial.
new-line.
write: ld_name.
endif.
endloop.