Application Development and Automation 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: 
Read only

edit alv layout

Former Member
0 Likes
988

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.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
942

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.

6 REPLIES 6
Read only

Former Member
0 Likes
942
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

Read only

0 Likes
942

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.

Read only

0 Likes
942

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

Read only

Former Member
0 Likes
942

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

Read only

Former Member
0 Likes
942

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.

Read only

Former Member
0 Likes
943

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.