You are on page 1of 36

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

**& Report ZV2P_MATERIAL_DEACT_REPT


**&
**&---------------------------------------------------------------------*
**&---------------------------------------------------------------------*
*& Functional Spec : INC000002031616 - Material Deactivation Tool
*& Author
: KUMJX005> Jaspal Kumar
*&---------------------------------------------------------------------*
* RevTrac Number
| Transport Request Number
* 555012/10
M7K928489
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*
REPORT zv2p_material_deact_rept.
TYPE-POOLS sscr.
TABLES : mara, t001w, sscrfields.
CLASS lcl_event_handler DEFINITION DEFERRED.
INCLUDE : zv2p_data_declaration,
zv2p_selection_screen,
zv2p_event_class,
zv2p_fetch_data.
**======================================================================
*
INITIALIZATION
*
**======================================================================
INITIALIZATION.
valid_period-sign = 'I'.
valid_period-option = 'BT'.
valid_period-low = sy-datum.
valid_period-high = '99991231'.
APPEND valid_period.
functxt-icon_id = icon_display.
functxt-quickinfo = 'Pull Data from Stored List'(101).
functxt-icon_text = 'Stored List'(102).
sscrfields-functxt_01 = functxt.
gwa_optlist-name = 'OBJECTKEY1'.
gwa_optlist-options-eq = 'X'.
APPEND gwa_optlist TO gwa_restrict-opt_list_tab.
gwa_ass-kind = 'S'.
gwa_ass-name = 'SO_MATNR'.
gwa_ass-sg_main = 'I'.
gwa_ass-sg_addy = space.
gwa_ass-op_main = 'OBJECTKEY1'.
APPEND gwa_ass TO gwa_restrict-ass_tab.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date
= sy-datum
days
= '00'
months
= '00'
SIGNUM
= '-'
years
= '01'
IMPORTING

CALC_DATE

= s_budat-low.

S_BUDAT-LOW+4(2) = '01'.
S_BUDAT-LOW+6(2) = '01'.
s_budat-sign = 'I'.
s_budat-option = 'BT'.
s_budat-high = sy-datum.
APPEND s_budat.
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
restriction
= gwa_restrict
EXCEPTIONS
too_late
= 1
repeated
= 2
selopt_without_options = 3
selopt_without_signs = 4
invalid_sign
= 5
empty_option_list
= 6
invalid_kind
= 7
repeated_kind_a
= 8
OTHERS
= 9.
PERFORM init_variant.
************************************************************************
* AT SELECTION-SCREEN ON VALUE-REQUEST
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
PERFORM f4_for_variant.
*AT SELECTION-SCREEN ON so_matnr.
* PERFORM check_material_type.
***********************************************************************
*
AT-SELECTION SCREEN
*
***********************************************************************
AT SELECTION-SCREEN.
PERFORM set_ucomm CHANGING sscrfields-ucomm.
***======================================================================
**
START-OF-SELECTION
*
***======================================================================
START-OF-SELECTION.
IF so_matnr IS INITIAL OR so_werks IS INITIAL.
MESSAGE 'Please Enter both : Material and Plant' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ELSE.
IF gv_index IS INITIAL.
PERFORM get_data.
ELSE.
PERFORM get_data_from_cluster.
ENDIF.
ENDIF.
***======================================================================
**
END-OF-SELECTION
*
***======================================================================
END-OF-SELECTION.

IF NOT gt_final IS INITIAL.


CALL SCREEN 100.
ELSE.
MESSAGE 'No record found!' TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
*&---------------------------------------------------------------------*
*&
Form INIT_VARIANT
*&---------------------------------------------------------------------*
FORM init_variant .
gv_repid = sy-repid.
gv_save = 'A'.
CLEAR gs_variant.
gs_variant-report = gv_repid.
* gs_variant-username = sy-uname.
* Get default variant
gs_disvariant = gs_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save
= gv_save
CHANGING
cs_variant = gs_disvariant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_vari = gs_disvariant-variant.
ENDIF.
ENDFORM.
" INIT_VARIANT
*&---------------------------------------------------------------------*
*&
Form F4_FOR_VARIANT
*&---------------------------------------------------------------------*
FORM f4_for_variant .
gs_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant
= gs_variant
i_save
= gv_save
*
I_TABNAME_HEADER = G_TABNAME_HEADER
*
I_TABNAME_ITEM = G_TABNAME_ITEM
IMPORTING
e_exit
= gv_exit
es_variant
= gs_disvariant
EXCEPTIONS
not_found
= 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S'
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF gv_exit = space.
p_vari = gs_disvariant-variant.
ENDIF.
ENDIF.
ENDFORM.
" F4_FOR_VARIANT
*&---------------------------------------------------------------------*
*&
Form SET_UCOMM
*&---------------------------------------------------------------------*
FORM set_ucomm CHANGING gc_ucomm.

CLEAR gv_index.
CASE gc_ucomm.
WHEN 'FC01'.
gv_ucomm = gc_ucomm.
* Pop-up ALV for list selection - execute if file selected
CREATE OBJECT cluster.
TRY.
CALL METHOD cluster->get_file_list
EXPORTING
im_sort = sy-cprog
im_relid = 'PP'.
gv_index = cluster->v_sort.
ENDTRY.
IF gv_index IS NOT INITIAL.
CLEAR: p_utext.
gc_ucomm = 'ONLI'.
ENDIF.
WHEN 'ONLI'.
IF p_utext IS NOT INITIAL AND sy-batch IS INITIAL.
MESSAGE 'The saved list job will be submitted in background'(105) TYPE '
I'.
gc_ucomm = 'SJOB'.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDFORM.
" SET_UCOMM
*&---------------------------------------------------------------------*
*&
Form CHECK_MATERIAL_TYPE
*&---------------------------------------------------------------------*
*FORM check_material_type.
* IF NOT so_matnr IS INITIAL.
*
SELECT *
*
FROM mara
*
INTO CORRESPONDING FIELDS OF TABLE gt_mat_info
*
WHERE matnr IN so_matnr
*
AND mtart NOT IN ('ROH','VERP').
*
IF sy-subrc EQ 0.
*
MESSAGE 'Kindly check the selection criteria. Materials entered should be
of material type either VERP or ROH' TYPE 'I' DISPLAY LIKE 'E'.
*
LEAVE LIST-PROCESSING.
*
ENDIF.
* ENDIF.
*ENDFORM.
" CHECK_MATERIAL_TYPE
*&---------------------------------------------------------------------*
*&
Form RESTRICT_RANGES
*&---------------------------------------------------------------------*
FORM restrict_ranges .
** restricting the matnr selection to only EQ.
* gwa_optlist-name = 'OBJECTKEY1'.
* gwa_optlist-options-eq = 'X'.
* APPEND gwa_optlist TO gwa_restrict-opt_list_tab.
*
* gwa_ass-kind = 'S'.
* gwa_ass-name = 'S_MATNR'.
* gwa_ass-sg_main = 'I'.
* gwa_ass-sg_addy = space.
* gwa_ass-op_main = 'OBJECTKEY1'.
* APPEND gwa_ass TO gwa_restrict-ass_tab.
*
* CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'

*
EXPORTING
*
restriction
= gwa_restrict
*
EXCEPTIONS
*
too_late
= 1
*
repeated
= 2
*
selopt_without_options = 3
*
selopt_without_signs = 4
*
invalid_sign
= 5
*
empty_option_list
= 6
*
invalid_kind
= 7
*
repeated_kind_a
= 8
*
OTHERS
= 9.
ENDFORM.
" RESTRICT_RANGES
********************************************************************************
*************
*&---------------------------------------------------------------------*
*& Include
ZV2P_DATA_DECLARATION
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*
TYPE DECLARATION
*
*&---------------------------------------------------------------------*
TYPES : BEGIN OF ty_mara,
matnr TYPE matnr,
mtart TYPE mtart,
matkl TYPE matkl,
lvorm TYPE lvorm,
mstae TYPE mstae, "X-Plant Status
dismm TYPE dismm, "MRP Type
werks TYPE werks_d,
mmsta TYPE mmsta,
dispo TYPE dispo,
"MRP Controller
sobsl TYPE sobsl,
" Special procurement key
END OF ty_mara,
BEGIN OF ty_mard,
matnr TYPE matnr,
werks TYPE werks_d,
labst TYPE labst,
umlme TYPE umlmd,
insme TYPE insme,
einme TYPE einme,
speme TYPE speme,
retme TYPE retme,
END OF ty_mard,
BEGIN OF ty_eban,
banfn TYPE banfn,
bnfpo TYPE bnfpo,
ernam TYPE ernam,
statu TYPE banst,
estkz TYPE estkz,
loekz TYPE eloek,
bsart TYPE bbsrt,
knttp TYPE knttp,
lifnr TYPE wlief,
pstyp TYPE pstyp,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
matnr TYPE matnr,

txz01 TYPE txz01,


werks TYPE ewerk,
flief TYPE flief,
END OF ty_eban,
BEGIN OF ty_ekko_ekpo,
ebeln TYPE ebeln,
ebelp_i TYPE ebelp,
bukrs TYPE bukrs,
ekorg TYPE ekorg,
lifnr TYPE elifn,
bstyp TYPE bstyp,
kdatb TYPE kdatb,
kdate TYPE kdate,
autlf TYPE kmplf,
matnr_i TYPE matnr,
werks_i TYPE ewerk,
elikz_i TYPE elikz,
matkl_i TYPE matkl,
txz01_i TYPE txz01,
ernam TYPE ernam,
aedat TYPE aedat,
END OF ty_ekko_ekpo,
BEGIN OF ty_eord,
matnr TYPE matnr,
werks TYPE werks_d,
lifnr TYPE elifn,
flifn TYPE flifn,
vdatu TYPE ordab,
bdatu TYPE ordbi,
srm_contract_id
TYPE srm_contract_id,
srm_contract_itm TYPE srm_contract_item,
END OF ty_eord,
BEGIN OF ty_cost_info,
matnr TYPE matnr,
werks TYPE werks_d,
matnr_halb TYPE matnr,
matnr_fert TYPE matnr,
halb_stlst TYPE stlst,
fert_stlst TYPE stlst,
END OF ty_cost_info,
BEGIN OF ty_keko,
matnr TYPE keko-matnr,
werks TYPE keko-werks,
kadky TYPE keko-kadky,
kadat TYPE keko-kadat,
bidat TYPE keko-bidat,
END OF ty_keko,
BEGIN OF ty_open_pr_po,
bukrs TYPE bukrs,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
ekorg TYPE ekorg,
loekz TYPE loekz,
matnr TYPE matnr,
txz01 TYPE txz01,
werks TYPE werks,
lifnr TYPE lifnr,
name1 TYPE name1_gp,
autlf TYPE autlf,
ernam TYPE ernam,

