Collect?

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
18 Beiträge • Seite 1 von 2 (current) Nächste
18 Beiträge Seite 1 von 2 (current) Nächste

Collect?

Beitrag von Fredi (ForumUser / 42 / 0 / 0 ) »
Hallo,

ich habe folgendes Problem:

Ich lese aus diversen Tabellen einige Daten. Unter anderem auch aus der MARC das Feld WERKS. Diese Daten schreibe ich in eine eigene Tabelle (z.B. I_TAB(-WERKS)). Jetzt möchte ich gerne, daß mir das System anzeigt, in welchen Werken die Materialien angelegt sind. Das möchte ich aber erreichen ohne mehrere Tabellenzeilen zu bekommen. Würde also mit einem Collect bzw. Concatenate (?), diese Zeilen verdichten wollen.

So sieht meine Tabelle z.T. aus:

I_TAB

WERKS MATNR MAKTX ETC.
C1000 10001 KURZ1 XXXX
C2000 10001 KURZ1 XXXX
C3000 10001 KURZ1 XXXX
C1000 10002 KURZ2 XXXX
etc.

Das Ergebnis sollte so aussehen
MATNR MAKTX ETC. WERKS
10001 KURZ1 XXXX C1000, C2000, C3000
10002 KURZ2 XXXX C1000


Hoffe, daß war ein wenig verständlich.

Danke für Eure Hilfe.

Gruß,
Fredi

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


Beitrag von zzcpak (Expert / 673 / 5 / 68 ) »
könnte so funktionieren

Code: Alles auswählen.

TYPES:   BEGIN OF t_tab,
           matnr(10) TYPE c,
           werks(10) TYPE c,
           maktx(10) TYPE c,
           etc(20) TYPE c,
         END OF t_tab.

DATA:    w_tab TYPE t_tab,
         i_tab TYPE TABLE OF t_tab.


START-OF-SELECTION.

  w_tab-werks = 'C1000'.
  w_tab-matnr = '10001'.
  w_tab-maktx = 'KURZ1'.
  w_tab-etc   = 'kdkladf..ljkadkf'.
  APPEND w_tab TO i_tab.

  w_tab-werks = 'C2000'.
  w_tab-matnr = '10001'.
  w_tab-maktx = 'KURZ2'.
  w_tab-etc   = 'kdkladf..ljkadkf'.
  APPEND w_tab TO i_tab.

  w_tab-werks = 'C1300'.
  w_tab-matnr = '10001'.
  w_tab-maktx = 'KURZ3'.
  w_tab-etc   = 'kdkladf..ljkadkf'.
  APPEND w_tab TO i_tab.

  w_tab-werks = 'C1000'.
  w_tab-matnr = '10002'.
  w_tab-maktx = 'KURZ1'.
  w_tab-etc   = 'kdkladf..ljkadkf'.
  APPEND w_tab TO i_tab.


  SORT i_tab BY matnr.

  LOOP AT i_tab INTO w_tab.

    AT NEW matnr.
      WRITE: / w_tab-matnr.
    ENDAT.

    WRITE w_tab-werks.

  ENDLOOP.

Ergebnis sieht hierfür so aus
  • 10001 C1000 C2000 C1300
    10002 C1000

Beitrag von Fredi (ForumUser / 42 / 0 / 0 ) »
Danke. Werde ich gleich mal ausprobieren. Melde mich danach noch mal.

Gruß

Beitrag von cosmo (Specialist / 175 / 0 / 0 ) »
Ich bin mir nicht sicher, ob die oben angeführte Lösung dem Problem ganz gerecht wird, weil hier ja nur eine Tabelle auf der Liste entsteht. Du wolltest ja aber eine interne Tabelle mit diesen Informationen haben, oder?

Mit Collect geht es nicht. Der Collect kann nur mehrere Zeilen zusammenfassen, die einen identischen Schlüssel haben. Dabei können Zahlenfelder addiert werden. Das Werk ist aber selbst ein Characterfeld und wird von Collect als Schlüssel angesehen.

Ich würde das Problem mit einer tiefen Tabelle lösen:

Code: Alles auswählen.

data begin of wmat.
data   matnr type matnr.
data   werke type table of werks_d.
data end of wmat.

