2017 Aug 14 7:31 PM
Hi Gurus,
I have developed a OOABAP report which contain a dropdown fields with 3 values A,B and C. So when A get selected and press enter then few fields will get enabled and when B is selected then some other combination of fields should get enabled.
My issue is when i am selecting A or B or C for first time it is working fine and the required fields are getting enabled, but it is not working when i am selecting second time any other values(A or B or C) after that. I have tried using refresh_table_display method also but is not working.
Please help in fixing this issue. Please find the attached below.
REPORT zsd_maintain_mfn.
TABLES: zsd_mfn, abap, icon.
DATA : lt_mfn TYPE STANDARD TABLE OF zsd_mfn,
ls_mfn TYPE zsd_mfn.
TYPES: BEGIN OF ty_alv_out,
priority TYPE zsd_mfn-priority,
kunag TYPE zsd_mfn-kunag,
kunwe TYPE zsd_mfn-kunwe,
ecust TYPE zsd_mfn-ecust,
name1 TYPE zsd_mfn-name1,
mpn TYPE zsd_mfn-mpn,
mfn TYPE zsd_mfn-mfn,
drop_down_handle TYPE int4,
celltab TYPE lvc_t_styl,
color_line(4),
END OF ty_alv_out.
*DATA gt_alv_out TYPE TABLE OF ty_alv_out.
DATA:BEGIN OF gt_alv_out OCCURS 0,
priority TYPE zsd_mfn-priority,
kunag TYPE zsd_mfn-kunag,
kunwe TYPE zsd_mfn-kunwe,
ecust TYPE zsd_mfn-ecust,
name1 TYPE zsd_mfn-name1,
mpn TYPE zsd_mfn-mpn,
mfn TYPE zsd_mfn-mfn,
drop_down_handle TYPE int4,
celltab TYPE lvc_t_styl,
color_line(4),
END OF gt_alv_out.
DATA:gs_alv_out LIKE LINE OF gt_alv_out.
DATA g_grid TYPE REF TO cl_gui_alv_grid. "alv grid
DATA gt_fieldcat TYPE lvc_t_fcat. "fieldcatalog
DATA gs_layout TYPE lvc_s_layo. "layout
DATA ok_code LIKE sy-ucomm. "ok code
DATA g_splitter TYPE REF TO cl_gui_splitter_container. "splitter
DATA g_contnr_top TYPE REF TO cl_gui_container. "container - top
DATA g_contnr_bot TYPE REF TO cl_gui_container. "container - bottom
DATA g_html TYPE REF TO cl_dd_document. "html for alv commentary
DATA gv_header TYPE sdydo_text_element. "alv header
DATA gt_exclude TYPE ui_functions. "alv toolbar buttons
DATA gv_mode TYPE string.
DATA gv_error TYPE boolean.
DATA gt_mfn_del TYPE TABLE OF zsd_mfn.
DATA gs_mfn TYPE zsd_mfn.
DATA:lx_fieldcat LIKE LINE OF gt_fieldcat.
DATA lv_priority TYPE zpriority.
DATA gt_changed_rows TYPE TABLE OF int4.
DATA gs_stable TYPE lvc_s_stbl.
*----------------------------------------------------------------------*
* CLASS lcl_events DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_events DEFINITION.
PUBLIC SECTION.
* Method to implement user commands
METHODS handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
* Add new functional buttons to the ALV toolbar
METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
METHODS handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS. "lcl_events DEFINITION
*---------------------------------------------------------------------*
* MAIN *
*---------------------------------------------------------------------*
CALL SCREEN 100.
*----------------------------------------------------------------------*
* CLASS lcl_events IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_events IMPLEMENTATION.
METHOD handle_user_command.
PERFORM handle_user_command USING e_ucomm.
ENDMETHOD. "handle_user_command
METHOD handle_toolbar.
AUTHORITY-CHECK OBJECT 'ZMFN'
ID 'ACTVT' FIELD '02'.
IF sy-subrc EQ 0.
PERFORM handle_toolbar USING e_object e_interactive .
ENDIF.
ENDMETHOD . "handle_toolbar
METHOD handle_data_changed.
IF er_data_changed IS NOT INITIAL.
PERFORM handle_data_changed USING er_data_changed.
ENDIF.
ENDMETHOD. "handle_data_changed
ENDCLASS. "lcl_events IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form handle_user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->I_UCOMM text
*----------------------------------------------------------------------*
FORM handle_user_command USING i_ucomm TYPE syucomm.
DATA lt_index_rows TYPE lvc_t_row.
DATA lt_row_no TYPE lvc_t_roid.
DATA ls_row_no TYPE lvc_s_roid.
DATA lv_row_count TYPE i.
DATA ls_alv_out TYPE ty_alv_out.
DATA lt_alv_copy TYPE TABLE OF ty_alv_out.
DATA lv_valid(1).
DATA lv_answer(1).
DATA ls_row_info TYPE lvc_s_row.
DATA ls_col_info TYPE lvc_s_col.
DATA ls_row_id TYPE lvc_s_roid.
DATA lv_lines TYPE i.
g_grid->check_changed_data( IMPORTING e_valid = lv_valid ).
g_grid->get_scroll_info_via_id( IMPORTING es_row_info = ls_row_info
es_col_info = ls_col_info
es_row_no = ls_row_id ).
CASE i_ucomm .
WHEN 'EDIT'.
g_grid->refresh_table_display( ).
IF g_grid->is_ready_for_input( ) EQ 0.
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
ELSE.
IF g_grid->is_ready_for_input( ) EQ 1.
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 0.
ENDIF.
ENDIF.
WHEN 'ADD'.
g_grid->refresh_table_display( ).
ls_alv_out-drop_down_handle = 1.
DESCRIBE TABLE gt_alv_out LINES lv_lines.
ls_row_id-row_id = lv_lines.
APPEND ls_alv_out TO gt_alv_out.
CLEAR ls_alv_out.
WHEN 'DEL'.
g_grid->get_selected_rows( IMPORTING et_index_rows = lt_index_rows
et_row_no = lt_row_no ).
IF lt_row_no[] IS NOT INITIAL.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = text-020
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF lv_answer <> '1'.
LEAVE LIST-PROCESSING.
ELSEIF lv_answer = '1'.
LOOP AT lt_row_no INTO ls_row_no.
READ TABLE gt_alv_out INTO ls_alv_out INDEX ls_row_no-row_id.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING ls_alv_out TO gs_mfn.
APPEND gs_mfn TO gt_mfn_del.
CLEAR ls_alv_out.
ENDIF.
ENDLOOP.
* now delete the records
LOOP AT gt_mfn_del INTO gs_mfn.
DELETE gt_alv_out WHERE ecust = gs_mfn-ecust
AND name1 = gs_mfn-name1
AND mpn = gs_mfn-mpn
AND mfn = gs_mfn-mfn.
ENDLOOP.
g_grid->refresh_table_display( ).
ENDIF.
ENDIF.
WHEN 'COPY'.
g_grid->get_selected_rows( IMPORTING et_index_rows = lt_index_rows
et_row_no = lt_row_no ).
IF lt_row_no[] IS NOT INITIAL.
LOOP AT lt_row_no INTO ls_row_no.
READ TABLE gt_alv_out INTO ls_alv_out INDEX ls_row_no-row_id.
IF sy-subrc EQ 0.
APPEND ls_alv_out TO lt_alv_copy.
CLEAR ls_alv_out.
ENDIF.
ENDLOOP.
DESCRIBE TABLE gt_alv_out LINES lv_lines.
ls_row_id-row_id = lv_lines.
LOOP AT lt_alv_copy INTO ls_alv_out.
CLEAR ls_alv_out-celltab.
APPEND ls_alv_out TO gt_alv_out.
CLEAR ls_alv_out.
ENDLOOP.
CLEAR lt_alv_copy[].
g_grid->refresh_table_display( ).
ENDIF.
WHEN 'REPL'.
g_grid->get_selected_rows( IMPORTING et_index_rows = lt_index_rows
et_row_no = lt_row_no ).
IF lt_row_no[] IS NOT INITIAL.
LOOP AT lt_row_no INTO ls_row_no.
READ TABLE gt_alv_out INTO ls_alv_out INDEX ls_row_no-row_id.
IF sy-subrc EQ 0.
DELETE gt_alv_out INDEX sy-tabix.
APPEND ls_alv_out TO lt_alv_copy.
MOVE-CORRESPONDING ls_alv_out TO gs_mfn.
APPEND gs_mfn TO gt_mfn_del.
CLEAR ls_alv_out.
ENDIF.
ENDLOOP.
DESCRIBE TABLE gt_alv_out LINES lv_lines.
ls_row_id-row_id = lv_lines.
LOOP AT lt_alv_copy INTO ls_alv_out.
CLEAR ls_alv_out-celltab.
APPEND ls_alv_out TO gt_alv_out.
CLEAR ls_alv_out.
ENDLOOP.
CLEAR lt_alv_copy[].
g_grid->refresh_table_display( ).
ENDIF.
WHEN 'SAVE'.
PERFORM update_data.
ENDCASE.
g_grid->refresh_table_display( ).
g_grid->set_scroll_info_via_id( EXPORTING
is_col_info = ls_col_info
is_row_no = ls_row_id ).
ENDFORM. "handle_user_command
*&---------------------------------------------------------------------*
*& Form handle_toolbar
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PR_DATA_CHANGED text
*----------------------------------------------------------------------*
FORM handle_toolbar USING i_object TYPE REF TO cl_alv_event_toolbar_set
i_interactive.
DATA: ls_toolbar TYPE stb_button.
DEFINE build_toolbar.
move &1 to ls_toolbar-function.
move &2 to ls_toolbar-icon.
move &3 to ls_toolbar-text.
move 0 to ls_toolbar-butn_type.
append ls_toolbar to i_object->mt_toolbar.
clear ls_toolbar.
END-OF-DEFINITION.
build_toolbar: 'EDIT' icon_change ''.
IF g_grid->is_ready_for_input( ) EQ 1.
build_toolbar: 'ADD' icon_insert_row '',
'DEL' icon_delete_row '',
'COPY' icon_copy_object 'Copy',
'REPL' icon_replace 'Edit Line',
'SAVE' icon_system_save 'Save'.
ENDIF.
ENDFORM. "handle_toolbar
*&---------------------------------------------------------------------*
*& Form HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PR_DATA_CHANGED text
*----------------------------------------------------------------------*
FORM handle_data_changed USING pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
DATA lv_ecust TYPE kunnr.
DATA lv_name1 TYPE name1.
DATA ls_good_cells TYPE lvc_s_modi.
DATA lt_celltab TYPE lvc_t_styl.
DATA ls_row_info TYPE lvc_s_row.
DATA ls_col_info TYPE lvc_s_col.
DATA ls_row_id TYPE lvc_s_roid.
FIELD-SYMBOLS <fs_alv_out> TYPE ty_alv_out.
FIELD-SYMBOLS <fs_any> TYPE any.
DEFINE get_cell_value.
call method pr_data_changed->get_cell_value
exporting
i_row_id = &1
i_fieldname = &2
importing
e_value = &3.
END-OF-DEFINITION.
DEFINE modify_cell.
call method pr_data_changed->modify_cell
exporting
i_row_id = &1
i_fieldname = &2
i_value = &3.
read table gt_alv_out assigning <fs_alv_out>
index &1.
if sy-subrc eq 0.
assign component &2 of structure <fs_alv_out> to <fs_any>.
<fs_any> = &3.
endif.
END-OF-DEFINITION.
CLEAR gv_error.
LOOP AT pr_data_changed->mt_good_cells INTO ls_good_cells.
APPEND ls_good_cells-row_id TO gt_changed_rows.
CASE ls_good_cells-fieldname.
WHEN 'PRIORITY'.
CLEAR lt_celltab[].
** CLEAR:lx_fieldcat.
** SORT gt_fieldcat[] BY fieldname.
get_cell_value ls_good_cells-row_id ls_good_cells-fieldname lv_priority.
IF lv_priority EQ 'A'.
PERFORM fill_celltab USING 'RW' lv_priority
CHANGING lt_celltab.
ELSEIF lv_priority = 'B'.
PERFORM fill_celltab USING 'RW' lv_priority
CHANGING lt_celltab.
ELSEIF lv_priority = 'C'.
PERFORM fill_celltab USING 'RW' lv_priority
CHANGING lt_celltab.
ENDIF.
modify_cell ls_good_cells-row_id 'PRIORITY' lv_priority.
modify_cell ls_good_cells-row_id 'CELLTAB' lt_celltab.
g_grid->refresh_table_display( EXPORTING i_soft_refresh = 'X' ).
ls_col_info-fieldname = 'PRIORITY'.
ls_row_id-row_id = ls_good_cells-row_id.
* set scroll bar to current row being edited
g_grid->set_scroll_info_via_id( EXPORTING
* IS_ROW_INFO =
is_col_info = ls_col_info
is_row_no = ls_row_id ).
CLEAR:lv_priority,ls_good_cells,ls_col_info,ls_row_id.
WHEN 'ECUST'.
CLEAR: lv_ecust, lv_name1.
get_cell_value ls_good_cells-row_id ls_good_cells-fieldname lv_ecust.
CHECK lv_ecust IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_ecust
IMPORTING
output = lv_ecust.
PERFORM get_customer_name USING lv_ecust lv_name1.
IF sy-subrc EQ 0.
modify_cell ls_good_cells-row_id 'NAME1' lv_name1.
ELSE.
CALL METHOD pr_data_changed->add_protocol_entry
EXPORTING
i_msgid = '0K'
i_msgno = '000'
i_msgty = 'E'
i_msgv1 = text-001
i_msgv2 = lv_ecust
i_fieldname = ls_good_cells-fieldname
i_row_id = ls_good_cells-row_id.
ENDIF.
ENDCASE.
ENDLOOP.
PERFORM display_alv.
ENDFORM. " HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
*& Form GET_CUSTOMER_NAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->KUNNR text
* -->NAME1 text
*----------------------------------------------------------------------*
FORM get_customer_name USING kunnr TYPE kunnr name1 TYPE name1.
SELECT SINGLE name1 FROM kna1 INTO name1
WHERE kunnr = kunnr.
ENDFORM. " GET_CUSTOMER_NAME
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display_alv.
DATA container TYPE REF TO cl_gui_custom_container.
DATA lr_event_handler TYPE REF TO lcl_events.
CREATE OBJECT lr_event_handler.
CREATE OBJECT container
EXPORTING
container_name = 'CONT'.
CREATE OBJECT g_splitter
EXPORTING
parent = container
rows = 1
columns = 1.
g_contnr_top = g_splitter->get_container( row = 1 column = 1 ).
CREATE OBJECT g_grid
EXPORTING
i_parent = g_contnr_top.
CREATE OBJECT g_html
EXPORTING
style = 'ALV_GRID'.
* Display the ALV grid
* Build the fieldcatalog
* IF gt_changed_rows[] IS INITIAL.
PERFORM build_fcat.
* ENDIF.
PERFORM set_drdn_table.
PERFORM exclude_tb_functions.
SET HANDLER lr_event_handler->handle_toolbar FOR g_grid .
gs_layout-stylefname = 'CELLTAB'.
gs_layout-sel_mode = 'A'.
gs_layout-info_fname = 'COLOR_LINE'.
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = gt_exclude
CHANGING
it_outtab = gt_alv_out[]
it_fieldcatalog = gt_fieldcat
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.
CALL METHOD g_grid->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = gt_fieldcat.
CALL METHOD g_grid->refresh_table_display( ).
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CALL METHOD g_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter. "register enter event
CALL METHOD g_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified. "register enter event
SET HANDLER lr_event_handler->handle_user_command FOR g_grid.
SET HANDLER lr_event_handler->handle_data_changed FOR g_grid.
ENDFORM. "display_alv
*&---------------------------------------------------------------------*
*& Form BUILD_FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_fcat .
DEFINE build_alv_fcat.
lx_fieldcat-fieldname = &1.
lx_fieldcat-tabname = 'GT_ALV_OUT'.
if &2 is not initial.
lx_fieldcat-ref_table = &2.
else.
lx_fieldcat-seltext = &3.
lx_fieldcat-coltext = &3.
endif.
if &4 is not initial.
lx_fieldcat-edit = 'X'.
else.
lx_fieldcat-edit = space.
endif.
if &1 eq 'PRIORITY'.
lx_fieldcat-drdn_field = 'DROP_DOWN_HANDLE'.
lx_fieldcat-edit = 'X'.
lx_fieldcat-outputlen = 5.
else.
lx_fieldcat-outputlen = 20.
endif.
append lx_fieldcat to gt_fieldcat.
clear lx_fieldcat.
END-OF-DEFINITION.
CLEAR gt_fieldcat[].
build_alv_fcat: 'PRIORITY' 'ZSD_MFN' 'Priority' 'X', 'KUNAG' 'ZSD_MFN' 'Sold-to party' '',
'KUNWE' 'ZSD_MFN' 'Ship-to party' '',
'ECUST' 'ZSD_MFN' 'End customer number' '',
'NAME1' 'ZSD_MFN' 'Customer Name' '',
'MPN' 'ZSD_MFN' 'Marketing Part Number' 'X' ,
'MFN' 'ZSD_MFN' 'Manufacturing Part Number' 'X' .
ENDFORM. " BUILD_FCAT
*&---------------------------------------------------------------------*
*& Form exclude_tb_functions
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM exclude_tb_functions .
DATA ls_exclude TYPE ui_func.
DEFINE build_exclude_itab.
ls_exclude = &1.
append ls_exclude to gt_exclude.
END-OF-DEFINITION.
* exclude all the toolbar buttons except the download to excel
build_exclude_itab: cl_gui_alv_grid=>mc_fc_loc_undo,
cl_gui_alv_grid=>mc_fc_loc_copy_row,
cl_gui_alv_grid=>mc_fc_loc_delete_row,
cl_gui_alv_grid=>mc_fc_loc_append_row,
cl_gui_alv_grid=>mc_fc_loc_move_row,
cl_gui_alv_grid=>mc_fc_loc_copy,
cl_gui_alv_grid=>mc_fc_loc_cut,
cl_gui_alv_grid=>mc_fc_loc_paste,
cl_gui_alv_grid=>mc_fc_loc_paste_new_row,
cl_gui_alv_grid=>mc_fc_check,
cl_gui_alv_grid=>mc_fc_refresh,
cl_gui_alv_grid=>mc_fc_minimum,
cl_gui_alv_grid=>mc_fc_maximum,
cl_gui_alv_grid=>mc_fc_views,
cl_gui_alv_grid=>mc_fc_sum,
cl_gui_alv_grid=>mc_fc_graph,
cl_gui_alv_grid=>mc_fc_average,
cl_gui_alv_grid=>mc_fc_find,
cl_gui_alv_grid=>mc_fc_info,
cl_gui_alv_grid=>mc_fc_loc_insert_row.
ENDFORM. "exclude_tb_functions
*&---------------------------------------------------------------------*
*& Module PBO_100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pbo_100 OUTPUT.
* Display the titlebar and application toolbar buttons
SET TITLEBAR 'ZSD_MFN'.
SET PF-STATUS 'MAIN'.
PERFORM init_data.
* Display the ALV grid
PERFORM display_alv.
ENDMODULE. " PBO_100 OUTPUT
*&---------------------------------------------------------------------*
*& Form init_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM init_data.
* TYPES: BEGIN OF ty_cust_name,
* kunnr TYPE kunnr,
* name1 TYPE name1,
* END OF ty_cust_name.
DATA lt_mfn TYPE TABLE OF zsd_mfn.
DATA ls_mfn TYPE zsd_mfn.
* DATA lt_cust_name TYPE TABLE OF ty_cust_name.
* DATA ls_cust_name TYPE ty_cust_name.
DATA ls_alv_out TYPE ty_alv_out.
DATA lt_celltab TYPE lvc_t_styl.
DATA:lt_f4 TYPE lvc_t_f4,
wa_f4 LIKE LINE OF lt_f4.
* DEFINE get_customer_name.
* read table lt_cust_name into ls_cust_name
* with key kunnr = &1.
* &2 = ls_cust_name-name1.
* clear ls_cust_name.
* END-OF-DEFINITION.
*
CLEAR gt_alv_out[].
SELECT * FROM zsd_mfn INTO TABLE lt_mfn.
* IF sy-subrc EQ 0.
* SELECT kunnr name1 FROM kna1 INTO TABLE lt_cust_name
* FOR ALL ENTRIES IN lt_mfn
* WHERE kunnr = lt_mfn-ecust.
LOOP AT lt_mfn INTO ls_mfn.
MOVE-CORRESPONDING ls_mfn TO ls_alv_out.
* get_customer_name ls_mfn-ecust ls_alv_out-name1.
ls_alv_out-drop_down_handle = 1.
APPEND ls_alv_out TO gt_alv_out.
CLEAR: ls_alv_out.
ENDLOOP.
* ENDIF.
CREATE OBJECT g_grid
EXPORTING
i_parent = g_contnr_top.
* Set editable cells to ready for input initially
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CLEAR wa_f4.
wa_f4-fieldname = 'PRIORITY'.
wa_f4-register = 'X'.
wa_f4-getbefore = 'X'.
wa_f4-chngeafter = 'X'.
APPEND wa_f4 TO lt_f4.
CALL METHOD g_grid->register_f4_for_fields
EXPORTING
it_f4 = lt_f4.
*End OF Change
ENDFORM. "init_data
*&---------------------------------------------------------------------*
*& Module PAI_100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pai_100 INPUT.
DATA lv_answer(1).
DATA lv_exit TYPE abap_bool.
DATA:w_valid TYPE char1.
* IF gt_changed_rows[] IS NOT INITIAL.
* CALL FUNCTION 'POPUP_TO_CONFIRM'
* EXPORTING
* text_question = text-021
* IMPORTING
* answer = lv_answer
* EXCEPTIONS
* text_not_found = 1
* OTHERS = 2.
* IF lv_answer <> '1'.
* lv_exit = abap_false.
* ELSE.
* lv_exit = abap_true.
* ENDIF.
* ELSE.
* lv_exit = abap_true.
* ENDIF.
* CHECK lv_exit = abap_true.
* CALL METHOD g_grid->check_changed_data
*IMPORTING
*e_valid = w_valid.
CASE ok_code.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " PAI_100 INPUT
*&---------------------------------------------------------------------*
*& Form update_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM update_data.
DATA ls_alv_out LIKE LINE OF gt_alv_out.
DATA lv_row_num TYPE int4.
DATA lt_ecmpn TYPE TABLE OF zsd_ecmpn.
DATA ls_ecmpn TYPE zsd_ecmpn.
DATA lv_valid TYPE c.
DATA lt_index_rows TYPE lvc_t_row.
DATA ls_index_rows LIKE LINE OF lt_index_rows.
g_grid->check_changed_data( IMPORTING e_valid = lv_valid ).
IF lv_valid IS NOT INITIAL.
SORT gt_changed_rows ASCENDING.
DELETE ADJACENT DUPLICATES FROM gt_changed_rows.
IF gt_changed_rows[] IS NOT INITIAL OR gt_mfn_del[] IS NOT INITIAL.
LOOP AT gt_changed_rows INTO lv_row_num.
READ TABLE gt_alv_out INTO ls_alv_out
INDEX lv_row_num.
MOVE-CORRESPONDING ls_alv_out TO ls_mfn.
APPEND ls_mfn TO lt_mfn.
CLEAR ls_mfn.
ENDLOOP.
IF gv_error EQ abap_false.
LOOP AT gt_mfn_del INTO ls_mfn.
DELETE zsd_mfn FROM ls_mfn.
ENDLOOP.
MODIFY zsd_mfn FROM TABLE lt_mfn.
IF sy-subrc EQ 0.
CLEAR: gt_mfn_del[], gt_changed_rows[].
MESSAGE 'Changes have been saved'(004) TYPE 'S'.
PERFORM init_data.
ENDIF.
ENDIF.
ENDIF.
CLEAR ls_mfn.
ELSE.
MESSAGE 'No changes made'(003) TYPE 'I'.
ENDIF.
ENDFORM. "update_data
*&---------------------------------------------------------------------*
*& Form SET_DRDN_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM set_drdn_table .
DATA: lt_dropdown TYPE lvc_t_drop,
ls_dropdown TYPE lvc_s_drop.
ls_dropdown-handle = '1'.
ls_dropdown-value = 'A'.
APPEND ls_dropdown TO lt_dropdown.
ls_dropdown-handle = '1'.
ls_dropdown-value = 'B'.
APPEND ls_dropdown TO lt_dropdown.
ls_dropdown-handle = '1'.
ls_dropdown-value = 'C'.
APPEND ls_dropdown TO lt_dropdown.
CALL METHOD g_grid->set_drop_down_table
EXPORTING
it_drop_down = lt_dropdown.
ENDFORM. " SET_DRDN_TABLE
*&---------------------------------------------------------------------*
*& Form FILL_CELLTAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fill_celltab USING value(p_mode)
value(p_priority)
CHANGING pt_celltab TYPE lvc_t_styl.
DATA: ls_celltab TYPE lvc_s_styl,
l_mode TYPE raw4.
l_mode = cl_gui_alv_grid=>mc_style_enabled.
IF p_priority EQ 'A'.
CLEAR ls_celltab.
ls_celltab-fieldname = 'PRIORITY'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'KUNAG'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'KUNWE'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'ECUST'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'NAME1'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'MPN'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'MFN'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ELSEIF p_priority EQ 'B' .
CLEAR ls_celltab.
ls_celltab-fieldname = 'PRIORITY'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'KUNAG'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'KUNWE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'ECUST'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'NAME1'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'MPN'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'MFN'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ELSE.
CLEAR ls_celltab.
ls_celltab-fieldname = 'PRIORITY'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'KUNAG'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'KUNWE'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'ECUST'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'NAME1'.
ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'MPN'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ls_celltab-fieldname = 'MFN'.
ls_celltab-style = l_mode.
INSERT ls_celltab INTO TABLE pt_celltab.
ENDIF.
ENDFORM. " FILL_CELLTAB
<br>
Thanks and Regards,
Ajay
2017 Aug 14 8:19 PM
Looks like your lt_celltab is same for all rows in gt_alv_out[], it should be different for each row. Since in one row you can fill A and B and other row you could fille B and C only.
2017 Aug 15 3:03 AM
Hi Jai,
IT_CELLTAB is different actually for each row. When 'A' is selected it is enabling 'KUNWE' and 'ECUST' and when 'B' is selected it is enabling 'KUNAG' and 'ECUST' and when C is selected only 'ECUST' is getting enabled. Other's fields like 'PRIORITY' 'MFN' and 'MPN' are enabled for all rows.
Please provide your inputs how to fix this issue.
Regards,
Ajay
2017 Aug 15 3:39 PM
its hard to say, since your code has most Ztable cannot really make a copy and work on it. You need to figure out .. after refresh_table output table actually would change. so make sure celltab has all the values you like to.
2017 Aug 15 6:29 PM
Hi jay,
Thanks for your time and response.
I checked what you said like internal table gt_alv_out has exactly same fields characteristics what i needed after refresh_table statement but still it's not getting reflected in output. Don't know what is the issue. Any other guess...
Please find the custom table structure below.
2017 Aug 15 9:05 AM
HI gurus,
Any help for the above issue will be really helpful and appreciated.
It's little urgent.
Regards,
Ajay