aedat TYPE aedat,


banfn
bnfpo
bsart
knttp
pstyp
statu
flief

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

banfn,
bnfpo,
bsart,
knttp,
pstyp,
statu,
flief,

END OF ty_open_pr_po,
BEGIN OF ty_marc,
matnr TYPE matnr,
werks TYPE werks_d,
sobsl TYPE sobsl,
END OF ty_marc,
BEGIN OF ty_lfa1,
lifnr TYPE lfa1-lifnr,
name1 TYPE lfa1-name1,
END OF ty_lfa1,
BEGIN OF ty_mseg,
matnr TYPE matnr,
budat_mkpf TYPE budat,
werks TYPE werks_d,
bwart TYPE bwart,
END OF ty_mseg,
BEGIN OF ty_final,
***
Component Material
matnr TYPE matnr,
werks TYPE werks_d, " Plant
mmsta TYPE mmsta, " Plant specific Material Status
lvorm TYPE lvorm, " DF Client Level
dismm TYPE dismm, " MRP Type
mstae TYPE mstae, " X-Plant Status
dispo TYPE dispo, " MRP Controller
sobsl TYPE sobsl, " Special procurement key
ltext_matnr TYPE ltext, " Special procurement key Desc
available_stock TYPE p DECIMALS 3, " Available Stock
count_po TYPE i,
" Open PO
count_pr TYPE i,
" Open Pr
last_movt_date TYPE sy-datum,
" Last Movement Date
***
HALB Material
matnr_halb TYPE matnr,
werks_halb TYPE werks_d, " Plant
mmsta_halb TYPE mmsta,
" Plant specific Material Status
lvorm_halb TYPE lvorm,
" DF Client Level
dismm_halb TYPE dismm,
" MRP Type
mstae_halb TYPE mstae,
" X-Plant Status
dispo_halb TYPE dispo,
" MRP Controller
sobsl_halb TYPE sobsl,
" Special procurement key
ltext_halb TYPE ltext,
" Special procurement key Desc
stlst_halb TYPE sttxt,
" Syrup BOM Status
available_stock_halb TYPE p DECIMALS 3, " Available Stock
bom_cost_date_halb TYPE c,
" Syrup BOM Costed (Y/N)
bom_cost_valid_from_halb TYPE sy-datum, " Syrup Costing Valid from
bom_cost_valid_to_halb TYPE sy-datum,
" Syrup Costing Valid from
last_movt_date_halb TYPE sy-datum ,
" Last Movement Date
***
FERT Material
matnr_fert TYPE matnr, " FG Material
werks_fert TYPE werks_d, " Plant

mmsta_fert TYPE mmsta, " Plant specific Material Status


lvorm_fert TYPE lvorm, " DF Client Level
dismm_fert TYPE dismm, " MRP Type
mstae_fert TYPE mstae, " X-Plant Status
dispo_fert TYPE dispo, " MRP Controller
sobsl_fert TYPE sobsl, " Special procurement key
ltext_fert TYPE ltext,
" Special procurement key Desc
stlst_fert TYPE sttxt, " BOM Status
available_stock_fert TYPE p DECIMALS 3, " Available Stock
bom_cost_date_fert TYPE c,
" Syrup BOM Costed (Y/N)
bom_cost_valid_from_fert TYPE sy-datum, " Syrup Costing Valid from
bom_cost_valid_to_fert TYPE sy-datum,
" Syrup Costing Valid from
last_movt_date_fert TYPE sy-datum,
" Last Movement Date
deactivation_flag TYPE c,
" Can be Deactivated (Y/N)
valid_contract TYPE c,
valid_list TYPE c,
END OF ty_final.
TYPES : BEGIN OF ty_460t.
INCLUDE TYPE t460t.
TYPES : END OF ty_460t.
*&---------------------------------------------------------------------*
*
Table Types
*
*&---------------------------------------------------------------------*
TYPES : t_mara TYPE STANDARD TABLE OF ty_mara,
t_eban TYPE STANDARD TABLE OF ty_eban,
t_ekko_ekpo TYPE STANDARD TABLE OF ty_ekko_ekpo,
t_eord TYPE STANDARD TABLE OF ty_eord,
t_cost_info TYPE STANDARD TABLE OF ty_cost_info,
t_mard TYPE STANDARD TABLE OF ty_mard,
t_keko TYPE STANDARD TABLE OF ty_keko,
t_open_pr_po TYPE STANDARD TABLE OF ty_open_pr_po,
t_marc TYPE STANDARD TABLE OF ty_marc,
t_lfa1 TYPE STANDARD TABLE OF ty_lfa1,
t_mseg TYPE STANDARD TABLE OF ty_mseg,
t_460t TYPE STANDARD TABLE OF ty_460t,
t_final TYPE STANDARD TABLE OF ty_final.
*&---------------------------------------------------------------------*
*
INTERNAL TABLE
*
*&---------------------------------------------------------------------*
DATA : gt_mat_info TYPE t_mara,
gt_mat_info_halb TYPE t_mara,
gt_mat_info_fert TYPE t_mara,
gt_eban TYPE t_eban,
*
temp_eban TYPE t_eban,
gt_ekko_ekpo TYPE t_ekko_ekpo,
gt_ekko_ekpo_temp TYPE t_ekko_ekpo,
*
gt_ekko_ekpo_temp TYPE t_ekko_ekpo,
gt_eord TYPE t_eord,
gt_eord_temp TYPE t_eord,
gt_cost_info TYPE t_cost_info,
gt_cost_info_temp TYPE t_cost_info,
gt_wultb TYPE STANDARD TABLE OF stpov,
gt_wultb_temp TYPE STANDARD TABLE OF stpov,
gt_equicat
TYPE STANDARD TABLE OF cscequi,
gt_kndcat TYPE STANDARD TABLE OF cscknd,
gt_matcat TYPE STANDARD TABLE OF cscmat,
gt_stdcat TYPE STANDARD TABLE OF cscstd,
gt_tplcat TYPE STANDARD TABLE OF csctpl,

gt_mard_comp TYPE t_mard,


gt_mard_fert TYPE t_mard,
gt_mard_halb TYPE t_mard,
gt_mard_temp TYPE t_mard,
gt_keko_fert TYPE t_keko,
gt_keko_halb TYPE t_keko,
gt_open_pr_po TYPE t_open_pr_po,
gt_marc TYPE t_marc,
gt_marc_temp TYPE t_marc,
gt_460t TYPE t_460t,
gt_lfa1 TYPE t_lfa1,
gt_mseg_temp TYPE t_mseg,
gt_mseg TYPE t_mseg,
gt_final TYPE t_final.
DATA : gwa_restrict TYPE sscr_restrict,
gwa_optlist TYPE sscr_opt_list,
gwa_ass TYPE sscr_ass.
*&---------------------------------------------------------------------*
*
WORK AREA DECLARATIONS
*
*&---------------------------------------------------------------------*
DATA : gwa_mat_info LIKE LINE OF gt_mat_info,
gwa_mat_info_halb LIKE LINE OF gt_mat_info_halb,
gwa_mat_info_fert LIKE LINE OF gt_mat_info_fert,
gwa_eban LIKE LINE OF gt_eban,
gwa_eord LIKE LINE OF gt_eord,
gwa_eord_temp LIKE LINE OF gt_eord_temp,
gwa_ekko_ekpo LIKE LINE OF gt_ekko_ekpo,
gwa_ekko_ekpo_temp LIKE LINE OF gt_ekko_ekpo_temp,
*
gwa_ekko_ekpo_temp LIKE LINE OF gt_ekko_ekpo,
gwa_cost_info LIKE LINE OF gt_cost_info,
gwa_wultb LIKE LINE OF gt_wultb,
gwa_wultb_temp LIKE LINE OF gt_wultb_temp,
*
gwa_equicat LIKE LINE OF gt_equicat,
*
gwa_kndcat LIKE LINE OF gt_kndcat,
*
gwa_matcat LIKE LINE OF gt_matcat,
*
gwa_stdcat LIKE LINE OF gt_stdcat,
*
gwa_tplcat LIKE LINE OF gt_tplcat,
gwa_mard_comp LIKE LINE OF gt_mard_comp,
gwa_mard_fert LIKE LINE OF gt_mard_fert,
gwa_mard_halb LIKE LINE OF gt_mard_halb,
gwa_mard_temp LIKE LINE OF gt_mard_temp,
gwa_keko_fert LIKE LINE OF gt_keko_fert,
gwa_keko_halb LIKE LINE OF gt_keko_halb,
gwa_open_pr_po LIKE LINE OF gt_open_pr_po,
gwa_marc LIKE LINE OF gt_marc,
gwa_460t LIKE LINE OF gt_460t,
gwa_lfa1 LIKE LINE OF gt_lfa1,
gwa_mseg LIKE LINE OF gt_mseg,
gwa_final LIKE LINE OF gt_final.
*&---------------------------------------------------------------------*
*
OOPS ALV
*
*&---------------------------------------------------------------------*
DATA : gt_fcat TYPE lvc_t_fcat,
gwa_fcat TYPE lvc_s_fcat,
gwa_layout TYPE lvc_s_layo,
*
gt_fcat_new TYPE lvc_t_fcat,
*
gwa_fcat_new TYPE lvc_s_fcat,

gwa_layout_new TYPE lvc_s_layo,


gt_fcat_200 TYPE lvc_t_fcat.
gwa_layout_200 TYPE lvc_s_layo..

DATA : go_container TYPE REF TO cl_gui_custom_container,


go_doc_container TYPE REF TO cl_gui_docking_container,
go_alv TYPE REF TO cl_gui_alv_grid,
go_container1 TYPE REF TO cl_gui_custom_container,
go_alv1 TYPE REF TO cl_gui_alv_grid,
go_container2 TYPE REF TO cl_gui_custom_container,
go_alv2 TYPE REF TO cl_gui_alv_grid,
go_event TYPE REF TO lcl_event_handler.
*&---------------------------------------------------------------------*
*
Range DECLARATIONS for valid period
*
*&---------------------------------------------------------------------*
RANGES : valid_period FOR sy-datum.
*&---------------------------------------------------------------------*
*
VARIABLE DECLARATIONS
*
*&---------------------------------------------------------------------*
DATA : lv_cntr TYPE i,
lv_count TYPE i,
ok_code LIKE sy-ucomm,
ok_code_100 LIKE sy-ucomm,
ok_code_200 LIKE sy-ucomm,
ok_code_300 LIKE sy-ucomm,
hotspot_flag TYPE string,
gv_repid TYPE sy-repid,
gv_save TYPE char1 VALUE 'X',
gs_disvariant
TYPE disvariant,
gs_variant
TYPE disvariant,
gv_exit
TYPE char1.
TYPES: BEGIN OF listtab,
field(280),
END OF listtab.
DATA: gt_text TYPE STANDARD TABLE OF listtab,
gw_text TYPE listtab,
gv_flag TYPE char1,
gv_ucomm TYPE sy-ucomm.
* table storage
DATA: cluster TYPE REF TO zcl_general_cluster_table,
gv_index TYPE zdps_indx-srtfd,
gc_ucomm TYPE sscrfields-ucomm,
functxt TYPE smp_dyntxt.
DATA : cx_gen TYPE REF TO zcx_common_exceptions.
DATA gv_error TYPE string.
*-----------------------------------------------------*
* constants
*-----------------------------------------------------*
CONSTANTS:

c_x
TYPE char1
VALUE 'X'.
****************************************************************************
*&---------------------------------------------------------------------*
*& Include
ZV2P_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
*
Declaration of Selection Screen (Parameters / SelectOptions)
*
*----------------------------------------------------------------------*
SELECTION-SCREEN : FUNCTION KEY 1.
SELECTION-SCREEN : BEGIN OF BLOCK input WITH FRAME TITLE text-001.
SELECT-OPTIONS : so_matnr FOR mara-matnr NO INTERVALS OBLIGATORY,
so_werks FOR t001w-werks OBLIGATORY.
SELECTION-SCREEN : END OF BLOCK input.
SELECTION-SCREEN BEGIN OF BLOCK variant WITH FRAME TITLE text-064.
PARAMETERS: p_vari TYPE disvariant-variant.
SELECTION-SCREEN : END OF BLOCK variant.
SELECTION-SCREEN BEGIN OF BLOCK stored_list_name WITH FRAME TITLE text-065.
PARAMETERS: p_utext TYPE zzsave_name.
SELECTION-SCREEN END OF BLOCK stored_list_name.
SELECT-OPTIONS : s_budat FOR sy-datum NO-DISPLAY.
****************************************************************************
*&---------------------------------------------------------------------*
*& Include
ZV2P_EVENT_CLASS
*&---------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION FINAL.
PUBLIC SECTION.
METHODS:
* Method for Handling the Hotspot for PO and PR
handle_hotspot_po FOR EVENT hotspot_click
OF cl_gui_alv_grid
IMPORTING
e_column_id
es_row_no.
ENDCLASS.

"lcl_event_handler DEFINITION

*----------------------------------------------------------------------*
*
CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
METHOD handle_hotspot_po.
CASE e_column_id.
WHEN 'COUNT_PO' OR 'COUNT_PR'.
CLEAR : hotspot_flag, gwa_final.
MOVE e_column_id TO hotspot_flag.
CONDENSE hotspot_flag.
*

FREE : go_alv1, go_container1.


REFRESH : gt_fcat_200 , gt_open_pr_po.
READ TABLE gt_final INTO gwa_final INDEX es_row_no-row_id.

IF sy-subrc EQ 0.
******

" For PR
IF hotspot_flag = 'COUNT_PO'.
IF NOT gwa_final-count_po EQ 0.
LOOP AT gt_ekko_ekpo INTO gwa_ekko_ekpo WHERE matnr_i = gwa_finalmatnr AND werks_i = gwa_final-werks.
MOVE-CORRESPONDING gwa_ekko_ekpo TO gwa_open_pr_po.
gwa_open_pr_po-ebelp = gwa_ekko_ekpo-ebelp_i.
gwa_open_pr_po-werks = gwa_ekko_ekpo-werks_i.
gwa_open_pr_po-matnr = gwa_ekko_ekpo-matnr_i.
gwa_open_pr_po-txz01 = gwa_ekko_ekpo-txz01_i.
READ TABLE gt_lfa1 INTO gwa_lfa1 WITH KEY lifnr = gwa_ekko_ekpolifnr.
IF sy-subrc EQ 0.
gwa_open_pr_po-name1 = gwa_lfa1-name1.
CLEAR : gwa_lfa1.
ENDIF.
APPEND gwa_open_pr_po TO gt_open_pr_po.
CLEAR : gwa_open_pr_po.
ENDLOOP.
PERFORM build_fcat_200 USING hotspot_flag CHANGING gt_fcat_200.
CALL SCREEN 200.
ENDIF.
******
IF hotspot_flag = 'COUNT_PR'
ELSE.
REFRESH gt_open_pr_po.
CLEAR gwa_open_pr_po.
IF NOT gwa_final-count_pr EQ 0.
LOOP AT gt_eban INTO gwa_eban WHERE matnr EQ gwa_final-matnr AND
werks = gwa_final-werks.
MOVE-CORRESPONDING gwa_eban TO gwa_open_pr_po.
move gwa_eban-FLIEF to gwa_open_pr_po-lifnr.
gwa_open_pr_po-matnr = gwa_eban-matnr.
gwa_open_pr_po-txz01 = gwa_eban-txz01.
READ TABLE gt_lfa1 INTO gwa_lfa1 WITH KEY lifnr = gwa_eban-lifnr
.
IF sy-subrc EQ 0.
gwa_open_pr_po-name1 = gwa_lfa1-name1.
CLEAR : gwa_lfa1.
ENDIF.
APPEND gwa_open_pr_po TO gt_open_pr_po.
CLEAR gwa_open_pr_po.
ENDLOOP.
ENDIF.
PERFORM build_fcat_200 USING hotspot_flag CHANGING gt_fcat_200.
CALL SCREEN 300.
ENDIF.
ENDIF.
ENDCASE.
ENDMETHOD.
ENDCLASS.

"handle_hotspot_po
"lcl_event_handler IMPLEMENTATION

********************************************************************************
**********
*&---------------------------------------------------------------------*
*& Include
ZV2P_FETCH_DATA

*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&
Form GET_DATA
*&---------------------------------------------------------------------*
FORM get_data .
DATA : lv_flag TYPE c.
SELECT
matnr mtart matkl lvorm mstae
FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_mat_info
WHERE matnr IN so_matnr
AND mtart NOT IN ('ROH','VERP').
IF sy-subrc EQ 0.
MESSAGE 'Kindly check the selection criteria. Materials entered should be of
material type either VERP or ROH' TYPE 'I' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
*Pick Raw Material & Fert Material
SELECT a~matnr a~mtart a~matkl a~lvorm a~mstae b~dismm b~werks b~mmsta b~dispo
b~sobsl
FROM mara AS a INNER JOIN marc AS b
ON a~matnr = b~matnr
INTO TABLE gt_mat_info
WHERE a~matnr IN so_matnr
AND a~mtart IN ('ROH','VERP')
AND b~werks IN so_werks
AND b~mmsta IN ('Z3' , 'Z4' , 'Z7').
CHECK NOT gt_mat_info IS INITIAL.
SORT gt_mat_info BY matnr werks matkl.
*** Fetching valid contracts for material in gt_mat_info table.
SELECT
ebeln ebelp_i bukrs ekorg lifnr bstyp kdatb kdate autlf matnr_i werks_i elik
z_i matkl_i txz01_i ernam aedat
FROM wb2_v_ekko_ekpo2
INTO TABLE gt_ekko_ekpo
FOR ALL ENTRIES IN gt_mat_info
WHERE matnr_i EQ gt_mat_info-matnr
AND werks_i EQ gt_mat_info-werks
AND matkl_i EQ gt_mat_info-matkl
AND loekz EQ ''
" Header level deletion indication
AND loekz_i EQ ''
" Item level deletion indication
AND elikz_i EQ ''
AND ekorg IN ('1000','2140')
AND kdate IN valid_period
" between sy-datum and 31/12/9999
AND bstyp = 'K'.
IF NOT gt_ekko_ekpo IS INITIAL.
*** Deleting material for which valid contracts exists.
SORT gt_ekko_ekpo BY matnr_i werks_i.
*
LOOP AT gt_mat_info INTO gwa_mat_info.
*
READ TABLE gt_ekko_ekpo WITH KEY matnr_i = gwa_mat_info-matnr INTO gwa_ek
ko_ekpo BINARY SEARCH.
*
IF sy-subrc EQ 0.
*
DELETE gt_mat_info INDEX sy-tabix.
*
ENDIF.
*
ENDLOOP.
gt_ekko_ekpo_temp = gt_ekko_ekpo. " Copy to set valid contract flag in out
put