data tmat like table of wmat.
Jetzt hast Du eine "Tabelle in der Tabelle". Die Verarbeitung könnte so aussehen:

Code: Alles auswählen.

* TMAT wurde mit Materialnummern gefüllt
loop at tmat into wmat.

  loop at tab_marc into marc 
       where matnr = wmat-matnr.

    append marc-werks to wmat-werke.

  endloop.

endloop.
Jetzt stehen in der Tabelle TMAT zu jedem Material alle vorhandenen Werke in der eingebetteten Tabelle WERKE.

Du kannst natürlich statt dessen die gefundenen Werke auch in einem String mit concatenate aneinanderhängen. Ist aber nicht so cool.

Gruß Jörg
Jörg Krause, Anwendungsentwickler und SAP-Betreuer MM/PP

Beitrag von cosmo (Specialist / 175 / 0 / 0 ) »
Da hat sich ein Fehler eingeschlichen: im zweiten Code-Abschnitt muss es heißen:

Code: Alles auswählen.

* TMAT wurde mit Materialnummern gefüllt 
loop at tmat into wmat. 

  loop at tab_marc into marc 
       where matnr = wmat-matnr. 

    append marc-werks to wmat-werke. 

  endloop. 
  modify tmat from wmat.

endloop. 

Jörg Krause, Anwendungsentwickler und SAP-Betreuer MM/PP

Beitrag von zzcpak (Expert / 673 / 5 / 68 ) »
fein, sieht nett aus, muss allerdings gestehen, daß ich noch nicht mit Tabellen in Tabellen gearbeitet habe.

Beitrag von Fredi (ForumUser / 42 / 0 / 0 ) »
Hallo Jörg, hallo zzcpak,

danke für eure Hilfe. Allerdings werde ich noch nicht so ganz schlau daraus.

Grundsätzlich ist das Ziel schon, das ganze in Listform auszugeben. Und zwar in der Form:

MATNR MAKTX ETC. WERKS
10001 KURZ1 XXXX C1000, C2000, C3000
10002 KURZ2 XXXX C1000

Nachdem ich jetzt von euch erfahren habe, daß ich eine tiefe Tabelle benutzen kann, möchte ich die natürlich auch anwenden.

Was habe ich bisher:

Code: Alles auswählen.


TYPES : BEGIN OF ty_tab,
         matnr LIKE mara-matnr,
         mtart LIKE mara-mtart,
         maktx LIKE makt-maktx,
        END OF ty_tab.

DATA : it_tab     TYPE STANDARD TABLE OF ty_tab WITH HEADER LINE,
       it_line    TYPE standard table of tline with header line,
       w_line     TYPE tline,
       w_header   TYPE thead,
       w_name     TYPE THEAD-TDNAME,
       w_maktx    TYPE makt-maktx,
       w_werks2   TYPE marc-werks.
In diese Tabelle selektiere ich Einträge aus der MARA, MAKT und der STXL. Das ganze schicke ich dann durch den FB 'READ_TEXT' und gebe die Daten dann aus. Die STXL enthält u.a. den Bestelltext. Ich erhalte also pro Material genau einen Satz. Der Bestelltext ist werksunabhängig. Jetzt möchte ich zusätzlich ausgeben, in welchen Werken (kann ich aus der MARC lesen) das jeweilige Material angelegt. Allerdings möchte ich die Liste deshalb nicht unnötig aufblähen und die Information in der gleichen Zeile unterbringen.

Wie ihr bestimmt bemerkt habt, bin ich kein ABAP-Profi (weit weg davon). Hoffe, ihr findet euch trotzdem zurecht und könnt mir helfen. Wäre klasse.

Jörg, du schreibst 'concatenate' sei nicht so cool. So habe ich mir sonst immer helfen können. Aber irgendwie will es diesmal nicht klappen.

Du schreibst auch, daß die TMAT mit Materialnummer gefüllt wurde. Wie und wann mache ich das. Wenn ich die tmat mit meiner Tabelle füllen will, bekomme ich einen Error (Der Typ von it_tab ist nicht in den Typ von tmat konvertierbar).

Danke für eure Hilfe.

