Monday, October 20, 2014

Factory ALV sap abap

**&---------------------------------------------------------------------*
*& Report  YJ_FACTORY_ALV
*&
*&---------------------------------------------------------------------*
*&Author : Jatin Singhal
*&Date :  19/8/2014
*&---------------------------------------------------------------------*

REPORT yj_factory_alv.

TYPES BEGIN OF ty_equip,
          equnr TYPE equnr,
          eqart TYPE eqart,
          serge TYPE serge,
          objnr TYPE objnr,
          submt TYPE submt,
          ingrp TYPE ingrp,
          iloan TYPE iloan,
          advisor_action(4type c,
        END OF ty_equip.

DATA gt_equip TYPE TABLE OF ty_equip .

CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
    METHODSon_user_command FOR EVENT added_function OF cl_salv_events_table
      IMPORTING e_salv_function.
    METHODSon_double_click FOR EVENT double_click OF cl_salv_events_table
      IMPORTING row column.
    METHODSon_link_click FOR EVENT link_click OF cl_salv_events_table
      IMPORTING row column.
ENDCLASS.                    "lcl_handle_events DEFINITION
*&---------------------------------------------------------------------*
*&       Class (Implementation)  lcl_handle_events
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*

DATA gr_table   TYPE REF TO cl_salv_table,
       gr_columns TYPE REF TO cl_salv_columns_table,
       gr_column  TYPE REF TO cl_salv_column_table,
       gr_functions TYPE REF TO cl_salv_functions,
       gr_container_head TYPE REF TO cl_gui_custom_container,
       gr_handle_event TYPE REF TO lcl_handle_events,
       gr_event TYPE REF TO cl_salv_events_table.
CLASS lcl_handle_events IMPLEMENTATION.
  METHOD on_user_command.

    DATAlr_selections TYPE REF TO cl_salv_selections,
          li_rows TYPE salv_t_row,
          l_row TYPE i,
          l_output TYPE ty_equip,
          l_message TYPE string,
          l_refresh TYPE flag,
          l_ucomm TYPE syucomm.

    FIELD-SYMBOLS<output> TYPE ty_equip.

    CLEAR l_refresh.

    CASE e_salv_function.
      WHEN 'ADVHAN'.
        lr_selections gr_table->get_selections).
        li_rows lr_selections->get_selected_rows).

        LOOP AT li_rows INTO l_row.
          CLEAR l_output.
            READ TABLE gt_equip INDEX l_row into l_output.

          IF sy-subrc EQ 0.
            l_output-advisor_action 'TRUE'.

            MODIFY gt_equip FROM l_output INDEX l_row TRANSPORTING advisor_action.
*         CALL SCREEN 1000.

          ENDIF.
        ENDLOOP.

*        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*          EXPORTING
*            wait = abap_true.
  ENDCASE.
*    IF l_refresh EQ abap_true.
*      PERFORM refresh.
*    ENDIF.

  ENDMETHOD.                    "on_user_command

  METHOD on_double_click.

  ENDMETHOD.                    "on_double_click


  METHOD on_link_click.
    CASE column.
      WHEN 'EQUNR'.
        PERFORM call_va03 USING row.
      WHEN 'EQART'.
        PERFORM call_vl03n USING row.
    ENDCASE.


  ENDMETHOD.                    "on_link_click
ENDCLASS.                    "lcl_handle_events IMPLEMENTATION

START-OF-SELECTION.

  SELECT equi~equnr equi~eqart equi~serge equi~objnr
       equz~submt equz~ingrp
       iloa~iloan
      INTO TABLE gt_equip
      FROM equi
      INNER JOIN equz
      ON equi~equnr equz~equnr
      INNER JOIN iloa
      ON equz~iloan iloa~iloan.

  DELETE gt_equip WHERE serge space.

  SORT gt_equip BY equnr.

END-OF-SELECTION.

  CALL SCREEN 1000.

*CALL METHOD cl_salv_table=>factory
*  IMPORTING
*    r_salv_table = gr_table
*  CHANGING
*    t_table      = gt_equip.


*&---------------------------------------------------------------------*
*&      Module  STATUS_1000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_1000 OUTPUT.
  SET PF-STATUS 'STATUS'.
  SET TITLEBAR  'FACTORY_ALV_DEMO'.


ENDMODULE.                 " STATUS_1000  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  DISPLAY_ALV  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE display_alv OUTPUT.

  Perform show_alv.

ENDMODULE.                 " DISPLAY_ALV  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  EXIT_1000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit_1000 INPUT.

CASE SY-UCOMM.
  When 'EXIT'.
    LEAVE TO SCREEN 0.
Endcase.

ENDMODULE.                 " EXIT_1000  INPUT


