You are on page 1of 13

*&---------------------------------------------------------------------

*
*& Report  ZTEST_14FEB
*&
*&---------------------------------------------------------------------
*
*&
*&
*&---------------------------------------------------------------------
*

REPORT  ZTEST_14FEB_17FEB.
TABLES: afko, aufm, aufk, makt, jest, stpo, stko .

TYPE-POOLS :slis.

*Data Declaration
*----------------

TYPES: BEGIN OF t_afko,

       aufnr TYPE afko-aufnr,  "Order no common in AUFK also
       stlnr TYPE afko-stlnr,   "Bill of material
       stlbez TYPE afko-stlbez,  "Header Materail for each order no
       gamng TYPE afko-gamng,   "Target Qty
       igmng TYPE afko-igmng,   "Confirm Qty
       gmein TYPE afko-gmein,   "Unit
     END OF t_afko.

TYPES: BEGIN OF t_makt,
        matnr TYPE makt-matnr,
        maktx TYPE makt-maktx,
     END OF t_makt.
     
TYPES: BEGIN OF t_stpo,
        stlnr TYPE stpo-stlnr,  "Bill of material
        menge TYPE stpo-menge,  "Component Qty
        idnrk TYPE stpo-idnrk,   "Child material
     END OF t_stpo.

 TYPES: BEGIN OF t_stko,
        stlnr TYPE stko-stlnr,  "bill of material
        bmeng TYPE stko-bmeng,  "base qty
       END OF t_stko.

TYPES: BEGIN OF t_aufm,

     aufnr TYPE aufm-aufnr,    "to make condition
     matnr TYPE aufm-matnr,     "used in child data
     meins TYPE aufm-meins,
     bwart TYPE aufm-bwart,     "used in condition to making sum
     menge TYPE aufm-menge,    "used in issue Qty
     budat TYPE aufm-budat,   "used to calculate date
     werks TYPE aufm-werks,   "used in plant
     consume(10) TYPE p DECIMALS 3,
     balance(10) TYPE p DECIMALS 3,
     dmbtr TYPE aufm-dmbtr,     "value column
     waers TYPE aufm-waers,
   END OF t_aufm.

TYPES: BEGIN OF t_final,
   aufnr TYPE afko-aufnr,
   stlbez TYPE afko-stlbez,
   gamng TYPE afko-gamng,
   igmng TYPE afko-igmng,
    gmein TYPE afko-gmein,
   matnr TYPE aufm-matnr,     "used in child data
   menge TYPE aufm-menge,    "used in issue Qty
   meins TYPE aufm-meins,
   budat TYPE aufm-budat,   "used to calculate date
   bwart TYPE aufm-bwart,     "used in condition to making sum
   werks TYPE aufm-werks,   "used in plant
   consume(10) TYPE   p DECIMALS 3,
   balance(10) TYPE  p DECIMALS 3,
  dmbtr TYPE aufm-dmbtr,     "value column
  waers TYPE aufm-waers,      "currency
   maktx TYPE makt-maktx,
   maktx1 TYPE makt-maktx,
  END OF t_final,

  BEGIN OF t_aufk,
  aufnr TYPE aufk-aufnr,
  objnr TYPE aufk-objnr,
  END OF t_aufk.

*  SELECT AUFNR MATNR MENGE BUDAT BWART DMTR from AUFM
* INTO CORRESPONDING FIELDS OF TABLE IT_FINAL where BWART between 261 
and 262 and AUFNR = IT_FINAL-AUFNR
*  " UP TO 10 ROWS
*    FROM MBEW
*    INTO CORRESPONDING FIELDS OF TABLE IT_MBEW WHERE MATNR = IT_AFKO
-MATNR.

DATA: it_afko TYPE STANDARD TABLE OF t_afko INITIAL SIZE 0,
      wa_afko TYPE t_afko.

DATA: it_makt TYPE STANDARD TABLE OF t_makt INITIAL SIZE 0,
      wa_makt TYPE t_makt.

DATA: it_aufm TYPE STANDARD TABLE OF t_aufm INITIAL SIZE 0,
      wa_aufm TYPE t_aufm.