Gruß,
Fredi

Beitrag von Fredi (ForumUser / 42 / 0 / 0 ) »
Das Problem das ich habe, ist, daß ich in meiner Tabelle für jedes Material n Einträge habe. Diese schicke ich ja dann (nach einem Loop) durch meinen FB 'READ_TEXT'. Ich möchte aber das Material nur einmal durch den FB schicken. Die Werke, in denen das Material auch nur in einer Zeile (nebeneinander) ausgeben.

Hat jemand Rat?

Danke,
Fredi

Beitrag von cosmo (Specialist / 175 / 0 / 0 ) »
Ich versuche mal, das Beispiel auf Basis Deiner Definitionen zu entwerfen. Die Definition würde ich so abändern:

Code: Alles auswählen.

TYPES : BEGIN OF ty_tab, 
         matnr LIKE mara-matnr, 
         mtart LIKE mara-mtart, 
         maktx LIKE makt-maktx, 
         tab_werke like table of marc-werks,
        END OF ty_tab. 

DATA : it_tab     TYPE STANDARD TABLE OF ty_tab WITH HEADER LINE, 
       it_line    TYPE standard table of tline with header line, 
       w_line     TYPE tline, 
       w_header   TYPE thead, 
       w_name     TYPE THEAD-TDNAME, 
       w_maktx    TYPE makt-maktx, 
       w_werks2   TYPE marc-werks. 
Jetzt hast Du ja irgendwo eine Routine, die deine it_tab mit Material, Materialart und Kurztext füllt. Danach stehen also in der Tabelle it_tab die Materialien - noch ohne Werkszuordnung. Jetzt könnte die Routine, um die vorhandenen Werke zu bestimmen, so aussehen:

Code: Alles auswählen.

  loop at it_tab.
    select werks into table it_tab-tab_werke
           from marc where matnr = it_tab-matnr.
    
    modify it_tab.
  endloop.
Nach diesem Stück code hast Du pro it_tab-Eintrag eine kleine Tabelle mit den Werken zu dieser Materialnummer.

Die Ausgaberoutine könnte dann so aussehen:

Code: Alles auswählen.

  loop at it_tab.
    write: / it_tab-matnr,
             it_tab-mtart,
             it_tab-maktx.
    loop at it_tab-tab_werke into w_werks2.
      write w_werks2.
    endloop.
  endloop.
In der it_tab gibt es jetzt immer noch nur einen Eintrag pro Material. Der Aufruf von READ_TEXT ist jetzt also nicht mehrfach.

Warum finde ich die Lösung mit concatenate nicht so cool? Das hängt damit zusammen, dass in einem String (oder einem langen Characterfeld) die Daten nicht strukturiert abgelegt sind. Angenommen, Du möchtest nur Materialien ausgeben, die AUCH im Werk 0001 vorhanden sind. Dann müsstest Du bei dieser Variante den Werke-String mit SEARCH durchsuchen. Mit dieser Variante kannst Du über einen Read Table nachsehen, ob es einen entsprechenden Eintrag gibt. Bei einem einzelnen Feld ist das nicht ganz so gravierend, aber wenn zum Werk z.B. noch die Adresse gespeichert werden soll, wirds schon schwieriger.
Jörg Krause, Anwendungsentwickler und SAP-Betreuer MM/PP

Beitrag von Fredi (ForumUser / 42 / 0 / 0 ) »
Hallo Jörg,

erst noch mal Danke für Deine Hilfe. Allerdings bekomme ich bei:

Code: Alles auswählen.

TYPES : BEGIN OF ty_tab, 
         matnr LIKE mara-matnr, 
         mtart LIKE mara-mtart, 
         maktx LIKE makt-maktx, 
         tab_werke like table of marc-werks, 
        END OF ty_tab.
den Fehler: Innerhalb von Strukturen sind keine generischen Typdefinitionen erlaubt!

Wie kann ich das umgehen? Ich hoffe, ich nerve jetzt nicht!

Zum Überblick mal mein ganzes Coding:

Code: Alles auswählen.

REPORT ZMM_TEXTE LINE-SIZE 400 NO STANDARD PAGE HEADING.

