Code: Alles auswählen.
**** Interne Tabelle ****
**** Feldleiste für interne Tabelle I_ZQMAB_ABT für Mitarbeiter ****
**** nach Abteilung aufgebaut ****
DATA: BEGIN OF FD_ZQMAB_ABT,
MANDT LIKE ZQMAB-MANDT,
ABTEILUNG LIKE ZQMAB-ABTEILUNG,
NUMMER LIKE ZQMAB-NUMMER,
NAME LIKE ZQMAB-NAME,
BERUF LIKE ZQMAB-BERUF,
EINDATUM LIKE ZQMAB-EINDATUM,
GEHALT LIKE ZQMAB-GEHALT,
BEZEICHN LIKE ZQABT-BEZEICHN,
POSTZAHL LIKE ZQABT-POSTZAHL,
ORT LIKE ZQORT-ORT,
END OF FD_ZQMAB_ABT.
**** Tabelle I_ZQMAB_ABT ****
DATA: I_ZQMAB_ABT LIKE FD_ZQMAB_ABT OCCURS 0 WITH HEADER LINE.
**** Feldleiste für interne Tabelle I_ZQMAB_ORT für ORT ****
**** nach Ort aufgebaut ****
DATA: BEGIN OF FD_ZQMAB_ORT,
MANDT LIKE ZQMAB-MANDT,
ORT LIKE ZQORT-ORT,
NUMMER LIKE ZQMAB-NUMMER,
NAME LIKE ZQMAB-NAME,
BERUF LIKE ZQMAB-BERUF,
EINDATUM LIKE ZQMAB-EINDATUM,
GEHALT LIKE ZQMAB-GEHALT,
BEZEICHN LIKE ZQABT-BEZEICHN,
POSTZAHL LIKE ZQABT-POSTZAHL,
ABTEILUNG LIKE ZQMAB-ABTEILUNG,
END OF FD_ZQMAB_ORT.
**** Tabelle I_ZQMAB_ABT ****
DATA: I_ZQMAB_ORT like FD_ZQMAB_ORT OCCURS 0 WITH HEADER LINE.
*---------------------------------------------------------------------*
* FORM READ_ABTEILUNG *
*---------------------------------------------------------------------*
* Daten selektieren nach Abteilung mit FLAG ABTEILUNG *
*---------------------------------------------------------------------*
* --> M_ABTEIL *
*---------------------------------------------------------------------*
FORM READ_ABTEILUNG USING M_ABTEIL.
**** Daten selektieren nach Abteilung mit FLAG ABTEILUNG ****
SELECT * FROM ZQMAB
INTO CORRESPONDING FIELDS OF TABLE I_ZQMAB_ABT
WHERE ABTEILUNG LIKE M_ABTEIL
ORDER BY ABTEILUNG.
IF SY-SUBRC <> 0. "Fehlerroutine" "01/921134_ASCN_I"
MESSAGE I099.
LEAVE LIST-PROCESSING. "Zurück zum Start Bildschirm"
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM READ_ABTEILUNG_ORT *
*---------------------------------------------------------------------*
* Daten selektieren nach Abteilung mit FLAG ABTEILUNG *
*---------------------------------------------------------------------*
* --> M_ABTEIL *
*---------------------------------------------------------------------*
FORM READ_ABTEILUNG_ORT USING M_ABTEIL.
**** Daten selektieren nach ORT mit FLAG ABTEILUNG ****
SELECT * FROM ZQMAB
INTO CORRESPONDING FIELDS OF TABLE I_ZQMAB_ORT
WHERE ABTEILUNG LIKE M_ABTEIL
ORDER BY ABTEILUNG.
IF SY-SUBRC <> 0. "Fehlerroutine" "01/921134_ASCN_I"
MESSAGE I099.
LEAVE LIST-PROCESSING. "Zurück zum Start Bildschirm"
ENDIF.
ENDFORM.
Code: Alles auswählen.
FIELD-SYMBOLS TYPE <tab>.
IF P_SU_ABT = C_TRUE.
ASSIGN I_ZQMAB_ABT to <tab>.
ELSE.
ASSIGN I_ZQMAB_ORT to <tab>.
ENDIF.
*---------------------------------------------------------------------*
* FORM READ_ABTEILUNG *
*---------------------------------------------------------------------*
* Daten selektieren nach Abteilung mit FLAG ABTEILUNG *
*---------------------------------------------------------------------*
* --> M_ABTEIL *
*---------------------------------------------------------------------*
FORM READ_ABTEILUNG USING M_ABTEIL.
**** Daten selektieren nach ORT mit FLAG ABTEILUNG ****
SELECT * FROM ZQMAB
INTO CORRESPONDING FIELDS OF TABLE <tab>
WHERE ABTEILUNG LIKE M_ABTEIL
ORDER BY ABTEILUNG.
IF SY-SUBRC <> 0. "Fehlerroutine" "01/921134_ASCN_I"
MESSAGE I099.
LEAVE LIST-PROCESSING. "Zurück zum Start Bildschirm"
ENDIF.
ENDFORM.
Code: Alles auswählen.
if ORT_gewünscht = 'X'.
sort_tab-sort = itab-ort.
elsif ABTEILUNG_gewünscht = 'X'.
sort_tab-sort = itab-abteilung.
endif.
...
collect sort_tab.
Code: Alles auswählen.
REPORT ZMACQU13 MESSAGE-ID ZQ
NO STANDARD PAGE HEADING
LINE-COUNT 60 LINE-SIZE 160.
*************************************************************
* Übung 1 *
* Tabelle einlesen und ausgeben *
* Variante 3 *
* von Massimo Acquasanta *
* am 29.03.2006 erstellt *
* Version 0.7 *
*************************************************************
**** include mzsycons ****
INCLUDE MZSYCONS. "beinhaltet Deklaration von Variablen"
INCLUDE <ICON>. "beinhaltet die benötigten ICONs"
**** Variablen ****
**** zugreifende Tabellen ****
TABLES: ZQMAB, "Tabelle Mitarbeiterdaten"
ZQABT, "Tabelle Abteilungsdaten"
ZQORT. "Tabelle Ortdaten"
**** Globale Hilfsvariablen ****
DATA: H_TABLE like dd02l-tabname, "Hilfsvariable für interne Tabelle"
H_ABT LIKE ZQABT-ABTEILUNG, "Hilfsvariable für Abteilung"
H_BEZEICHN LIKE ZQABT-BEZEICHN, "Hilfsvariable für Bezeichnung"
H_POSTZAHL LIKE ZQABT-POSTZAHL, "Hilfsvariable für Postzahl"
H_ORT LIKE ZQORT-ORT, "Hilfsvariable für Ort"
H_GEHALT LIKE ZQMAB-GEHALT, "Hilfsvariable für Gehalt"
H_FARBE TYPE I. "Hilfsvariable für Farbe"
**** Globale Variablen ****
DATA: G_ABTEIL LIKE ZQMAB-ABTEILUNG, "Globale Variable für Abteilung"
G_SORT(11), "Globale Variable für Sortierkriterium"
G_SUM(11), "Globale Variable für Summierungskriterium"
G_DIR(10), "Globale Variable für Sortierrichtung"
G_ICON1(10), "Globale Variable für Icon-Ausrichtung"
G_ICON2(10), "Globale Variable für Icon-Ausrichtung"
G_ICON3(10), "Globale Variable für Icon-Ausrichtung"
G_ICON4(10), "Globale Variable für Icon-Ausrichtung"
G_ICON5(10), "Globale Variable für Icon-Ausrichtung"
G_ICON6(10), "Globale Variable für Icon-Ausrichtung"
G_ICON7(10), "Globale Variable für Icon-Ausrichtung"
G_ICON8(10), "Globale Variable für Icon-Ausrichtung"
G_ICON9(10). "Globale Variable für Icon-Ausrichtung"
**** Zur Festlegung der Spalten der Icon's ****
CONSTANTS: C_POS_ICON_NR TYPE I VALUE 11,
C_POS_ICON_NAM TYPE I VALUE 23,
C_POS_ICON_BER TYPE I VALUE 45,
C_POS_ICON_EIN TYPE I VALUE 72,
C_POS_ICON_GEH TYPE I VALUE 85,
C_POS_ICON_ABT TYPE I VALUE 103,
C_POS_ICON_BEZ TYPE I VALUE 119,
C_POS_ICON_PLZ TYPE I VALUE 139,
C_POS_ICON_ORT TYPE I VALUE 147.
**** Zur Festlegung der Sortierrichtung ****
CONSTANTS: C_SORT_UP(10) TYPE C VALUE 'ASCENDING',
C_SORT_DOWN(10) TYPE C VALUE 'DESCENDING'.
**** Zur Positionierung der Tabellen I_ZQMAB's und I_SUMME's ****
CONSTANTS: C_MAB_NR TYPE I VALUE 1,
C_MAB_NAM TYPE I VALUE 15,
C_MAB_BER TYPE I VALUE 36,
C_MAB_EIN TYPE I VALUE 60,
C_MAB_GEH TYPE I VALUE 75,
C_MAB_ABT TYPE I VALUE 90,
C_MAB_BEZ TYPE I VALUE 104,
C_MAB_PLZ TYPE I VALUE 132,
C_MAB_ORT TYPE I VALUE 140,
C_MAB_ENDE TYPE I VALUE 160.
**** Zur Belegung der Excel-Kopfzeile ****
CONSTANTS: C_EXCELHEADER_MANDAT(6) TYPE C VALUE 'Mandat',
C_EXCELHEADER_NUMMER(6) TYPE C VALUE 'Nummer',
C_EXCELHEADER_NAME(4) TYPE C VALUE 'Name',
C_EXCELHEADER_BERUF(5) TYPE C VALUE 'Beruf',
C_EXCELHEADER_EINTRITT(8) TYPE C VALUE 'Eintritt',
C_EXCELHEADER_GEHALT(6) TYPE C VALUE 'Gehalt',
C_EXCELHEADER_ABTEILUNG(9) TYPE C VALUE 'Abteilung',
C_EXCELHEADER_BEZEICHNUNG(11) TYPE C VALUE 'Bezeichnung',
C_EXCELHEADER_PLZ(3) TYPE C VALUE 'PLZ',
C_EXCELHEADER_ORT(3) TYPE C VALUE 'Ort'.
**** Interne Tabelle ****
**** Feldleiste für interne Tabelle I_ZQMAB_ABT für Mitarbeiter ****
**** nach Abteilung aufgebaut ****
DATA: BEGIN OF FD_ZQMAB_ABT,
MANDT LIKE ZQMAB-MANDT,
ABTEILUNG LIKE ZQMAB-ABTEILUNG,
NUMMER LIKE ZQMAB-NUMMER,
NAME LIKE ZQMAB-NAME,
BERUF LIKE ZQMAB-BERUF,
EINDATUM LIKE ZQMAB-EINDATUM,
GEHALT LIKE ZQMAB-GEHALT,
BEZEICHN LIKE ZQABT-BEZEICHN,
POSTZAHL LIKE ZQABT-POSTZAHL,
ORT LIKE ZQORT-ORT,
END OF FD_ZQMAB_ABT.
**** Tabelle I_ZQMAB_ABT ****
DATA: I_ZQMAB_ABT LIKE FD_ZQMAB_ABT OCCURS 0 WITH HEADER LINE.
**** Test ****
*FIELD-SYMBOLS <tab> STRUCTURE FD_ZQMAB_ABT DEFAULT I_ZQMAB_ABT.
**** Feldleiste für interne Tabelle I_ZQMAB_ORT für ORT ****
**** nach Ort aufgebaut ****
DATA: BEGIN OF FD_ZQMAB_ORT,
MANDT LIKE ZQMAB-MANDT,
ORT LIKE ZQORT-ORT,
NUMMER LIKE ZQMAB-NUMMER,
NAME LIKE ZQMAB-NAME,
BERUF LIKE ZQMAB-BERUF,
EINDATUM LIKE ZQMAB-EINDATUM,
GEHALT LIKE ZQMAB-GEHALT,
BEZEICHN LIKE ZQABT-BEZEICHN,
POSTZAHL LIKE ZQABT-POSTZAHL,
ABTEILUNG LIKE ZQMAB-ABTEILUNG,
END OF FD_ZQMAB_ORT.
**** Tabelle I_ZQMAB_ABT ****
DATA: I_ZQMAB_ORT like FD_ZQMAB_ORT OCCURS 0 WITH HEADER LINE.
**** Feldleiste für Summe-ABT ****
DATA: BEGIN OF FD_SUMME_ABT,
ABTEILUNG LIKE ZQMAB-ABTEILUNG,
BEZEICHN LIKE ZQABT-BEZEICHN,
ANZAHL TYPE I,
GEHALT LIKE ZQMAB-GEHALT,
END OF FD_SUMME_ABT.
**** Feldleiste für Summe-Ort ****
DATA: BEGIN OF FD_SUMME_ORT,
ORT LIKE ZQORT-ORT,
ANZAHL TYPE I,
GEHALT LIKE ZQMAB-GEHALT,
END OF FD_SUMME_ORT.
**** Tabelle i_summe_abt für die Abteilung-Summierung ****
DATA: I_SUMME_ABT LIKE FD_SUMME_ABT OCCURS 0 WITH HEADER LINE.
**** Tabelle i_summe_ort für die Ort-Summierung ****
DATA: I_SUMME_ORT LIKE FD_SUMME_ORT OCCURS 0 WITH HEADER LINE.
**** Feldleiste für die EXCEL-KOPFZEILE ****
DATA: BEGIN OF I_EXCELHEADER OCCURS 0,
TITLE(25),
END OF I_EXCELHEADER.
**** Feldleiste für interne Tabelle FD_EXCELBODY ****
DATA: BEGIN OF FD_EXCELBODY,
MANDT LIKE ZQMAB-MANDT,
NUMMER LIKE ZQMAB-NUMMER,
NAME LIKE ZQMAB-NAME,
BERUF LIKE ZQMAB-BERUF,
EINDATUM LIKE ZQMAB-EINDATUM,
GEHALT LIKE ZQMAB-GEHALT,
ABTEILUNG LIKE ZQMAB-ABTEILUNG,
BEZEICHN LIKE ZQABT-BEZEICHN,
POSTZAHL LIKE ZQABT-POSTZAHL,
ORT LIKE ZQORT-ORT,
END OF FD_EXCELBODY.
**** Tabelle i_summe_ort für die Ort-Summierung ****
DATA: I_EXCELBODY LIKE FD_EXCELBODY OCCURS 0 WITH HEADER LINE.
**** Selektionsmaske ****
**** Eingabemaske Block: Selektion ****
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN COMMENT 10(50) TEXT-002.
SELECTION-SCREEN SKIP.
**** Abfrage der Abteilung ****
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(15) TEXT-003.
PARAMETERS: P_ABTEIL LIKE ZQMAB-ABTEILUNG.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLOCK1.
**** Optionsmenu Block: Listensteuerung ****
SELECTION-SCREEN BEGIN OF BLOCK BLOCK2 WITH FRAME TITLE TEXT-004.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT 10(50) TEXT-005.
SELECTION-SCREEN SKIP.
**** Sortierung nach Nummer ****
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(15) TEXT-006.
PARAMETERS: P_SO_NUM RADIOBUTTON GROUP RAD1 DEFAULT 'X'.
SELECTION-SCREEN END OF LINE.
**** Sortierung nach Name ****
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(15) TEXT-007.
PARAMETERS: P_SO_NAM RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN END OF LINE.
**** Sortierung nach Abteilung ****
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(15) TEXT-003.
PARAMETERS: P_SO_ABT RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLOCK2.
**** Optionsmenu Block: Summierung ****
SELECTION-SCREEN BEGIN OF BLOCK BLOCK3 WITH FRAME TITLE TEXT-008.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT 10(50) TEXT-009.
SELECTION-SCREEN SKIP.
**** Summierung nach Abteilung ****
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(15) TEXT-003.
PARAMETERS: P_SU_ABT RADIOBUTTON GROUP RAD2.
SELECTION-SCREEN END OF LINE.
**** Summierung nach Ort ****
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(15) TEXT-010.
PARAMETERS: P_SU_ORT RADIOBUTTON GROUP RAD2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLOCK3.
**** Eingabebildschirm ****
AT SELECTION-SCREEN.
PERFORM CHECK_INPUT. "Eingabeparameter Überprüfen"
**** Ereignis bei Zeilenauswahl ****
AT LINE-SELECTION.
SY-LSIND = 1. "Listenstufe auf 1 festlegen"
PERFORM WRITE_SORT_LIST. "neu sortierte Liste ausgeben"
**** Beim Drücken des Buttons ****
AT USER-COMMAND.
IF SY-UCOMM = 'EXCL'.
PERFORM EXPORT_EXCEL. "EXCEL DOWNLOAD ausführen"
ENDIF.
**** Start des Programms ****
START-OF-SELECTION.
SET PF-STATUS 'REPORTSD'. "GUI-Status auf REPORTSD festlegen"
PERFORM READ_DATA. "Daten einlesen"
PERFORM PROCESS_DATA. "Daten bearbeiten"
PERFORM WRITE_DATA. "Daten ausgeben"
**** Begin einer Seite ****
TOP-OF-PAGE.
PERFORM WRITE_SEITENKOPF. "Seitenkopf ausgeben"
PERFORM WRITE_TABELLENKOPF. "Tabellenkopf ausgeben"
TOP-OF-PAGE DURING LINE-SELECTION.
PERFORM WRITE_SEITENKOPF. "Seitenkopf ausgeben"
PERFORM WRITE_TABELLENKOPF. "Tabellenkopf ausgeben"
*---------------------------------------------------------------------*
* FORM CHECK_INPUT *
*---------------------------------------------------------------------*
* Eingabe prüfen *
*---------------------------------------------------------------------*
FORM CHECK_INPUT.
**** Überprüfung: Initialwert ****
IF P_ABTEIL IS INITIAL.
G_ABTEIL = '%'.
else.
G_ABTEIL = P_ABTEIL.
ENDIF.
"Festlegung des Summierungskriteriums"
CLEAR G_SUM.
IF ( P_SU_ABT = C_TRUE ).
G_SUM = 'ABTEILUNG'.
ELSEIF ( P_SU_ORT = C_TRUE ).
G_SUM = 'ORT'.
ENDIF.
"Festlegung des Sortierungskriteriums"
CLEAR G_SORT.
IF ( P_SO_NUM = C_TRUE ).
G_SORT = 'NUMMER'.
ELSEIF ( P_SO_NAM = C_TRUE ).
G_SORT = 'NAME'.
ELSEIF ( P_SO_ABT = C_TRUE ).
G_SORT = 'ABTEILUNG'.
ENDIF.
* Festlegung der Sortierrichtung
G_DIR = C_SORT_UP.
* Festlegung der Iconrichtung
G_ICON1 = C_SORT_UP.
G_ICON2 = C_SORT_UP.
G_ICON3 = C_SORT_UP.
G_ICON4 = C_SORT_UP.
G_ICON5 = C_SORT_UP.
G_ICON6 = C_SORT_UP.
G_ICON7 = C_SORT_UP.
G_ICON8 = C_SORT_UP.
G_ICON9 = C_SORT_UP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM READ_DATA *
*---------------------------------------------------------------------*
* Bearbeitung der Sucheingabe *
*---------------------------------------------------------------------*
FORM READ_DATA.
"Flag Überprüfung ob nach Abteilung oder Ort summiert wird"
IF P_SU_ABT = C_TRUE.
PERFORM READ_ABTEILUNG USING G_ABTEIL.
ELSE.
PERFORM READ_ABTEILUNG_ORT USING G_ABTEIL.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM READ_ABTEILUNG *
*---------------------------------------------------------------------*
* Daten selektieren nach Abteilung mit FLAG ABTEILUNG *
*---------------------------------------------------------------------*
* --> M_ABTEIL *
*---------------------------------------------------------------------*
FORM READ_ABTEILUNG USING M_ABTEIL.
**** Daten selektieren nach Abteilung mit FLAG ABTEILUNG ****
SELECT * FROM ZQMAB
INTO CORRESPONDING FIELDS OF TABLE I_ZQMAB_ABT
WHERE ABTEILUNG LIKE M_ABTEIL
ORDER BY ABTEILUNG.
IF SY-SUBRC <> 0. "Fehlerroutine" "01/921134_ASCN_I"
MESSAGE I099.
LEAVE LIST-PROCESSING. "Zurück zum Start Bildschirm"
ENDIF.
* Hinzufügen von restlichen Informationen aus ZQORT und ZQABT
LOOP AT I_ZQMAB_ABT.
ON CHANGE OF I_ZQMAB_ABT-ABTEILUNG.
CLEAR: H_ABT, H_BEZEICHN, H_POSTZAHL, H_ORT.
H_ABT = I_ZQMAB_ABT-ABTEILUNG.
PERFORM READ_BEZEICHNUNG_PLZ_ORT
USING H_ABT H_BEZEICHN H_POSTZAHL H_ORT.
ENDON.
* Zusätzliche Informationen der internen Tabelle hinzufügen *
I_ZQMAB_ABT-BEZEICHN = H_BEZEICHN.
I_ZQMAB_ABT-POSTZAHL = H_POSTZAHL.
I_ZQMAB_ABT-ORT = H_ORT.
MODIFY I_ZQMAB_ABT.
endloop.
ENDFORM.
*---------------------------------------------------------------------*
* FORM READ_ABTEILUNG_ORT
*---------------------------------------------------------------------*
* Daten selektieren nach Abteilung mit FLAG ORT *
*---------------------------------------------------------------------*
* --> M_ABTEIL
*---------------------------------------------------------------------*
FORM READ_ABTEILUNG_ORT USING M_ABTEIL.
SELECT * FROM ZQMAB
INTO CORRESPONDING FIELDS OF TABLE I_ZQMAB_ORT
WHERE ABTEILUNG LIKE G_ABTEIL
ORDER BY ABTEILUNG ASCENDING.
IF SY-SUBRC <> 0. "Fehlerroutine" "01/921134_ASCN_I"
MESSAGE I099.
LEAVE LIST-PROCESSING. "Zurück zum Start Bildschirm"
ENDIF.
* Hinzufügen von restlichen Informationen aus ZQORT und ZQABT
LOOP AT I_ZQMAB_ORT.
ON CHANGE OF I_ZQMAB_ORt-ABTEILUNG.
CLEAR: H_ABT, H_BEZEICHN, H_POSTZAHL, H_ORT.
H_ABT = I_ZQMAB_ORT-ABTEILUNG.
PERFORM READ_BEZEICHNUNG_PLZ_ORT
USING H_ABT H_BEZEICHN H_POSTZAHL H_ORT.
ENDON.
* Zusätzliche Informationen der internen Tabelle hinzufügen *
I_ZQMAB_ORT-BEZEICHN = H_BEZEICHN.
I_ZQMAB_ORT-POSTZAHL = H_POSTZAHL.
I_ZQMAB_ORT-ORT = H_ORT.
MODIFY I_ZQMAB_ORT.
endloop.
ENDFORM.
*---------------------------------------------------------------------*
* FORM READ_BEZEICHNUNG_PLZ_ORT *
*---------------------------------------------------------------------*
* PLZ und ORT auslesen *
*---------------------------------------------------------------------*
* --> M_ABT *
* --> M_BEZEICHN *
* --> M_POSTZAHL *
* --> M_ORT *
*---------------------------------------------------------------------*
FORM READ_BEZEICHNUNG_PLZ_ORT
USING M_ABT M_BEZEICHN M_POSTZAHL M_ORT.
* Daten selektieren nach Abteilung *
SELECT SINGLE BEZEICHN POSTZAHL
INTO (M_BEZEICHN, M_POSTZAHL) FROM ZQABT
WHERE ABTEILUNG = M_ABT.
IF SY-SUBRC NE 0.
M_BEZEICHN = TEXT-011.
M_POSTZAHL = TEXT-011.
M_ORT = TEXT-011.
EXIT.
ENDIF.
* Daten selektieren nach Ort *
SELECT SINGLE ORT INTO (M_ORT) FROM ZQORT
WHERE POSTZAHL = M_POSTZAHL.
IF SY-SUBRC NE 0.
M_ORT = TEXT-011.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM PROCESS_DATA *
*---------------------------------------------------------------------*
* Daten bearbeiten *
*---------------------------------------------------------------------*
FORM PROCESS_DATA.
* interne Tabelle sortieren *
PERFORM SORT_ITAB.
* Flag nach Summierung Überprüfen und Summierung starten *
IF ( P_SU_ABT = C_TRUE ).
PERFORM COLLECT_DATA_ABT.
ELSEIF ( P_SU_ORT = C_TRUE ).
PERFORM COLLECT_DATA_ORT.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM SORT_ITAB *
*---------------------------------------------------------------------*
* Interne Tabelle sortieren *
*---------------------------------------------------------------------*
FORM SORT_ITAB.
* Nach Flag Abteilung
IF ( P_SU_ABT = C_TRUE ).
* Aufwärts sortieren
IF ( G_DIR EQ 'ASCENDING' ).
SORT I_ZQMAB_ABT BY (G_SUM) ASCENDING (G_SORT) ASCENDING.
* Abwärts sortieren
ELSEIF ( G_DIR EQ 'DESCENDING' ).
SORT I_ZQMAB_ABT BY (G_SUM) ASCENDING (G_SORT) DESCENDING.
ENDIF.
* Nach Flag Ort
ELSEIF ( P_SU_ORT = C_TRUE ).
* Aufwärts sortieren
IF ( G_DIR EQ 'ASCENDING' ).
SORT I_ZQMAB_ORT BY (G_SUM) ASCENDING (G_SORT) ASCENDING.
* Abwärts sortieren
ELSEIF ( G_DIR EQ 'DESCENDING' ).
SORT I_ZQMAB_ORT BY (G_SUM) ASCENDING (G_SORT) DESCENDING.
ENDIF.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM COLLECT_DATA_ABT *
*---------------------------------------------------------------------*
* Zusammenfassen der Daten nach Abteilung *
*---------------------------------------------------------------------*
FORM COLLECT_DATA_ABT.
* Noch am Überlegen zur Performance-Steigerung *
CLEAR: I_SUMME_ABT.
REFRESH: I_SUMME_ABT.
LOOP AT I_ZQMAB_ABT.
I_SUMME_ABT-ANZAHL = 1.
I_SUMME_ABT-ABTEILUNG = I_ZQMAB_ABT-ABTEILUNG.
I_SUMME_ABT-BEZEICHN = I_ZQMAB_ABT-BEZEICHN.
I_SUMME_ABT-GEHALT = I_ZQMAB_ABT-GEHALT.
COLLECT I_SUMME_ABT.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM COLLECT_DATA_ORT *
*---------------------------------------------------------------------*
* Zusammenfassen der Daten nach Ort *
*---------------------------------------------------------------------*
FORM COLLECT_DATA_ORT.
* Noch am Überlegen zur Performance-Steigerung *
CLEAR: I_SUMME_ORT.
REFRESH: I_SUMME_ORT.
LOOP AT I_ZQMAB_ORT.
I_SUMME_ORT-ANZAHL = 1.
I_SUMME_ORT-ORT = I_ZQMAB_ORT-ORT.
I_SUMME_ORT-GEHALT = I_ZQMAB_ORT-GEHALT.
COLLECT I_SUMME_ORT.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE_DATA *
*---------------------------------------------------------------------*
* Datenausgabe *
*---------------------------------------------------------------------*
FORM WRITE_DATA.
H_FARBE = 0. "Festlegung der Zeilenfarbe"
"Flag nach Abteilung oder Ort ausgeben"
IF ( P_SU_ABT = C_TRUE ).
PERFORM WRITE_ABT.
ELSEIF ( P_SU_ORT = C_TRUE ).
PERFORM WRITE_ORT.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE_ABT *
*---------------------------------------------------------------------*
* Ausgabe nach Abteilung Summierung *
*---------------------------------------------------------------------*
FORM WRITE_ABT.
LOOP AT I_ZQMAB_ABT.
IF H_FARBE = 0. "Farbwechsel durchführen"
H_FARBE = 2.
ELSE.
H_FARBE = 0.
ENDIF.
*AT NEW ABTEILUNG.
*new_page
*endat.
* Liste mit entsprechender Farbe ausgeben *
PERFORM WRITE_LIST USING H_FARBE.
AT END OF ABTEILUNG.
* Summe am Ende ausgeben *
PERFORM WRITE_SUM_ABT.
ENDAT.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE_ORT *
*---------------------------------------------------------------------*
* Ausgabe nach ORT Summierung *
*---------------------------------------------------------------------*
FORM WRITE_ORT.
LOOP AT I_ZQMAB_ORT.
IF H_FARBE = 0. "Farbwechsel durchführen"
H_FARBE = 2.
ELSE.
H_FARBE = 0.
ENDIF.
*AT NEW ORT.
* new_page
*endat.
* Liste mit entsprechender Farbe ausgeben *
PERFORM WRITE_LIST USING H_FARBE.
AT END OF ORT.
* Summe am Ende ausgeben *
PERFORM WRITE_SUM_ORT.
ENDAT.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE_LIST *
*---------------------------------------------------------------------*
* Listen ausgabe mit entsprechender Farbe *
*---------------------------------------------------------------------*
* --> M_FARBE *
*---------------------------------------------------------------------*
FORM WRITE_LIST USING M_FARBE.
* Flag Überprüfung nach Abteilung oder Ort *
IF P_SU_ABT = C_TRUE.
* Farbe festlegen und einschalten*
FORMAT COLOR = M_FARBE.
* Liste ausgeben *
WRITE: AT /C_MAB_NR '|', I_ZQMAB_ABT-NUMMER
UNDER TEXT-012,
AT C_MAB_NAM '|', I_ZQMAB_ABT-NAME
UNDER TEXT-013,
AT C_MAB_BER '|', I_ZQMAB_ABT-BERUF
UNDER TEXT-014,
AT C_MAB_EIN '|', I_ZQMAB_ABT-EINDATUM
UNDER TEXT-015,
AT C_MAB_GEH '|', I_ZQMAB_ABT-GEHALT
UNDER TEXT-016,
AT C_MAB_ABT '|', I_ZQMAB_ABT-ABTEILUNG
UNDER TEXT-017,
AT C_MAB_BEZ '|', I_ZQMAB_ABT-BEZEICHN
UNDER TEXT-018,
AT C_MAB_PLZ '|', I_ZQMAB_ABT-POSTZAHL
UNDER TEXT-019,
AT C_MAB_ORT '|', I_ZQMAB_ABT-ORT
UNDER TEXT-020,
AT C_MAB_ENDE '|'.
FORMAT COLOR OFF. "Farbe ausschalten"
ELSE.
* Farbe festlegen und einschalten*
FORMAT COLOR = M_FARBE.
* liste ausgeben *
WRITE: AT /C_MAB_NR '|', I_ZQMAB_ORT-NUMMER
UNDER TEXT-012,
AT C_MAB_NAM '|', I_ZQMAB_ORT-NAME
UNDER TEXT-013,
AT C_MAB_BER '|', I_ZQMAB_ORT-BERUF
UNDER TEXT-014,
AT C_MAB_EIN '|', I_ZQMAB_ORT-EINDATUM
UNDER TEXT-015,
AT C_MAB_GEH '|', I_ZQMAB_ORT-GEHALT
UNDER TEXT-016,
AT C_MAB_ABT '|', I_ZQMAB_ORT-ABTEILUNG
UNDER TEXT-017,
AT C_MAB_BEZ '|', I_ZQMAB_ORT-BEZEICHN
UNDER TEXT-018,
AT C_MAB_PLZ '|', I_ZQMAB_ORT-POSTZAHL
UNDER TEXT-019,
AT C_MAB_ORT '|', I_ZQMAB_ORT-ORT
UNDER TEXT-020,
AT C_MAB_ENDE '|'.
FORMAT COLOR OFF. "Farbe ausschalten"
endif.
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE_SUM_ABT *
*---------------------------------------------------------------------*
* Tabelle Summe von Abteilung *
*---------------------------------------------------------------------*
FORM WRITE_SUM_ABT.
* Tabelle nach entsprechenden Eintrag suchen *
READ TABLE I_SUMME_ABT
WITH KEY ABTEILUNG = I_ZQMAB_ABT-ABTEILUNG
BINARY SEARCH.
IF SY-SUBRC = 0.
" durchschnittsgehalt errechnen "
CLEAR: H_GEHALT.
H_GEHALT = I_SUMME_ABT-GEHALT
/ I_SUMME_ABT-ANZAHL.
* Summe ausgeben *
ULINE AT /1(C_MAB_ENDE).
WRITE: AT /C_MAB_NR '|',
I_SUMME_ABT-ANZAHL UNDER 'NUMMER',
TEXT-029,
I_SUMME_ABT-BEZEICHN,
AT C_MAB_GEH '|',
I_SUMME_ABT-GEHALT
UNDER TEXT-016 COLOR COL_TOTAL,
AT C_MAB_ABT '|',
H_GEHALT UNDER TEXT-017,
TEXT-030,
AT C_MAB_ENDE '|'.
ULINE AT /1(C_MAB_ENDE).
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE_SUM_ORT *
*---------------------------------------------------------------------*
* Tabelle Summe von Ort *
*---------------------------------------------------------------------*
FORM WRITE_SUM_ORT.
* Tabelle nach entsprechenden Eintrag suchen *
READ TABLE I_SUMME_ORT
WITH KEY ORT = I_ZQMAB_ORT-ORT
BINARY SEARCH.
IF SY-SUBRC = 0.
" Durchschnittsgehalt errechnen "
CLEAR: H_GEHALT.
H_GEHALT = I_SUMME_ORT-GEHALT
/ I_SUMME_ORT-ANZAHL.
ULINE AT /1(C_MAB_ENDE).
* Summe ausgeben *
WRITE: AT /C_MAB_NR '|',
I_SUMME_ORT-ANZAHL UNDER 'NUMMER',
TEXT-031,
I_SUMME_ORT-ORT,
AT C_MAB_GEH '|',
I_SUMME_ORT-GEHALT
UNDER TEXT-016 COLOR COL_TOTAL,
AT C_MAB_ABT '|',
H_GEHALT UNDER TEXT-017,
TEXT-030,
AT C_MAB_ENDE '|'.
ULINE AT /1(C_MAB_ENDE).
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE_TABELLENKOPF *
*---------------------------------------------------------------------*
* Tabellenkopf ausgeben *
*---------------------------------------------------------------------*
FORM WRITE_TABELLENKOPF.
* Tabellenkopf mit Formatierung ausgeben *
* Ausgabe aufwärts ausgeben
ULINE AT (C_MAB_ENDE).
FORMAT COLOR COL_HEADING.
WRITE: AT /C_MAB_NR '|', TEXT-012.
IF G_ICON1 EQ C_SORT_UP.
WRITE: ICON_SORT_UP AS ICON HOTSPOT.
ELSE.
WRITE: ICON_SORT_DOWN AS ICON HOTSPOT.
ENDIF.
WRITE: AT C_MAB_NAM '|', TEXT-013.
IF G_ICON2 EQ C_SORT_UP.
WRITE: ICON_SORT_UP AS ICON HOTSPOT.
ELSE.
WRITE: ICON_SORT_DOWN AS ICON HOTSPOT.
ENDIF.
WRITE: AT C_MAB_BER '|', TEXT-014.
IF G_ICON3 EQ C_SORT_UP.
WRITE: ICON_SORT_UP AS ICON HOTSPOT.
ELSE.
WRITE: ICON_SORT_DOWN AS ICON HOTSPOT.
ENDIF.
WRITE: AT C_MAB_EIN '|', TEXT-015.
IF G_ICON4 EQ C_SORT_UP.
WRITE: ICON_SORT_UP AS ICON HOTSPOT.
ELSE.
WRITE: ICON_SORT_DOWN AS ICON HOTSPOT.
ENDIF.
WRITE: AT C_MAB_GEH '|', TEXT-016.
IF G_ICON5 EQ C_SORT_UP.
WRITE: ICON_SORT_UP AS ICON HOTSPOT.
ELSE.
WRITE: ICON_SORT_DOWN AS ICON HOTSPOT.
ENDIF.
WRITE: AT C_MAB_ABT '|', TEXT-017.
IF G_ICON6 EQ C_SORT_UP.
WRITE: ICON_SORT_UP AS ICON HOTSPOT.
ELSE.
WRITE: ICON_SORT_DOWN AS ICON HOTSPOT.
ENDIF.
WRITE: AT C_MAB_BEZ '|', TEXT-018.
IF G_ICON7 EQ C_SORT_UP.
WRITE: ICON_SORT_UP AS ICON HOTSPOT.
ELSE.
WRITE: ICON_SORT_DOWN AS ICON HOTSPOT.
ENDIF.
WRITE: AT C_MAB_PLZ '|', TEXT-019.
IF G_ICON8 EQ C_SORT_UP.
WRITE: ICON_SORT_UP AS ICON HOTSPOT.
ELSE.
WRITE: ICON_SORT_DOWN AS ICON HOTSPOT.
ENDIF.
WRITE: AT C_MAB_ORT '|', TEXT-020.
IF G_ICON9 EQ C_SORT_UP.
WRITE: ICON_SORT_UP AS ICON HOTSPOT.
ELSE.
WRITE: ICON_SORT_DOWN AS ICON HOTSPOT.
ENDIF.
WRITE: AT C_MAB_ENDE '|'.
FORMAT COLOR OFF.
ULINE AT (C_MAB_ENDE).
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE_SEITENKOPF *
*---------------------------------------------------------------------*
* Seitenkopf ausgeben *
*---------------------------------------------------------------------*
FORM WRITE_SEITENKOPF.
WRITE: / TEXT-021,
135 TEXT-022, SY-PAGNO LEFT-JUSTIFIED,
/ TEXT-023,
135 TEXT-024, SY-DATUM,
/ TEXT-025,
135 TEXT-026, SY-UNAME,
/ TEXT-027,
135 TEXT-028, SY-REPID.
ULINE AT (C_MAB_ENDE).
SKIP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM WRITE_SORT_LIST *
*---------------------------------------------------------------------*
* Tabelle neu sortieren *
*---------------------------------------------------------------------*
FORM WRITE_SORT_LIST.
DATA: F(10), VAL(40).
* Wert von der Cursor-Position auslesen *
GET CURSOR FIELD F VALUE VAL.
* Sortierkriterium festlegen und danach ausgeben *
* Wenn aufwärts
IF VAL EQ '3F'.
G_DIR = C_SORT_UP.
CASE SY-CUCOL.
WHEN C_POS_ICON_NR.
G_ICON1 = C_SORT_UP.
G_SORT = 'NUMMER'.
WHEN C_POS_ICON_NAM.
G_ICON2 = C_SORT_UP.
G_SORT = 'NAME'.
WHEN C_POS_ICON_BER.
G_ICON3 = C_SORT_UP.
G_SORT = 'BERUF'.
WHEN C_POS_ICON_EIN.
G_ICON4 = C_SORT_UP.
G_SORT = 'EINDATUM'.
WHEN C_POS_ICON_GEH.
G_ICON5 = C_SORT_UP.
G_SORT = 'GEHALT'.
WHEN C_POS_ICON_ABT.
G_ICON6 = C_SORT_UP.
G_SORT = 'ABTEILUNG'.
WHEN C_POS_ICON_BEZ.
G_ICON7 = C_SORT_UP.
G_SORT = 'BEZEICHN'.
WHEN C_POS_ICON_PLZ.
G_ICON8 = C_SORT_UP.
G_SORT = 'POSTZAHL'.
WHEN C_POS_ICON_ORT.
G_ICON9 = C_SORT_UP.
G_SORT = 'ORT'.
ENDCASE.
PERFORM SORT_ITAB.
CLEAR SY-LSIND.
PERFORM WRITE_DATA.
* Wenn abwärts
ELSEIF VAL EQ '3E'.
CASE SY-CUCOL.
G_DIR = C_SORT_DOWN.
WHEN C_POS_ICON_NR.
G_ICON1 = C_SORT_DOWN.
G_SORT = 'NUMMER'.
WHEN C_POS_ICON_NAM.
G_ICON2 = C_SORT_DOWN.
G_SORT = 'NAME'.
WHEN C_POS_ICON_BER.
G_ICON3 = C_SORT_DOWN.
G_SORT = 'BERUF'.
WHEN C_POS_ICON_EIN.
G_ICON4 = C_SORT_DOWN.
G_SORT = 'EINDATUM'.
WHEN C_POS_ICON_GEH.
G_ICON5 = C_SORT_DOWN.
G_SORT = 'GEHALT'.
WHEN C_POS_ICON_ABT.
G_ICON6 = C_SORT_DOWN.
G_SORT = 'ABTEILUNG'.
WHEN C_POS_ICON_BEZ.
G_ICON7 = C_SORT_DOWN.
G_SORT = 'BEZEICHN'.
WHEN C_POS_ICON_PLZ.
G_ICON8 = C_SORT_DOWN.
G_SORT = 'POSTZAHL'.
WHEN C_POS_ICON_ORT.
G_ICON9 = C_SORT_DOWN.
G_SORT = 'ORT'.
ENDCASE.
PERFORM SORT_ITAB.
CLEAR SY-LSIND.
PERFORM WRITE_DATA.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM EXPORT_EXCEL *
*---------------------------------------------------------------------*
* Exportieren als Excel Sheet *
*---------------------------------------------------------------------*
FORM EXPORT_EXCEL.
CLEAR I_EXCELHEADER.
* Kopfzeile des ExcelSheets festlegen
I_EXCELHEADER-TITLE = C_EXCELHEADER_MANDAT.
APPEND I_EXCELHEADER.
I_EXCELHEADER-TITLE = C_EXCELHEADER_NUMMER.
APPEND I_EXCELHEADER.
I_EXCELHEADER-TITLE = C_EXCELHEADER_NAME.
APPEND I_EXCELHEADER.
I_EXCELHEADER-TITLE = C_EXCELHEADER_BERUF.
APPEND I_EXCELHEADER.
I_EXCELHEADER-TITLE = C_EXCELHEADER_EINTRITT.
APPEND I_EXCELHEADER.
I_EXCELHEADER-TITLE = C_EXCELHEADER_GEHALT.
APPEND I_EXCELHEADER.
I_EXCELHEADER-TITLE = C_EXCELHEADER_ABTEILUNG.
APPEND I_EXCELHEADER.
I_EXCELHEADER-TITLE = C_EXCELHEADER_BEZEICHNUNG.
APPEND I_EXCELHEADER.
I_EXCELHEADER-TITLE = C_EXCELHEADER_PLZ.
APPEND I_EXCELHEADER.
I_EXCELHEADER-TITLE = C_EXCELHEADER_ORT.
APPEND I_EXCELHEADER.
* Abspeichern der Daten in der EXCELBODY Tabelle
IF P_SU_ABT = C_TRUE.
LOOP AT I_ZQMAB_ABT.
MOVE-CORRESPONDING I_ZQMAB_ABT TO I_EXCELBODY.
APPEND I_EXCELBODY.
ENDLOOP.
ELSE.
LOOP AT I_ZQMAB_ORT.
MOVE-CORRESPONDING I_ZQMAB_ORT TO I_EXCELBODY.
APPEND I_EXCELBODY.
ENDLOOP.
ENDIF.
* Funktionsbaustein aufrufen
CALL FUNCTION 'DOWNLOAD'
EXPORTING
FILENAME = 'C:\TEMP\Mitarbeiterinfo.xls'
FILETYPE = 'DAT'
TABLES
DATA_TAB = I_EXCELBODY
FIELDNAMES = I_EXCELHEADER
EXCEPTIONS
INVALID_FILESIZE = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
OTHERS = 6.
IF SY-SUBRC NE 0.
MESSAGE I064.
LEAVE TO LIST-PROCESSING.
endif.
ENDFORM.
wie das mit Field-Symbols in 4.6C oder 4.7 oder 620 geht kann man hier in verschiedenen Beiträgen lesen.spaceman21th hat geschrieben:so auf deinem Vorgeschlagenen Weg klappt das ja. Nur meine Betreuerin würde gerne das mit Field Symbols lösen.
Nur ich blick das net ganz durch auf interne Tabellen.
Hilfe
als "alter" Java-ler sollte doch Abap-OO für Dich das geignete Mittel der Wahl sein.spaceman21th hat geschrieben:...
Es sieht halt alles doppel gemoppelt aus und ist total statisch...was ich nicht leiden kann als ehemaligen Java Programmier.
Ich wollte halt die Methoden ins eins Vereinen, um auch wiederverwendete Methoden daraus zu machen.
Einfach direkt Fragen wenn was net klar ist
Hier der komplette Code:
Code: Alles auswählen.
...