Ich seh' nur Sternchen ...

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

Ich seh' nur Sternchen ...

Beitrag von KleinerEisbaer (Specialist / 123 / 3 / 0 ) »
... in der Ausgabe.

Code: Alles auswählen.

Select v~kunrg v~vkorg v~fkart v~fkdat v~netwr v~mwsbk 
v~vbeln v~valdt k~name1 k~stras k~ort01 k~pstlz b~bankl 
b~bkont b~bankn 
into corresponding fields of table itab 
from 
( ( vbrk as v INNER JOIN kna1 as k 
ON v~kunrg = k~kunnr ) 
inner join 
knbk as b 
on b~kunnr = k~kunnr ) 
where v~fkdat between '20060201' and '20080229' 
and v~vkorg = '3000' 
and v~fkart = 'ZES'. 

Sort itab by kunrg name1. 

Loop at itab into wa. 
  at new kunrg. 
    Concatenate wa-bankl wa-bkont wa-bankn into bankverbindung. 
    Concatenate bankverbindung brutto into bank_brutto. 
    Condense bank_brutto no-gaps. 
    Replace '.' in bank_brutto with ''. 
    dat_day = wa-valdt+6(2). 
    dat_mon = wa-valdt+4(2). 
    dat_year = wa-valdt(4). 
    Concatenate dat_day dat_mon dat_year into duedate. 
    Concatenate wa-vbeln duedate into fak_due. 
    Shift fak_due left deleting leading '0'. 
    write: / 'Loop: '. 
    write: / '5670B80112857000',  wa-kunrg,  wa-name1,  bank_brutto, 
             'REM765POP',  fak_due. 
  endat. 
endloop. 
 
Beim Debugging bekomme ich zunächst vernünftige Werte für die Felder in der internen Tabelle itab.
Ab der Zeile ' at new kunrg.' erhalte ich aber für die Felder wa-bankl wa-bkont wa-bankn als Einträge nur Sternchen (*). Und zwar für jedes Feld mit der Zeichenlänge, in der ich auch die 'vernünftigen' Einträge erwarten würde.
Bei der Sortierung nach Feldern habe ich schon alle möglichen Varianten durchgespielt wegen der Reihenfolge. Ich denke daran wird es nicht liegen.
Nimm die Menschen wie sie sind, es gibt keine anderen.

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


works as designed

Beitrag von GastX (Specialist / 288 / 6 / 20 ) »
Hallo,
der Grund ist das "at new", s. F1-Hilfe zu "at new".
Genauer (Zitat)
Wenn in der Anweisung LOOP der Zusatz INTO verwendet wird, um den Inhalt der aktuellen Zeile einem Arbeitsbereich wa zuzuweisen, wird dessen Inhalt bei Eintritt in die AT-ENDAT-Kontrollstruktur wie folgt geändert:

Die Komponenten des aktuellen Gruppenschlüssels bleiben unverändert.


Alle Komponenten mit zeichenartigem flachen Datentyp rechts vom aktuellen Gruppenschlüssel werden an jeder Stelle auf das Zeichen "*" gesetzt.


Alle anderen Komponenten rechts vom aktuellen Gruppenschlüssel werden auf ihren Initialwert gesetzt.
Kann man umgehen indem man
- den Gruppenwechsel selber macht oder
- die Werte vor dem at new in einen Zwischenbereich sichert:
  • LOOP AT itab INTO wa.
    wa2 = wa.
    AT NEW kunrg.
    CONCATENATE wa2-bankl wa2-bkont wa2-bankn INTO bankverbindung.
    CONCATENATE bankverbindung brutto INTO bank_brutto.
    CONDENSE bank_brutto NO-GAPS.
    REPLACE '.' IN bank_brutto WITH ''.
    dat_day = wa2-valdt+6(2).
    dat_mon = wa2-valdt+4(2).
    dat_year = wa2-valdt(4).
    CONCATENATE dat_day dat_mon dat_year INTO duedate.
    CONCATENATE wa2-vbeln duedate INTO fak_due.
    SHIFT fak_due LEFT DELETING LEADING '0'.
    WRITE: / 'Loop: '.
    WRITE: / '5670B80112857000', wa2-kunrg, wa2-name1, bank_brutto,
    'REM765POP', fak_due.
    ENDAT.
    ENDLOOP.