TABLES : mara, stxl, eina, eine, makt, marc.

TYPES : BEGIN OF ty_tab, 
         matnr LIKE mara-matnr, 
         mtart LIKE mara-mtart, 
         maktx LIKE makt-maktx, 
         tab_werke like table of marc-werks, 
        END OF ty_tab.

DATA : p_spras    TYPE spras.

DATA : it_tab     TYPE STANDARD TABLE OF ty_tab WITH HEADER LINE,
       it_line    TYPE standard table of tline with header line,
       w_line     TYPE tline,
       w_header   TYPE thead,
       w_name     TYPE THEAD-TDNAME,
       w_maktx    TYPE makt-maktx,
       w_werks2   TYPE string,
       tmat       like table of it_tab.

DATA:  w_tdline   TYPE string.

DATA   w_tdstring TYPE string.

DATA   w_st_werks1 TYPE string.

DATA   w_st_werks2 TYPE string.

DATA   text_tab like tline occurs 0 with header line.

************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK ZMM WITH FRAME TITLE text-t01.
SELECT-OPTIONS : s_matnr FOR mara-matnr default '10001',
     " Material number
                 s_mtart FOR mara-mtart,               " Material type
                 s_werks FOR eine-werks.               " Plant
PARAMETERS     : s_tdid LIKE stxl-tdid default 'BEST'. " Text type
SELECTION-SCREEN END OF BLOCK ZMM.

SELECTION-SCREEN BEGIN OF BLOCK ZMM1 WITH FRAME TITLE text-t02.
PARAMETERS P_LY1 RADIOBUTTON GROUP FORM.               " German
PARAMETERS P_LY2 RADIOBUTTON GROUP FORM.               " English
PARAMETERS P_LY3 RADIOBUTTON GROUP FORM.               " French
SELECTION-SCREEN END OF BLOCK ZMM1.

IF P_LY1 = 'X'.
 p_spras = 'DE'.
ELSEIF P_LY2 = 'X'.
 p_spras = 'EN'.
ELSEIF P_LY3 = 'X'.
 p_spras = 'FR'.
ENDIF.


START-OF-SELECTION.

    SELECT mara~matnr mara~mtart makt~maktx marc~werks
*    INTO CORRESPONDING FIELDS OF table it_tab
    FROM ( ( ( mara
        INNER JOIN STXL ON           STXL~TDNAME  = mara~matnr AND
                                     STXL~TDID    = s_tdid     AND
                                     STXL~TDSPRAS = p_spras )
        INNER JOIN MAKT ON           MAKT~MATNR   = mara~matnr )
        INNER JOIN MARC ON           MARC~MATNR   = mara~matnr )
    INTO  (it_tab-matnr, it_tab-mtart, it_tab-maktx, it_tab-werks2)

         WHERE                       mara~matnr  IN s_matnr AND
                                     mtart  IN s_mtart.
   APPEND it_tab.
    ENDSELECT.

    Loop at it_tab.

    w_st_werks1 = it_tab-werks2.

    concatenate w_st_werks2 w_st_werks1 into w_st_werks2.

    delete it_tab from 1 to 99 where werks2 = w_st_werks1.
    endloop.


******************************************************************
*PROZESS TEXTART "BEST"                                          *
******************************************************************

  LOOP at it_tab.



      clear : it_line[], w_header.



      move it_tab-matnr to w_name.
      move it_tab-maktx to w_maktx.


      CALL FUNCTION 'READ_TEXT'
      EXPORTING
      client = sy-mandt
      id = s_tdid
      language = p_spras
      name = w_name
      object = 'MATERIAL'
      archive_handle = 0
      local_cat = ' '
*IMPORTING
* HEADER = thead[]
      tables
       lines = text_tab
* lines = text_tab
      EXCEPTIONS
      id = 1
      language = 2
      name = 3
      not_found = 4
      object = 5
      reference_check = 6
      wrong_access_to_archive = 7
      OTHERS = 8.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

      CLEAR text_tab.

      CLEAR w_tdstring.

      LOOP AT text_tab.

        w_tdline = text_tab-tdline.
        CONDENSE w_tdline.
     CONCATENATE w_tdstring w_tdline into w_tdstring separated by space.

      ENDLOOP.
      CONDENSE w_tdstring.
      SHIFT w_name LEFT DELETING LEADING '0'.
      WRITE: / w_name(12).
      WRITE: it_tab-werks2.
      WRITE: w_maktx.
      WRITE: '   ', w_tdstring.
   ENDLOOP.
