Friday, 9 November 2012

DUAL INTERACTIVE REPORT


*&---------------------------------------------------------------------*
*& Report  ZSS_TEST_009
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zss_test_009.
TABLES:vbak,kna1,lips.
TYPES:  BEGIN OF ty_vbak,
           vbeln TYPE vbeln_va,         "Sales document number
           erdat TYPE erdat,            "Creation date
           vgbel TYPE vgbel,            "Document number of the reference document
           kunnr TYPE kunag,            "Customer number1

        END OF ty_vbak,
        BEGIN OF ty_lips,
           vbeln TYPE vbeln,            "Delivery
           vgbel TYPE vgbel,            "Document number of the reference document
           erzet TYPE erzet,            "Name of the person who created the object
           erdat TYPE erdat,            "Entry time
        END OF ty_lips,
        BEGIN OF ty_kna1,
          kunnr TYPE kunnr,            "Customer Number
          land1 TYPE land1,            "Country key
          name1 TYPE name1,            "Name1
        END OF ty_kna1.
DATA: it_vbak TYPE STANDARD TABLE OF ty_vbak INITIAL SIZE 0,
      wa_vbak TYPE ty_vbak,
      it_lips TYPE STANDARD TABLE OF ty_lips INITIAL SIZE 0,
      wa_lips TYPE ty_lips,
      it_kna1 TYPE STANDARD TABLE OF ty_kna1 INITIAL SIZE 0,
      wa_kna1 TYPE ty_kna1,
      lv_vbeln TYPE vbeln,
      lv_kunnr TYPE kunnr.

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln,
                s_kunnr FOR vbak-kunnr.
SELECTION-SCREEN:END OF BLOCK b1.

INITIALIZATION.
  CLEAR: wa_vbak,
         wa_lips,
         wa_kna1.
  REFRESH: it_vbak,
           it_lips,
           it_kna1.

AT SELECTION-SCREEN.
  IF s_vbeln IS NOT INITIAL.
    SELECT SINGLE vbeln
    FROM vbak
    INTO lv_vbeln
    WHERE vbeln IN s_vbeln.
    IF sy-subrc NE 0.
      MESSAGE:'Sales document number does not exist' TYPE'I'.
    ENDIF.
  ENDIF.
  IF s_kunnr IS NOT INITIAL.
    SELECT SINGLE kunnr
    FROM vbak
    INTO lv_kunnr
    WHERE kunnr IN s_kunnr.
    IF sy-subrc NE 0.
      MESSAGE 'CUSTOMER NUMBER DOES NOT EXIST' TYPE 'I'.
    ENDIF.
  ENDIF.

START-OF-SELECTION.
  SELECT vbeln
         erdat
         vgbel
         kunnr
  FROM  vbak
  INTO TABLE it_vbak
  WHERE vbeln IN s_vbeln.
  IF sy-subrc EQ 0.
    SORT it_vbak BY vbeln.
  ENDIF.




END-OF-SELECTION.
  IF it_vbak IS NOT INITIAL.
    LOOP AT it_vbak INTO wa_vbak.
      WRITE: / wa_vbak-vbeln HOTSPOT ON,
               wa_vbak-erdat,
               wa_vbak-vgbel,
               wa_vbak-kunnr HOTSPOT ON.
      HIDE:wa_vbak-vbeln, wa_vbak-kunnr.
    ENDLOOP.
  ENDIF.


AT LINE-SELECTION.
  DATA: fld TYPE char15,
        val TYPE char15.
  GET CURSOR FIELD fld VALUE val.

  IF fld = 'WA_VBAK-VBELN'.
    SELECT vbeln
           vgbel
           erzet
           erdat
    FROM lips
    INTO TABLE it_lips
    WHERE vgbel = wa_vbak-vbeln.
    IF sy-subrc EQ 0.
      SORT it_vbak BY vbeln.
    ENDIF.
    IF it_lips IS NOT INITIAL.
      LOOP AT it_lips INTO wa_lips.
        WRITE: / wa_lips-vbeln,
                 wa_lips-vgbel,
                 wa_lips-erzet,
                 wa_lips-erdat.
      ENDLOOP.
    ENDIF.
  ELSEIF fld = 'WA_VBAK-KUNNR'.
    SELECT kunnr
           land1
           name1
    FROM kna1
    INTO TABLE it_kna1
    WHERE kunnr = wa_vbak-kunnr.
    IF sy-subrc EQ 0.
      SORT it_vbak BY kunnr.
    ENDIF.
    IF it_kna1 IS NOT INITIAL.
      LOOP AT it_kna1 INTO wa_kna1.
        WRITE: / wa_kna1-kunnr,
                 wa_kna1-land1,
                 wa_kna1-name1.
      ENDLOOP.
    ENDIF.
  ENDIF.

No comments: