‎2009 Mar 26 10:29 AM
Hi ,
I am doing a ALV report in grid display with one colounm editble(to enter percentage). As soon as i enter some percentage in that column, net amount has to calculated and display in the next column of grid display.
Here my issue is, once i enter the percentage in that editable column, the calculated net amount is not displayed the next colunm, i have written my calculation part in user command. But inside user command what ever value entered in the ALV is not reflecting in the first time.
Please adjust me a solution to proceed further.
Thanks in Adavance,
Aswin.
‎2009 Mar 26 11:12 AM
Hi,
Use container to display the alv using
CREATE OBJECT gr_cont_bl
EXPORTING
container_name = '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.
endif.
if not gr_grid is bound.
CREATE OBJECT gr_grid
EXPORTING
i_parent = gr_cont_bl
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.
CALL METHOD gr_grid->set_table_for_first_display
EXPORTING
is_layout = wa_layout
CHANGING
it_outtab = gt_bloc[]
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.
Set editable cells to ready for input initially
CALL METHOD gr_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
And After doing the calculation use the following method
data: ls_ref type LVC_S_STBL.
CALL METHOD gr_grid->refresh_table_display
EXPORTING
is_stable = ls_ref
i_soft_refresh = 'X'
EXCEPTIONS
finished = 1
others = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
‎2009 Mar 26 10:54 AM
Form Use_COmmand R_ucomm type sy-ucomm
r_slis type slis_selfield.
CASE R_UCOMM.
When 'Cal'.
1)Perform Calculation .
2)Update the internal table " Beacuse you need to update the internal table for the field to get reflected.
3) Check whether the internal table to be displayed on the grid is updating
ENDFORM.Regards,
Gurpreet
‎2009 Mar 26 11:05 AM
Gurpreet,
while performing calculation, i am not getting the entered percentage in the first time. when click the button second time value is coming and caculated values are populated in alv layout. please tell me how can i get the entered value in first click of button itself.
regards,
aswin.
‎2009 Mar 26 12:06 PM
Just SLIS_FIELD-REFRESH = 'X'.
Or created a button with name Calculate and Fcode '&REFRESH'.
Perform Calculation Under '&Refresh'
All the data will be saved and passed to next field.
regards,
Gurpreet
‎2009 Mar 26 11:01 AM
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
I_CALLBACK_USER_COMMAND = 'PROCESS_USER_COMMANDS'
IS_LAYOUT_LVC = GD_LAYOUT
IT_FIELDCAT_LVC = IT_FIELDCAT
I_SAVE = 'U'
I_GRID_SETTINGS = LC_GLAY
TABLES
T_OUTTAB = I_FINAL
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
FORM PROCESS_USER_COMMANDS USING SYST-UCOMM LIKE SYST-UCOMM
SELFIELD TYPE SLIS_SELFIELD.
CASE SYST-UCOMM.
WHEN '&DATA_SAVE'.
Look for all changed records.
LOOP AT I_FINAL INTO WA_FINAL.
READ TABLE XX_FINAL INDEX SY-TABIX.
IF WA_FINAL <> XX_FINAL.
WA_FINAL-CS_N_PRICE = WA_FINAL-CS_L_PRICE - ( WA_FINAL-CS_L_PRICE * WA_FINAL-DISCOUNT ) / 100.
WA_FINAL-NETDIFF = WA_FINAL-CS_L_PRICE - WA_FINAL-CS_N_PRICE.
WA_FINAL-TOTPRICE = WA_FINAL-OUTBAL * WA_FINAL-CS_N_PRICE.
APPEND WA_FINAL TO ZZ_FINAL.
ELSE.
WA_FINAL-CS_N_PRICE = WA_FINAL-CS_L_PRICE - ( WA_FINAL-CS_L_PRICE * WA_FINAL-DISCOUNT ) / 100.
WA_FINAL-NETDIFF = WA_FINAL-CS_L_PRICE - WA_FINAL-CS_N_PRICE.
WA_FINAL-TOTPRICE = WA_FINAL-OUTBAL * WA_FINAL-CS_N_PRICE.
APPEND WA_FINAL TO ZZ_FINAL.
ENDIF.
ENDLOOP.
I_FINAL[] = ZZ_FINAL[].
REFRESH ZZ_FINAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
I_CALLBACK_PF_STATUS_SET = 'STATUS'
I_CALLBACK_USER_COMMAND = 'PROCESS_USER_COMMANDS'
IS_LAYOUT_LVC = GD_LAYOUT
IT_FIELDCAT_LVC = IT_FIELDCAT
I_SAVE = 'X'
I_GRID_SETTINGS = LC_GLAY
TABLES
T_OUTTAB = I_FINAL
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-UCOMM = '&F03'.
LEAVE TO SCREEN 0.
ELSEIF SY-UCOMM = 'BACK'.
LEAVE TO SCREEN 0.
ENDIF.
WHEN '&IC1'.
IF SELFIELD-FIELDNAME = 'MATNR'.
READ TABLE I_FINAL INTO WA_FINAL WITH KEY MATNR = SELFIELD-VALUE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_FINAL-MATNR
IMPORTING
OUTPUT = WA_FINAL-MATNR.
CONDENSE WA_FINAL-MATNR.
SORT I_BATCH BY MATNR VFDAT.
LOOP AT I_BATCH INTO WA_BATCH WHERE MATNR = WA_FINAL-MATNR.
READ TABLE I_ODQ INTO WA_ODQ WITH KEY MATNR = WA_BATCH-MATNR.
IF SY-SUBRC = 0.
IF WA_BATCH-LGORT = C_LGORT.
IF WA_BATCH-WERKS = '1100'.
V_Q_1100 = WA_BATCH-CLABS + V_Q_1100.
ELSEIF WA_BATCH-WERKS = '1101'.
V_Q_1101 = WA_BATCH-CLABS + V_Q_1101.
ENDIF.
ELSEIF WA_BATCH-LGORT = C_LGORT1.
IF WA_BATCH-WERKS = '1100'.
V_C_1100 = WA_BATCH-CLABS + V_C_1100.
ELSEIF WA_BATCH-WERKS = '1101'.
V_C_1101 = WA_BATCH-CLABS + V_C_1101.
ENDIF.
ENDIF.
AT NEW MATNR.
MOVE : WA_BATCH-MATNR TO WA_FINAL2-MATNR.
MOVE : WA_ODQ-OSOQ_1100 TO WA_FINAL2-V_MQ_1100.
MOVE : WA_ODQ-OSOQ_1101 TO WA_FINAL2-V_MQ_1101.
MOVE : WA_ODQ-ODOQ_1100 TO WA_FINAL2-V_CQ_1100.
MOVE : WA_ODQ-ODOQ_1101 TO WA_FINAL2-V_CQ_1101.
V_E = WA_FINAL2-V_MQ_1100 .
V_F = WA_FINAL2-V_MQ_1101 .
V_G = WA_FINAL2-V_CQ_1100 .
V_H = WA_FINAL2-V_CQ_1101 .
ENDAT.
CLEAR WA_ODQ-OSOQ_1100.
CLEAR WA_ODQ-OSOQ_1101.
CLEAR WA_ODQ-ODOQ_1100.
CLEAR WA_ODQ-ODOQ_1101.
WA_FINAL2-EXPDATE = WA_BATCH-VFDAT.
WA_FINAL2-STOPDATE = WA_BATCH-HSDAT + WA_BATCH-MAXLZ.
AT END OF CHARG.
V_LEN = STRLEN( WA_BATCH-CHARG ).
V_LEN1 = 10 - V_LEN.
MOVE : WA_BATCH-CHARG TO WA_FINAL2-CHARG+V_LEN1(V_LEN).
WA_FINAL2-V_Q_1100 = V_Q_1100.
WA_FINAL2-V_Q_1101 = V_Q_1101.
WA_FINAL2-V_C_1100 = V_C_1100.
WA_FINAL2-V_C_1101 = V_C_1101.
V_A = V_Q_1100 + V_A.
V_B = V_Q_1101 + V_B.
V_C = V_C_1100 + V_C.
V_D = V_C_1101 + V_D.
V_1 = V_A.
V_2 = V_B.
V_3 = V_C.
V_4 = V_D.
APPEND WA_FINAL2 TO I_FINAL2.
CLEAR V_Q_1100.
CLEAR V_Q_1101.
CLEAR V_C_1100.
CLEAR V_C_1101.
CLEAR WA_FINAL2-V_MQ_1100.
CLEAR WA_FINAL2-V_MQ_1101.
CLEAR WA_FINAL2-V_CQ_1100.
CLEAR WA_FINAL2-V_CQ_1101.
CLEAR WA_FINAL2-MATNR.
CLEAR WA_FINAL2-CHARG.
ENDAT.
ELSE.
IF WA_BATCH-LGORT = C_LGORT.
IF WA_BATCH-WERKS = '1100'.
V_Q_1100 = WA_BATCH-CLABS + V_Q_1100.
ELSEIF WA_BATCH-WERKS = '1101'.
V_Q_1101 = WA_BATCH-CLABS + V_Q_1101.
ENDIF.
ELSEIF WA_BATCH-LGORT = C_LGORT1.
IF WA_BATCH-WERKS = '1100'.
V_C_1100 = WA_BATCH-CLABS + V_C_1100.
ELSEIF WA_BATCH-WERKS = '1101'.
V_C_1101 = WA_BATCH-CLABS + V_C_1101.
ENDIF.
ENDIF.
AT NEW MATNR.
MOVE : WA_BATCH-MATNR TO WA_FINAL2-MATNR.
MOVE : WA_ODQ-OSOQ_1100 TO WA_FINAL2-V_MQ_1100.
MOVE : WA_ODQ-OSOQ_1101 TO WA_FINAL2-V_MQ_1101.
MOVE : WA_ODQ-ODOQ_1100 TO WA_FINAL2-V_CQ_1100.
MOVE : WA_ODQ-ODOQ_1101 TO WA_FINAL2-V_CQ_1101.
V_E = WA_FINAL2-V_MQ_1100 .
V_F = WA_FINAL2-V_MQ_1101 .
V_G = WA_FINAL2-V_CQ_1100 .
V_H = WA_FINAL2-V_CQ_1101 .
ENDAT.
CLEAR WA_ODQ-OSOQ_1100.
CLEAR WA_ODQ-OSOQ_1101.
CLEAR WA_ODQ-ODOQ_1100.
CLEAR WA_ODQ-ODOQ_1101.
WA_FINAL2-EXPDATE = WA_BATCH-VFDAT.
WA_FINAL2-STOPDATE = WA_BATCH-HSDAT + WA_BATCH-MAXLZ.
AT END OF CHARG.
V_LEN = STRLEN( WA_BATCH-CHARG ).
V_LEN1 = 10 - V_LEN.
MOVE : WA_BATCH-CHARG TO WA_FINAL2-CHARG+V_LEN1(V_LEN).
WA_FINAL2-V_Q_1100 = V_Q_1100.
WA_FINAL2-V_Q_1101 = V_Q_1101.
WA_FINAL2-V_C_1100 = V_C_1100.
WA_FINAL2-V_C_1101 = V_C_1101.
V_A = V_Q_1100 + V_A.
V_B = V_Q_1101 + V_B.
V_C = V_C_1100 + V_C.
V_D = V_C_1101 + V_D.
APPEND WA_FINAL2 TO I_FINAL2.
CLEAR V_Q_1100.
CLEAR V_Q_1101.
CLEAR V_C_1100.
CLEAR V_C_1101.
CLEAR WA_FINAL2-V_MQ_1100.
CLEAR WA_FINAL2-V_MQ_1101.
CLEAR WA_FINAL2-V_CQ_1100.
CLEAR WA_FINAL2-V_CQ_1101.
CLEAR WA_FINAL2-MATNR.
CLEAR WA_FINAL2-CHARG.
ENDAT.
ENDIF.
ENDLOOP.
CLEAR V_A.
CLEAR V_B.
CLEAR V_C.
CLEAR V_D.
ELSE.
LEAVE TO SCREEN 500.
ENDIF.
PERFORM FIELDCATALOG1.
PERFORM LAYOUT_BULD.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IT_FIELDCAT = TBL_FIELDCAT1
IT_SORT = GT_SORT
i_default = 'X'
i_save = ' '
IS_LAYOUT = ST_LAYOUT1
IT_EVENTS = I_EVENTS[]
TABLES
T_OUTTAB = I_FINAL2
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH I_FINAL2.
WHEN 'SAVE'.
DATA: L_REF_ALV TYPE REF TO CL_GUI_ALV_GRID.
DATA : V TYPE I.
DATA : LD_VALUE(10) TYPE C.
DATA : LS_ROW TYPE LVC_S_ROW.
DATA : LS_COL TYPE LVC_S_COL.
Referenz auf ALV hohlen
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_REF_ALV.
CALL METHOD L_REF_ALV->GET_CURRENT_CELL
IMPORTING
E_VALUE = LD_VALUE " contains current value on grid
ES_ROW_ID = LS_ROW
ES_COL_ID = LS_COL.
IF SELFIELD-FIELDNAME = 'DISCOUNT'.
READ TABLE I_FINAL INTO WA_FINAL INDEX SELFIELD-TABINDEX.
WA_FINAL-DISCOUNT = SELFIELD-VALUE.
MODIFY I_FINAL INDEX SELFIELD-TABINDEX FROM WA_FINAL
TRANSPORTING DISCOUNT.
ENDIF.
IF LS_COL = 'DISCOUNT'.
IF WA_FINAL-DISCOUNT IS INITIAL.
WA_FINAL-DISCOUNT = LD_VALUE.
MODIFY I_FINAL INDEX LS_ROW FROM WA_FINAL
TRANSPORTING DISCOUNT.
ENDIF.
ENDIF.
LOOP AT I_FINAL INTO WA_FINAL.
READ TABLE XX_FINAL INDEX SY-TABIX.
IF WA_FINAL <> XX_FINAL.
WA_FINAL-CS_N_PRICE = WA_FINAL-CS_L_PRICE - ( WA_FINAL-CS_L_PRICE * WA_FINAL-DISCOUNT ) / 100.
WA_FINAL-NETDIFF = WA_FINAL-CS_L_PRICE - WA_FINAL-CS_N_PRICE.
WA_FINAL-TOTPRICE = WA_FINAL-OUTBAL * WA_FINAL-CS_N_PRICE.
APPEND WA_FINAL TO ZZ_FINAL.
ELSE.
WA_FINAL-CS_N_PRICE = WA_FINAL-CS_L_PRICE - ( WA_FINAL-CS_L_PRICE * WA_FINAL-DISCOUNT ) / 100.
WA_FINAL-NETDIFF = WA_FINAL-CS_L_PRICE - WA_FINAL-CS_N_PRICE.
WA_FINAL-TOTPRICE = WA_FINAL-OUTBAL * WA_FINAL-CS_N_PRICE.
APPEND WA_FINAL TO ZZ_FINAL.
ENDIF.
ENDLOOP.
I_FINAL[] = ZZ_FINAL[].
REFRESH ZZ_FINAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
I_CALLBACK_PF_STATUS_SET = 'STATUS'
I_CALLBACK_USER_COMMAND = 'PROCESS_USER_COMMANDS'
IS_LAYOUT_LVC = GD_LAYOUT
IT_FIELDCAT_LVC = IT_FIELDCAT
I_SAVE = 'U'
I_GRID_SETTINGS = LC_GLAY
TABLES
T_OUTTAB = I_FINAL
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-UCOMM = '&F03'.
LEAVE TO SCREEN 0.
ELSEIF SY-UCOMM = 'BACK'.
LEAVE TO SCREEN 0.
ENDIF.
ENDCASE.
ENDFORM. " PROCESS_USER_COMMANDS
‎2009 Mar 26 11:07 AM
Hi Ashwin..
Do the following, this would refresh the ALV Grid Contents.
Form Interface...
FORM user_command_alv USING lv_ucomm LIKE sy-ucomm
lw_selfield TYPE slis_selfield.
Refresh the Output Values
lw_selfield-refresh ='X'.
lw_selfield-row_stable = 'X' .
lw_selfield-col_stable = 'X' .
ENDFORM.
Best Regards,
Pradeep.
‎2009 Mar 26 11:12 AM
Hi,
Use container to display the alv using
CREATE OBJECT gr_cont_bl
EXPORTING
container_name = '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.
endif.
if not gr_grid is bound.
CREATE OBJECT gr_grid
EXPORTING
i_parent = gr_cont_bl
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.
CALL METHOD gr_grid->set_table_for_first_display
EXPORTING
is_layout = wa_layout
CHANGING
it_outtab = gt_bloc[]
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.
Set editable cells to ready for input initially
CALL METHOD gr_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
And After doing the calculation use the following method
data: ls_ref type LVC_S_STBL.
CALL METHOD gr_grid->refresh_table_display
EXPORTING
is_stable = ls_ref
i_soft_refresh = 'X'
EXCEPTIONS
finished = 1
others = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.