warum gibt das Programm nichts aus?

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

warum gibt das Programm nichts aus?

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
Hallo liebe Abaplar,

ich habe ein rießengroßes Problem. Habe ein Programm geschrieben, dass als Auswertung dienen soll. Aber er gibt nichts aus.

Und ich check nicht warum.

Kann mir jemand weiterhelfen?

Danke im Voraus.


Code: Alles auswählen.

 * deklaration                                
 TABLES: zdpv_gkgpnr,kna1,jkpa,jkap,jkak.     
                                              
 DATA: BEGIN OF wa_tab,                       
         drerz LIKE jkap-drerz,               
         vbeln LIKE jkap-vbeln,               
         auart LIKE jkak-auart,               
         gueltigbis LIKE jkap-gueltigbis,     
         poart LIKE jkap-poart,               
         posnr LIKE jkap-posnr,               
         jparvw LIKE jkpa-jparvw,             
         gpnr LIKE jkpa-gpnr,                 
       END OF wa_tab.                         
 DATA: it_tab LIKE wa_tab OCCURS 0.           
                                              
 DATA: BEGIN OF wa_tab2,                      
         jparvw LIKE jkpa-jparvw,             
         gpnr LIKE jkpa-gpnr,                 
         drerz LIKE jkap-drerz,               
         vbeln LIKE jkap-vbeln,               
         auart LIKE jkak-auart,               
         name1 LIKE kna1-name1,               
         name2 LIKE kna1-name2,               
         name3 LIKE kna1-name3,  
        name4 LIKE kna1-name4,             
        ort01 LIKE kna1-ort01,             
        ort02 LIKE kna1-ort02,             
        pfach LIKE kna1-pfach,             
        pstlz LIKE kna1-pstlz,             
        pstl2 LIKE kna1-pstl2,             
        stras LIKE kna1-stras,             
        pfort LIKE kna1-pfort,             
        END OF wa_tab2.                    
DATA: it_tab2 LIKE wa_tab2 OCCURS 0.       
                                           
                                           
DATA: anz_ges TYPE i.                      
DATA: anz_aktiv TYPE i.                    
DATA: anz_inaktiv TYPE i.                  
                                           
* selektionsbild                           
SELECT-OPTIONS: s_drerz FOR jkap-drerz.   
                                                                       
 SELECT-OPTIONS: s_auart FOR jkak-auart.                               
 PARAMETERS      p_sttag LIKE jkpa-gueltigbis.                         
                                                                       
 **********************************************************************
 **********************************************************************
 START-OF-SELECTION.                                                   
                                                                       
 SELECT vbeln gueltigbis poart drerz posnr FROM jkap INTO              
        CORRESPONDING FIELDS OF TABLE it_tab                           
    WHERE drerz IN s_drerz                                             
    AND poart IN ('PP','NP')                                           
    AND gueltigbis GE p_sttag.                                         
                                                                       
 LOOP AT it_tab INTO wa_tab.                                           
 *CLEAR JKAK.                                                          
 SELECT * FROM jkak                                                    
    WHERE vbeln = wa_tab-vbeln                                         
    AND auart IN s_auart.                                              
 ENDSELECT.                                                            
 IF sy-subrc = '0'.                                                    
    SELECT * FROM jkpa APPENDING CORRESPONDING FIELDS                  
             OF TABLE it_tab                                           
       WHERE vbeln = wa_tab-vbeln                                      
       AND posnr = wa_tab-posnr                                        
       AND jparvw = 'RE'.                                              
*   ENDSELECT.                                                                 
ENDIF.                                                                         
ENDLOOP.                                                                       
                                                                               
SORT it_tab.                                                                   
DELETE ADJACENT DUPLICATES FROM it_tab.                                        
                                                                               
LOOP AT it_tab INTO wa_tab.                                                    
SELECT * FROM jkpa                                                             
  WHERE vbeln = wa_tab-vbeln                                                   
  AND posnr = wa_tab-posnr                                                     
  AND jparvw = 'WE'.                                                           
     IF jkpa-gpnr NE wa_tab-gpnr.                                              
     APPEND wa_tab TO it_tab2.                                                 
     ENDIF.                                                                    
ENDSELECT.                                                                     
ENDLOOP.                                                                       
                                                                               
LOOP AT it_tab2 INTO wa_tab2.                                                  
SELECT name1 name2 name3 name4 ort01 ort02 pfach pstlz pstl2                   
       stras pfort FROM kna1 INTO CORRESPONDING FIELDS OF TABLE it_tab2        
       WHERE kunnr = wa_tab2-gpnr.                                             
   IF p_sttag GE jkpa-gueltigbis.                                              
      anz_aktiv = anz_aktiv + 1.                                               
    ELSE.                                 
       anz_inaktiv = anz_inaktiv + 1.     
    ENDIF.                                
    anz_ges = anz_aktiv + anz_inaktiv.    
 ENDLOOP.                                 
                                          
                                          
 *Ausgabe                                 
 WRITE:/ 'Adresse',                       
         'Anzahl Aktive Auftraege',       
         'Anzahl Auftraege gesamt'.       
                                          
 LOOP AT it_tab2 INTO wa_tab2.            
 WRITE:/ wa_tab2-name1,                   
         wa_tab2-name2,                   
         wa_tab2-name3,                   
         wa_tab2-name4,                   
         wa_tab2-ort01,                   
         wa_tab2-ort02,                   
         wa_tab2-pfach,                   
         wa_tab2-pstlz,                   
         wa_tab2-pstl2,                   
         wa_tab2-stras,                   
         wa_tab2-pfort.        
ENDLOOP.           
WRITE:/ anz_ges,   
        anz_aktiv. 
                   
                   
           
                                          
 
                                           
             
                                              

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


Beitrag von Steff (Site Admin / 386 / 0 / 1 ) »
Hi,

hast Du mal einen Breakpoint auf den loop ueber itab2 gesetzt und geprueft, ob die Tabelle gefuellt ist?

Gruss,
Steff

Beitrag von Jupp (ForumUser / 47 / 0 / 2 ) »
Naja, also ein SELECT * APPENDING innerhalb eines Loops in die Tabelle auf die man loopt erscheint mir suboptimal. Damit hängt man u.U. immer neue Zeilen an die Tabelle an, die den Loop verlängern. Das kann ins Auge gehen und sich schnell als Endlosschleife entpuppen. So was sollte man besser lassen.
Wenn ich die Konstruktion richtig verstehe, kann es sein, dass du da sowieso eigentlich einen Join machen möchtest: Lies mir alle Positionen passend zur Selektion, die im Kopf die passende Auftragsart haben und lies mir zu diesen Zeilen die Felder JPARVW und GPNR aus der JKPA?

Wie dem auch sei.
Im Mittelteil filterst du aus it_tab und bauste deine iit_tab2 auf. Dafür benutzt du Struktur zu it_tab. Die hat aber einen ganz anderen Zeilenaufbau als it_tab2. Das Feld GPNR ist in wa_tab an letzter Stelle. In der IT_TAB2 an 2. Stelle. In deiner it_tab2 dürfte dann ziemlicher Murks stehen, insbeosndere in GPNR nur zufällig was brauchbares.
Ein MOVE-CORRESPONDING von wa_tab nach wa_tab2 und dann ein APPEND mit wa_tab2 nach IT_TAB2 könnte weiter helfen.

Die Konstruktion eines SELECT INTO TABLE innerhalb einer Loop-Schleife auf die Tabelle über die man gerade loopt(itab2), geht so vollends in die Hose.
Mit dem SELECT INTO TABLE löscht du den Inhalt der Tabelle, auf die du gerade loopst. Du würdest damit am Ende maximal 1 Datensatz erhalten.

Mit deinem Mittelteil bekommst du aber nichts anständiges in das Feld GPNR. Schon beim ersten Datensatz, dürftest also nichts finden. Die Tabelle bleibt leer. Und der Loop wirft nicht mal 1 Datensatz aus.

Wenn du die Adressdaten zeilenweise hinzulesen willst wäre ohnehin eher ein MODIFY angebracht.

Eines noch:
Die Abfrage p_sttag GE jkpa-gueltigbis vergleicht den Stichtag mit dem Datum der letzten SELECT-Schleife aus dem Mittelteil.
Always Better Alternatives Possible.

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
WOW ich bin sprachlos Jupp.
Vielen Vielen Dank für deine Hilfe und dein Feedback.

Ich habe das Programm abgeändert und angepasst.

Im Moment habe ich Probleme mit einer verschachtelten If-Anweisung.
Ich will prüfen ob die geschäftspartnernummer aus der jkpa ungleich mit der wa-gpnr ist.
wenn dies der fall ist, dann soll er einen select auf die zdpv_gkgpnr machen.
Beim Prüfen bringt abap mir immer einen syntaxfehler, dass keine offene if-anweisung vorhanden ist.

aber ich kann keinen fehler erkennen oder habe ich in den 3 Monaten pause abap verlernt?

Code: Alles auswählen.

CLEAR jkpa.                                                   
LOOP AT it_tab INTO wa_tab.                                   
SELECT * FROM jkpa                                            
  WHERE vbeln = wa_tab-vbeln                                  
  AND posnr   = wa_tab-posnr                                  
  AND jparvw  = 'WE'.                                         
     IF jkpa-gpnr NE wa_tab-gpnr.                             
        SELECT gpag FROM zdpv_gkgpnr INTO wa_tab              
           WHERE gpag = wa_tab-gpnr.                          
           IF sy-subrc = 0.                                   
              DELETE TABLE it_tab FROM wa_tab.                
           ENDIF.                                             
     ELSE.                                                    
       DELETE TABLE it_tab FROM wa_tab.                       
     ENDIF.                                                   
ENDSELECT.                                                    
ENDLOOP.                                                      
                                                              

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
Hat sich erledigt. Habe es jetzt anders gemacht.

Schönen Abend.

Grüße
coco

Seite 1 von 1

Vergleichbare Themen

0
Antw.
4051
Views
LSMW Programm in ABAP Programm überführen
von mherke » 07.02.2007 15:02 • Verfasst in ABAP® für Anfänger
3
Antw.
2218
Views
FTP per Programm
von fawkes » 19.10.2007 09:45 • Verfasst in ABAP® Core
13
Antw.
20650
Views
Programm wiederherstellen
von Paddy » 07.02.2012 10:46 • Verfasst in ABAP® für Anfänger
6
Antw.
11829
Views
Programm Dokumentation
von An Dy » 07.02.2012 15:10 • Verfasst in ABAP® Core
1
Antw.
5980
Views
Programm RS_CI_DELETE
von commolus » 17.10.2012 16:11 • 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

BAPI zur ABSO?
vor 23 Stunden von DeathAndPain 2 / 408
Materialstammerweiterung: Neuer Reiter
vor einer Woche von DeathAndPain gelöst 4 / 1042
Ermittlung der Arbeitstage (Mosid)
vor einer Woche von Radinator 11 / 46719
LSMW-Problem
vor 3 Wochen von DeathAndPain gelöst 6 / 4607

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