Hi,
TRy using the below code for fetching the data. It would improve the performance.
Tables : CRMD_ORDERADM_H, BUT000.
TYPES: BEGIN OF lty_objid,
sign(1) TYPE c,
option(2) TYPE c,
low TYPE crmt_object_id_db,
high TYPE crmt_object_id_db,
END OF lty_objid.
TYPES: BEGIN OF lty_date,
sign(1) TYPE c,
option(2) TYPE c,
low TYPE crmt_object_id_db,
high TYPE crmt_object_id_db,
END OF lty_date.
TYPES: BEGIN OF lty_partner,
sign(1) TYPE c,
option(2) TYPE c,
low TYPE bu_partner,
high TYPE bu_partner,
END OF lty_partner.
DATA: lr_core TYPE REF TO cl_crm_bol_core,
lr_qs TYPE REF TO cl_crm_bol_dquery_service,
lr_result TYPE REF TO if_bol_entity_col,
lr_iter TYPE REF TO if_bol_entity_col_iterator,
lr_entity TYPE REF TO cl_crm_bol_entity,
ls_param TYPE crmt_name_value_pair,
lt_param TYPE crmt_name_value_pair_tab,
lv_low TYPE string,
lv_high TYPE string,
ls_objid TYPE lty_objid,
ls_date TYPE lty_date,
ls_partner TYPE lty_partner.
SELECTION-SCREEN BEGIN OF BLOCK cr WITH FRAME.
SELECT-OPTIONS : s_cr FOR crmd_orderadm_h-object_id,
s_pdate FOR crmd_orderadm_h-posting_date,
s_pat FOR but000-partner NO INTERVALS.
SELECTION-SCREEN END OF BLOCK cr.
* Loading Component Set,
lr_core = cl_crm_bol_core=>get_instance( ).
lr_core->load_component_set( 'BT' ).
lr_qs ?= cl_crm_bol_dquery_service=>get_instance( 'BTQ1Order' ).
LOOP AT s_cr[] INTO ls_objid.
lv_low = ls_objid-low.
lv_high = ls_objid-high.
lr_qs->add_selection_param( iv_attr_name = 'OBJECT_ID'
iv_sign = ls_objid-sign
iv_option = ls_objid-option
iv_low = lv_low
iv_high = lv_high ).
ENDLOOP.
CLEAR : lv_low , lv_high.
LOOP AT s_pdate[] INTO ls_date.
lv_low = ls_date-low.
lv_high = ls_date-high.
lr_qs->add_selection_param( iv_attr_name = 'POSTING_DATE'
iv_sign = ls_date-sign
iv_option = ls_date-option
iv_low = lv_low
iv_high = lv_high ).
ENDLOOP.
CLEAR : lv_low , lv_high.,
,
LOOP AT s_pat[] INTO ls_partner.,
lv_low = ls_partner-low.
lv_high = ls_partner-high.
lr_qs->add_selection_param( iv_attr_name = 'BU_PARTNER'
iv_sign = ls_partner-sign
iv_option = ls_partner-option
iv_low = lv_low
iv_high = lv_high ).
ENDLOOP.
lr_result = lr_qs->get_query_result( ).
*Use Iterator to access entities in query result
lr_iter ?= lr_result->get_iterator( ).
* Get the first record from Collection.
lr_entity = lr_iter->get_first( ).
WHILE lr_entity IS BOUND.
lr_entity = lr_iter->get_next( ).
ENDWHILE.
Thanks
Deepak Sharma