Select wird übersprungen

Getting started ... Alles für einen gelungenen Start.

Select wird übersprungen

Postby Rafael2757 » Thu Mar 20, 2014 4:34 pm

Hallo zusammen,

ich habe in meiner Firma die Aufgabe erhalten einen Report zu schreiben welcher ein Selektionsbild mit 4 Eingabefeldern haben soll, Belegungseinheit/Heftnummer/Erfassungsdatum/Erfasser wobei ich Select-Options nutzen muss da eine Mehrfachauswahl zwingend erforderlich ist. Anhand dieser Selektionskriterien soll der Report 5 Felder einer Tabelle(jjtpe), 4 Felder einer weiteren(jjtbe) und zum Schluss ein Feld einer weiteren(jjtbevb)zusammen in eine interne Tabelle schreiben(dies soll mit einem JOIN geschehen) und diese mittels ALV ausgeben. Ich sollte vllt noch dazu sagen das ich 3 weitere Eingabefelder (s_vkorg/p_vtweg/p_spart) auf meinem Selektionsbild habe, jedoch sind diese Standardmäßig mit Werten belegt und auch im Selektionsbild ausgeblendet, da ich verhindern möchte das diese geändert werden. Da nur das Feld Erfassungsdatum ein Mussfeld ist bin ich dazu gezwungen alle Fälle der Nichteingabe abzudecken, was ich mit einer dynamischen where-Bedingung innerhalb einer IF-Abfrage auch tue. Jetzt zu meinem Problem, der Report überspringt jedesmal meinen Select, was dazu führt das ich eine leere Ausgabetabelle erhalte und ich weiß absolut nicht warum.

Hier meine Codeschnipsel:
Selektionsbild:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. **********************************************************************
  2. *           Selektionsbild                                           *
  3. **********************************************************************
  4. SELECTION-SCREEN BEGIN OF BLOCK a01.
  5.  
  6. SELECT-OPTIONS: s_belein FOR plan_pe,
  7.                 s_heftnr FOR heft_nr,
  8.                 s_erfdat FOR erfdate OBLIGATORY,
  9.                 s_erfuse FOR erfuser,
  10.                 s_vkorg FOR vkorg DEFAULT '0000' TO '9999' OPTION BT SIGN I NO-DISPLAY.
  11.  
  12. PARAMETERS: p_vtweg TYPE vtweg DEFAULT '01' NO-DISPLAY,
  13.             p_spart TYPE spart DEFAULT '01' NO-DISPLAY.
  14.  
  15. SELECTION-SCREEN END OF BLOCK a01.
  16.  
GeSHi ©