Gruß, Frank

Beitrag von KleinerEisbaer (Specialist / 123 / 3 / 0 ) »
Hallo Frank,

prima! Ich danke Dir für Deine tolle Antwort :!: :!:
Nimm die Menschen wie sie sind, es gibt keine anderen.

Re: works as designed

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
GastX hat geschrieben:...
  • LOOP AT itab INTO wa.
    wa2 = wa.
    AT NEW kunrg.
    CONCATENATE wa2-bankl wa2-bkont wa2-bankn INTO bankverbindung.
    CONCATENATE bankverbindung brutto INTO bank_brutto.
    CONDENSE bank_brutto NO-GAPS.
    REPLACE '.' IN bank_brutto WITH ''.
    dat_day = wa2-valdt+6(2).
    dat_mon = wa2-valdt+4(2).
    dat_year = wa2-valdt(4).
    CONCATENATE dat_day dat_mon dat_year INTO duedate.
    CONCATENATE wa2-vbeln duedate INTO fak_due.
    SHIFT fak_due LEFT DELETING LEADING '0'.
    WRITE: / 'Loop: '.
    WRITE: / '5670B80112857000', wa2-kunrg, wa2-name1, bank_brutto,
    'REM765POP', fak_due.
    ENDAT.
    ENDLOOP.
Gruß, Frank
Wenn man statt des INTO mit ASSIGNING arbeitet, findest auch keine Ersetzung statt:

Code: Alles auswählen.

  LOOP AT itab ASSIGNING <wa>.
    AT NEW kunrg.
      CONCATENATE <wa>-bankl <wa>-bkont <wa>-bankn INTO bankverbindung.
      CONCATENATE bankverbindung brutto INTO bank_brutto.
      CONDENSE bank_brutto NO-GAPS.
      REPLACE '.' IN bank_brutto WITH ''.
      dat_day = <wa>-valdt+6(2).
      dat_mon = <wa>-valdt+4(2).
      dat_year = <wa>-valdt(4).
      CONCATENATE dat_day dat_mon dat_year INTO duedate.
      CONCATENATE <wa>-vbeln duedate INTO fak_due.
      SHIFT fak_due LEFT DELETING LEADING '0'.
      WRITE: / 'Loop: '.
      WRITE: / '5670B80112857000',  <wa>-kunrg,  <wa>-name1,  bank_brutto,
               'REM765POP',  fak_due.
    ENDAT.
  ENDLOOP.
Es gibt hier jedoch noch zu bemerken, dass es durchaus Sinn macht, dass alle rechteren Spalten maskiert werden. Denn zum Zeitpunkt AT kann es mehrere Zeilen geben, die für die aktuelle Bedingung gelten, womit sich die Frage stellt, ob der Zugriff auf die restlichen Felder innerhalb des AT überhaut Sinn macht.
Wenn man so etwas braucht, müsste man sich einen Merker setzen und erst hinter dem AT/ENDAT auf die restlichen Felder zugreifen.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

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 7 Stunden von DeathAndPain 2 / 374
Materialstammerweiterung: Neuer Reiter
vor einer Woche von DeathAndPain gelöst 4 / 1010
Ermittlung der Arbeitstage (Mosid)
vor einer Woche von Radinator 11 / 46676
LSMW-Problem
vor 3 Wochen von DeathAndPain gelöst 6 / 4565

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 7 Stunden von DeathAndPain 2 / 374
Materialstammerweiterung: Neuer Reiter
vor einer Woche von DeathAndPain gelöst 4 / 1010
Ermittlung der Arbeitstage (Mosid)
vor einer Woche von Radinator 11 / 46676
LSMW-Problem
vor 3 Wochen von DeathAndPain gelöst 6 / 4565