Thursday, 8 November 2012

JOINING VBAP AND VBAK USING CONTROL-BREAK STATEMENT


*&---------------------------------------------------------------------*
*& Report  ZSS_TEST_008
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zss_test_008.
TABLES:vbak.
TYPES: BEGIN OF ty_vbak,
         vbeln TYPE vbeln_va, "Sales Document
         erdat TYPE erdat,    "Date on Which Record Was Created
         erzet TYPE erzet,    "Entry time
        END OF ty_vbak,
        BEGIN OF ty_vbap,
         vbeln TYPE vbeln_va, "Sales Document
         posnr TYPE posnr_va,   "Sales Document Item
         matnr TYPE matnr,          "Material Number
        END OF ty_vbap,
        BEGIN OF ty_final,
         erdat TYPE erdat,    "Date on Which Record Was Created
         erzet TYPE erzet,    "Entry time
         vbeln TYPE vbeln_va, "Sales Document
         posnr TYPE posnr_va,     "Sales Document Item
         matnr TYPE matnr,    "Material Number
        END OF ty_final.

DATA:it_vbak TYPE STANDARD TABLE OF ty_vbak INITIAL SIZE 0,
     wa_vbak TYPE ty_vbak,
     it_vbap TYPE STANDARD TABLE OF ty_vbap INITIAL SIZE 0,
     wa_vbap TYPE ty_vbap,
     it_final TYPE STANDARD TABLE OF ty_final INITIAL SIZE 0,
     wa_final TYPE ty_final,
     lv_vbeln TYPE vbak-vbeln,
     lv_index TYPE sytabix.

SELECT-OPTIONS:s_vbeln FOR vbak-vbeln. " NO-EXTENSION NO INTERVALS.

*PARAMETERS: s_vbeln TYPE vbak-vbeln.

INITIALIZATION.

  CLEAR:wa_vbak,
        wa_vbap,
        wa_final.

  REFRESH:it_vbak,
          it_vbap,
          it_final.

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'E'.


    ENDIF.
  ENDIF.

START-OF-SELECTION.
  SELECT vbeln
         erdat
         erzet

  FROM vbak
  INTO TABLE it_vbak
  WHERE vbeln IN s_vbeln.
  IF sy-subrc EQ 0.
    SORT it_vbak BY vbeln.
  ENDIF.
  IF it_vbak IS NOT INITIAL.
    SELECT vbeln
           posnr
           matnr
    FROM  vbap
    INTO TABLE it_vbap
    FOR ALL ENTRIES IN it_vbak
    WHERE vbeln = it_vbak-vbeln.
    IF sy-subrc EQ 0.
      SORT it_vbap BY vbeln.
    ENDIF.

    LOOP AT it_vbak INTO wa_vbak.
      CLEAR:wa_final.

      wa_final-vbeln = wa_vbak-vbeln.
      wa_final-erdat = wa_vbak-erdat.
      wa_final-erzet = wa_vbak-erzet.



      LOOP AT it_vbap INTO wa_vbap FROM lv_index.
        IF wa_vbap-vbeln NE wa_vbak-vbeln.
          lv_index = sy-tabix.
          EXIT.
        ELSE.
          wa_final-posnr = wa_vbap-posnr.
          wa_final-matnr = wa_vbap-matnr.

        ENDIF.
        APPEND wa_final TO it_final.
      ENDLOOP.


    ENDLOOP.

    SORT it_final BY vbeln.
  ENDIF.

END-OF-SELECTION.
  IF it_final IS NOT INITIAL.
    LOOP AT it_final INTO wa_final.
      AT NEW vbeln.
        WRITE: / .
        ULINE /1(22).
        WRITE: /1  sy-vline, wa_final-vbeln,
                22 sy-vline.

        ULINE /1(69).

      ENDAT.

      WRITE:/1 sy-vline,wa_final-erdat,
             23 sy-vline,wa_final-erzet,
             35 sy-vline,wa_final-posnr,
             45 sy-vline,wa_final-matnr,
             69 sy-vline.
      ULINE /1(69).
    ENDLOOP.
  ENDIF.

*TOP-OF-PAGE.
*  ULINE 1(80).
*  WRITE: / 'Sales Document report   pageno:', sy-pagno.
*  ULINE /1(80).
*  WRITE: /1 ' ' COLOR 5,
*             4 sy-vline, 'Sales Document' COLOR 5,
*            22 sy-vline, 'Date' COLOR 5,
*            34 sy-vline, 'time' COLOR 5,
*            46 sy-vline, 'Item' COLOR 5,
*            56 sy-vline, 'Material Number' COLOR 5,
*            80 sy-vline.
*  ULINE /1(80).

No comments: