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

Sorting issue with packed decimal

former_member497886
Participant
0 Likes
1,155

Hello experts,

I have a field in my internal table, which is of type p with decimal 2.

further i am creating a dynamic internal table and displaying it using OO ALV (cl_salv_table).

In the output when i am trying to sort this field via standard toolbar, it is not getting sorted properly.

for e.g. - values before sort

10.00

30.00

8.10

50.60

9.40

when i sort it in descending - the output comes as

9.40

8.10

50.60

30.00

10.00

in ascending -

10.00

30.00

50.60

8.10

9.40

I searched the forum, but couldn't find any solution. Your views will be really helpful.

Thanks

1 ACCEPTED SOLUTION
Read only

roberto_vacca2
Active Contributor
0 Likes
708

Hi.

Does your internal table have only this packed decimal field? Could you please show your code?

This raw example has no sorting issues.


DATA: v_pack TYPE p DECIMALS 2.

DATA: BEGIN OF it_vpack OCCURS 0,

         v_pack TYPE p DECIMALS 2,

      END OF it_vpack.

TYPES:BEGIN OF ty_vpack,

         v_pack TYPE p DECIMALS 2,

      END OF ty_vpack.

DATA:         dref    TYPE REF TO data.

DATA alv TYPE REF TO cl_salv_table.

DATA message TYPE REF TO cx_salv_msg.

FIELD-SYMBOLS: <itab> TYPE ANY TABLE.

v_pack = '10.00'.

MOVE v_pack TO it_vpack-v_pack.

APPEND it_vpack.

v_pack = '30.00'.

MOVE v_pack TO it_vpack-v_pack.

APPEND it_vpack.

v_pack = '8.10'.

MOVE v_pack TO it_vpack-v_pack.

APPEND it_vpack.

v_pack = '50.60'.

MOVE v_pack TO it_vpack-v_pack.

APPEND it_vpack.

v_pack = '9.40'.

MOVE v_pack TO it_vpack-v_pack.

APPEND it_vpack.

SORT it_vpack BY v_pack ASCENDING.

* dynamically create appropriate internal table

CREATE DATA dref TYPE TABLE OF ty_vpack.

ASSIGN dref->* TO <itab>.

* fetch the data

<itab>[] = it_vpack[].

TRY.

    cl_salv_table=>factory(

      IMPORTING

        r_salv_table = alv

      CHANGING

        t_table      = <itab> ).

  CATCH cx_salv_msg INTO message.

    " error handling

ENDTRY.

    DATA: gr_functions TYPE REF TO cl_salv_functions.

  gr_functions = alv->get_functions( ).

    gr_functions->set_all( abap_true ).

alv->display( ).    

Let us know.

Hope to help

Bye

2 REPLIES 2
Read only

roberto_vacca2
Active Contributor
0 Likes
709

Hi.

Does your internal table have only this packed decimal field? Could you please show your code?

This raw example has no sorting issues.


DATA: v_pack TYPE p DECIMALS 2.

DATA: BEGIN OF it_vpack OCCURS 0,

         v_pack TYPE p DECIMALS 2,

      END OF it_vpack.

TYPES:BEGIN OF ty_vpack,

         v_pack TYPE p DECIMALS 2,

      END OF ty_vpack.

DATA:         dref    TYPE REF TO data.

DATA alv TYPE REF TO cl_salv_table.

DATA message TYPE REF TO cx_salv_msg.

FIELD-SYMBOLS: <itab> TYPE ANY TABLE.

v_pack = '10.00'.

MOVE v_pack TO it_vpack-v_pack.

APPEND it_vpack.

v_pack = '30.00'.

MOVE v_pack TO it_vpack-v_pack.

APPEND it_vpack.

v_pack = '8.10'.

MOVE v_pack TO it_vpack-v_pack.

APPEND it_vpack.

v_pack = '50.60'.

MOVE v_pack TO it_vpack-v_pack.

APPEND it_vpack.

v_pack = '9.40'.

MOVE v_pack TO it_vpack-v_pack.

APPEND it_vpack.

SORT it_vpack BY v_pack ASCENDING.

* dynamically create appropriate internal table

CREATE DATA dref TYPE TABLE OF ty_vpack.

ASSIGN dref->* TO <itab>.

* fetch the data

<itab>[] = it_vpack[].

TRY.

    cl_salv_table=>factory(

      IMPORTING

        r_salv_table = alv

      CHANGING

        t_table      = <itab> ).

  CATCH cx_salv_msg INTO message.

    " error handling

ENDTRY.

    DATA: gr_functions TYPE REF TO cl_salv_functions.

  gr_functions = alv->get_functions( ).

    gr_functions->set_all( abap_true ).

alv->display( ).    

Let us know.

Hope to help

Bye

Read only

0 Likes
708

Hi,

Thanks for your response.

The problem is resolved now.

Solution was to give the reference of DDIC field of decimal type while creating fieldcatalog.


Thanks