REFRESH gt_ekko_ekpo.
CLEAR gwa_ekko_ekpo.
ENDIF.
* REFRESH gt_ekko_ekpo.
* CLEAR gwa_ekko_ekpo.
*** Checking gt_mat_info again for not to be initial
CHECK NOT gt_mat_info IS INITIAL.
*** If valid contract does not exist for a material
*** then check if valid source list exist
SELECT
matnr werks lifnr flifn vdatu bdatu srm_contract_id srm_contract_itm
FROM eord
INTO TABLE gt_eord
FOR ALL ENTRIES IN gt_mat_info
WHERE matnr EQ gt_mat_info-matnr
AND werks EQ gt_mat_info-werks
*
AND srm_contract_id NE ''
AND ebeln NE ''
AND bdatu IN valid_period.
*
AND vdatu IN valid_period.
IF NOT gt_eord IS INITIAL.
SORT gt_eord BY matnr werks.
*** Deleting material for which valid contracts exists.
*
LOOP AT gt_mat_info INTO gwa_mat_info.
*
READ TABLE gt_eord WITH KEY matnr = gwa_mat_info-matnr INTO gwa_eord BINA
RY SEARCH.
*
IF sy-subrc EQ 0.
*
DELETE gt_mat_info INDEX sy-tabix.
*
ENDIF.
*
ENDLOOP.
gt_eord_temp = gt_eord.
" Copy to set valid source list flag in output
REFRESH gt_eord.
CLEAR gwa_eord.
ENDIF.
* REFRESH gt_eord.
* CLEAR gwa_eord.
CHECK NOT gt_mat_info IS INITIAL.
*** Fetching Open PO for remaining Materials
REFRESH gt_ekko_ekpo.
CLEAR gwa_ekko_ekpo.
SELECT
ebeln ebelp_i bukrs ekorg lifnr bstyp kdatb kdate autlf matnr_i werks_i elik
z_i matkl_i txz01_i ernam aedat
FROM wb2_v_ekko_ekpo2
INTO TABLE gt_ekko_ekpo
FOR ALL ENTRIES IN gt_mat_info
WHERE matnr_i EQ gt_mat_info-matnr
AND werks_i EQ gt_mat_info-werks
AND matkl_i EQ gt_mat_info-matkl
AND bsart EQ 'ZR'
AND autlf EQ ''
AND loekz EQ ''
" Header level deletion indication
AND loekz_i EQ ''
" Item level deletion indication
AND elikz_i EQ ''
AND ekorg IN ('1000','2140').
IF NOT gt_ekko_ekpo IS INITIAL.
SELECT

lifnr name1
FROM lfa1
INTO TABLE gt_lfa1
FOR ALL ENTRIES IN gt_ekko_ekpo
WHERE lifnr EQ gt_ekko_ekpo-lifnr.
ENDIF.
** Fetching Open PR for remaining Materials
SELECT
banfn bnfpo ernam statu estkz loekz bsart knttp lifnr pstyp ebeln ebelp matn
r txz01 werks flief
FROM eban
INTO TABLE gt_eban
FOR ALL ENTRIES IN gt_mat_info
WHERE matnr EQ gt_mat_info-matnr
AND werks EQ gt_mat_info-werks
AND matkl EQ gt_mat_info-matkl
AND bsart EQ 'NB'
AND knttp EQ ''
AND pstyp EQ '0'
AND ebeln EQ ''
AND statu EQ 'N'
AND estkz EQ 'B'
AND loekz EQ ''
%_HINTS ORACLE 'index(eban"1")'.
"#EC CI_HINTS
** The following FM outputs the syrup and fert materials for components material
CLEAR gwa_mat_info.
LOOP AT gt_mat_info INTO gwa_mat_info.
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
datub
= sy-datum
datuv
= '31129999'
"'99991231'
matnr
= gwa_mat_info-matnr
werks
= gwa_mat_info-werks
TABLES
wultb
= gt_wultb
equicat
= gt_equicat
kndcat
= gt_kndcat
matcat
= gt_matcat
stdcat
= gt_stdcat
tplcat
= gt_tplcat
EXCEPTIONS
call_invalid
= 1
material_not_found
= 2
no_where_used_rec_found
= 3
no_where_used_rec_selected = 4
no_where_used_rec_valid
= 5
OTHERS
= 6.
IF sy-subrc EQ 0.
LOOP AT gt_wultb INTO gwa_wultb.
gwa_cost_info-matnr = gwa_mat_info-matnr.
gwa_cost_info-werks = gwa_mat_info-werks.
*
lv_flag = ''.
IF gwa_wultb-matnr+10(1) = '1'.
" For FERT
gwa_cost_info-matnr_fert = gwa_wultb-matnr.
gwa_cost_info-fert_stlst = gwa_wultb-stlst. " if not FERT, then stlst
will be for HALB, which is copied into gwa_cost_info-halb_stlst
APPEND gwa_cost_info TO gt_cost_info.
" in second call to FM ,
below
CLEAR gwa_cost_info.

lv_flag = 'X'.
ELSEIF gwa_wultb-matnr+10(1) = '4'.
" For HALB
REFRESH gt_wultb_temp .
CALL FUNCTION 'CS_WHERE_USED_MAT'
EXPORTING
datub
= sy-datum
datuv
= '31129999'
"'99991231'
matnr
= gwa_wultb-matnr
werks
= gwa_wultb-werks
TABLES
wultb
= gt_wultb_temp
equicat
= gt_equicat
kndcat
= gt_kndcat
matcat
= gt_matcat
stdcat
= gt_stdcat
tplcat
= gt_tplcat
EXCEPTIONS
call_invalid
= 1
material_not_found
= 2
no_where_used_rec_found
= 3
no_where_used_rec_selected = 4
no_where_used_rec_valid
= 5
OTHERS
= 6.
IF sy-subrc EQ 0.
LOOP AT gt_wultb_temp INTO gwa_wultb_temp.
gwa_cost_info-matnr_halb = gwa_wultb-matnr.
gwa_cost_info-matnr_fert = gwa_wultb_temp-matnr.
gwa_cost_info-halb_stlst = gwa_wultb-stlst.
" STLST from fir
st FM call
gwa_cost_info-fert_stlst = gwa_wultb_temp-stlst. "
APPEND gwa_cost_info TO gt_cost_info.
ENDLOOP.
CLEAR gwa_cost_info.
ELSE.
" if only halb materiial exist for main component.
gwa_cost_info-matnr_halb = gwa_wultb-matnr.
gwa_cost_info-halb_stlst = gwa_wultb-stlst.
" STLST from first
FM call
APPEND gwa_cost_info TO gt_cost_info.
CLEAR gwa_cost_info.
ENDIF.
ENDIF.
**
IF lv_flag = ''.
**
APPEND gwa_cost_info TO gt_cost_info.
**
CLEAR gwa_cost_info.
**
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
***********************************************
*** Stock Quantity for Componenet Materials
***********************************************
SORT gt_cost_info BY matnr werks.
SELECT
matnr werks labst umlme insme einme speme retme
FROM mard
INTO TABLE gt_mard_temp
FOR ALL ENTRIES IN gt_cost_info
WHERE matnr EQ gt_cost_info-matnr
AND werks EQ gt_cost_info-werks.

LOOP AT gt_mard_temp INTO gwa_mard_temp.


COLLECT gwa_mard_temp INTO gt_mard_comp.
ENDLOOP.
REFRESH gt_mard_temp.
CLEAR gwa_mard_temp.
***** Last movement date for Component materials
gt_cost_info_temp = gt_cost_info.
DELETE ADJACENT DUPLICATES FROM gt_cost_info_temp COMPARING matnr werks.
IF NOT gt_cost_info_temp IS INITIAL.
SELECT
matnr budat_mkpf werks bwart
INTO TABLE gt_mseg_temp
FROM mseg
FOR ALL ENTRIES IN gt_cost_info_temp
WHERE matnr EQ gt_cost_info_temp-matnr
AND budat_mkpf IN s_budat
AND werks EQ gt_cost_info_temp-werks
%_HINTS ORACLE 'INDEX("MSEG" "MSEG~M2")'.
"#EC CI_HINTS
gt_mseg = gt_mseg_temp.
REFRESH : gt_mseg_temp, gt_cost_info_temp.
ENDIF.
***************************************
*** Stock Quantity and Costing data for HALB Materials
**************************************
gt_cost_info_temp = gt_cost_info.
DELETE gt_cost_info_temp WHERE matnr_halb IS INITIAL. " Checking if there is
no halb material
IF NOT gt_cost_info_temp IS INITIAL.
*** Stock Quantity for HALB Materials
SELECT
matnr werks labst umlme insme einme speme retme
FROM mard
INTO TABLE gt_mard_temp
FOR ALL ENTRIES IN gt_cost_info_temp
WHERE matnr EQ gt_cost_info_temp-matnr_halb
AND werks EQ gt_cost_info_temp-werks.
LOOP AT gt_mard_temp INTO gwa_mard_temp.
COLLECT gwa_mard_temp INTO gt_mard_halb.
ENDLOOP.
**** Costing data for HALB materials
SELECT
matnr werks kadky kadat bidat
INTO TABLE gt_keko_halb
FROM keko
FOR ALL ENTRIES IN gt_cost_info_temp
WHERE matnr EQ gt_cost_info_temp-matnr_halb
AND werks EQ gt_cost_info_temp-werks
%_HINTS ORACLE 'index(keko"A")'.
"#EC CI_HINTS
IF NOT gt_keko_halb IS INITIAL.
SORT gt_keko_halb BY matnr kadky DESCENDING.
ENDIF.
**** Material Master Info for halb materials
SELECT a~matnr a~mtart a~matkl a~lvorm a~mstae b~dismm b~werks b~mmsta b~dis
po b~sobsl
FROM mara AS a INNER JOIN marc AS b
ON a~matnr = b~matnr

*
*

INTO TABLE gt_mat_info_halb


FOR ALL ENTRIES IN gt_cost_info_temp
WHERE a~matnr EQ gt_cost_info_temp-matnr_halb
AND a~mtart IN ('ROH','VERP')
AND b~werks EQ gt_cost_info_temp-werks.
AND b~mmsta IN ('Z3' , 'Z4').

REFRESH : gt_mard_temp, gt_cost_info_temp.


CLEAR gwa_mard_temp.
ENDIF.
**********************************************************
*** Stock Quantity and Costing Data for FERT Materials
**********************************************************
gt_cost_info_temp = gt_cost_info.
DELETE gt_cost_info_temp WHERE matnr_fert IS INITIAL. " Checking if there is
no halb material
IF NOT gt_cost_info_temp IS INITIAL.
*** Stock Quantity for FERT Materials
SELECT
matnr werks labst umlme insme einme speme retme
FROM mard
INTO TABLE gt_mard_temp
FOR ALL ENTRIES IN gt_cost_info_temp
WHERE matnr EQ gt_cost_info_temp-matnr_fert
AND werks EQ gt_cost_info_temp-werks.
LOOP AT gt_mard_temp INTO gwa_mard_temp.
COLLECT gwa_mard_temp INTO gt_mard_fert.
ENDLOOP.
*** Costing Data for FERT Materials
SELECT
matnr werks kadky kadat bidat
INTO TABLE gt_keko_fert
FROM keko
FOR ALL ENTRIES IN gt_cost_info_temp
WHERE matnr EQ gt_cost_info_temp-matnr_fert
AND werks EQ gt_cost_info_temp-werks
%_HINTS ORACLE 'index(keko"A")'.

"#EC CI_HINTS

IF NOT gt_keko_fert IS INITIAL.


SORT gt_keko_fert BY matnr kadky DESCENDING.
ENDIF.
**** Material Master Info for FERT materials
SELECT a~matnr a~mtart a~matkl a~lvorm a~mstae b~dismm b~werks b~mmsta b~dis
po b~sobsl
FROM mara AS a INNER JOIN marc AS b
ON a~matnr = b~matnr
INTO TABLE gt_mat_info_fert
FOR ALL ENTRIES IN gt_cost_info_temp
WHERE a~matnr EQ gt_cost_info_temp-matnr_fert
*
AND a~mtart IN ('ROH','VERP')
AND b~werks EQ gt_cost_info_temp-werks.
*
AND b~mmsta IN ('Z3' , 'Z4').
REFRESH : gt_mard_temp.
CLEAR gwa_mard_temp.
* ***** Last movement date for FERT materials
SORT gt_cost_info_temp BY matnr_fert werks.
DELETE ADJACENT DUPLICATES FROM gt_cost_info_temp COMPARING matnr_fert werks
.

IF NOT gt_cost_info_temp IS INITIAL.


SELECT
matnr budat_mkpf werks bwart
INTO TABLE gt_mseg_temp
FROM mseg
FOR ALL ENTRIES IN gt_cost_info_temp
WHERE matnr EQ gt_cost_info_temp-matnr_fert
AND werks EQ gt_cost_info_temp-werks
AND budat_mkpf IN s_budat
%_HINTS ORACLE 'index(mseg"M2")'.
IF NOT gt_mseg_temp IS INITIAL.
LOOP AT gt_mseg_temp INTO gwa_mseg.
APPEND gwa_mseg TO gt_mseg.
CLEAR gwa_mseg.
ENDLOOP.
ENDIF.
REFRESH : gt_cost_info_temp, gt_mseg_temp.
ENDIF.
ENDIF.
*********************************************
****** Special proc. Key description
SELECT
" for Component materials
matnr werks sobsl
FROM marc
INTO TABLE gt_marc_temp
FOR ALL ENTRIES IN gt_cost_info
WHERE matnr EQ gt_cost_info-matnr
AND werks EQ gt_cost_info-werks.
IF NOT gt_marc_temp IS INITIAL.
gt_marc = gt_marc_temp.
ENDIF.
REFRESH gt_marc_temp.
SELECT
" for halb materials
matnr werks sobsl
FROM marc
INTO TABLE gt_marc_temp
FOR ALL ENTRIES IN gt_cost_info
WHERE matnr EQ gt_cost_info-matnr_halb
AND werks EQ gt_cost_info-werks.
IF NOT gt_marc_temp IS INITIAL.
LOOP AT gt_marc_temp INTO gwa_marc.
APPEND gwa_marc TO gt_marc.
CLEAR gwa_marc.
ENDLOOP.
ENDIF.
REFRESH gt_marc_temp.
SELECT
" for FERT materials
matnr werks sobsl
FROM marc
INTO TABLE gt_marc_temp
FOR ALL ENTRIES IN gt_cost_info
WHERE matnr EQ gt_cost_info-matnr_fert
AND werks EQ gt_cost_info-werks.
IF NOT gt_marc_temp IS INITIAL.
LOOP AT gt_marc_temp INTO gwa_marc.
APPEND gwa_marc TO gt_marc.
CLEAR gwa_marc.

ENDLOOP.
ENDIF.
********* Special proc. Key description
SELECT
spras werks sobsl ltext
FROM t460t
INTO TABLE gt_460t
FOR ALL ENTRIES IN gt_mat_info
WHERE sobsl EQ gt_mat_info-sobsl
AND werks EQ gt_mat_info-werks
AND spras EQ sy-langu.
**************** END ****************
SORT : gt_mard_comp BY matnr werks,
gt_mard_halb BY matnr werks,
gt_mard_fert BY matnr werks,
gt_mat_info BY matnr werks,
gt_cost_info BY matnr werks,
gt_keko_halb BY matnr werks,
gt_mat_info_halb BY matnr werks,
gt_mat_info_fert BY matnr werks,
gt_ekko_ekpo_temp BY matnr_i werks_i,
gt_eord_temp BY matnr werks,
gt_mseg BY matnr werks,
gt_460t BY sobsl,
gt_keko_fert BY matnr werks.
SORT gt_mseg BY matnr werks budat_mkpf DESCENDING.
CLEAR gv_flag.
LOOP AT gt_mat_info INTO gwa_mat_info.
gwa_final-matnr = gwa_mat_info-matnr.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = gwa_final-matnr
IMPORTING
output = gwa_final-matnr.
gwa_final-werks = gwa_mat_info-werks.
gwa_final-mmsta = gwa_mat_info-mmsta.
gwa_final-lvorm = gwa_mat_info-lvorm.
gwa_final-dismm = gwa_mat_info-dismm.
gwa_final-mstae = gwa_mat_info-mstae.
gwa_final-dispo = gwa_mat_info-dispo.
gwa_final-sobsl = gwa_mat_info-sobsl.
READ TABLE gt_ekko_ekpo_temp WITH KEY matnr_i = gwa_mat_info-matnr werks_i =
gwa_mat_info-werks INTO gwa_ekko_ekpo_temp BINARY SEARCH.
IF sy-subrc EQ 0.
gwa_final-valid_contract = 'Y'.
ELSE.
gwa_final-valid_contract = 'N'.
ENDIF.
CLEAR gwa_ekko_ekpo_temp.
READ TABLE gt_eord_temp WITH KEY matnr = gwa_mat_info-matnr werks = gwa_mat_
info-werks INTO gwa_eord_temp BINARY SEARCH.
IF sy-subrc EQ 0.
gwa_final-valid_list = 'Y'.
ELSE.
gwa_final-valid_list = 'N'.
ENDIF.

CLEAR gwa_eord_temp.
*******
Last movement date for component material
READ TABLE gt_mseg WITH KEY matnr = gwa_mat_info-matnr werks = gwa_mat_info
-werks INTO gwa_mseg BINARY SEARCH.
IF sy-subrc EQ 0.
gwa_final-last_movt_date = gwa_mseg-budat_mkpf.
CLEAR gwa_mseg.
ENDIF.
READ TABLE gt_460t WITH KEY sobsl = gwa_mat_info-sobsl INTO gwa_460t BINARY
SEARCH.
IF sy-subrc EQ 0.
gwa_final-ltext_matnr = gwa_460t-ltext.
CLEAR gwa_460t.
ENDIF.
CLEAR lv_count.
PERFORM count_open_po USING gwa_mat_info CHANGING lv_count.
gwa_final-count_po = lv_count.
CLEAR lv_count.
PERFORM count_open_pr USING gwa_mat_info CHANGING lv_count.
gwa_final-count_pr = lv_count.
READ TABLE gt_mard_comp WITH KEY matnr = gwa_mat_info-matnr werks = gwa_mat_
info-werks
INTO gwa_mard_comp BINARY SEARCH.
IF sy-subrc EQ 0.
gwa_final-available_stock = gwa_mard_comp-labst + gwa_mard_comp-umlme + gw
a_mard_comp-insme +
gwa_mard_comp-einme + gwa_mard_comp-speme + gw
a_mard_comp-retme.
CLEAR gwa_mard_comp.
ENDIF.
gv_flag = ''.
LOOP AT gt_cost_info INTO gwa_cost_info WHERE matnr EQ gwa_mat_info-matnr AN
D werks = gwa_mat_info-werks.
****
For Halb Materials
READ TABLE gt_mard_halb WITH KEY matnr = gwa_cost_info-matnr_halb werks =
gwa_cost_info-werks
INTO gwa_mard_halb BINARY SEARCH.
IF sy-subrc EQ 0.
gv_flag = 'X'.
gwa_final-matnr_halb = gwa_cost_info-matnr_halb.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = gwa_final-matnr_halb
IMPORTING
output = gwa_final-matnr_halb.
IF gwa_cost_info-halb_stlst = '1'.
gwa_final-stlst_halb = '1-Active'.
ELSEIF gwa_cost_info-halb_stlst = '2'.
gwa_final-stlst_halb = '2-Inactive'.
ELSEIF gwa_cost_info-halb_stlst = '3'.
gwa_final-stlst_halb = '3-Active with history reqmt'.
ENDIF.
*
gwa_final-stlst_halb = gwa_cost_info-halb_stlst.
gwa_final-available_stock_halb = gwa_mard_halb-labst + gwa_mard_halb-uml
me + gwa_mard_halb-insme +
gwa_mard_halb-einme + gwa_mard_halb-spe
me + gwa_mard_halb-retme.
************* Costing information for HALB
READ TABLE gt_keko_halb WITH KEY matnr = gwa_cost_info-matnr_halb werks

