Instanztmethode mit ITAB anreichern

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

Instanztmethode mit ITAB anreichern

Beitrag von cecslucas (ForumUser / 17 / 1 / 0 ) »
Hallo zusammen,
ich tue mich gerade etwas schwer mit einer, so glaube ich, eigentlich trivialen Aufgabe. Vielleicht kann man mir jemand auf die Sprünge helfen. Kurz zur Aufgabenstellung:
1. Ich habe ein paar Daten aus der Tabelle MARD Selektiert und in eine itab geschrieben.
2. Und hier ist bereits mein "Problem". Ich habe ich eine Instanzmethode erstellt, worüber ich Segmente eines IDOCs befülle und das IDOC im Nachgang erzeuge. Zum Anreichern der Segmente benötige ich meine Daten aus der Itab.
Entsprechend habe ich einen Importingparameter angelegt, der genauso typisiert ist wie meine itab. Dennoch bekomme ich die Meldung ""LT_SELL_OUT_STOCK" ist nicht typkompatibel zum formalen Parameter "IT_SELL_OUT_STOCK".

Um das jetzt Quick and Dirty zu lösen, hätte ich stumpf über die itab geloopt und Zeile für Zeile die Daten in die Methode übergeben aber schön ist das nicht sonderlich.

Ich bin für jeden Ratschlag dankbar und möchte einfach wissen, was eine charmante Lösung ist.

Report Ausschnitt:

Code: Alles auswählen.

TABLES: mard.

TYPES: BEGIN OF linetype,
         sign   TYPE c LENGTH 1,
         option TYPE c LENGTH 2,
         low    TYPE string,
         high   TYPE string,
       END OF linetype.

DATA: lt_mard           TYPE TABLE OF mard,
      lt_sell_out_stock TYPE TABLE OF zb2b_sell_out_stock,
      lv_string         TYPE string,
      lt_werks          TYPE RANGE OF s_werks,
      lt_matnr          TYPE RANGE OF s_matnr,
      lv_date_new       TYPE sy-datum, "Datum - operator
      lv_date_input     TYPE sy-datum, "Datum aus Selectionscreen
      lv_year           TYPE string,
      lv_mon            TYPE string,
      rt_lfmon          TYPE TABLE OF linetype,
      rt_lfgja          TYPE TABLE OF linetype,
      ld_date           TYPE d,
      ld_mon            TYPE string,
      ld_date_high      TYPE d,
      ld_date_low       TYPE d.

DATA(lo_main) = NEW zcl_b2b_sell_out(
  iv_log    = 'ZB2B'
  iv_sublog = 'SO_MBGMCR_RETAIL'
  iv_desc   = TEXT-003 ).

Code: Alles auswählen.

ELSE.
  p_lfmon = p_lfmon - 4. "hier muss Suchstring eingegeben werden
  SELECT matnr, werks, lgort, labst, lfgja, lfmon  FROM mard
INTO TABLE @lt_sell_out_stock WHERE
werks IN @lt_werks
AND matnr IN @s_matnr
AND lfmon IN @rt_lfmon
AND lfgja IN @rt_lfgja
AND lgort EQ @p_lgort
AND lfgja EQ @p_lfgja
AND lfmon EQ @p_lfmon
AND labst GT @p_labst.
ENDIF.


  TRY.
      lo_main->create_edidd_mbgmcr_rs( EXPORTING it_sell_out_stock  = lt_sell_out_stock                              ).
ENDTRY.

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


Re: Instanztmethode mit ITAB anreichern

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
Ich sehe jetzt leider die entscheidende Zeile nicht, in der du deklariert hast, wie der Importing-Parameter denn typisiert ist ;)
Da ich aber auch keinen Tabellentypen sehe, sondern nur die Typisierung mit DATA...TABLE OF... vermute ich, dass dein Problem hier liegt.
Du bräuchtest vermutlich einen Typen "TYPES tabellentyp TYPE STANDARD TABLE OF zeilentyp" und müsstest dir dann noch Gedanken über den Schüssel machen. Diesen Typen nutzt du dann bei der Deklaration von lt_sell_out_stock und bei it_sell_out_stock.