DATA: it_final TYPE STANDARD TABLE OF t_final INITIAL SIZE 0,
      wa_final TYPE t_final,

      it_aufk TYPE STANDARD TABLE OF t_aufk,
      wa_aufk TYPE t_aufk,
      
       it_stpo TYPE STANDARD TABLE OF t_stpo,
      wa_stpo TYPE t_stpo,
      it_stko TYPE STANDARD TABLE OF t_stko,
      wa_stko TYPE t_stko.

* WA_AUFM-CONSUME = WA_AUFM-MENGE * WA_AFKO-IGMNG / WA_AFKO-GAMNG.

SELECT-OPTIONS: material FOR afko-stlbez,
                period  FOR aufm-budat,
                order FOR afko-aufnr,
                plant  FOR aufm-werks.

*ALV data declarations
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
      gd_tab_group TYPE slis_t_sp_group_alv,
      gd_layout    TYPE slis_layout_alv,
      gd_repid     LIKE sy-repid,
      gt_events     TYPE slis_t_event,
      gd_prntparams TYPE slis_print_alv.

DATA : it_jest TYPE STANDARD TABLE OF jest,
       wa_jest TYPE jest.

***********************************************************************
*
*Start-of-selection.

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.
    period-sign    = 'I'.
    period-option  = 'EQ'.
    period-high    = sy-datum.
    APPEND period.
  ENDLOOP.

START-OF-SELECTION.

  PERFORM data_retrieval.
  PERFORM build_fieldcatalog.
  PERFORM build_layout.
  PERFORM build_events.
  PERFORM build_print_params.
  PERFORM display_alv_report.

*&---------------------------------------------------------------------
*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------
*
*       Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------
*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------
*
FORM build_fieldcatalog .

* There are a number of ways to create a fieldcat.
* For the purpose of this example i will build the fieldcatalog manual
y
* by populating the internal table fields individually and then
* appending the rows. This method can be the most time consuming but 
can
* also allow you  more control of the final product.

* Beware though, you need to ensure that all fields required are
* populated. When using some of functionality available via ALV, such 
as
* total. You may need to provide more information than if you were
* simply displaying the result
*               I.e. Field type may be required in-order for
*                    the 'TOTAL' function to work.

  fieldcatalog-fieldname   = 'AUFNR'.
  fieldcatalog-seltext_m   = 'Order No.'.
  fieldcatalog-col_pos     = 0.
  fieldcatalog-outputlen   = 10.
  fieldcatalog-emphasize   = 'X'.
  fieldcatalog-key         = 'X'.
*  fieldcatalog-do_sum      = 'X'.
*  fieldcatalog-no_zero     = 'X'.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'STLBEZ'.
  fieldcatalog-seltext_m   = 'Header Material'.
  fieldcatalog-col_pos     = 1.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'MAKTX'.
  fieldcatalog-seltext_m   = 'Material Description'.
  fieldcatalog-col_pos     = 2.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'GAMNG'.
  fieldcatalog-seltext_m   = 'Target Qty'.
  fieldcatalog-col_pos     = 3.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'IGMNG'.
  fieldcatalog-seltext_m   = 'Confirm Qty'.
  fieldcatalog-col_pos     = 4.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'GMEIN'.
  fieldcatalog-seltext_m   = 'Unit'.
  fieldcatalog-col_pos     = 5.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'MATNR'.
  fieldcatalog-seltext_m   = 'Component'.
  fieldcatalog-col_pos     = 6.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'MAKTX1'.
  fieldcatalog-seltext_m   = 'Material Description'.
  fieldcatalog-col_pos     = 7.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'MENGE'.
  fieldcatalog-seltext_m   = 'Issue Qty'.
  fieldcatalog-col_pos     = 8.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'MEINS'.
  fieldcatalog-seltext_m   = 'Unit'.
  fieldcatalog-col_pos     = 9.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'CONSUME'.
  fieldcatalog-seltext_m   = 'Consume Qty'.
  fieldcatalog-col_pos     = 10.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'BALANCE'.
  fieldcatalog-seltext_m   = 'Balance Qty'.
  fieldcatalog-col_pos     = 11.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'DMBTR'.
  fieldcatalog-seltext_m   = 'Value'.
  fieldcatalog-col_pos     = 12.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

  fieldcatalog-fieldname   = 'WAERS'.
  fieldcatalog-seltext_m   = 'Currency'.
  fieldcatalog-col_pos     = 13.
  APPEND fieldcatalog TO fieldcatalog.
  CLEAR  fieldcatalog.

