08-05-2015 4:32 PM
Hi Friends,
I am Saurav Lahiry. I am currently designing an editable ALV using CL_GUI_ALV_GRID. In my object, on clicking the checkbox, a FM POPUP_TO_CONFIRM is triggered. If we click on yes, we can enter our own amount in the field AMOUNTSELECTED. In this grid, we can select multiple rows at a time. If we click no, then the amount gets transferred from the AMOUNT field to AMOUNTSELECTED automatically. The issue is when i am doing partial transfer using checkbox, the column AMOUNTSELECTED is not showing the correct total. But when i am clicking no, on full transfer, the total is coming exactly correct. I have done AMOUNTSELECTED-DO_SUM = 'X' in the fieldcatalog. What is the error ? Please reply with corrections in the code. Please check the code and screenshots for complete understanding.
Regards,
Saurav Lahiry
08-05-2015 5:21 PM
HI,
when you click on checkbox, so call the method refresh.
grid->refresh_table_display(
exporting
is_stable = is_stable
exceptions
finished = 1
others = 2
).
Regards
Ibr
08-05-2015 5:21 PM
HI,
when you click on checkbox, so call the method refresh.
grid->refresh_table_display(
exporting
is_stable = is_stable
exceptions
finished = 1
others = 2
).
Regards
Ibr
08-06-2015 5:54 PM
Hi Ibrahim,
I used refresh grid . But my column total is still not coming correct. Please reply with corrections in code.
Regards,
Saurav Lahiry
METHOD: ON_CHK_CLICK.
DATA : C_X(1) TYPE C.
DATA : LV_VALID TYPE C.
DATA TABIX(10).
DATA : R_UCOMM LIKE SY-UCOMM.
DATA : p_char(1) TYPE c.
FIELD-SYMBOLS: <LFA_DATA> LIKE LINE OF IT_BSID.
LOOP AT IT_BSID ASSIGNING <LFA_DATA>.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = E_ROW_ID
IMPORTING
OUTPUT = TABIX.
IF SY-TABIX EQ TABIX.
IF <LFA_DATA>-CHB IS INITIAL.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TEXT_QUESTION = 'Would u like to enter amount'
TEXT_BUTTON_1 = 'YES'
TEXT_BUTTON_2 = 'NO'
IMPORTING
ANSWER = C_X.
IF C_X = '1'.
<LFA_DATA>-CHB = 'X'.
O_GRID->REFRESH_TABLE_DISPLAY( ).
CREATE OBJECT LO_EVENT_HANDLER.
CALL METHOD lo_event_handler->handle_data_changed.
ELSEIF C_X = '2'.
<LFA_DATA>-AMOUNTSELECTED = <LFA_DATA>-DMBTR.
<LFA_DATA>-BALANCE = <LFA_DATA>-DMBTR - <LFA_DATA>-AMOUNTSELECTED.
MODIFY IT_BSID FROM <LFA_DATA> .
ENDIF.
ELSE.
CLEAR <LFA_DATA>-CHB.
ENDIF.
* BREAK-POINT.
* MODIFY IT_BSID FROM <LFA_DATA>.
ENDIF.
ENDLOOP.
CLEAR: IT_BSID_TEMP[].
LOOP AT IT_BSID INTO WA_BSID.
MOVE-CORRESPONDING WA_BSID TO WA_BSID_TEMP.
APPEND WA_BSID_TEMP TO IT_BSID_TEMP.
ENDLOOP.
IF O_GRID IS NOT INITIAL.
METHOD HANDLE_DATA_CHANGED.
PERFORM HANDLE_DATA_CHANGED USING ER_DATA_CHANGED .
FORM HANDLE_DATA_CHANGED USING P_ER_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
DATA: lv_changed TYPE lvc_s_modi.
DATA : lv_tab TYPE lvc_t_modi.
FIELD-SYMBOLS : <LFA_DATA_BSID> LIKE LINE OF it_bsid.
DATA: INDEX_ROWS TYPE LVC_T_ROW,
INDEX LIKE LINE OF INDEX_ROWS.
IF p_er_data_changed IS NOT INITIAL.
LOOP AT p_er_data_changed->mt_good_cells INTO lv_changed
WHERE fieldname = 'AMOUNTSELECTED'.
* LOOP AT lv_tab INTO lv_changed .
READ TABLE it_bsid INDEX lv_changed-row_id ASSIGNING <lfa_data_bsid>.
IF sy-subrc = 0.
MOVE lv_changed-value TO <LFA_DATA_bsid>-amountselected.
<LFA_DATA_BSID>-balance = <LFA_DATA_BSID>-dmbtr - <LFA_DATA_BSID>-amountselected.
MODIFY it_bsid FROM <LFA_DATA_bsid> INDEX lv_changed-row_id TRANSPORTING AMOUNTSELECTED BALANCE.
* CLEAR <LFA_DATA_bsiK2>-amountselected.
ENDIF.
* ENDLOOP.
*ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " HANDLE_DATA_CHANGED
MODULE STATUS_8000 OUTPUT.
CALL METHOD O_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_VARIANT = W_VARIANT
I_SAVE = 'X'
IS_LAYOUT = G_R_LAYO
* IS_PRINT = WA_PRINT
CHANGING
IT_OUTTAB = IT_BSID_TEMP[]
IT_FIELDCATALOG = LT_FIELDCAT
IT_SORT = I_SORT2
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
*NEW-PAGE PRINT OFF.
COMMIT WORK.
DATA : lv_user TYPE rspouser.
*SELECT MAX( rqident ) INTO lv_spool FROM tsp01 WHERE rqclient = sy-mandt AND rqowner = lv_user.
o_grid->register_edit_event( cl_gui_alv_grid=>mc_evt_enter ).
o_grid->register_edit_event( cl_gui_alv_grid=>mc_evt_modified ).
o_grid->check_changed_data( ).
CREATE OBJECT LO_EVENT_HANDLER.
SET HANDLER LO_EVENT_HANDLER->ON_CHB_CLICK FOR O_GRID.
SET HANDLER LO_EVENT_HANDLER->ON_CHK_CLICK FOR O_GRID.
SET HANDLER LO_EVENT_HANDLER->handle_data_changed FOR O_GRID.
ELSE.
CALL METHOD O_GRID->REFRESH_TABLE_DISPLAY
EXCEPTIONS
FINISHED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
ENDIF.
ENDIF.
ENDIF.
ENDMODULE.
*IF sy-s
08-06-2015 6:24 PM
Hi,
could you post your complete code, ZIP and I will try it out.
Regards
Ibr
08-07-2015 5:35 PM
Hi Ibrahim,
I solved the issue myself. Thanks a lot for the tips.
Regards,
Saurav Lahiry