FORM call_va03  USING    p_row.

  DATA l_output TYPE ty_equip.

  CHECK p_row IS NOT INITIAL.

  READ TABLE gt_equip INDEX p_row INTO l_output.

  SET PARAMETER ID 'AUN' FIELD l_output-equnr.

  CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

ENDFORM.                    " CALL_VA03
*&---------------------------------------------------------------------*
*&      Form  CALL_VL03N
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ROW  text
*----------------------------------------------------------------------*
FORM call_vl03n  USING    p_row.

  DATA l_output TYPE ty_equip.

  CHECK p_row IS NOT INITIAL.

  READ TABLE gt_equip INDEX p_row INTO l_output.

  SET PARAMETER ID 'VL' FIELD l_output-eqart.

  CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.

ENDFORM.                    " CALL_VL03N
*&---------------------------------------------------------------------*
*&      Form  SHOW_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_alv .
*IF gr_container_head IS INITIAL.
    CREATE OBJECT gr_container_head
      EXPORTING
        container_name              'C_CONT1'
      EXCEPTIONS
        cntl_error                  1
        cntl_system_error           2
        create_error                3
        lifetime_error              4
        lifetime_dynpro_dynpro_link 5
        OTHERS                      6.
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.


    TRY.
        cl_salv_table=>factory(
                     EXPORTING r_container    gr_container_head
                         container_name 'C_CONT1'
             IMPORTING r_salv_table gr_table
              CHANGING t_table gt_equip ).
      CATCH cx_salv_msg.
    ENDTRY.

*
    TRY.
*set functions
        gr_functions gr_table->get_functions).
        gr_functions->set_allabap_true ).

* add function
        gr_functions->add_function(
          name     'ADVHAN'
          icon     '@BB@'
          text     'Advisor'
          tooltip  'Handled by advisor'
          position if_salv_c_function_position=>right_of_salv_functions ).


*set column
        gr_columns gr_table->get_columns).
        gr_columns->set_optimizeabap_true ).

* set hotspot
        gr_column ?= gr_columns->get_column'EQUNR' ).
        gr_column->set_cell_typeif_salv_c_cell_type=>hotspot ).

        gr_column ?= gr_columns->get_column'EQART' ).
        gr_column->set_cell_typeif_salv_c_cell_type=>hotspot ).

  CATCH cx_salv_not_found.

      CATCH cx_salv_wrong_call.
      CATCH cx_salv_existing.
      CATCH cx_salv_data_error.
    ENDTRY.

* register events
  gr_event gr_table->get_event).
    CREATE OBJECT gr_handle_event.
    SET HANDLER gr_handle_event->on_user_command FOR gr_event.
    SET HANDLER gr_handle_event->on_double_click FOR gr_event.
    SET HANDLER gr_handle_event->on_link_click FOR gr_event.

*Display the ALV table.
gr_table->display).

*Endif.
ENDFORM.   " SHOW_ALV

Tuesday, October 14, 2014

BOM Hierarical Report sap abap

---------------------------------------------------------------------*
* Author : JATIN SINGHAL *
* Date : 17.06.2014 *

REPORT yj_bom_rep_alv_hier MESSAGE-ID ymsg.

*INCLUDE y_inc_bom_hier_alv.

TYPE-POOLS :slis.

TYPES: BEGIN OF ty_header,
matnr
TYPE matnr,
matkl
TYPE kunag,
werks
TYPE werks_d,
stlal
TYPE stalt,
stktx
TYPE stktx,
bmeng
TYPE basmn,
bmein
TYPE basme,
datuv
TYPE datuv,
andat
TYPE andat,
annam
TYPE annam,
aedat
TYPE aedat,
aenam
TYPE aenam,

END OF ty_header.

DATA: w_header TYPE ty_header,
t_header
TYPE STANDARD TABLE OF ty_header.

TYPES: BEGIN OF ty_item,
matnr
TYPE matnr,
posnr
TYPE sposn,
postp
TYPE postp,
idnrk
TYPE idnrk,
menge
TYPE kmpmg,
meins
TYPE kmpme,
potx1
TYPE potx1,
potx2
TYPE potx2,
sanin
TYPE sanin,
erskz
TYPE erskz,
* yystand_comp type mara-yystand_comp,
* YYPART_MATERIAL type mara-YYPART_MATERIAL,
* YYPART_COMMENT type mara-YYPART_COMMENT,
* normt TYPE mara-normt,
* mfrnr TYPE mara-mfrnr,
* mfrpn TYPE mara-mfrpn,

END OF ty_item.

DATA: w_item TYPE ty_item,
t_item
TYPE STANDARD TABLE OF ty_item.

TYPES : BEGIN OF ty_mast,
matnr
TYPE matnr,
werks
TYPE werks_d,
stlan
TYPE stlan,
stlal
TYPE stlal,
matkl
TYPE matkl,
END OF ty_mast.