Re: Instanztmethode mit ITAB anreichern

Beitrag von sap_enthusiast (ForumUser / 95 / 25 / 23 ) »
fr-g hat geschrieben:
17.10.2022 09:20
Du bräuchtest vermutlich einen Typen "TYPES tabellentyp TYPE STANDARD TABLE OF zeilentyp" und müsstest dir dann noch Gedanken über den Schüssel machen. Diesen Typen nutzt du dann bei der Deklaration von lt_sell_out_stock und bei it_sell_out_stock.
Wenn die Datenmengen sich klein halten, ist die Formulierung von Schlüsselfeldern auch nicht unbedingt nötig.
Folgendes geht auch, kann sogar für Rückgabeparameter benutzt werden:

Code: Alles auswählen.

"TYPES tabellentyp TYPE STANDARD TABLE OF zeilentyp WITH EMPTY KEY.

Re: Instanztmethode mit ITAB anreichern

Beitrag von cecslucas (ForumUser / 17 / 1 / 0 ) »
Danke für deine Antwort! Mein Problem ist scheinbar, dass ich als Importingparameter meiner Methode kein Type Table definieren kann.

Ich habe nun einen Tabtype in meiner Klasse definiert namens "Z_B2B_Stock", dieser Tabtype hat den Zeilentyp einer Struktur "ZB2B_SELL_OUT_STOCK" mit den Feldern MATNR, WERKS, LGORT, LABST, LFGJA, LFMON.

In meinem Report (der die Methode anreichern soll über den Parameter it_sell_out_stock) habe ich die itab nun ebenfalls mit: lt_sell_out_stock TYPE STANDARD TABLE OF ZB2B_STOCK definiert - bekomme jetzt aber den Fehler:

"Der Arbeitsbereich "LT_SELL_OUT_STOCK" hat weniger Felder als selektiert werden."

Ich verstehe es wirklich nicht, itab und importingparameter haben den gleichen Type daher können doch die Felder gar nicht unterschiedlich sein oder habe ich einen totalen Denkfehler?

fr-g hat geschrieben:
17.10.2022 09:20
Ich sehe jetzt leider die entscheidende Zeile nicht, in der du deklariert hast, wie der Importing-Parameter denn typisiert ist ;)
Da ich aber auch keinen Tabellentypen sehe, sondern nur die Typisierung mit DATA...TABLE OF... vermute ich, dass dein Problem hier liegt.
Du bräuchtest vermutlich einen Typen "TYPES tabellentyp TYPE STANDARD TABLE OF zeilentyp" und müsstest dir dann noch Gedanken über den Schüssel machen. Diesen Typen nutzt du dann bei der Deklaration von lt_sell_out_stock und bei it_sell_out_stock.

Re: Instanztmethode mit ITAB anreichern

Beitrag von Thomas R. (Expert / 755 / 78 / 34 ) »
Hallo,
der Hinweis über die Arbeitsbereichsfelder wird vermutlich geworfen, weil im
SELECT
mehr Felder als in der Zielstruktur angegeben sind.
(Dies ist nur eine Vermutung, da dieser Teil des Quellcodes nicht enthalten ist).

MfG
Thomas R.

Re: Instanztmethode mit ITAB anreichern

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
sap_enthusiast hat geschrieben:
17.10.2022 09:57
Wenn die Datenmengen sich klein halten, ist die Formulierung von Schlüsselfeldern auch nicht unbedingt nötig.
Folgendes geht auch, kann sogar für Rückgabeparameter benutzt werden:

Code: Alles auswählen.

"TYPES tabellentyp TYPE STANDARD TABLE OF zeilentyp WITH EMPTY KEY.
Ich meinte damit auch nur, dass überhaupt ein solcher Zusatz dabei stehen muss, damit der Typ vollständig ist ;)