Nicht wundern, wenn hier auch noch andere Felder und Tabellen definiert sind. Die brauche ich auch noch für andere Textarten bzw. Daten überhaupt.

Danke,
Fredi

Beitrag von dima ( / / 0 / 3 ) »
anstatt

Code: Alles auswählen.

TYPES : BEGIN OF ty_tab, 
         matnr LIKE mara-matnr, 
         mtart LIKE mara-mtart, 
         maktx LIKE makt-maktx, 
         tab_werke like table of marc-werks, 
        END OF ty_tab.
nimmst du einfach

Code: Alles auswählen.

DATA : BEGIN OF ty_tab, 
         matnr LIKE mara-matnr, 
         mtart LIKE mara-mtart, 
         maktx LIKE makt-maktx, 
         tab_werke like table of marc-werks, 
        END OF ty_tab.

Beitrag von dima ( / / 0 / 3 ) »
so ich mal deinen Quellcode ein bisschen angeschaut & ausprobiert.
Wie bereits gesagt:

Code: Alles auswählen.

data : begin of it_tab occurs 0,
         matnr like mara-matnr,
         mtart like mara-mtart,
         maktx like makt-maktx,
         tab_werke like table of marc-werks,
        end of it_tab.
Bei der befüllen der it_tab gab es bei mir paar probleme da er beim inner join mit einer tabelle rumgezickt hat. geht anscheinend nicht. Darum würde ich das so machen.

Code: Alles auswählen.

 select mara~matnr mara~mtart makt~maktx
    into (it_tab-matnr, it_tab-mtart, it_tab-maktx)
 from ( ( mara inner join stxl on  stxl~tdname  = mara~matnr
                              and  stxl~tdid    = s_tdid
                              and  stxl~tdspras = p_spras )
               inner join makt on  makt~matnr   = mara~matnr )
                            where  mara~matnr   in s_matnr
                              and  mtart        in s_mtart.

    select werks into table it_tab-tab_werke
      from marc where matnr = it_tab-matnr.


    append it_tab.
  endselect.

* Loop at it_tab.
*  w_st_werks1 = it_tab-werks2.
*  concatenate w_st_werks2 w_st_werks1 
*                           into w_st_werks2.
*  delete it_tab from 1 to 99 
*                 where werks2 = w_st_werks1.
* endloop.

am ende hatte ich dann eine Kunterbunte Ausgabe gehabt da wir anscheinend unter stxl-tdname kein matnr speichern und ausgabe noch richtig formatiert werden muss.
Gruß
dima

Beitrag von cosmo (Specialist / 175 / 0 / 0 ) »
Oder auch:

Code: Alles auswählen.

TYPES tab_werke_typ TYPE SORTED TABLE OF werks
                    WITH UNIQUE KEY werks.

TYPES : BEGIN OF ty_tab,
         matnr LIKE mara-matnr,
         mtart LIKE mara-mtart,
         maktx LIKE makt-maktx,
         tab_werke TYPE tab_werke_typ,
        END OF ty_tab.
Kommentar: der Typ tab_werke_typ ist jetzt ein nicht-generischer Tabellentyp mit einem definierten Schlüssel. Die Struktur WERKS ist im Dictionary definiert und enthält ein Feld des selben Namens.^

Ich habe mal Dein Coding zum Laufen gebracht. Achte auf meine Kommentare...

Code: Alles auswählen.

REPORT zmm_texte LINE-SIZE 400 NO STANDARD PAGE HEADING.

TABLES : mara, stxl, eina, eine, makt, marc.

TYPES tab_werke_typ TYPE SORTED TABLE OF werks
                    WITH UNIQUE KEY werks.

TYPES : BEGIN OF ty_tab,
         matnr LIKE mara-matnr,
         mtart LIKE mara-mtart,
         maktx LIKE makt-maktx,
         tab_werke TYPE tab_werke_typ,
        END OF ty_tab.

DATA : p_spras    TYPE spras.

DATA : it_tab     TYPE STANDARD TABLE OF ty_tab WITH HEADER LINE,
       it_line    TYPE STANDARD TABLE OF tline WITH HEADER LINE,
       w_line     TYPE tline,
       w_header   TYPE thead,
       w_name     TYPE thead-tdname,
       w_maktx    TYPE makt-maktx,
       w_werks2   TYPE string,
       tmat       LIKE TABLE OF it_tab.

* Arbeitsstruktur für die WERKS-Struktur
DATA  werks TYPE werks.

DATA:  w_tdline   TYPE string.

DATA   w_tdstring TYPE string.

DATA   w_st_werks1 TYPE string.

DATA   w_st_werks2 TYPE string.

DATA   text_tab LIKE tline OCCURS 0 WITH HEADER LINE.

************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK zmm WITH FRAME TITLE text-t01.
SELECT-OPTIONS : s_matnr FOR mara-matnr DEFAULT '10001',
     " Material number
                 s_mtart FOR mara-mtart,               " Material type
                 s_werks FOR eine-werks.               " Plant
PARAMETERS     : s_tdid LIKE stxl-tdid DEFAULT 'BEST'. " Text type
SELECTION-SCREEN END OF BLOCK zmm.

SELECTION-SCREEN BEGIN OF BLOCK zmm1 WITH FRAME TITLE text-t02.
PARAMETERS p_ly1 RADIOBUTTON GROUP form.               " German
PARAMETERS p_ly2 RADIOBUTTON GROUP form.               " English
PARAMETERS p_ly3 RADIOBUTTON GROUP form.               " French
SELECTION-SCREEN END OF BLOCK zmm1.

IF p_ly1 = 'X'.
  p_spras = 'DE'.
ELSEIF p_ly2 = 'X'.
  p_spras = 'EN'.
ELSEIF p_ly3 = 'X'.
  p_spras = 'FR'.
ENDIF.


START-OF-SELECTION.

**** Auf diese Art bekommst Du zuviele Einträge in der ITAB!
*  SELECT mara~matnr mara~mtart makt~maktx marc~werks
**    INTO CORRESPONDING FIELDS OF table it_tab
*  FROM ( ( ( mara
*      INNER JOIN stxl ON           stxl~tdname  = mara~matnr AND
*                                   stxl~tdid    = s_tdid     AND
*                                   stxl~tdspras = p_spras )
*      INNER JOIN makt ON           makt~matnr   = mara~matnr )
*      INNER JOIN marc ON           marc~matnr   = mara~matnr )
*  INTO  (it_tab-matnr, it_tab-mtart, it_tab-maktx, it_tab-werks2)
*
*       WHERE                       mara~matnr  IN s_matnr AND
*                                   mtart  IN s_mtart.
*    APPEND it_tab.
*  ENDSELECT.
*** Zuerst nur die MARA lesen (mit Existenzcheck auf die anderen Tabs)
  SELECT mara~matnr mara~mtart makt~maktx
        FROM mara INNER JOIN makt ON makt~matnr   = mara~matnr
        INTO  (IT_TAB-MATNR, IT_TAB-MTART, IT_TAB-MAKTX)
        WHERE                       mara~matnr  IN s_matnr AND
                                    mtart  IN s_mtart AND
*       Um Texte zu finden, immer über die Kopftabelle STXH gehen!
*       Wegen Performance nie das Textobjekt weglassen!
        exists ( SELECT * FROM stxh WHERE tdobject = 'MATERIAL' AND
                                          tdname = mara~matnr AND
                                          tdid = s_tdid AND
                                          tdspras = p_spras ) AND
        exists ( SELECT * FROM marc WHERE matnr = mara~matnr ).

    APPEND it_tab.
  ENDSELECT.

**** Damit ändert sich auch dieser Loop:
*  LOOP AT it_tab.
*
*    w_st_werks1 = it_tab-werks2.
*
*    CONCATENATE w_st_werks2 w_st_werks1 INTO w_st_werks2.
*
*    DELETE it_tab FROM 1 TO 99 WHERE werks2 = w_st_werks1.
*  ENDLOOP.

  LOOP AT it_tab.
    SELECT werks INTO TABLE it_tab-tab_werke FROM marc
           WHERE matnr = it_tab-matnr.
    MODIFY it_tab.
  ENDLOOP.