DATA : it_mast TYPE TABLE OF ty_mast,
wa_mast
TYPE ty_mast.

DATA : gs_top TYPE cstmat,
gt_stb
TYPE TABLE OF stpox,
w_stb
LIKE LINE OF gt_stb,
w_keyinfo
TYPE slis_keyinfo_alv,
w_fcat
TYPE slis_fieldcat_alv,
t_fcat
TYPE slis_t_fieldcat_alv,
it_layout
TYPE slis_layout_alv.


CONSTANTS: c_header TYPE slis_tabname VALUE 'w_header',
c_item
TYPE slis_tabname VALUE 'w_item'.

DATA : gv_matnr TYPE matnr,
gv_werks
TYPE werks_d,
it_stpov
TYPE TABLE OF stpov.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS : s_matnr FOR gv_matnr,
s_werks
FOR gv_werks.

PARAMETERS : p_stlal TYPE stlal DEFAULT '1',
p_stlan
TYPE mast-stlan DEFAULT '4'.

SELECTION-SCREEN END OF BLOCK b1.


AT SELECTION-SCREEN ON s_matnr.
*Validate Material Range
PERFORM chk_material.

AT SELECTION-SCREEN ON s_werks.
*Validate Plant Range
PERFORM chk_werks.

AT SELECTION-SCREEN ON p_stlan.
*Validate Bom Usage
PERFORM chk_usage.



START
-OF-SELECTION.

*Determine Material Bom Link
PERFORM get_material_bom_link.

*Get data for each Material Plant
LOOP AT it_mast INTO wa_mast .
PERFORM get_data USING wa_mast-matnr wa_mast-werks wa_mast-stlal wa_mast-stlan.
ENDLOOP.

*Display O/P using ALV list
PERFORM display_alv.




FORM get_data USING matnr TYPE matnr werks type werks_d stlal TYPE stlal stlan TYPE stlan.

CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING

* aumng = 'X'
capid
= 'PP01'
cuobj
= 000000000000000
datuv
= sy-datum
* emeng = '2.000'

mbwls
= 'X'
mktls
= 'X'
mehrs
= 'X'
mmory
= '1'
mtnrv
= matnr
stlal
=
stlal
stlan
=
stlan
stpst
= '0'

svwvo
= 'X'
werks
= werks
vrsvo
= 'X'

IMPORTING
topmat
= gs_top
* DSTST =

TABLES
stb
= gt_stb
* MATCAT = gt_matca

EXCEPTIONS
alt_not_found
= 1
call_invalid
= 2
material_not_found
= 3
missing_authorization
= 4
no_bom_found
= 5
no_plant_data
= 6
no_suitable_bom_found
= 7
conversion_error
= 8
OTHERS = 9.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

MOVE-CORRESPONDING gs_top TO w_header.
APPEND w_header TO t_header.

LOOP AT gt_stb INTO w_stb.
MOVE-CORRESPONDING w_stb TO w_item.
APPEND w_item TO t_item.
ENDLOOP.
ENDFORM.


FORM build_fieldcat .

w_keyinfo
-header01 = 'MATNR'.
w_keyinfo
-item01 = 'MATNR'.

*&---------------------------------------------------------------------*
INCLUDE y_inc_build_fieldcat.


ENDFORM. " BUILD_FIELDCAT

*to expand the header table for item details
form build_layout .
it_layout
-expand_fieldname = 'EXPAND'.
it_layout
-window_titlebar = 'Hierarchical ALV list display'.
* it_layout-lights_tabname = 'IT_DD03L'.
it_layout
-colwidth_optimize = 'X'.

endform. " build_layout


FORM display_alv .

*SORT t_item BY matnr.
*SORT t_header BY matnr.

PERFORM build_fieldcat.

PERFORM build_layout.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING
it_fieldcat
= t_fcat
i_tabname_header
= 'W_HEADER'

i_tabname_item
= 'W_ITEM'
is_keyinfo
= w_keyinfo
TABLES

t_outtab_header
= t_header
t_outtab_item
= t_item.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHK_MATERIAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM chk_material .
IF s_matnr IS NOT INITIAL.
SELECT SINGLE matnr
FROM
mara
INTO
gv_matnr
WHERE matnr IN s_matnr.

IF sy-subrc <> 0.
MESSAGE e001.
ENDIF.
ENDIF.

ENDFORM. " CHK_MATERIAL
*&---------------------------------------------------------------------*
*& Form CHK_WERKS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM chk_werks .
IF s_werks IS NOT INITIAL.
SELECT SINGLE werks
FROM
t001w
INTO
gv_werks
WHERE werks IN s_werks.

