Interne Tabelle als Field-Symbol verwenden Release 3.1i

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

Interne Tabelle als Field-Symbol verwenden Release 3.1i

Beitrag von spaceman21th (ForumUser / 10 / 0 / 0 ) »
Hi Leute.

Ich befinde mich zur Zeit in der Einarbeitungsphase in Abap.

Daten zum System:
SAP Gui: 640
ABap SAP-Systemdaten: 3.1i

Also ich finde ja ganz tolle Vorschläge in eurem Forum darüber. Nur leider werden diese Befehle teilweise in der Version nicht unterstützt.

Deswegen hoffe ich, dass es trotzdem für die Release 3.1i eine Lösung gibt.

Also mein Problem.

Ich habe zwei interne Tabellen für entsprechende zwei verschiedene Fälle.
Die Aufgabe besteht darin zwei Summierungsarten anzubieten. Zum einen soll die Tabelle über Abteilungen abgerechnet werden und zum anderen über den Ort der Abteilung.

Um nicht immer auf den manuellen Gruppen wechsel einsetzen zu müssen, entschied ich mich entsprechend zwei interne Tabellen aufzubauen mit den entsprechenden Feldern (halt Abteilung bei einen und bei der anderen Ort als erste Spalte).

Bis jetzt habe ich halt immer zwei Gleisig gearbeitet. Halt für jede interne Tabelle eigene Methoden. Außer bei der Summenausgabe werden die gleiche Schritte durchgeführt.
Deshalb wollte ich wissen, ob man über Field-Symbols oder was es sonst als Lösung gibt, halt die entsprechende interne Tabelle bearbeitet.


Zum Beispiel:

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.
Ich krieg es halt nicht gebacken.

Meine Überlegung wäre es irgendwie so zu lösen wollen:

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.
Was natürlich nicht so klappt.

sowohl (tab) oder (<tab>).

Es ist nur ein Ausschnitt des Codes.

Danke im Voraus an alle.

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


Beitrag von ewx (Top Expert / 4844 / 311 / 640 ) »
Hey Mr. Spaceman,

wie wäre es denn, wenn du eine interne Tabelle definerst:
MANDT
SORT
NUMMER
NAME
BERUF
etc.

Dann baust du die Tabelle auf für jeweils das, was gewünscht wird: Abteilung oder ORT:

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.
Dann kannst du deinen Gruppenwechsel auf das Feld SORT machen.
Gruß, Enno

Beitrag von spaceman21th (ForumUser / 10 / 0 / 0 ) »
Erst mal danke für ne schnelle Antwort.

Ich glaub ich zeig dir mal wieso ich diesen Gedanken hatte.

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.

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.

Beitrag von spaceman21th (ForumUser / 10 / 0 / 0 ) »
Man sieht richtig gut, dass ich alles meistens doppelt hinknalle, weil ich halt immer statisch die Tabelle angebe und nicht einfach die Tabelle dynamisch übergebe. :-) wollte ich nur hinzufügen

Beitrag von spaceman21th (ForumUser / 10 / 0 / 0 ) »
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 :-)

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,
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 :-)
wie das mit Field-Symbols in 4.6C oder 4.7 oder 620 geht kann man hier in verschiedenen Beiträgen lesen.

Probier's aus, vielleicht geht es ja.

Wenn nicht, kauf Deiner Betreuerin ein paar Blümchen und beichte ihr, daß 3.1i nicht mehr so ganz aktuell ist und sie möge doch einen Releasewechsel für Euer Systen durchführen lassen.
(Dabei kann man auch 'ne ganze Menge lernen.)

Mein letztes Subrelease zum Thema 3.1 war von h nach i und daß Ende der 90er Jahre des vergangenen Jahrhunderts.W ird 3.1i noch von SAP supportet???

Gruß
babap

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,
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:
als "alter" Java-ler sollte doch Abap-OO für Dich das geignete Mittel der Wahl sein.

Aber wahrscheinlich geht das in 3.1i nicht.
Noch ein Grund mehr, umzustellen!

Gruß
babap
P.S. Mache auch komplette Codeanalyse und Neuprogrammierung (Sprache egal), aber das kostet dann ... :?

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
da es in diesem Thread um recht fundamentale Aspekte geht, wie auch ein Wunsch zum Verschieben geäußert wurde, wurde der Thread verschoben
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Seite 1 von 1

Vergleichbare Themen

3
Antw.
1403
Views
interne Tabelle in Field-Symbol mit weniger spalten kopieren
von JanR » 02.10.2020 12:07 • Verfasst in ABAP® für Anfänger
9
Antw.
5605
Views
Inhalt einer internen Tabelle in ein Field Symbol übertragen
von Andrzej » 25.05.2017 21:16 • Verfasst in ABAP® für Anfänger
3
Antw.
3081
Views
Dump bei Field-symbol
von tho_died » 24.06.2008 14:43 • Verfasst in ABAP® für Anfänger
10
Antw.
3596
Views
Probleme mit Field Symbol
von Kenny » 03.04.2013 17:11 • Verfasst in ABAP® für Anfänger
3
Antw.
2889
Views
Interne Tabelle dynamisch im Select verwenden
von Dude » 14.11.2006 11:26 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Zeilenumbrüche ersetzen
vor 41 Minuten von ralf.wenzel 1 / 3
Dialog-Container mit Toolbar/Status
vor 18 Stunden von tar gelöst 19 / 2082
SAP Trial Version für SAP Fiori
vor 23 Stunden von tar 2 / 1443

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.

Aktuelle Forenbeiträge

Zeilenumbrüche ersetzen
vor 41 Minuten von ralf.wenzel 1 / 3
Dialog-Container mit Toolbar/Status
vor 18 Stunden von tar gelöst 19 / 2082
SAP Trial Version für SAP Fiori
vor 23 Stunden von tar 2 / 1443

Unbeantwortete Forenbeiträge

Zeilenumbrüche ersetzen
vor 41 Minuten von ralf.wenzel 1 / 3
Daten an Tabelle binden
Gestern von Bright4.5 1 / 501
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2141