*Markus: (ABAP) Wie einen INNER JOIN ausgeben lassen?

Beitrag lesen

Habe es jetzt mit Umwegen über eine Interne Tabelle geschafft.
*&---------------------------------------------------------------------*
*& Report  ZZ6QBINS07_05_UEBUNG_TEST1                                  *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ZZ6QBINS07_05_UEBUNG_TEST1 NO STANDARD PAGE HEADING.

TABLES: ZZ6QBINS_CD1, ZZ6QBINS_CDLAND.
*Für die JOIN-Ausgabe muss eine Tabellenschablone definiert werden?
TYPES: BEGIN OF ausgabetabelleSchablone,
          interpret TYPE ZZ6QBINS_CD1-CD_INTERPRET,
          land TYPE ZZ6QBINS_CDLAND-CDL_HERKUNFT,
       END OF ausgabetabelleSchablone.

DATA: cursorfeld(30) TYPE C,
      antwort(20) TYPE C,
      interneTab TYPE STANDARD TABLE OF ausgabetabelleSchablone,
      itab LIKE LINE OF interneTab.

*************STARTBILDSCHIRM********************
SELECTION-SCREEN BEGIN OF BLOCK eins WITH FRAME TITLE text-ue1.
* Die Select-Options festlegen, dh diese Variablen mit den Werten der
* Ausgabe "befüllen".
SELECT-OPTIONS: so_cdnr FOR ZZ6QBINS_CD1-CD_NR.

SELECTION-SCREEN END OF BLOCK eins.
*************STARTBILDSCHIRM ENDE***************

**********Programmstart ab hier, Liste ausgeben***************
START-OF-SELECTION.

WRITE: / 'Klicke auf den Interpreten um sein Herkunftsland anzeigen'.
WRITE: 'zu lassen'.
ULINE.
SELECT * FROM ZZ6QBINS_CD1 WHERE CD_NR IN so_cdnr.
     WRITE: /(20) ZZ6QBINS_CD1-CD_NR,
             (30) ZZ6QBINS_CD1-CD_INTERPRET,
             (30) ZZ6QBINS_CD1-CD_TITEL.
* Auch CDL_Herkunft muss "reserviert" werden, damit es im 2. Schirm
* verwendet werden kann.
     HIDE: ZZ6QBINS_CD1-CD_NR.

ENDSELECT.
**********Liste ausgeben beendet******************************
AT LINE-SELECTION.
* IS INITIAL ist der Anfangswert, z.B. blank
* IS NOT INITIAL MUSS GESETZT SEIN, DAMIT MAN DIE WERTE ANKLICKEN KANN!
IF NOT ( ZZ6QBINS_CD1-CD_NR IS INITIAL ) .
*sy-lsind ist die REPORT-NR!
    IF sy-lsind = 1.
       GET CURSOR FIELD cursorfeld.
       IF cursorfeld EQ 'ZZ6QBINS_CD1-CD_INTERPRET'.
***************************POPUP*******************************
CALL FUNCTION 'POPUP_TO_CONFIRM'
  EXPORTING
*   TITLEBAR                    = ' '
*   DIAGNOSE_OBJECT             = ' '
    TEXT_QUESTION               = 'Soll der Inhalt angezeigt werden?'
    TEXT_BUTTON_1               = 'Ja'(001)
*   ICON_BUTTON_1               = ' '
    TEXT_BUTTON_2               = 'Nein'(002)
*   ICON_BUTTON_2               = ' '
*   DEFAULT_BUTTON              = '1'
*   DISPLAY_CANCEL_BUTTON       = 'X'
*   USERDEFINED_F1_HELP         = ' '
*   START_COLUMN                = 25
*   START_ROW                   = 6
*   POPUP_TYPE                  =
*   IV_QUICKINFO_BUTTON_1       = ' '
*   IV_QUICKINFO_BUTTON_2       = ' '
  IMPORTING
   ANSWER                      = antwort
* TABLES
*   PARAMETER                   =
* EXCEPTIONS
*   TEXT_NOT_FOUND              = 1
*   OTHERS                      = 2
          .
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************************POPUP ENDE**************************
*****FALLS Antwort JA war, wird folgender Teil ausgeführt
          IF antwort EQ 1.
*...Abfragen, ob die in so_cdnr hinterlegte CD_NR gleich der CD_NR der
* Tabelle CDLAND ist. Gleichzeitig die Select-Option "befüllen".
         WRITE: / 'Klicke auf das Land um alle Interpreten mit'.
         WRITE:   'ihren Ländern zu sehen'.
         SELECT * FROM ZZ6QBINS_CDLAND WHERE
                  CDL_CD_NR = ZZ6QBINS_CD1-CD_NR.
          WRITE:  /(20) ZZ6QBINS_CDLAND-CDL_CD_NR,
                   (30) ZZ6QBINS_CDLAND-CDL_HERKUNFT.

ENDSELECT.
* Das erste ist das ENDIF der ANTWORT des POPUPS.
         ENDIF.
       ENDIF.
    ENDIF.
* Das ist der 2. Anzeigeschirm "in der Tiefe".
    IF sy-lsind = 2.
       GET CURSOR FIELD cursorfeld.
       IF cursorfeld EQ 'ZZ6QBINS_CDLAND-CDL_HERKUNFT'.
* Interne Tabellen löschen, da alles sonst doppelt drin steht.
           CLEAR interneTab.
           REFRESH interneTab.
           WRITE: / 'Alle Interpreten mit ihren Ländern.'.
           SELECT A~CD_INTERPRET B~CDL_HERKUNFT
           FROM ZZ6QBINS_CD1 AS A INNER JOIN ZZ6QBINS_CDLAND AS B
           ON A~CD_NR = B~CDL_CD_NR
           INTO itab.
           APPEND itab TO interneTab.
           ENDSELECT.
* Ausgabe dieser Misttabelle.....
           LOOP AT interneTab INTO itab.
               WRITE: / itab-interpret,
                        itab-land.

ENDLOOP.
       ENDIF.
    ENDIF.
ENDIF.

Markus