IF sy-subrc <> 0.
MESSAGE e002.
ENDIF.
ENDIF.
ENDFORM. " CHK_WERKS
*&---------------------------------------------------------------------*
*& Form CHK_USAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM chk_usage .
IF p_stlan IS NOT INITIAL.
SELECT SINGLE stlan
FROM
t416
INTO
p_stlan
WHERE stlan = p_stlan.

IF sy-subrc <> 0.
MESSAGE e003.
ENDIF.
ENDIF.
ENDFORM. " CHK_USAGE
*&---------------------------------------------------------------------*
*& Form GET_MATERIAL_BOM_LINK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_material_bom_link .
SELECT mast~matnr mast~werks mast~stlan mast~stlal mara~matkl
INTO TABLE
it_mast
FROM mast AS
mast
JOIN mara AS
mara
ON mast~matnr = mara~
matnr
WHERE mast~matnr IN
s_matnr
AND mast~werks IN
s_werks
AND mast~stlan =
p_stlan
AND mast~stlal = p_stlal.


SORT it_mast BY matnr werks ."stlan stlal.

ENDFORM. " GET_MATERIAL_BOM_LINK
*&---------------------------------------------------------------------*
*& Form VALIDATIONS_ON_FIELDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Include Y_INC_BUILD_FIELDCAT
*&---------------------------------------------------------------------*

w_fcat
-col_pos = 1.
w_fcat
-fieldname = 'MATNR'.
w_fcat
-seltext_m = 'Material Number'.
w_fcat
-tabname = 'W_HEADER'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 2.
w_fcat
-fieldname = 'MATKL'.
w_fcat
-seltext_m = 'Material Group'.
w_fcat
-tabname = 'W_HEADER'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 3.
w_fcat
-fieldname = 'WERKS'.
w_fcat
-seltext_m = 'Plant'.
w_fcat
-tabname = 'W_HEADER'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 4.
w_fcat
-fieldname = 'STLAL'.
w_fcat
-seltext_m = 'Alternative BOM'.
w_fcat
-tabname = 'W_HEADER'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 5.
w_fcat
-fieldname = 'BMENG'.
w_fcat
-seltext_m = 'Base quantity'.
w_fcat
-tabname = 'W_HEADER'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.


w_fcat
-col_pos = 6.
w_fcat
-fieldname = 'DATUV'.
w_fcat
-seltext_m = 'Valid from date'.
w_fcat
-tabname = 'W_HEADER'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 7.
w_fcat
-fieldname = 'ANDAT'.
w_fcat
-seltext_m = 'Created on'.
w_fcat
-tabname = 'W_HEADER'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 8.
w_fcat
-fieldname = 'ANNAM'.
w_fcat
-seltext_m = 'Created by'.
w_fcat
-tabname = 'W_HEADER'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 9.
w_fcat
-fieldname = 'AEDAT'.
w_fcat
-seltext_m = 'Changed on'.
w_fcat
-tabname = 'W_HEADER'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 10.
w_fcat
-fieldname = 'AENAM'.
w_fcat
-seltext_m = 'Changed by'.
w_fcat
-tabname = 'W_HEADER'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 11.
w_fcat
-fieldname = 'POSTP'.
w_fcat
-seltext_m = 'Item Category (Bill of Material)'.
w_fcat
-tabname = 'W_ITEM'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 12.
w_fcat
-fieldname = 'IDNRK'.
w_fcat
-seltext_m = 'BOM component'.
w_fcat
-tabname = 'W_ITEM'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 13.
w_fcat
-fieldname = 'MENGE'.
w_fcat
-seltext_l = 'Component quantity'.
w_fcat
-tabname = 'W_ITEM'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 14.
w_fcat
-fieldname = 'MEINS'.
w_fcat
-seltext_m = 'Component unit of measure'.
w_fcat
-tabname = 'W_ITEM'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 15.
w_fcat
-fieldname = 'POTX1'.
w_fcat
-seltext_m = 'BOM Item Text (Line 1)'.
w_fcat
-tabname = 'W_ITEM'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 16.
w_fcat
-fieldname = 'POTX2'.
w_fcat
-seltext_m = 'BOM item text (line 2)'.
w_fcat
-tabname = 'W_ITEM'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.


w_fcat
-col_pos = 17.
w_fcat
-fieldname = 'SANIN'.
w_fcat
-seltext_m = 'Indicator: item relevant to plant maintenance'.
w_fcat
-tabname = 'W_ITEM'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.

w_fcat
-col_pos = 18.
w_fcat
-fieldname = 'ERSKZ'.
w_fcat
-seltext_m = 'Indicator: spare part'.
w_fcat
-tabname = 'W_ITEM'.
APPEND w_fcat TO t_fcat.
Clear w_fcat.