Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

wrong column total in editable alv

former_member574106
Participant
0 Kudos

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

1 ACCEPTED SOLUTION

former_member184158
Active Contributor
0 Kudos

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

4 REPLIES 4

former_member184158
Active Contributor
0 Kudos

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

0 Kudos

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

0 Kudos

Hi,

could you post your complete code, ZIP and I will try it out.

Regards

Ibr

0 Kudos

Hi Ibrahim,

I solved the issue myself. Thanks a lot for the tips.

Regards,

Saurav Lahiry