Code: Alles auswählen.
*---------------------------------------------------------------------------------------------------------------------------*
* Report Y_TASK2
*---------------------------------------------------------------------------------------------------------------------------*
*
* Datenbanktabelle: KNA1-NAME1
*
* Werten sie die Kunden nach ihren Namen aus.
*
* Programmanforderung: Geben Sie eine Liste aus, die die Anzahl der Kunden bzgl. ihrer Anfangsbuchstaben enthält
* Technisch:
* - Lesen sie nicht explizit die Datensätze
* - Verwenden sie keine internen Tabellen
* - Ihr Programm soll nur ein einziges Select-Statement beinhalten
*
* Tipps:
* - Keywords: concatenate, sy-abcde, like
* - F1-Hilfe für select lesen
*
*----------------------------------------------------------------------------------------------------------------------------*
REPORT y_task2.
* Deklarationen: Hilfsvariablen
DATA: h_count TYPE i,
h_firstletter TYPE string,
h_letter TYPE c,
h_offset TYPe i.
* Programmstart, Verarbeitung, Ausgabe
DO 26 TIMES.
h_offset = sy-index - 1.
h_letter = sy-abcde+h_offset(1).
CONCATENATE h_letter '%' INTO h_firstletter.
SELECT COUNT( DISTINCT name1 )
FROM kna1
INTO h_count
WHERE name1 LIKE h_firstletter.
IF sy-subrc = 0.
WRITE:/ 'Anzahl der Kunden mit Anfangsbuchstaben ', h_letter, ': ', h_count.
ENDIF.
ENDDO.
Man kann ja mit dem Feld MCOD1 selektieren, das enthält NAME1 in Großbuchstaben. Die Frage ist, was mit den Kunden ist, die mit Zahlen/Symbolen beginnen. Man könnte selbst eine RANGE Tabelle erstellen und füllen, aber das ist mir zu aufwändig.black_adept hat geschrieben:Was ist mit Kunden, deren Name mit einem kleinen Buchstaben beginnt ( z.B. diverse Firmen? )
Code: Alles auswählen.
*------------------------------------------------------------------------------------------------------------------------------------------*
* Report Y_TASK6
*------------------------------------------------------------------------------------------------------------------------------------------*
*
* Datenbanktabelle: SFLIGHT, SPFLI, SBOOK
*
* Erstellen Sie eine Selections-Dynpro mit den folgenden beiden Selektionsblöcken:
*
* 1. Destination: Abflughafen Zielflughafen
* Abflugdatum ab Abflugdatum bis
* Abflugzeit ab Abflugzeit bis
*
* 2. Zusatzinformationen: Ausgabe von Flugpreis und Währung
* Ausgabe des Flugzeugtyps
* (IATA) Code von Start- und Zielflughafen
*
* - Beide Selektionsblöcke müssen mit Rahmen und Titel versehen sein.
* - Aus den Zusatzinformationen darf nur 1 Information (gleichzeitig) auswählbar sein.
* - Sofern zu den angegebenen Selektionswerten keine zutreffenden Einträge zu finden sind, hat eine entsprechende Fehlermeldung ausgegeben zu werden.
*
*-------------------------------------------------------------------------------------------------------------------------------------------*
REPORT y_task6.
TABLES: sflight, spfli, sbook.
* Deklarationen: Tabellentyp und Datenträger
TYPES: BEGIN OF ty_outtab,
* carrid TYPE s_carr_id,
* connid TYPE s_conn_id,
* cityfrom TYPE s_from_cit,
* cityto TYPE s_to_city,
airpfrom TYPE s_fromairp,
airpto TYPE s_toairp,
* fldate TYPE s_date,
* deptime TYPE s_dep_time,
price TYPE s_price,
currency TYPE s_currcode,
planetype TYPE s_planetye,
END OF ty_outtab.
DATA: gt_outtab TYPE STANDARD TABLE OF ty_outtab.
* Selection-Screen
SELECTION-SCREEN: BEGIN OF BLOCK dest WITH FRAME TITLE text-001. " Destination
SELECTION-SCREEN BEGIN OF LINE.
SSELECTION-SCREEN COMMENT 1(21) text-010. " Flug von
PARAMETER: p_from TYPE spfli-cityfrom OBLIGATORY.
SELECTION-SCREEN COMMENT 52(5) text-011. " bis
PARAMETER: p_to TYPE spfli-cityto OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECT-OPTIONS: s_fldate FOR sflight-fldate,
s_deptim FOR spfli-deptime.
SELECTION-SCREEN: END OF BLOCK dest.
SELECTION-SCREEN: BEGIN OF BLOCK zusa WITH FRAME TITLE text-002. " Zusatzinformationen
PARAMETER: rb_preis RADIOBUTTON GROUP zus DEFAULT 'X',
rb_fztyp RADIOBUTTON GROUP zus,
rb_iatac RADIOBUTTON GROUP zus.
SELECTION-SCREEN: END OF BLOCK zusa.
* Datenselektion
START-OF-SELECTION.
CASE 'X'.
WHEN rb_preis.
SELECT b~price b~currency
FROM spfli AS a
INNER JOIN sflight AS b ON b~carrid = a~carrid AND b~connid = a~connid
INTO CORRESPONDING FIELDS OF TABLE gt_outtab
WHERE a~cityfrom = p_from
AND a~cityto = p_to
AND b~fldate IN s_fldate
AND a~deptime IN s_deptim.
IF sy-subrc = 0.
WRITE:/ 'Es wurden zutreffende Preisangaben gefunden.'.
ELSE.
MESSAGE 'Es wurden keine zutreffenden Preisangaben gefunden.' TYPE 'E'.
ENDIF.
WHEN rb_fztyp.
SELECT b~planetype
FROM spfli AS a
INNER JOIN sflight AS b ON b~carrid = a~carrid AND b~connid = a~connid
INTO CORRESPONDING FIELDS OF TABLE gt_outtab
WHERE a~cityfrom = p_from
AND a~cityto = p_to
AND b~fldate IN s_fldate
AND a~deptime IN s_deptim.
IF sy-subrc = 0.
WRITE:/ 'Es wurden zutreffende Flugzeugtypen gefunden.'.
ELSE.
MESSAGE 'Es wurden keine zutreffenden Flugzeugtypen gefunden.' TYPE 'E'.
ENDIF.
WHEN rb_iatac.
SELECT a~airpfrom a~airpto
FROM spfli AS a
INNER JOIN sflight AS b ON b~carrid = a~carrid AND b~connid = a~connid
INTO CORRESPONDING FIELDS OF TABLE gt_outtab
WHERE a~cityfrom = p_from
AND a~cityto = p_to
AND b~fldate IN s_fldate
AND a~deptime IN s_deptim.
IF sy-subrc = 0.
WRITE:/ 'Es wurden zutreffende IATA Codes gefunden.'.
ELSE.
MESSAGE 'Es wurden keine zutreffenden IATA Codes gefunden.' TYPE 'E'.
ENDIF.
ENDCASE.