= gwa_cost_info-werks
INTO gwa_keko_halb BINARY SEARCH.
IF sy-subrc EQ 0.
gwa_final-bom_cost_valid_from_halb = gwa_keko_halb-kadat.
gwa_final-bom_cost_valid_to_halb = gwa_keko_halb-bidat.
IF gwa_keko_halb-kadky+0(4) = sy-datum+0(4).
gwa_final-bom_cost_date_halb = 'Y'.
ELSE.
gwa_final-bom_cost_date_halb = 'N'.
ENDIF.
CLEAR gwa_keko_halb.
ENDIF.
READ TABLE gt_mat_info_halb WITH KEY matnr = gwa_mard_halb-matnr werks =
gwa_mard_halb-werks
INTO gwa_mat_info_halb BINARY SEARC
H.
IF sy-subrc EQ 0.
gwa_final-werks_halb = gwa_mat_info_halb-werks.
gwa_final-mmsta_halb = gwa_mat_info_halb-mmsta.
gwa_final-lvorm_halb = gwa_mat_info_halb-lvorm.
gwa_final-dismm_halb = gwa_mat_info_halb-dismm.
gwa_final-mstae_halb = gwa_mat_info_halb-mstae.
gwa_final-dispo_halb = gwa_mat_info_halb-dispo.
gwa_final-sobsl_halb = gwa_mat_info_halb-sobsl.
******* Special procurement key Desc for halb
READ TABLE gt_460t WITH KEY sobsl = gwa_mat_info_halb-sobsl INTO gwa_4
60t BINARY SEARCH.
IF sy-subrc EQ 0.
gwa_final-ltext_halb = gwa_460t-ltext.
CLEAR gwa_460t.
ENDIF.
********** for FERT material in particular halb material
READ TABLE gt_mard_fert WITH KEY matnr = gwa_cost_info-matnr_fert werk
s = gwa_cost_info-werks
INTO gwa_mard_fert BINARY SEARCH.
IF sy-subrc EQ 0.
*
gwa_final-stlst_fert = gwa_cost_info-fert_stlst.
IF gwa_cost_info-fert_stlst = '1'.
gwa_final-stlst_fert = '1-Active'.
ELSEIF gwa_cost_info-fert_stlst = '2'.
gwa_final-stlst_fert = '2-Inactive'.
ELSEIF gwa_cost_info-fert_stlst = '3'.
gwa_final-stlst_fert = '3-Active with history reqmt'.
ENDIF.
gwa_final-matnr_fert = gwa_cost_info-matnr_fert.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = gwa_final-matnr_fert
IMPORTING
output = gwa_final-matnr_fert.
gwa_final-available_stock_fert = gwa_mard_fert-labst + gwa_mard_fert
-umlme + gwa_mard_fert-insme +
gwa_mard_fert-einme + gwa_mard_fert
-speme + gwa_mard_fert-retme.
*******
Last movement date for FERT material
READ TABLE gt_mseg WITH KEY matnr = gwa_cost_info-matnr_fert werks
= gwa_cost_info-werks
INTO gwa_mseg BINARY SEARCH.
IF sy-subrc EQ 0.

gwa_final-last_movt_date_fert = gwa_mseg-budat_mkpf.
CLEAR gwa_mseg.
ENDIF.
************* Costing information for FERT
READ TABLE gt_keko_fert WITH KEY matnr = gwa_cost_info-matnr_fert we
rks = gwa_cost_info-werks
INTO gwa_keko_fert BINARY SEARCH.
IF sy-subrc EQ 0.
gwa_final-bom_cost_valid_from_fert = gwa_keko_fert-kadat.
gwa_final-bom_cost_valid_to_fert = gwa_keko_fert-bidat.
IF gwa_keko_fert-kadky+0(4) = sy-datum+0(4).
gwa_final-bom_cost_date_fert = 'Y'.
ELSE.
gwa_final-bom_cost_date_fert = 'N'.
ENDIF.
CLEAR gwa_keko_fert.
ENDIF.
READ TABLE gt_mat_info_fert WITH KEY matnr = gwa_mard_fert-matnr wer
ks = gwa_mard_fert-werks
INTO gwa_mat_info_fert BINARY S
EARCH.
IF sy-subrc EQ 0.
gwa_final-werks_fert = gwa_mat_info_fert-werks.
gwa_final-mmsta_fert = gwa_mat_info_fert-mmsta.
gwa_final-lvorm_fert = gwa_mat_info_fert-lvorm.
gwa_final-dismm_fert = gwa_mat_info_fert-dismm.
gwa_final-mstae_fert = gwa_mat_info_fert-mstae.
gwa_final-dispo_fert = gwa_mat_info_fert-dispo.
gwa_final-sobsl_fert = gwa_mat_info_fert-sobsl.
******* Special procurement key Desc for FERT
READ TABLE gt_460t WITH KEY sobsl = gwa_mat_info_fert-sobsl INTO g
wa_460t BINARY SEARCH.
IF sy-subrc EQ 0.
gwa_final-ltext_fert = gwa_460t-ltext.
CLEAR gwa_460t.
ENDIF.
ENDIF.
APPEND gwa_final TO gt_final.
CLEAR : gwa_final-ltext_fert , gwa_final-werks_halb , gwa_final-mmst
a_halb , gwa_final-lvorm_halb , gwa_final-dismm_halb,
gwa_final-mstae_halb , gwa_final-dispo_halb , gwa_final-sobsl_halb ,
gwa_final-stlst_fert , gwa_final-matnr_fert ,
gwa_final-available_stock_fert , gwa_final-last_movt_date_fert , gwa
_final-bom_cost_valid_from_fert , gwa_final-bom_cost_valid_to_fert ,
gwa_final-bom_cost_date_fert , gwa_final-werks_fert , gwa_final-mmst
a_fert , gwa_final-lvorm_fert , gwa_final-dismm_fert ,
gwa_final-mstae_fert , gwa_final-dispo_fert , gwa_final-sobsl_fert ,
gwa_final-ltext_halb.
CLEAR gwa_final-ltext_fert.
*
CLEAR gwa_final.
CLEAR gwa_mard_halb.
ELSE.
" if no fert for halb
APPEND gwa_final TO gt_final.
*
CLEAR gwa_final.
ENDIF.
ENDIF.
ELSE.
" if no HALB only FERT for component material
READ TABLE gt_mard_fert WITH KEY matnr = gwa_cost_info-matnr_fert werks
= gwa_cost_info-werks

INTO gwa_mard_fert BINARY SEARCH.


IF sy-subrc EQ 0.
gv_flag = 'X'.
gwa_final-stlst_fert = gwa_cost_info-fert_stlst.
IF gwa_cost_info-fert_stlst = '1'.
gwa_final-stlst_fert = '1-Active'.
ELSEIF gwa_cost_info-fert_stlst = '2'.
gwa_final-stlst_fert = '2-Inactive'.
ELSEIF gwa_cost_info-fert_stlst = '3'.
gwa_final-stlst_fert = '3-Active with history reqmt'.
ENDIF.

gwa_final-matnr_fert = gwa_cost_info-matnr_fert.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = gwa_final-matnr_fert
IMPORTING
output = gwa_final-matnr_fert.
*
gwa_final-stlst_fert = gwa_cost_info-fert_stlst.
gwa_final-available_stock_fert = gwa_mard_fert-labst + gwa_mard_fert-u
mlme + gwa_mard_fert-insme +
gwa_mard_fert-einme + gwa_mard_fert-s
peme + gwa_mard_fert-retme.
*******
Last movement date for FERT material
READ TABLE gt_mseg WITH KEY matnr = gwa_cost_info-matnr_fert werks =
gwa_cost_info-werks
INTO gwa_mseg BINARY SEARCH.
IF sy-subrc EQ 0.
gwa_final-last_movt_date_fert = gwa_mseg-budat_mkpf.
CLEAR gwa_mseg.
ENDIF.
************* Costing information for fert
READ TABLE gt_keko_fert WITH KEY matnr = gwa_cost_info-matnr_fert werk
s = gwa_cost_info-werks
INTO gwa_keko_fert BINARY SEARCH.
IF sy-subrc EQ 0.
gwa_final-bom_cost_valid_from_fert = gwa_keko_fert-kadat.
gwa_final-bom_cost_valid_to_fert = gwa_keko_fert-bidat.
IF gwa_keko_fert-kadky+0(4) = sy-datum+0(4).
gwa_final-bom_cost_date_fert = 'Y'.
ELSE.
gwa_final-bom_cost_date_fert = 'N'.
ENDIF.
CLEAR gwa_keko_fert.
ENDIF.
READ TABLE gt_mat_info_fert WITH KEY matnr = gwa_mard_fert-matnr werks
= gwa_mard_fert-werks
INTO gwa_mat_info_fert BINARY SEA
RCH.
IF sy-subrc EQ 0.
gwa_final-werks_fert = gwa_mat_info_fert-werks.
gwa_final-mmsta_fert = gwa_mat_info_fert-mmsta.
gwa_final-lvorm_fert = gwa_mat_info_fert-lvorm.
gwa_final-dismm_fert = gwa_mat_info_fert-dismm.
gwa_final-mstae_fert = gwa_mat_info_fert-mstae.
gwa_final-dispo_fert = gwa_mat_info_fert-dispo.
gwa_final-sobsl_fert = gwa_mat_info_fert-sobsl.
******* Special procurement key Desc for fert
READ TABLE gt_460t WITH KEY sobsl = gwa_mat_info_fert-sobsl INTO gwa
_460t BINARY SEARCH.