******************************************************************
*PROZESS TEXTART "BEST"                                          *
******************************************************************

  LOOP AT it_tab.



    CLEAR : it_line[], w_header.



    MOVE it_tab-matnr TO w_name.
    MOVE it_tab-maktx TO w_maktx.


    CALL FUNCTION 'READ_TEXT'
    EXPORTING
    client = sy-mandt
    id = s_tdid
    language = p_spras
    name = w_name
    object = 'MATERIAL'
    archive_handle = 0
    local_cat = ' '
*IMPORTING
* HEADER = thead[]
    TABLES
     lines = text_tab
* lines = text_tab
    EXCEPTIONS
    id = 1
    language = 2
    name = 3
    not_found = 4
    object = 5
    reference_check = 6
    wrong_access_to_archive = 7
    OTHERS = 8.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    CLEAR text_tab.

    CLEAR w_tdstring.

    LOOP AT text_tab.

      w_tdline = text_tab-tdline.
      CONDENSE w_tdline.
     CONCATENATE w_tdstring w_tdline INTO w_tdstring SEPARATED BY space.


    ENDLOOP.
    CONDENSE w_tdstring.
    SHIFT w_name LEFT DELETING LEADING '0'.
    WRITE: / w_name(12).
**** An dieser Stelle der Loop zur Ausgabe:
*    WRITE: it_tab-werks2.
    LOOP AT it_tab-tab_werke INTO werks.
      WRITE werks-werks.
    ENDLOOP.
    WRITE: w_maktx.
    WRITE: '   ', w_tdstring.
  ENDLOOP.
Jörg Krause, Anwendungsentwickler und SAP-Betreuer MM/PP

Beitrag von Fredi (ForumUser / 42 / 0 / 0 ) »
Danke, ihr Zwei.

Werde ich gleich ausprobieren. Bin nur gerade an einer anderen Sache dran (diesmal auch wieder mein Gebiet - Puh!). Melde mich dann aber sofort. Großes Dankeschön für Eure Hilfe.

Gruß,

Fredi

Beitrag von Fredi (ForumUser / 42 / 0 / 0 ) »
Läuft einwandfrei.

Danke, das war wirklich eine große Hilfe für mich. Werde jetzt mal den Rest machen. Muß das ganze noch ein wenig aufbereiten und auch andere Textarten und Materialdaten einbinden.

Nur noch eine Frage: Warum soll ich aus der STXH (anstatt STXL) lesen? Wo ist der Unterschied?

Danke und Gruß,
Fredi

Vergleichbare Themen

15
Antw.
5077
Views
Collect?
von HH_ABAP » 01.06.2018 10:32 • Verfasst in ABAP® für Anfänger
2
Antw.
2724
Views
COLLECT
von Cola » 30.10.2009 19:16 • Verfasst in ABAP® Core
3
Antw.
2172
Views
Collect!
von Parm » 24.09.2007 09:56 • Verfasst in ABAP® für Anfänger
2
Antw.
2729
Views
Alternative zu COLLECT
von anjaortlieb » 05.10.2007 09:16 • Verfasst in ABAP® für Anfänger
4
Antw.
2094
Views
Collect Befehl
von burggartenkind » 31.07.2019 08:46 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Bedarfszusammenfassung "Einzelbedarfe"
vor einer Stunde von harri 2 / 1143
Trennen Strasse und Hausnummer
vor 3 Stunden von ralf.wenzel 21 / 11266
Dialog-Container mit Toolbar/Status
Gestern von black_adept gelöst 27 / 4364

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

Bedarfszusammenfassung "Einzelbedarfe"
vor einer Stunde von harri 2 / 1143
Trennen Strasse und Hausnummer
vor 3 Stunden von ralf.wenzel 21 / 11266
Dialog-Container mit Toolbar/Status
Gestern von black_adept gelöst 27 / 4364

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
Gestern von ArjenR 1 / 239
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 3166
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9758