cecslucas hat geschrieben:
17.10.2022 10:08
Danke für deine Antwort! Mein Problem ist scheinbar, dass ich als Importingparameter meiner Methode kein Type Table definieren kann.
Genau hier könntest du aber einen Tabellentyp nutzen.
Du nutzt ja immer noch nicht an beiden Stellen denselben Tabellen(!)typ :)
Dazu sonst das, wasThomas R. sagt.

Re: Instanztmethode mit ITAB anreichern

Beitrag von cecslucas (ForumUser / 17 / 1 / 0 ) »
D.h. ich würde nun in meiner Klasse einen Tabellentyp anlegen, der die gewünschten MARD Daten beinhaltet und typisiere damit meinen Importingparameter und meine Itab?

fr-g hat geschrieben:
17.10.2022 10:33
sap_enthusiast hat geschrieben:
17.10.2022 09:57
Wenn die Datenmengen sich klein halten, ist die Formulierung von Schlüsselfeldern auch nicht unbedingt nötig.
Folgendes geht auch, kann sogar für Rückgabeparameter benutzt werden:

Code: Alles auswählen.

"TYPES tabellentyp TYPE STANDARD TABLE OF zeilentyp WITH EMPTY KEY.
Ich meinte damit auch nur, dass überhaupt ein solcher Zusatz dabei stehen muss, damit der Typ vollständig ist ;)

cecslucas hat geschrieben:
17.10.2022 10:08
Danke für deine Antwort! Mein Problem ist scheinbar, dass ich als Importingparameter meiner Methode kein Type Table definieren kann.
Genau hier könntest du aber einen Tabellentyp nutzen.
Du nutzt ja immer noch nicht an beiden Stellen denselben Tabellen(!)typ :)
Dazu sonst das, wasThomas R. sagt.

Re: Instanztmethode mit ITAB anreichern

Beitrag von fr-g (ForumUser / 76 / 12 / 25 ) »
cecslucas hat geschrieben:
17.10.2022 11:25
D.h. ich würde nun in meiner Klasse einen Tabellentyp anlegen, der die gewünschten MARD Daten beinhaltet und typisiere damit meinen Importingparameter und meine Itab?
Ja. Probier es doch mal so aus :)

Wenn du bei vollständig typisierten Formalparametern (auch Exporting, Returning, Using, Changing) eine Tabelle übergeben möchtest, brauchst du immer einen Tabellentypen. Sinnvollerweise verwendest du den auch beim Aktualparameter. Der Tabellentyp muss natürlich für dich sichtbar sein (selbe Klasse, DDIC, PUBLIC einer globalen Klasse...).

Für alles, was dann noch schiefgehen könnte, fehlt der größere Kontext.

Seite 1 von 1

Vergleichbare Themen

1
Antw.
654
Views
itab-Datensätze mit TVKO-Daten anreichern
von kolumbus70 » 14.07.2019 11:19 • Verfasst in ABAP® für Anfänger
1
Antw.
1402
Views
Ausnahmeklasse mit Bapireturn anreichern o.direkt behandeln
von RIG » 27.04.2018 13:18 • Verfasst in ABAP Objects®
30
Antw.
14144
Views
move itab 1 nach itab 2 mit bedingung
von c oco » 17.04.2012 14:39 • Verfasst in ABAP® für Anfänger
2
Antw.
410
Views
itab?
von DerAzubi » 19.10.2022 16:44 • Verfasst in ABAP® für Anfänger
2
Antw.
2486
Views
XML->ITAB
von ewx » 09.07.2008 10:24 • Verfasst in ABAP® Core

Aktuelle Forenbeiträge

Regex in where
vor 9 Stunden von edwin 7 / 166
Daten an Tabelle binden
vor 22 Stunden von Bright4.5 3 / 1487

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

Regex in where
vor 9 Stunden von edwin 7 / 166
Daten an Tabelle binden
vor 22 Stunden von Bright4.5 3 / 1487

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822