where (wtab) beschrenkung?!

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

where (wtab) beschrenkung?!

Beitrag von dimes (Specialist / 146 / 0 / 0 ) »
Hallo Leute...

Gibt es irgendeine Beschrenkung bei der Menge die ich unter der Tabele für eine dynamischen Where Bedingung machen darf...

Hab jetzt eine Menge von 1000 nochwas in der Where Bedingung und dann kommt es zu einem Laufzeitfehler: "tab muss darf nur ein c Feld sein und von der Länge 72..." hab aber alles nachgeguckt und mit weniger Datensätzen in der tab ausprobiert!
Geht!!! Hab dann verfolgt und rausgefunden das er beim Datensatz 522 abbricht... (Datensatz ist aber ok) und mit anderen Datensätzen bricht er auch beim 522er ab...

Weiß vielleicht jemand warum der da abbricht...?

Danke

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


Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
Das SELECT-Statement wird irgendwann zu groß.
Größer als die in dem entsprechenden Profile-Parameter eingestelle Maximalgröße. (Ohne Rücksprache mit SAP sollte der Default nicht geändert werden.)

Das gleiche Problem hast Du auch mit SELECT ... WHERE field IN range..., wenn die Range zu viele Einträge hat.

Ob die Grenze bei 2000, 1000 oder 522 Einträgen überschritten wird, hängt u.a. von der Feldlänge ab (für eine MATNR mit Länge 18 kann man weniger Einzelwerte übergeben als für ein Feld mit Länge 6) und davon, wie groß das statement durch andere WHERE-Bedingungen ... schon wird.

Ein Ausweg wäre SELECT ... FOR ALL ENTRIES IN ...

Aber neben den in der Doku beschriebenen Fallen ist dann noch zu beachten, dass bei max. blocking factor = 5 (wird gern von SAP empfohlen) bei einer WHERE-Bedingung ohne passenden Index-Zugriff aus einem oder zwei Full Table Scans schnell mal hunderte werden.

Wo kommen denn Deine mehr als 522 Werte her?
Wie ist die WHERE-Klausel aufgebaut?

Beitrag von dimes (Specialist / 146 / 0 / 0 ) »
Ich muss daten aus der mseg und dann aus der mkpf holen.Da die Tabellen sehr groß sind dachte ich mir das ich erstaml die Marterialbelege die ich brauche rausholen und dann damit weiter arbeite:

code:

Code: Alles auswählen.


BEGIN OF matnr_stock_tab_typ,
          matnr            TYPE mseg-matnr,
          werks            TYPE mbew-werks,
        END OF matnr_stock_tab_typ.


DATA:
matnr_stock_tab TYPE TABLE OF matnr_stock_tab_typ
           WITH KEY matnr stock,
wa_matnr_stock_tab LIKE LINE OF matnr_stock_tab.

  FIELD-SYMBOLS <wa_main_tab> LIKE LINE OF main_tab.
  SORT main_tab BY matnr stock. "main_tab enthält einträge von Materialien und Werken. n-m
  LOOP AT main_tab ASSIGNING <wa_main_tab>.
    wa_matnr_stock_tab-matnr = <wa_main_tab>-matnr.
    wa_matnr_stock_tab-stock = <wa_main_tab>-stock.
    COLLECT wa_matnr_stock_tab INTO matnr_stock_tab.
  ENDLOOP.




DATA: wtab(72)      OCCURS 0,
        wtab_line     LIKE LINE OF wtab,
        or(2)         TYPE c,
        tmp_matnr(20) TYPE c,
        tmp_stock(10) TYPE c.

 
 FIELD-SYMBOLS <wa_matnr_stock_tab> LIKE LINE OF matnr_stock_tab.

* fill wtab
  CLEAR: or.
  LOOP AT matnr_stock_tab ASSIGNING <wa_matnr_stock_tab>.
    tmp_matnr = <wa_matnr_stock_tab>-matnr.
    tmp_stock = <wa_matnr_stock_tab>-stock.

    CONCATENATE or
    ' ( matnr = ''' tmp_matnr ''' and werks = ''' tmp_stock ''' ) '
           INTO wtab_line.
    APPEND wtab_line TO wtab.
    or = 'or'.

  ENDLOOP.


SELECT * FROM mseg INTO tmp_mseg WHERE (wtab). "LAUFZEITFEHLER 




Man lernt nie aus...

Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
Hi,

immerhin ist auf die beiden Felder matnr und werks ein index in der mseg.
-> verlagere doch erstmal den select pro artikel und werk in deinen loop

-> wenn die Laufzeit zu schlecht ist solltest du versuchen alle benötigten mseg-daten in eine sorted table (non unique key = matnr, werks ..; zu packen und damit zu arbeiten


lg Andreas

Beitrag von Gast ( / / 0 / 3 ) »
Asaph hat geschrieben:immerhin ist auf die beiden Felder matnr und werks ein index in der mseg.
Deswegen könnte man auch SELECT ... FOR ALL ENTRIES IN ... nehmen.

Seite 1 von 1

Über diesen Beitrag


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

Aktuelle Forenbeiträge

BAPI zur ABSO?
vor 6 Tagen von DeathAndPain 2 / 941
Materialstammerweiterung: Neuer Reiter
vor 2 Wochen von DeathAndPain gelöst 4 / 1625
Ermittlung der Arbeitstage (Mosid)
vor 3 Wochen von Radinator 11 / 47292
LSMW-Problem
vor 4 Wochen von DeathAndPain gelöst 6 / 5189

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

BAPI zur ABSO?
vor 6 Tagen von DeathAndPain 2 / 941
Materialstammerweiterung: Neuer Reiter
vor 2 Wochen von DeathAndPain gelöst 4 / 1625
Ermittlung der Arbeitstage (Mosid)
vor 3 Wochen von Radinator 11 / 47292
LSMW-Problem
vor 4 Wochen von DeathAndPain gelöst 6 / 5189