ENDFORM.                    " BUILD_FIELDCATALOG

*&---------------------------------------------------------------------
*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------
*
*      Build layout for ALV grid report
*----------------------------------------------------------------------
*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------
*
FORM build_layout .

  gd_layout-no_input          = 'X'.
  gd_layout-colwidth_optimize = 'X'.
  gd_layout-totals_text       = 'Totals'(201).
*  gd_layout-totals_only        = 'X'.
*  gd_layout-f2code            = 'DISP'.  "Sets fcode for when doubl
e
*                                         "click(press f2)
*  gd_layout-zebra             = 'X'.
*  gd_layout-group_change_edit = 'X'.
*  gd_layout-header_text       = 'helllllo'.

ENDFORM.                    " BUILD_LAYOUT

*&---------------------------------------------------------------------
*
*&      Form  DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------
*
*       text
*----------------------------------------------------------------------
*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------
*
FORM display_alv_report .

  gd_repid = sy-repid.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                = ' '
*     I_BUFFER_ACTIVE                   = ' '
     i_callback_program                 = gd_repid
*     I_CALLBACK_PF_STATUS_SET          = ' '
     i_callback_user_command            = 'USER_COMMAND'
     i_callback_top_of_page             = 'TOP-OF-PAGE'  "see FORM '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME                  =
*     I_BACKGROUND_ID                   = ' '
*     I_GRID_TITLE                      =
*     I_GRID_SETTINGS                   =
     is_layout                          = gd_layout
     it_fieldcat                        = fieldcatalog[]
*     IT_EXCLUDING                      =
*     IT_SPECIAL_GROUPS                 =
*     IT_SORT                           =
*     IT_FILTER                         =
*     IS_SEL_HIDE                       =
*     I_DEFAULT                         = 'X'
     i_save                             = 'X'
*     IS_VARIANT                        =
     it_events                          = gt_events
*     IT_EVENT_EXIT                     =
     is_print                           = gd_prntparams
*     IS_REPREP_ID                      =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     I_HTML_HEIGHT_TOP                 = 0
*     I_HTML_HEIGHT_END                 = 0
*     IT_ALV_GRAPHICS                   =
*     IT_HYPERLINK                      =
*     IT_ADD_FIELDCAT                   =
*     IT_EXCEPT_QINFO                   =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
    TABLES
      t_outtab                          = it_final
   EXCEPTIONS
     program_error                      = 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.

ENDFORM.                    " DISPLAY_ALV_REPORT

*&---------------------------------------------------------------------
*
*&      Form  DATA_RETRIEVAL
*&---------------------------------------------------------------------
*
*       Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------
*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------
*
FORM data_retrieval .
  DATA :cons_fact TYPE afko-gamng,
  val_fact TYPE aufm-menge,
  wa_aufm1 LIKE wa_aufm,
  v_last TYPE char1,
  it_aufm1 TYPE STANDARD TABLE OF t_aufm,
  it_makt1 TYPE STANDARD TABLE OF t_makt.

  SELECT  aufnr stlnr stlbez gamng igmng gmein
  " UP TO 10 ROWS
    FROM afko
    INTO CORRESPONDING FIELDS OF TABLE it_afko

     WHERE stlbez IN material.
  .

  DELETE it_afko  WHERE stlbez IS INITIAL.
  DELETE it_afko  WHERE aufnr IS INITIAL.
*  DELETE it_afko WHERE stlnr IS INITIAL.

select stlnr menge  FROM stpo
    INTO TABLE it_stpo
    FOR ALL ENTRIES IN it_afko
    where stlnr = it_afko-stlnr.

IF sy-subrc IS INITIAL.
    SELECT stlnr bmeng FROM stko INTO TABLE it_stko
  FOR ALL ENTRIES IN it_stpo
  WHERE stlnr = it_stpo-stlnr.
