Monday, June 11, 2018

class

REPORT ZQC_OO_VBRK_VBRP.

INCLUDE ZQC_OO_VBRK_VBRP_TOP.
INCLUDE ZQC_OO_VBRK_VBRP_SCR.
INCLUDE ZQC_OO_VBRK_VBRP_CLS.
INCLUDE ZQC_OO_VBRK_VBRP_DSP.

START-OF-SELECTION.

DATA: lo_report TYPE REF TO lcl_ship_rpt.

CREATE OBJECT lo_report.
lo_report->m_extract_vbrk(
                          IMPORTING
                            lt_vbrk = gt_vbrk
                          ).

lo_report->m_extract_vbrp(
                          EXPORTING
                            lt_vbrk = gt_vbrk
                          IMPORTING
                            lt_vbrp = gt_vbrp
                          ).
lo_report->m_populate_output(
                              EXPORTING
                                lt_vbrk = gt_vbrk
                                lt_vbrp = gt_vbrp
                              IMPORTING
                                lt_output = gt_output
                            ).

lo_report->m_display_alv(
                          CHANGING
                            lt_output = gt_output

                          ).
-------------------------
top
DATA: gv_vkorg  TYPE vkorg,
      gv_vtweg  TYPE vtweg,
      gv_spart  TYPE spart,
      gv_FKDAT  TYPE FKDAT.

TYPES: BEGIN OF ty_vbrk,
        vbeln TYPE vbeln_vf,
        fkart TYPE fkart,
        vkorg TYPE vkorg,
        vtweg TYPE vtweg,
      END OF    ty_vbrk,
      tt_vbrk TYPE STANDARD TABLE OF ty_vbrk,

      BEGIN OF ty_vbrp,
        vbeln TYPE vbeln_vf,
        posnr TYPE posnr_vf,
        matnr TYPE matnr,
      END OF ty_vbrp,
      tt_vbrp TYPE STANDARD TABLE OF ty_vbrp,

      BEGIN OF ty_output,
        vbeln TYPE vbeln_vf,
        posnr TYPE posnr_vf,
        vkorg TYPE vkorg,
        vtweg TYPE vtweg,
        fkart TYPE fkart,
        matnr TYPE matnr,
      END OF   ty_output,
      tt_output TYPE STANDARD TABLE OF ty_output.

DATA: gt_vbrk TYPE STANDARD TABLE OF ty_vbrk,
      gt_vbrp TYPE STANDARD TABLE OF ty_vbrp,
      gt_output TYPE STANDARD TABLE OF ty_output.
-----------------------------
SCR

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
 SELECT-OPTIONS:  s_vkorg FOR gv_vkorg,
                  s_vtweg FOR gv_vtweg,
                  s_spart FOR gv_spart,
                  s_FKDAT for gv_FKDAT.
SELECTION-SCREEN: END OF BLOCK b1.
-----------------------------
CLS

CLASS lcl_ship_rpt DEFINITION.
  PUBLIC SECTION.

    METHODS : m_extract_vbrk
                EXPORTING
                  lt_vbrk TYPE tt_vbrk.

    METHODS : m_extract_vbrp
                IMPORTING
                  lt_vbrk TYPE tt_vbrk
                EXPORTING
                  lt_vbrp TYPE tt_vbrp.

    METHODS : m_populate_output
                IMPORTING
                  lt_vbrk TYPE tt_vbrk
                  lt_vbrp TYPE tt_vbrp
                EXPORTING
                  lt_output TYPE tt_output.

    METHODS : m_display_alv
                CHANGING
                  lt_output TYPE tt_output.


ENDCLASS.

CLASS lcl_ship_rpt IMPLEMENTATION.

  METHOD m_extract_vbrk.

    SELECT  vbeln
            fkart
            vkorg
            vtweg
      FROM vbrk
      INTO TABLE lt_vbrk
      WHERE vkorg in  s_vkorg
        and vtweg in  s_vtweg
        and spart in  s_spart
        and FKDAT in  s_FKDAT.


  ENDMETHOD.

  METHOD m_extract_vbrp.
    DATA: lt_vbrk_tmp TYPE STANDARD TABLE OF ty_vbrk.
    lt_vbrk_tmp[] = lt_vbrk[].

    IF lt_vbrk_tmp[] IS NOT INITIAL.
      SORT lt_vbrk_tmp by vbeln.
      DELETE ADJACENT DUPLICATES FROM lt_vbrk_tmp COMPARING vbeln.

      SELECT  vbeln
              posnr
              matnr
        FROM vbrp
        INTO TABLE lt_vbrp
        FOR ALL ENTRIES IN lt_vbrk_tmp
        WHERE vbeln = lt_vbrk_tmp-vbeln.

    ENDIF.

  ENDMETHOD.

  METHOD m_populate_output.
    DATA: lwa_output TYPE ty_output.
    FIELD-SYMBOLS: <lfs_vbrk> TYPE ty_vbrk,
                   <lfs_vbrp> TYPE ty_vbrp.

    LOOP AT lt_vbrk ASSIGNING <lfs_vbrk>. " Header table
      READ TABLE lt_vbrp ASSIGNING <lfs_vbrp>
                         WITH KEY vbeln = <lfs_vbrk>-vbeln
                         BINARY SEARCH.
    IF sy-subrc IS INITIAL.
      LOOP AT lt_vbrp ASSIGNING <lfs_vbrp>
                      FROM sy-tabix.
        IF <lfs_vbrk>-vbeln ne <lfs_vbrp>-vbeln.
          exit.
        else.
          lwa_output-vbeln = <lfs_vbrp>-vbeln.
          lwa_output-posnr = <lfs_vbrp>-posnr.
          lwa_output-vkorg = <lfs_vbrk>-vkorg.
          lwa_output-vtweg = <lfs_vbrk>-vtweg.
          lwa_output-fkart = <lfs_vbrk>-fkart.
          lwa_output-matnr = <lfs_vbrp>-matnr.
          APPEND lwa_output TO lt_output.
          CLEAR lwa_output.

        ENDIF.
      ENDLOOP.

    ENDIF.
    ENDLOOP.

  ENDMETHOD.

  METHOD m_display_alv.
    DATA: lo_alv TYPE REF TO cl_salv_table.


    CALL METHOD cl_salv_table=>factory

      IMPORTING
        r_salv_table   = lo_alv
      CHANGING
        t_table        = lt_output
      .
    lo_alv->display( ).

  ENDMETHOD.

ENDCLASS.

No comments:

Post a Comment