Dynamische where und Select mit doppeltem JOIN:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. FORM sel_fields.
  2.  
  3.   DATA: lv_feld TYPE c LENGTH 100,
  4.         lt_feld LIKE STANDARD TABLE OF lv_feld.
  5.  
  6. **********************************************************************
  7. *           dynamische where in der Select-Auslegung                 *
  8. **********************************************************************
  9.  
  10.   CONCATENATE 'a~erfdate = ''' s_erfdat '''' INTO lv_feld.
  11.   APPEND lv_feld TO lt_feld.
  12.   CLEAR lv_feld.
  13.  
  14.   lv_feld = 'and'.
  15.   APPEND lv_feld TO lt_feld.
  16.   CLEAR lv_feld.
  17.  
  18.   CONCATENATE 'c~vkorg = ''' s_vkorg '''' INTO lv_feld.
  19.   APPEND lv_feld TO lt_feld.
  20.   CLEAR lv_feld.
  21.  
  22.   lv_feld = 'and'.
  23.   APPEND lv_feld TO lt_feld.
  24.   CLEAR lv_feld.
  25.  
  26.   CONCATENATE 'c~vtweg = ''' p_vtweg '''' INTO lv_feld.
  27.   APPEND lv_feld TO lt_feld.
  28.   CLEAR lv_feld.
  29.  
  30.   lv_feld = 'and'.
  31.   APPEND lv_feld TO lt_feld.
  32.   CLEAR lv_feld.
  33.  
  34.   CONCATENATE 'c~spart = ''' p_spart '''' INTO lv_feld.
  35.   APPEND lv_feld TO lt_feld.
  36.   CLEAR lv_feld.
  37.  
  38. **********************************************************************
  39.  
  40.   IF s_belein IS NOT INITIAL.
  41.  
  42.     lv_feld = 'and'.
  43.     APPEND lv_feld TO lt_feld.
  44.     CLEAR lv_feld.
  45.  
  46.     CONCATENATE 'a~plan_pe = ''' s_belein '''' INTO lv_feld.
  47.     APPEND lv_feld TO lt_feld.
  48.     CLEAR lv_feld.
  49.  
  50.     IF s_heftnr IS NOT INITIAL.
  51.  
  52.       lv_feld = 'and'.
  53.       APPEND lv_feld TO lt_feld.
  54.       CLEAR lv_feld.
  55.  
  56.       CONCATENATE 'a~heft_nr = ''' s_heftnr '''' INTO lv_feld.
  57.       APPEND lv_feld TO lt_feld.
  58.       CLEAR lv_feld.
  59.  
  60.       IF s_erfuse IS NOT INITIAL.
  61.  
  62.         lv_feld = 'and'.
  63.         APPEND lv_feld TO lt_feld.
  64.         CLEAR lv_feld.
  65.  
  66.         CONCATENATE 'a~erfuser = ''' s_erfuse '''' INTO lv_feld.
  67.         APPEND lv_feld TO lt_feld.
  68.         CLEAR lv_feld.
  69.  
  70.       ENDIF.
  71.     ENDIF.
  72.   ENDIF.
  73.  
  74. **********************************************************************
  75.  
  76.   SELECT a~plan_pe a~heft_nr a~erfdate a~erftime a~erfuser b~kurztext b~be_grp b~co_aufnr b~x_allvb c~vkorg
  77.       FROM ( ( jjtpe AS a
  78.       INNER JOIN jjtbe AS b ON a~plan_pe EQ b~beleinh
  79.                            AND a~erfdate EQ b~erfdate
  80.                            AND a~erftime EQ b~erftime
  81.                            AND a~erfuser EQ b~erfuser )
  82.       INNER JOIN jjtbevb AS c ON a~plan_pe EQ c~beleinh
  83.                              AND a~erfdate EQ c~erfdate
  84.                              AND a~erftime EQ c~erftime
  85.                              AND a~erfuser EQ c~erfuser  )
  86.     INTO CORRESPONDING FIELDS OF TABLE gt_bvau
  87.       WHERE (lt_feld)
  88.       ORDER BY a~erfdate DESCENDING.
  89.  
  90. **********************************************************************
  91. *           Führende Nullen der BE's ausblenden                      *
  92. **********************************************************************
  93.   CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'        
  94.     EXPORTING
  95.       input  = plan_pe
  96.     IMPORTING
  97.       output = plan_pe.
  98.  
  99. ENDFORM.                    " sel_fields
  100.  
GeSHi ©


Woran liegt es das mein Select übersprungen wird?
Falls noch mehr Code benötigt wird (Datendeklaration/PBO/PAI/ALV-Ausgabe) bitte bescheid geben:)
schonmal Danke im Vorraus für die Hilfe

Freundlichste Grüße

Lou
Rafael2757
.
.
 
Posts: 3
Joined: Thu Mar 20, 2014 4:34 pm

Re: Select wird übersprungen

Postby Rafael2757 » Fri Mar 21, 2014 10:08 am

Ein Update zu meiner Frage, ich habe mittlerweile erkannt das ich in meiner where-Bedingung bei den Select-options anstatt "IN" immer "EQ" angegeben habe, jedoch bekomme ich jetzt nachdem ich dies ausgebessert habe einen Kurzdump. Der Dump sagt mir das einer meiner eingegebenen Werte ( Erfassungsdatum: 'IEQ2013091300000000' )unzulässig ist. Ich habe bereits die versucht die Ausnahme zwecks Raising-Klausel abzufangen, jedoch hält das meinem Report nicht vom Dump ab. Was läuft da bei mir schief?
Image Fehleranalyse.png
Fehleranalyse des Dumps
(16.63 KiB) Noch nie heruntergeladen
Rafael2757
.
.
 
Posts: 3
Joined: Thu Mar 20, 2014 4:34 pm

Re: Select wird übersprungen

Postby Bianka187 » Fri Mar 21, 2014 2:49 pm

hallo Lou,

du gehst das zu kompliziert an. Wenn du mit SELECT-OPTIONS arbeitest musst du dir wegen der Nichteingabe keine Gedanken machen. Dazu ein Beispiel:

es sollen Lieferplanpositionen selektiert werden, Selektionskriterien sind hierbei Lieferplan- und Materialnummer:

Select-options: o_vbeln like vbap-vbeln,
o_matnr like vbap-matnr.

der Zugriff auf VBAP sieht vereinfacht so aus (beachte den Parameter IN beim Verwenden der Select-Options ):

select * from vbap where vbeln IN o_vbeln and matnr IN o_matnr.

wenn der Benutzer keine Eingabe bei den Selektionsfeldern macht, so werden ALLE Einträge der VBAP gelesen. Werden nur Materialnummern vorgegeben, so werden alle Lieferpläne mit entsprechenden Materialnummern gelesen usw. Probier doch deinen Code diesbezüglich umzustellen.

Wenn du die Where-Bedingung unbedingt dynamisch zusammensetzen möchtest, so musst du dir zusätzlich noch Gedanken darüber machen wie man Code-Injection vermeiden könnte.

Hier zwei Links zu diesem Thema:
http://help.sap.com/SAPHELP_NW04S/helpd ... ontent.htm

https://www.virtualforge.com/de/blog/po ... ks-en.html
Bianka187
....
....
 
Posts: 612
Joined: Thu Feb 23, 2006 5:34 pm

Re: Select wird übersprungen

Postby Rafael2757 » Fri Mar 21, 2014 4:47 pm

Hallo Alexander,

das mit dem IN ist mir dann im nachhinein auch noch aufgefallen, jedoch hab ich das Problem jetzt anders gelöst und die dynamische where auch weggelassen, da man in dieser ja keine Select-Options verwenden kann (soweit ich das online richtig verstanden hab dürfen in der dyn-where ja nur literale verwendet werden).

Riesigen Dank für die Info mit der Nichteingabe, das erspart mir einiges an Code und der Report wird übersichtlicher und auch einfacher Nachvollziehbar. Ich hatte anstatt der where-Bedingung bei jeder Möglichkeit der Nichteingabe je einen Select verfasst, was ja total überflüssig ist. :oops:

Mein größtes Problem, wie jetzt herausgefunden habe, war aber das ich von meiner Arbeitskollegin welche das Konzept für diesen Report verfasst hat falsche Datensätze bekommen habe, nämlich welche für das P-System, bekanntlich entwickelt man ja aber auf dem E-System.(Dazu sollte ich vllt noch sagen das nachdem ich das Porblem mit dem Kurzdump behoben hatte ich immer nur eine leere liste ausgegeben bekommen habe)

Aber gut ich schwafel schon wieder zu viel, nochmal dicksten Dank und ich werd mir die Links gleich mal ansehen, damit ich solche Vorfälle in Zukunft direkt vermeiden kann.

Freundlichste Grüße

Lou
Rafael2757
.
.
 
Posts: 3
Joined: Thu Mar 20, 2014 4:34 pm


Return to ABAP® für Anfänger

Who is online

Users browsing this forum: No registered users and 10 guests