Selektionsprobleme?!?

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Selektionsprobleme?!?

Beitrag von Tanja ( / / 0 / 3 ) »
Hallo Foris :D,

ich beschäftige mich erst seit kurzer Zeit mit ABAP und muss monetan ein Programm schreiben bei dem ich ein Problem habe (ihr bestimmt nicht!!).

Ich möchte mir alle Bestellungen eines Kunden in einem Jahr anzeigen lassen, leider sind die Bestellung nur mit dem Bestelldatum verstehen und ich muss mit dem von mir definierten Select-Option immer von z.B. 01.01.2005 -31.12.2005 eingeben.
Hier der Select-Option:
SELECT-OPTIONS jahr FOR best-bedat.

Weiß jemand von euch was ich zu programmieren habe, damit ich statt dem Intervall nur noch das jeweilige Jahr in dem Selektionsbildschirm auswählen kann (2005, 2006 usw.)

Ich hoffe mir kann jemand von euch helfen.

Liebe Grüße
Tanja :roll:

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


Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Wenn es genau auf ein Jahr sein soll, dann mach auf deinem Selectionscreen einen PARAMETER der 4 Zeichen lang ist.
Anschliessend das hier:

Code: Alles auswählen.

CONCATENATE p_jahr '0101' INTO jahr_begin.
CONCATENATE p_jahr '1231' INTO jahr_end.

select 'was du willst'
  into 'wo dus hinhaben willst
  from 'der tabelle'
 where bedat ge jahr_begin  and
       bedat le jahr_end    .

Beitrag von Tanja ( / / 0 / 3 ) »
Hallo DeathGuardian,

Danke für deine Unterstützung, leider kann ich deiner Anweisung nicht ganz folgen.
Bin wirklich ein absoluter Neuling.


Also das habe ich bis jetzt geschrieben:

TABLES: bestell.

DATA it_bestell TYPE TABLE OF bestell.

DATA wa_bestell TYPE bestell.

SELECT-OPTIONS datum FOR bestell-bedat.

SELECT * FROM bestell INTO TABLE it_bestell WHERE bedat IN datum.

Wo muss ich da jetzt was einfügen?
Evtl. kommen da noch ein paar Select-Options dazu.

Gruß Tanja :wink:

Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
OK, dann bauen wir mal dein Progrämmchen um. ;-)

Code: Alles auswählen.

TABLES: bestell. 

DATA it_bestell TYPE TABLE OF bestell. 
DATA wa_bestell TYPE bestell. 

DATA: jahr_begin TYPE sy-datum ,
      jaht_end   TYPE sy-datum .


*SELECT-OPTIONS datum FOR bestell-bedat. 
PARAMETERS: datum TYPE char4 .

CONCATENATE datum '0101' INTO jahr_begin. 
CONCATENATE datum '1231' INTO jahr_end.

SELECT * FROM bestell INTO TABLE it_bestell
 where bedat GE jahr_begin  and 
       bedat LT jahr_end    .
Und jetzt noch ein paar Erklärungen, für den Fall das du das nicht weisst.
- Das Datum in SAP ist nach folgen System aufgebaut: JJJJMMTT
- GE bedeutet Greater-Equel (Grösser-Gleich) >=
- LE bedeutet Leater-Equel (Kleiner-Gleich) <=

Beitrag von Tanja ( / / 0 / 3 ) »
Supi, hat funktioniert!!!!!
:lol: :lol: :lol: :lol: :lol: :lol:

Tausend Dank, du hast mir mein Wochenende gerettet.

Aber noch eine kleine Zusatzfrage,

auf dem Selektionsbildschirm kann ich jetzt immer nur ein Jahr auswählen und nicht mehr von 2004 bis 2005.
Gibt´s da noch ne Möglichkeit oder soll ich mich damit zufrieden geben?

Beitrag von Neuer Gast ( / / 0 / 3 ) »
Ja, geht, aber du musst bedenken, dass man bei einer Select-Option auch mehrere Zeilen und ungleich-Optionen angeben kann.

Code: Alles auswählen.

TABLES: bestell. 
RANGES: r_datum for bestell-bedat.
DATA it_bestell TYPE TABLE OF bestell. 
DATA wa_bestell TYPE bestell. 

*DATA: jahr_begin TYPE sy-datum , 
*      jaht_end   TYPE sy-datum . 


SELECT-OPTIONS datum FOR bestell-bedat(4). 
*PARAMETERS: datum TYPE char4 . 

*CONCATENATE datum '0101' INTO jahr_begin. 
*CONCATENATE datum '1231' INTO jahr_end. 

LOOP AT datum.
IF NOT ( datum-low IS INITIAL ). 
   CONCATENATE datum-low '0101' INTO r_datum-low.
ELSE.
ENDIF.
IF NOT ( datum-high IS INITIAL ).
   CONCATENATE datum-high '1231' INTO r_datum-high.
ELSE.
ENDIF.
MOVE datum-sign to r_datum-sign.
MOVE datum-option to r_datum-option.
APPEND r_datum.
ENDLOOP.

SELECT * FROM bestell INTO TABLE it_bestell WHERE
       bedat IN r_datum.
* where bedat GE jahr_begin  and 
*       bedat LT jahr_end


Beitrag von Tanja ( / / 0 / 3 ) »
Einen Schritt nach dem anderen!
Ich werde mich mit der einfacheren Variante begnügen.

Schönes Wochenende

Gruß Tanja :D :D :D :D :D :D :D :D :D :D

Beitrag von Gast ( / / 0 / 3 ) »
Oha, jetzt hab ich in der Loop-Schleife einen Denkfehler eingebaut. So muss es richtig heissen:

Code: Alles auswählen.

TABLES: bestell. 
RANGES: r_datum for bestell-bedat. 
DATA it_bestell TYPE TABLE OF bestell. 
DATA wa_bestell TYPE bestell. 

*DATA: jahr_begin TYPE sy-datum , 
*      jaht_end   TYPE sy-datum . 


SELECT-OPTIONS datum FOR bestell-bedat(4). 
*PARAMETERS: datum TYPE char4 . 

*CONCATENATE datum '0101' INTO jahr_begin. 
*CONCATENATE datum '1231' INTO jahr_end. 

LOOP AT datum.
CLEAR r_datum.
MOVE datum-sign to r_datum-sign.
MOVE datum-option to r_datum-option. 
IF NOT ( datum-low IS INITIAL ). 
   CONCATENATE datum-low '0101' INTO r_datum-low.
   IF NOT ( datum-high IS INITIAL ).
      CONCATENATE datum-high '1231' INTO
                  r_datum-high.   
   ELSE.
      CONCATENATE datum-low '1231' INTO r_datum-high.
      MOVE 'BT' to r_datum-option.
   ENDIF.    
ELSE.
   IF NOT ( datum-high IS INITIAL ).
      CONCATENATE datum-high '1231' INTO 
                  r_datum-high.
      MOVE 'BT' to r_datum-option.
   ELSE.
   ENDIF. 
ENDIF. 
APPEND r_datum. 
ENDLOOP.

Seite 1 von 1

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.