ENDIF.

  SELECT aufnr objnr FROM aufk
   INTO TABLE it_aufk
   FOR ALL ENTRIES IN it_afko
   WHERE aufnr = it_afko-aufnr.

  IF sy-subrc IS INITIAL.
    SELECT * FROM jest INTO TABLE it_jest
  FOR ALL ENTRIES IN it_aufk
  WHERE objnr = it_aufk-objnr.
* AND stat NOT IN ('10012', '10045').
*   AND stat NOT IN ('I0012', 'I0045').

*delete it_jest where stat = 'I0012'.

*delete it_jest where stat = 'I0045'.

  ENDIF.

  SELECT * FROM makt INTO CORRESPONDING FIELDS OF TABLE it_makt
      FOR ALL ENTRIES IN it_afko
       WHERE matnr = it_afko-stlbez
        AND spras = 'E'.

  SELECT   aufnr matnr menge meins  budat bwart dmbtr  werks waers
    FROM aufm
    INTO CORRESPONDING FIELDS OF TABLE it_aufm
     FOR ALL ENTRIES IN it_afko
               WHERE aufnr = it_afko-aufnr
      AND  budat IN period
      AND werks IN plant
      AND aufnr IN ORDER
      AND bwart IN  ('261', '262').

  SELECT * FROM makt INTO CORRESPONDING FIELDS OF TABLE it_makt1
       FOR ALL ENTRIES IN it_aufm
        WHERE matnr = it_aufm-matnr
         AND spras = 'E'.

  it_aufm1[] = it_aufm[].
  CLEAR: it_aufm[].
  SORT  it_aufm1  BY aufnr matnr bwart.

  LOOP AT it_aufm1 INTO wa_aufm.

    IF wa_aufm-bwart  =  '261'.
      wa_aufm1-menge = wa_aufm1-menge + wa_aufm-menge.
      wa_aufm1-dmbtr = wa_aufm1-dmbtr + wa_aufm-dmbtr.
    ELSEIF wa_aufm-bwart  =  '262'.
      wa_aufm1-menge = wa_aufm1-menge - wa_aufm-menge.
      wa_aufm1-dmbtr = wa_aufm1-dmbtr - wa_aufm-dmbtr.
    ENDIF.
    AT END OF matnr.
      v_last = 'X'.
    ENDAT.

    IF v_last IS NOT INITIAL.
      wa_aufm-menge = wa_aufm1-menge.
      wa_aufm-dmbtr = wa_aufm1-dmbtr.

      APPEND wa_aufm TO it_aufm.
      CLEAR : wa_aufm1, v_last.

    ENDIF.
  ENDLOOP.

  SORT it_afko BY aufnr.
  SORT it_aufm BY aufnr.

Loop at it_jest into wa_jest.
If wa_jest-stat = 'I0012' and wa_jest-inact = '' OR
   wa_jest-stat = 'I0045' and wa_jest-inact = '' .

Read table it_aufk into wa_aufk
  With key objnr = wa_jest-objnr.

If sy-subrc is initial.
 Delete it_aufm where aufnr = wa_aufk-aufnr.

Endif.

Endif.

Endloop.

  LOOP AT  it_aufm INTO  wa_aufm .

        READ TABLE it_afko INTO wa_afko
              WITH KEY aufnr = wa_aufm-aufnr.

        IF sy-subrc IS INITIAL.
          CLEAR : cons_fact, wa_final.

          wa_final-aufnr = wa_aufm-aufnr.
          wa_final-stlbez = wa_afko-stlbez.

          READ TABLE it_makt INTO wa_makt
              WITH KEY matnr = wa_afko-stlbez.
          IF sy-subrc IS INITIAL.
            wa_final-maktx = wa_makt-maktx.
            CLEAR : wa_makt.
          ENDIF.

          wa_final-igmng = wa_afko-igmng .
          wa_final-gamng = wa_afko-gamng.
          wa_final-gmein = wa_afko-gmein.

          IF NOT wa_afko-gamng IS INITIAL.
            cons_fact = wa_afko-igmng / wa_afko-gamng.
          ENDIF.
        ENDIF.

        wa_final-matnr = wa_aufm-matnr.

        READ TABLE it_makt1 INTO wa_makt
             WITH KEY matnr = wa_aufm-matnr.
        IF sy-subrc IS INITIAL.
          wa_final-maktx1 = wa_makt-maktx.
          CLEAR : wa_makt.
        ENDIF.

        wa_final-menge = wa_aufm-menge.
        wa_final-meins = wa_aufm-meins.
        wa_final-werks = wa_aufm-werks.
        wa_final-waers = wa_aufm-waers.

        wa_final-consume = wa_aufm-menge * cons_fact.

        wa_final-balance = wa_aufm-menge - wa_final-consume.

