Code: Alles auswählen.
* Allgemeine Datendefinition
DATA:
* g steht für global, it für interne Tabelle, wa für Arbeitsbereich
* Interne Tabelle sflight
g_it_sflight TYPE TABLE OF sflight,
* rbeitsbereich (Struktur oder Zeile) sflight
g_wa_sflight TYPE sflight.
* Denermittlung sflight
SELECT *
INTO TABLE g_it_sflight
FROM sflight.
* Die Daten werden zeilenweise in den Arbeitsbereich g_wa_sflight
* gspeichert
LOOP AT g_it_sflight INTO g_wa_sflight.
* Die Daten des Arbeitsbereiches g_wa_sflight werden ausgegeben
WRITE g_wa_sflight.
* In nächste Zeile Springen
NEW-LINE.
ENDLOOP.
Code: Alles auswählen.
Die Daten des Arbeitsbereiches g_wa_sflight werden ausgegeben
WRITE: / g_wa_sflight-carrid
g_wa_sflight_connid
usw.
das ist die nächste aufgabe^^2. Übungsaufgabe ABAP/4 – Programmierung
Thema: Selektionsbilder, Ereignisse und Listengestaltung
Erweitere den Report der 1. Aufgabe folgendermaßen:
1. lege ein Selektionsbild an, auf dem der Benutzer diejenige Fluggesellschaft eingeben muss für die er die Flüge sehen möchte.
Verwende den Befehl PARAMETERS
Auf dem Selektionsbild soll vor dem Eingabefeld nicht der Parametername stehen, sondern das Wort „Fluggesellschaft“.
2. Verwende das Ereignis START-OF-SELECTION, um den Verarbeitungsblock zu beginnen.
3. Verwende das Ereignis TOP-OF-PAGE, um Spaltenüberschriften zu erzeugen. Informiere Dich darüber wie man die Werte genau unter diesen Spaltenüberschriften platziert.
Code: Alles auswählen.
DO.
*Hier startet dann der selection screen usw... weiter solls dann damit gehen:
IF p_carrid = 'AA'. (steht hier für american airline)
PERFORM zds02_sflight.
ELSEIF p_carrid = 'BA'. (British Airline)
PERFORM zds02_sflight.
ELSEIF p_carrid = 'CA'. (Canadian Airline)
PERFORM zds02_sflight.
ELSE.
RETURN.
ENDIF.
ENDDO.
* Allgemeine Datendefinition
DATA:
* g steht für global, it für interne Tabelle, wa für Arbeitsbereich
* Interne Tabelle sflight
g_it_sflight TYPE TABLE OF sflight,
* rbeitsbereich (Struktur oder Zeile) sflight
g_wa_sflight TYPE sflight.
* Start des Unterprogramms
FORM zds02_sflight
* Denermittlung sflight
SELECT *
INTO TABLE g_it_sflight
FROM sflight WHERE p_carrid.
* Die Daten werden zeilenweise in den Arbeitsbereich g_wa_sflight
* gspeichert
LOOP AT g_it_sflight INTO g_wa_sflight.
* Die Daten des Arbeitsbereiches g_wa_sflight werden ausgegeben
WRITE g_wa_sflight.
* In nächste Zeile Springen
NEW-LINE.
ENDLOOP.
ENDFORM.
Code: Alles auswählen.
REPORT ztestabap_2.
* Wenn du schon Unterprogramme benutzt, kannst du diese auch in
* Includes kapseln, ebenso deine Datendefinition
* Include Endung
* FXX Unterprogramme
* TOP Datendefintion
* MXX Makros
* Datendefinition
INCLUDE ztestabaptop.
* Unterprogramme
INCLUDE ztestabapf01.
*----------------------------------------------------------------------*
* Hauptverarbeitung
*----------------------------------------------------------------------*
START-OF-SELECTION.
* Wenn man schon Unterprogramme benutzt, dann bitte auch mit
* Schnittstelle
* Datenermittlung
PERFORM get_data
CHANGING
g_it_sflight.
* Ausgabe
PERFORM display_data
USING
g_it_sflight.
*----------------------------------------------------------------------*
* Seitenkopf
*----------------------------------------------------------------------*
TOP-OF-PAGE.
* Hier musst du eben die Überschrift ausgeben, anpassen kannst du es ja
* selbst
* Ausgabe Kopf
WRITE: 'TEST1', 'TEST2'.
ULINE.
Code: Alles auswählen.
*----------------------------------------------------------------------*
* INCLUDE ZTESTABAPTOP *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Datentypen
*----------------------------------------------------------------------*
TYPES:
* ty steht für typ
* Strukturtyp Flugdaten
ty_sflight TYPE sflight,
* Tabellentyp Flugdaten
ty_t_sflight TYPE TABLE OF ty_sflight.
*----------------------------------------------------------------------*
* Datenelemente allgemein
*----------------------------------------------------------------------*
DATA:
* g steht für global, it für interne Tabelle, wa für Arbeitsbereich
* Interne Tabelle sflight
g_it_sflight TYPE ty_t_sflight.
*----------------------------------------------------------------------*
* Selektionsbild
*----------------------------------------------------------------------*
* Selektionsbild
PARAMETERS:
* PA für Parameters und SO für Selektoptions
* Fluggesellschaft
pa_caid TYPE sflight-carrid.
Code: Alles auswählen.
*----------------------------------------------------------------------*
***INCLUDE ZTESTABAPF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* Ermittlung der FLugdaten.
*----------------------------------------------------------------------*
* <--P_IT_SFLIGHT Flugdaten
*----------------------------------------------------------------------*
FORM get_data CHANGING p_it_sflight TYPE ty_t_sflight.
* Denermittlung sflight
SELECT *
INTO TABLE g_it_sflight
FROM sflight
WHERE carrid = pa_caid.
ENDFORM. " get_data
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
* Ausgabe der Flugdaten
*----------------------------------------------------------------------*
* -->P_IT_SFLIGHT Flugdaten
*----------------------------------------------------------------------*
FORM display_data USING p_it_sflight TYPE ty_t_sflight.
* Lokale Elemente
DATA:
* l steht für lokal
l_wa_sflight TYPE ty_sflight.
* Die Daten werden zeilenweise in den Arbeitsbereich g_wa_sflight
* gspeichert
LOOP AT p_it_sflight INTO l_wa_sflight.
* Die Daten des Arbeitsbereiches g_wa_sflight werden ausgegeben
WRITE l_wa_sflight.
* In nächste Zeile Springen
NEW-LINE.
ENDLOOP.
ENDFORM. " display_data
Code: Alles auswählen.
* Denermittlung sflight
SELECT *
INTO TABLE g_it_sflight
FROM sflight WHERE carrid = p_carrid.
Code: Alles auswählen.
* Datendefintion
DATA:
g_it_sflight TYPE TABLE OF zsflight_s,
g_wa_sflight TYPE zsflight_s.
* Beim Selectbefehl das Zusatzfeld errechnen
SELECT *
FROM sflight
INTO CORRESPONDING FIELDS OF g_wa_sflight.
* Feld berechnen
g_wa_sflight-prozent = g_wa_sflight-seatsocc /
g_wa_sflight-seatsmax * 100.
* Feldhinzufügen
APPEND g_wa_sflight TO g_it_sflight.
ENDSELECT.
Code: Alles auswählen.
* Datendefintion
data:
g_it_sflight type table of zsflight_s,
g_wa_sflight type zsflight_s,
* Zählt nachher die Schleifendurchläufe
l_counter type i.
* Beim Selectbefehl das Zusatzfeld errechnen
select *
from sflight
into corresponding fields of table g_it_sflight.
loop at g_it_sflight into g_wa_sflight.
* Nur am Anfang der Schleife, sollte man den sy-tabix abfragen,
* da das System den Wert nach jeden Befehl ändern kann.
* Sy-TAbix wird am Beginn jeder Schleife auf den Index der aktuellen
* Zeile gesetzt.
l_counter = sy-tabix.
* Feld berechnen
g_wa_sflight-prozent = g_wa_sflight-seatsocc /
g_wa_sflight-seatsmax * 100..
modify g_it_sflight from g_wa_sflight index l_counter.
endloop.
Code: Alles auswählen.
REPORT zds_aufgabe04. .
TABLES: vbak, vbap.
TYPES: BEGIN OF str_vbak,
vbeln TYPE vbak-vbeln,
erdat TYPE vbak-erdat,
ernam TYPE vbak-ernam,
vbtyp TYPE vbak-vbtyp,
vkorg TYPE vbak-vkorg,
vtweg TYPE vbak-vtweg,
spart TYPE vbak-spart,
END OF str_vbak.
TYPES: BEGIN OF str_vbap,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
matnr TYPE vbap-matnr,
pstyv TYPE vbap-pstyv,
uepos TYPE vbap-uepos,
END OF str_vbap.
DATA: curserfield(30),
first(30),
field(30),
feldname(30),
sortierart TYPE c.
DATA: tbl_vbak TYPE TABLE OF str_vbak,
wa_vbak TYPE str_vbak,
wa_vbap TYPE str_vbap.
* Auswahloptionen
SELECT-OPTIONS: p_vbeln FOR vbak-vbeln,
p_erdat FOR vbak-erdat,
p_ernam FOR vbak-ernam,
p_vbtyp FOR vbak-vbtyp,
p_vkorg FOR vbak-vkorg,
p_vtweg FOR vbak-vtweg,
p_spart FOR vbak-spart.
*** Hauptablauf
START-OF-SELECTION.
SET PF-STATUS 'SORTIEREN'.
PERFORM selektion.
PERFORM ausgabe.
TOP-OF-PAGE.
PERFORM topofpage.
*---------------------------------------------------------------------*
* FORM TopOfPage
*---------------------------------------------------------------------*
* Spaltenüberschrift
FORM topofpage.
SET TITLEBAR 'VERTRIEBSBELEGE'.
WRITE: / 'Vertriebsbelegnr.',
20 'Erfassungsdt.',
40 'Erfassername',
60 'Vertriebsbelegtyp',
85 'Verkaufsorg.',
105 'Vertriebsweg',
125 'Sparte'.
ULINE.
ENDFORM. "TopOfPage
*---------------------------------------------------------------------*
* FORM Selektion
*---------------------------------------------------------------------*
FORM selektion.
* Datenselektion
SELECT * FROM vbak INTO CORRESPONDING FIELDS OF TABLE tbl_vbak
WHERE vbeln IN p_vbeln AND
erdat IN p_erdat AND
ernam IN p_ernam AND
vbtyp IN p_vbtyp AND
vkorg IN p_vkorg AND
vtweg IN p_vtweg AND
spart IN p_spart.
ENDFORM. "selektion
*---------------------------------------------------------------------*
* FORM Ausgabe
*---------------------------------------------------------------------*
* Liste ausgeben
FORM ausgabe.
LOOP AT tbl_vbak INTO wa_vbak.
WRITE: /
wa_vbak-vbeln UNDER 'Vertriebsbelegnr.',
wa_vbak-erdat UNDER 'Erfassungsdt.',
wa_vbak-ernam UNDER 'Erfassername',
wa_vbak-vbtyp UNDER 'Vertriebsbelegtyp',
wa_vbak-vkorg UNDER 'Verkaufsprg.',
wa_vbak-vtweg UNDER 'Vertriebsweg',
wa_vbak-spart UNDER 'Sparte'.
HIDE: wa_vbak-vbeln.
ENDLOOP.
ENDFORM. "Ausgabe
* 1. Verzweigungsliste
*---------------------------------------------------------------------*
* FORM lineselect
*---------------------------------------------------------------------*
FORM lineselect.
IF sy-lsind < 2.
SET PF-STATUS space.
SELECT DISTINCT vbeln posnr matnr pstyv uepos FROM vbap
INTO CORRESPONDING FIELDS OF wa_vbap
WHERE vbeln = wa_vbap-vbeln
AND vbeln IS NOT NULL
ORDER BY posnr ASCENDING.
WRITE: / wa_vbap-vbeln UNDER 'Verkaufsbelegnr.',
wa_vbap-posnr UNDER 'Verkaufsbelegpos.',
wa_vbap-matnr UNDER 'Materialnr.',
wa_vbap-pstyv UNDER 'Positionstyp',
wa_vbap-uepos UNDER 'Stücklistenstruktur'.
ENDSELECT.
ENDIF.
ENDFORM. "lineselect
AT USER-COMMAND.
GET CURSOR FIELD curserfield.
SPLIT curserfield AT '-' INTO first field.
CASE sy-ucomm.
WHEN 'BACK'.
RETURN.
WHEN 'CANCEL'.
EXIT.
WHEN 'SORTAUF'.
sy-lsind = sy-lsind - 1.
sortierart = 'A'.
SORT tbl_vbak BY (field) ASCENDING.
PERFORM topofpage.
PERFORM ausgabe.
WHEN 'SORTAB'.
sy-lsind = sy-lsind - 1.
sortierart = 'D'.
SORT tbl_vbak BY (field) DESCENDING.
PERFORM topofpage.
PERFORM ausgabe.
ENDCASE.
AT LINE-SELECTION.
PERFORM lineselect.
TOP-OF-PAGE DURING LINE-SELECTION.
SET TITLEBAR 'VERZWEIGUNGSLISTE'.
IF sy-lsind = 0.
CASE field.
WHEN 'VBELN'.
feldname = 'Vertriebsbelegnummer'.
WHEN 'ERDAT'.
feldname = 'Erfassungsdatum'.
WHEN 'ERNAM'.
feldname = 'Erfassername'.
WHEN 'VBTYP'.
feldname = 'Vertriebsbelegtyp'.
WHEN 'VKORG'.
feldname = 'Verkaufsorganisation'.
WHEN 'VTWEG'.
feldname = 'Vertriebsweg'.
WHEN 'SPART'.
feldname = 'Sparte'.
ENDCASE.
WRITE: /
'Sortiert nach',feldname.
ULINE.
ENDIF.
IF sy-lsind = 1.
WRITE: /
'Verkaufsbelegnr.',
20 'Verkaufsbelegpos.',
65 'Materialnr.',
80 'Positionstyp',
100 'Stücklistenstruktur'.
ULINE.
ENDIF.