Code: Alles auswählen.
FIELD-SYMBOLS <t> type sorted table.
assign (TABELLENNAME) to <t>.
Das stimmt.DeathAndPain hat geschrieben: o LOOP AT akzeptiert in seiner WHERE-Clause keine dynamische Angabe von der Form ('PERNR') > '00000008'
So toll dynamische und generelle Programmierung auch ist: Das sind genau die Grenzen. Es bleibt dir bei einem Release < 7.51 nichts weiter übrig, als im LOOP das Feld per ASSIGN einem Feldsymbol zuzuweisen und jeden Tabelleneintrag einzeln abzufragen.DeathAndPain hat geschrieben: o READ TABLE akzeptiert eine dynamische Syntax, ist seinerseits aber auf Prüfung auf Gleichheit beschränkt. Dasselbe gilt für die alternative 7.40-Syntax.
Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
DeathAndPain
Doch. die Alternative ist der teilsequentielle Loopewx hat geschrieben: Es bleibt dir bei einem Release < 7.51 nichts weiter übrig, als im LOOP das Feld per ASSIGN einem Feldsymbol zuzuweisen und jeden Tabelleneintrag einzeln abzufragen.
"teilsequentiell" würde ich es noch nicht mal nennen, da ich die Schleife ja auf genau die Zeilen reduziere, die ich auch bekommen würde, wenn LOOP AT ... WHERE (column) > wert funktionieren würde. Die Suchoptimierung als solche ist also im Rahmen dessen, was der Index hergibt, vollständig.die Alternative ist der teilsequentielle Loop
Die WHERE-Bedingung kann man schon viel länger dynamisieren ( mindestens 7.40 - wahrscheinlich auch schon früher ). Das Problem in diesem speziellen Fall ist, dass die Tabelle über die der LOOP geht während des Compilens nicht statisch bekannt ist. Habe allerdings in diesem Moment kein 7.51er System unter den Fingern, so dass ich nicht prüfen kann, ob die Fehlermeldung "Bei "... WHERE ..." muss der Zeilentyp der Tabelle statisch bekannt sein." dort nicht mehr erscheint sondern SAP tatsächlich die Sprache erweitert hat ohne einen Buchstaben an der Doku zu ändern.ewx hat geschrieben:Du kannst allerdings die komplette WHERE-BEdingung dynamisieren ab 7.51:
https://help.sap.com/doc/abapdocu_751_i ... DITION_4@4@So toll dynamische und generelle Programmierung auch ist: Das sind genau die Grenzen. Es bleibt dir bei einem Release < 7.51 nichts weiter übrig, als im LOOP das Feld per ASSIGN einem Feldsymbol zuzuweisen und jeden Tabelleneintrag einzeln abzufragen.DeathAndPain hat geschrieben: o READ TABLE akzeptiert eine dynamische Syntax, ist seinerseits aber auf Prüfung auf Gleichheit beschränkt. Dasselbe gilt für die alternative 7.40-Syntax.
Irgendwie widersprichst Du Dir hier gerade selber. Dynamisierbarkeit bedeutet doch gerade, dass keine statische Angabe erforderlich ist.Die WHERE-Bedingung kann man schon viel länger dynamisieren ( mindestens 7.40 - wahrscheinlich auch schon früher ). Das Problem in diesem speziellen Fall ist, dass die Tabelle über die der LOOP geht während des Compilens nicht statisch bekannt ist.
Dynamierbarkeit der WHERE-Bedingung <> Dynamisierbarkeit aller Teile des LOOP-Befehls.DeathAndPain hat geschrieben:Irgendwie widersprichst Du Dir hier gerade selber. Dynamisierbarkeit bedeutet doch gerade, dass keine statische Angabe erforderlich ist.Die WHERE-Bedingung kann man schon viel länger dynamisieren ( mindestens 7.40 - wahrscheinlich auch schon früher ). Das Problem in diesem speziellen Fall ist, dass die Tabelle über die der LOOP geht während des Compilens nicht statisch bekannt ist.
Geht ab 7.02. Hab's gerade getestet.Du kannst allerdings die komplette WHERE-BEdingung dynamisieren ab 7.51:
Folgende Benutzer bedankten sich beim Autor Dele für den Beitrag:
DeathAndPain
Gut, aber das ist wenig relevant, denn die gesamte Bedingung in einen String zu packen, werde ich hinbekommen.black_adept hat geschrieben:Dynamierbarkeit der WHERE-Bedingung <> Dynamisierbarkeit aller Teile des LOOP-Befehls.
Code: Alles auswählen.
FIELD-SYMBOLS <BUFFER_TABLE> TYPE SORTED TABLE.
DATA WHERE_BEDINGUNG_FUER_LOOP TYPE STRING.
BUFFER_TABLENAME = 'GT_BUFFER_IT' && IS_CUST-INFTY.
ASSIGN (BUFFER_TABLENAME) TO <BUFFER_TABLE>.
WHERE_BEDINGUNG_FUER_LOOP = `PERNR = '` && IV_PERSNR && `' ` " Der LOOP findet auf der Tabelle GT_BUFFER_ITxxxx statt. Alle diese
&& `AND SUBTY = '` && IS_CUST-SUBTY && `' ` " Tabellen sind nach PERNR SUBTY BEGDA sortiert.
&& `AND BEGDA <= '` && IV_DATE && `' `
&& `AND ENDDA >= '` && IV_DATE && `'`.
LOOP AT <BUFFER_TABLE> ASSIGNING <LINE_OF_BUFFER_TABLE> WHERE (WHERE_BEDINGUNG_FUER_LOOP).
" do stuff
ENDLOOP.
Stoße dabei genau auf diesen Fehler und Frage mich ob es dafür einen Workaround für alte Releases gibt?black_adept hat geschrieben: ↑06.11.2017 12:56"Bei "... WHERE ..." muss der Zeilentyp der Tabelle statisch bekannt sein."