*        IF NOT wa_final-consume EQ 0.
*          val_fact = wa_final-balance / wa_final-consume.
*        ENDIF.
         IF NOT wa_final-menge EQ 0.
          val_fact = wa_final-balance / wa_final-menge.

        ENDIF.
        wa_final-dmbtr = wa_aufm-dmbtr * val_fact.

        APPEND wa_final TO  it_final.
        CLEAR : val_fact.

  ENDLOOP.

ENDFORM.                    " DATA_RETRIEVAL

*-------------------------------------------------------------------*
* Form  TOP-OF-PAGE                                              
   *
*-------------------------------------------------------------------*
* ALV Report Header                                              
   *
*-------------------------------------------------------------------*
FORM top-of-page.
*ALV Header declarations
  DATA: t_header TYPE slis_t_listheader,
        wa_header TYPE slis_listheader,
        t_line LIKE wa_header-info,
        ld_lines TYPE i,
        ld_linesc(10) TYPE c.

* Title
  wa_header-typ  = 'H'.

  wa_header-info = 'WIP Quantity & Value  Report'.
  APPEND wa_header TO t_header.
  CLEAR wa_header.

* Date
  wa_header-typ  = 'S'.
  wa_header-key = 'Date: '.
  CONCATENATE  sy-datum+6(2) '.'
               sy-datum+4(2) '.'
               sy-datum(4) INTO wa_header-info.   "todays date
  APPEND wa_header TO t_header.
  CLEAR: wa_header.
* Total No. of Records Selected
  DESCRIBE TABLE it_final LINES ld_lines.
  ld_linesc = ld_lines.
  CONCATENATE 'Total No. of Records Selected: ' ld_linesc
                    INTO t_line SEPARATED BY space.
  wa_header-typ  = 'A'.
  wa_header-info = t_line.
  APPEND wa_header TO t_header.
  CLEAR: wa_header, t_line.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = t_header.
*            i_logo             = 'Z_LOGO'.
ENDFORM.                    "TOP-OF-PAGE
*&---------------------------------------------------------------------
*
*&      Form  BUILD_EVENTS
*&---------------------------------------------------------------------
*
*       Build events table
*----------------------------------------------------------------------
*
FORM build_events.

  DATA: ls_event TYPE slis_alv_event.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = gt_events[].
  READ TABLE gt_events WITH KEY name =  slis_ev_end_of_page
                           INTO ls_event.
  IF sy-subrc = 0.
    MOVE 'END_OF_PAGE' TO ls_event-form.
    APPEND ls_event TO gt_events.
  ENDIF.

  READ TABLE gt_events WITH KEY name =  slis_ev_end_of_list
                         INTO ls_event.
  IF sy-subrc = 0.
    MOVE 'END_OF_LIST' TO ls_event-form.
    APPEND ls_event TO gt_events.
  ENDIF.

ENDFORM.                    " BUILD_EVENTS

*&---------------------------------------------------------------------
*
*&      Form  BUILD_PRINT_PARAMS
*&---------------------------------------------------------------------
*
*       Setup print parameters
*----------------------------------------------------------------------
*
FORM build_print_params.
  gd_prntparams-reserve_lines = '3'.   "Lines reserved for footer
  gd_prntparams-no_coverpage = 'X'.
ENDFORM.                    " BUILD_PRINT_PARAMS

*&---------------------------------------------------------------------
*
*&      Form  END_OF_PAGE
*&---------------------------------------------------------------------
*
FORM end_of_page.
  DATA: listwidth TYPE i,
        ld_pagepos(10) TYPE c,
        ld_page(10)    TYPE c.

  WRITE: sy-uline(50).
  SKIP.
  WRITE:/40 'Page:', sy-pagno .
ENDFORM.                    "END_OF_PAGE

*&---------------------------------------------------------------------
*
*&      Form  END_OF_LIST

You might also like