IF sy-subrc EQ 0.
gwa_final-ltext_fert = gwa_460t-ltext.
CLEAR gwa_460t.
ENDIF.
ENDIF.
APPEND gwa_final TO gt_final.
CLEAR gwa_final-ltext_fert.
*
CLEAR gwa_final.
CLEAR gwa_mard_fert.
ENDIF.
ENDIF.
ENDLOOP.
IF gv_flag = ''.
APPEND gwa_final TO gt_final.
CLEAR gwa_final.
ENDIF.
CLEAR gwa_final.
ENDLOOP.
LOOP AT gt_ekko_ekpo INTO gwa_ekko_ekpo.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = gwa_ekko_ekpo-matnr_i
IMPORTING
output = gwa_ekko_ekpo-matnr_i.
MODIFY gt_ekko_ekpo FROM gwa_ekko_ekpo TRANSPORTING matnr_i.
CLEAR gwa_ekko_ekpo.
ENDLOOP.
LOOP AT gt_eban INTO gwa_eban.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = gwa_eban-matnr
IMPORTING
output = gwa_eban-matnr.
MODIFY gt_eban FROM gwa_eban TRANSPORTING matnr.
CLEAR gwa_eban.
ENDLOOP.
ENDFORM.
" GET_DATA
*&---------------------------------------------------------------------*
*&
Form GET_DATA_FROM_CLUSTER
*&---------------------------------------------------------------------*
FORM get_data_from_cluster .
CHECK: cluster IS NOT INITIAL.
CALL METHOD zcl_general_utility=>status_meter
EXPORTING
percent = 20
info
= 'Pull Data from Stored List'(103).
TRY.
CALL METHOD cluster->get_data_pp
EXPORTING
im_sort
= gv_index
IMPORTING
ex_data_t
= gt_final
ex_ekko_ekpo = gt_ekko_ekpo
ex_eban
= gt_eban
ex_lfa1
= gt_lfa1.
CATCH zcx_common_exceptions INTO cx_gen.

gv_error = cx_gen->get_message( ).
MESSAGE gv_error TYPE 'I'.
EXIT.
ENDTRY.
ENDFORM.
" GET_DATA_FROM_CLUSTER
*&---------------------------------------------------------------------*
*&
Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'ZV2P_STATUS'.
* SET TITLEBAR 'xxx'.
*CUSTOM_CONTAINER
IF go_container IS INITIAL.
IF cl_gui_alv_grid=>offline( ) IS INITIAL.
CREATE OBJECT go_container
EXPORTING
container_name
= 'CUSTOM_CONTAINER'
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.
CREATE OBJECT go_alv
EXPORTING
i_parent
= go_container
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS
= 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
CREATE OBJECT go_alv
EXPORTING
i_parent
= go_container
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS
= 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.

PERFORM create_fcat CHANGING gt_fcat.


PERFORM create_layout CHANGING gwa_layout.
ELSE.
CALL METHOD go_alv->refresh_table_display( ).
ENDIF.
** PERFORM create_fcat CHANGING gt_fcat.
** PERFORM create_layout CHANGING gwa_layout.
IF sy-batch = c_x.
PERFORM save_list.
*
CALL TRANSACTION 'ZP2P_MATDEACT'.
LEAVE PROGRAM.
ELSE.
gs_variant-variant = p_vari.
CALL METHOD go_alv->set_table_for_first_display
EXPORTING
is_variant
= gs_variant
i_save
= 'A'
i_default
= 'X'
is_layout
= gwa_layout
CHANGING
it_outtab
= gt_final
it_fieldcatalog
= gt_fcat
*
IT_SORT
=
*
IT_FILTER
=
EXCEPTIONS
invalid_parameter_combination = 1
program_error
= 2
too_many_lines
= 3
OTHERS
= 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CREATE OBJECT go_event.
SET HANDLER go_event->handle_hotspot_po FOR go_alv .
ENDIF.
* ENDIF.
ENDMODULE.
" STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
ok_code_100 = ok_code.
CLEAR ok_code.
CASE ok_code_100.
WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
CALL TRANSACTION 'ZP2P_MATDEACT'.
*
LEAVE TO SCREEN 0.
LEAVE PROGRAM.
CLEAR ok_code_100.
ENDCASE.
ENDMODULE.
" USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*&
Form CREATE_FCAT
*&---------------------------------------------------------------------*
*
text

*----------------------------------------------------------------------*
*
<--P_GT_FCAT text
*----------------------------------------------------------------------*
FORM create_fcat CHANGING gt_fcat TYPE lvc_t_fcat.
"#EC NEEDED
PERFORM fcat USING : 'MATNR'
text-002 '' '' 10,
ponent Material
'WERKS'
text-003 '' '' '4',
ant
'MMSTA'
text-004 '' '' '10',
lant Specific Material Status
'MSTAE'
text-005 '' '' '10',
-Plant Status
'LVORM'
text-006 '' '' '10',
F Client Level
'DISMM'
text-007 '' '' '10',
RP Type
'DISPO'
text-008 '' '' '10',
RP Controller
'SOBSL'
text-009 '' '' '5',
ecial procurement key
'LTEXT_MATNR'
text-010 '' '' '20',
ecial procurement key Description
'VALID_CONTRACT'
text-066 '' '' '15',
lid Contract (Y/N)
'VALID_LIST'
text-067 '' '' '15',
lid Source List (Y/N)
'COUNT_PO'
text-011 '' '' '10',
pen PO
'COUNT_PR'
text-012 '' '' '10',
pen PR
'AVAILABLE_STOCK'
text-013 '' '' '20',
vailable Stock
'LAST_MOVT_DATE'
text-014 '' '' '12',
st Movement Date

" Com
" Pl
" P
" X
" D
" M
" M
" Sp
" Sp
" Va
" Va
" O
" O
" A
" La

'MATNR_HALB'

text-015 '' '' '10',

" S

'WERKS_HALB'

text-016 '' '' '4',

" Pl

text-017 '' '' '10',

" P

text-018 '' '' '10',

" X

text-019 '' '' '10',

" D

text-020 '' '' '10',

" M

text-021 '' '' '10',

" M

text-022 '' '' '5',

" Sp

yrup Material
ant
'MMSTA_HALB'
lant Specific Material Status
'MSTAE_HALB'
-Plant Status
'LVORM_HALB'
F Client Level
'DISMM_HALB'
RP Type
'DISPO_HALB'
RP Controller
'SOBSL_HALB'
ecial procurement key
'LTEXT_HALB'
ecial procurement key Description
'BOM_COST_DATE_HALB'
rup BOM Costed (Y/N)
'BOM_COST_VALID_FROM_HALB'
yrup Costing Valid From
'BOM_COST_VALID_TO_HALB'
yrup Costing Valid To
'STLST_HALB'

text-023 '' '' '20', " Sp


text-024 '' '' '5',

" Sy

text-025 '' '' '12',

" S

text-026 '' '' '12',

" S

text-027 '' '' '10',

" S

yrup BOM Status


***
Last Movement Date
***
Available Stock

'LAST_MOVT_DATE_HALB'
'AVAILABLE_STOCK'
'MATNR_FERT'

G Material
**
lant

'WERKS_FERT'

'MMSTA_FERT'
lant Specific Material Status
'MSTAE_FERT'
Plant Status
'LVORM_FERT'
F Client Level
'DISMM_FERT'
RP Type
'DISPO_FERT'
RP Controller
'SOBSL_FERT'
ecial procurement key
'LTEXT_FERT'
ecial procurement key Description
'BOM_COST_DATE_FERT'
BOM Costed (Y/N)
'BOM_COST_VALID_FROM_FERT'
G Costing Valid From
'BOM_COST_VALID_TO_FERT'
G Costing Valid To
'STLST_FERT'
G BOM Status
'AVAILABLE_STOCK_FERT'
G Available Stock
'LAST_MOVT_DATE_FERT'
G Last Movement Date
'DEACTIVATION_FLAG'
n be Deactivated (Y/N)

text-028 '' '' '12', "


text-029 '' '' '20',
text-030 '' '' '10',

"
" F

text-031 '' '' '4', " P


text-032 '' '' '10',
text-033 '' '' '10',

" P
" X-

text-034 '' '' '10',

" D

text-035 '' '' '10',

" M

text-036 '' '' '10',

" M

text-037 '' '' '5',

" Sp

text-038 '' '' '20', " Sp


text-039 '' '' '5',

" FG

text-040 '' '' '12',

" F

text-041 '' '' '12',

" F

text-042 '' '' '10',

" F

text-043 '' '' '20',

" F

text-044 '' '' '12',

" F

text-045 '' '' '5'.

" Ca

ENDFORM.
" CREATE_FCAT
*&---------------------------------------------------------------------*
*&
Form FCAT
*&---------------------------------------------------------------------*
FORM fcat USING
value(f_field) TYPE any
value(f_desc) TYPE any
value(f_key) TYPE any
value(f_value) TYPE any
value(f_len) TYPE any.
ADD 1 TO lv_cntr.
gwa_fcat-col_pos
= lv_cntr.
gwa_fcat-row_pos
= 1.
gwa_fcat-fieldname = f_field.
gwa_fcat-scrtext_l
= f_desc.
" field description has to be passed like
this for Column Heading, -- using OOPs
gwa_fcat-key
= f_key.
gwa_fcat-key_sel
= f_key.
gwa_fcat-fix_column = f_key.

gwa_fcat-hotspot
= f_value.
gwa_fcat-outputlen = f_len.
gwa_fcat-no_zero = 'X'.
* gwa_fcat-col_opt = 'X'.
IF f_field = 'COUNT_PO' OR f_field = 'COUNT_PR'.
gwa_fcat-hotspot = 'X'.
ENDIF.
APPEND gwa_fcat TO gt_fcat.
CLEAR gwa_fcat.
ENDFORM.
"fcat
*&---------------------------------------------------------------------*
*&
Form CREATE_LAYOUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
<--P_GWA_LAYO text
*----------------------------------------------------------------------*
FORM create_layout CHANGING gwa_layo TYPE lvc_s_layo.
gwa_layo-zebra = 'X'.
* gwa_layo-smalltitle = 'X'.
* gwa_layo-cwidth_opt = 'X'.
ENDFORM.
" CREATE_LAYOUT
*&---------------------------------------------------------------------*
*&
Form COUNT_OPEN_PO
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_GWA_MAT_INFO_MATNR text
*
<--P_LV_COUNT text
*----------------------------------------------------------------------*
FORM count_open_po USING
p_gwa_mat_info_matnr LIKE LINE OF gt_mat_info
CHANGING lv_count TYPE i.
LOOP AT gt_ekko_ekpo INTO gwa_ekko_ekpo WHERE matnr_i = p_gwa_mat_info_matnr-m
atnr AND werks_i = p_gwa_mat_info_matnr-werks.
lv_count = lv_count + 1.
ENDLOOP.
ENDFORM.
" COUNT_OPEN_PO
*&---------------------------------------------------------------------*
*&
Form COUNT_OPEN_PR
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_GWA_MAT_INFO_MATNR text
*
<--P_LV_COUNT text
*----------------------------------------------------------------------*
FORM count_open_pr USING
p_gwa_mat_info_matnr LIKE LINE OF gt_mat_info
CHANGING lv_count TYPE i.
LOOP AT gt_eban INTO gwa_eban WHERE matnr = p_gwa_mat_info_matnr-matnr AND wer
ks = p_gwa_mat_info_matnr-werks.
lv_count = lv_count + 1.
ENDLOOP.
ENDFORM.
" COUNT_OPEN_PR
*&---------------------------------------------------------------------*
*&
Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*

*
text
*----------------------------------------------------------------------*
MODULE status_0200 OUTPUT.
SET PF-STATUS 'STATUS_0200'.
* SET TITLEBAR 'xxx'.
IF go_alv1 IS INITIAL.
CREATE OBJECT go_container1
EXPORTING
container_name
= 'CUSTOM_CONTAINER1'
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.
CREATE OBJECT go_alv1
EXPORTING
i_parent
= go_container1
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS
= 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*
PERFORM create_fcat_new CHANGING gt_fcat.
PERFORM create_layout CHANGING gwa_layout.

*
*

CALL METHOD go_alv1->set_table_for_first_display


EXPORTING
is_variant
= gs_variant
i_save
= 'A'
i_default
= 'X'
is_layout
= gwa_layout
CHANGING
it_outtab
= gt_open_pr_po
it_fieldcatalog
= gt_fcat_200
IT_SORT
=
IT_FILTER
=
EXCEPTIONS
invalid_parameter_combination = 1
program_error
= 2
too_many_lines
= 3
OTHERS
= 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.

ENDMODULE.

" STATUS_0200 OUTPUT

*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_0200 INPUT.
ok_code_200 = ok_code.
CLEAR ok_code.
CASE ok_code_200.
WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
CALL METHOD go_alv1->free( ).
CLEAR go_alv1.
CALL METHOD go_container1->free( ).
CLEAR go_container1.
LEAVE TO SCREEN 100.
CLEAR ok_code_200.
ENDCASE.
ENDMODULE.
" USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
*&
Form BUILD_FCAT_200
*&---------------------------------------------------------------------*
FORM build_fcat_200 USING hotspot_flag TYPE string
CHANGING gt_fcat_200 TYPE lvc_t_fcat. "#EC NEEDED
IF hotspot_flag = 'COUNT_PO'.
PERFORM fcat_200 USING : 'BUKRS'

text-046 '' '' '', " Company Co

de
'EBELN'
'EBELP'
'EKORG'
'WERKS'
'AUTLF'

text-047
text-048
text-049
text-050
text-051

''
''
''
''
''

''
''
''
''
''

'',
'',
'',
'',
'',

"
"
"
"
"

PO No.
PO Item
Pur. Org.
Plant
Delivery C

'MATNR'

text-052 '' '' '', " Material C

'TXZ01'

text-053 '' '' '', " Descriptio

'LIFNR'

text-054 '' '' '', " Vendor Cod

'NAME1'

text-055 '' '' '', " Vendor Nam

'ERNAM'
'AEDAT'

text-056 '' '' '', " Created By


text-057 '' '' ''. " Created On

omplted
ode
n
e
e
.
ELSE. " hotspot_flag = 'COUNT_PR'.
PERFORM fcat_200 USING : 'BANFN'
'BNFPO'
'MATNR'
ode
'TXZ01'
n
'BSART'
'LIFNR'
e
*
'NAME1'

text-058 '' '' '', " PR No


text-059 '' '' '', " PR Item.
text-052 '' '' '', " Material C
text-053 '' '' '', " Descriptio
text-060 '' '' '', " Doc. Type
text-054 '' '' '', " Vendor Cod
text-055 '' '' '', " Vendor Na

me
'KNTTP'

text-061 '' '' '', " Account As

'PSTYP'

text-062 '' '' '', " Item Categ

'EBELN'
'STATU'

text-047 '' '' '', " PO No.


text-063 '' '' '', " PO No.

'ERNAM'
'AEDAT'

text-056 '' '' '', " Created By


text-057 '' '' ''. " Created On

signment
ory
*

.
ENDIF.
*
**
'COUNT_PR'
text-002 '' '' '',
**
'MATNR_HALB'
text-002 '' '' '',
**
'MATNR_FERT'
text-002 '' '' ''.
*
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
**
'MATNR'
text-002 '' '' '',
*
ENDFORM.
" BUILD_FCAT_200
*&---------------------------------------------------------------------*
*&
Form FCAT
*&---------------------------------------------------------------------*
FORM fcat_200 USING
value(f_field) TYPE any
value(f_desc) TYPE any
value(f_key) TYPE any
value(f_value) TYPE any
value(f_len) TYPE any.
ADD 1 TO lv_cntr.
gwa_fcat-col_pos
= lv_cntr.
gwa_fcat-row_pos
= 1.
gwa_fcat-fieldname = f_field.
* w_fcat-fieldname = f_desc.
" Does not work in OOPs
gwa_fcat-scrtext_l
= f_desc.
" field description has to be passed like
this for Column Heading, -- using OOPs
gwa_fcat-key
= f_key.
gwa_fcat-key_sel
= f_key.
gwa_fcat-fix_column = f_key.
gwa_fcat-hotspot
= f_value.
gwa_fcat-outputlen = f_len.
gwa_fcat-col_opt = 'X'.

APPEND gwa_fcat TO gt_fcat_200.


CLEAR gwa_fcat.
ENDFORM.
" CREATE_FCAT_NEW
*&---------------------------------------------------------------------*
*&
Module STATUS_0300 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_0300 OUTPUT.
SET PF-STATUS 'ZSTATUS_0300'.
* SET TITLEBAR 'xxx'.
IF go_alv2 IS INITIAL.
CREATE OBJECT go_container2
EXPORTING
container_name
= 'CUSTOM_CONTAINER2'
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.
CREATE OBJECT go_alv2
EXPORTING
i_parent
= go_container2
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS
= 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*
PERFORM create_fcat_new CHANGING gt_fcat.
PERFORM create_layout CHANGING gwa_layout.

*
*

CALL METHOD go_alv2->set_table_for_first_display


EXPORTING
is_variant
= gs_variant
i_save
= 'A'
i_default
= 'X'
is_layout
= gwa_layout_new
CHANGING
it_outtab
= gt_open_pr_po
it_fieldcatalog
= gt_fcat_200
IT_SORT
=
IT_FILTER
=
EXCEPTIONS
invalid_parameter_combination = 1
program_error
= 2
too_many_lines
= 3

*
*
*
*
*
*
*
*
*
*
*
*
*

OTHERS
= 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CREATE OBJECT go_event.
SET HANDLER go_event->handle_hotspot_po FOR go_alv .
CALL METHOD go_alv2->free
EXCEPTIONS
cntl_error
= 1
cntl_system_error = 2
OTHERS
= 3.
CALL METHOD go_container2->free
EXCEPTIONS
cntl_error
= 1
cntl_system_error = 2
OTHERS
= 3.

ENDIF.
ENDMODULE.
" STATUS_0300 OUTPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0300 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_0300 INPUT.
ok_code_300 = ok_code.
CLEAR ok_code.
CASE ok_code_300.
WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
CALL METHOD go_alv2->free( ).
CLEAR go_alv2.
CALL METHOD go_container2->free( ).
CLEAR go_container2.
LEAVE TO SCREEN 100.
CLEAR ok_code_300.
ENDCASE.
ENDMODULE.
" USER_COMMAND_0300 INPUT
*&---------------------------------------------------------------------*
*&
Form SAVE_LIST
*&---------------------------------------------------------------------*
FORM save_list .
*-- Export results to cluster table.
TRY.
CALL METHOD zcl_general_cluster_table=>export_pp
EXPORTING
im_utext
= p_utext
im_data_t
= gt_final
im_ekko_ekpo = gt_ekko_ekpo
im_eban
= gt_eban
im_lfa1
= gt_lfa1.
CATCH zcx_common_exceptions INTO cx_gen.
gv_error = cx_gen->get_message( ).
MESSAGE gv_error TYPE 'I'.
EXIT.

ENDTRY.
COMMIT WORK.
ENDFORM.
" SAVE_LIST
*******************************************************************************

You might also like