Thursday, 8 November 2012

JOINING VBAK AND VBAP


*&---------------------------------------------------------------------*
*& Report  ZSS_TEST_006
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zss_test_006.
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,
         vbeln TYPE vbeln_va, "Sales Document
         erdat TYPE erdat,    "Date on Which Record Was Created
         erzet TYPE erzet,    "Entry time
         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.

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.

      CLEAR:wa_vbap.

      READ TABLE it_vbap INTO wa_vbap WITH KEY vbeln = wa_vbak-vbeln BINARY SEARCH.

      IF sy-subrc EQ 0.
        wa_final-vbeln = wa_vbap-vbeln.
        wa_final-posnr = wa_vbap-posnr.
        wa_final-matnr = wa_vbap-matnr.

      ENDIF.

      APPEND wa_final TO it_final.

    ENDLOOP.

    SORT it_final BY vbeln.
  ENDIF.

END-OF-SELECTION.
  IF it_final IS NOT INITIAL.
    LOOP AT it_final INTO wa_final.

      WRITE: /1 '  ' COLOR 6,
              4  sy-vline, wa_final-vbeln,
              22 sy-vline,wa_final-erdat,
              34 sy-vline,wa_final-erzet,
              46 sy-vline,wa_final-posnr,
              56 sy-vline,wa_final-matnr,
              80 sy-vline.
      ULINE /1(80).
    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: