Created by Jerry Wang on May 09, 2014
下面这个report可以打印出系统所有满足下列条件的product:
REPORT zprod_not_used_anymore.
PARAMETERS: num TYPE i OBLIGATORY DEFAULT 100.
DATA: lv_prod_guid TYPE comm_product-product_guid,
lt_item_tab TYPE STANDARD TABLE OF comm_product-product_guid,
lt_ibase_tab LIKE lt_item_tab,
lt_product TYPE STANDARD TABLE OF comm_product.
START-OF-SELECTION.
SELECT product_guid product_id object_family FROM comm_product INTO CORRESPONDING FIELDS OF TABLE lt_product.
ASSERT lt_product IS NOT INITIAL.
SELECT product INTO TABLE lt_item_tab FROM crmd_orderadm_i
FOR ALL ENTRIES IN lt_product WHERE product = lt_product-product_guid.
SELECT product_guid APPENDING TABLE lt_item_tab FROM crmd_srv_refobj
FOR ALL ENTRIES IN lt_product WHERE product_guid = lt_product-product_guid.
SELECT warranty APPENDING TABLE lt_item_tab FROM crmd_service_i
FOR ALL ENTRIES IN lt_product WHERE warranty = lt_product-product_guid.
SORT lt_item_tab.
DELETE ADJACENT DUPLICATES FROM lt_item_tab.
LOOP AT lt_product ASSIGNING FIELD-SYMBOL(<product>).
READ TABLE lt_item_tab WITH KEY table_line = <product>-product_guid TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
DELETE TABLE lt_product FROM <product>.
ENDIF.
ENDLOOP.
DATA:
lv_handle TYPE ibxx_ref-handle,
ls_sel TYPE ibxx_sel_rec,
lt_obj TYPE ibco1_obj_tab,
lo_product TYPE REF TO CL_IBASE_CRM_PRODUCT,
lo_object TYPE REF TO CL_IBASE_CRM_object,
lr_objnr TYPE RANGE OF ibxx_ref-objnr, "Guid 22 of the object
lr_objnr_line LIKE LINE OF lr_objnr,
ls_product TYPE comm_product.
lr_objnr_line-sign = 'I'.
lr_objnr_line-option = 'EQ'.
LOOP AT lt_product ASSIGNING FIELD-SYMBOL(<in_ibase>).
lr_objnr_line-low = cl_ibase_service=>cl_convert_guid_16_22( <in_ibase>-product_guid ).
INSERT lr_objnr_line INTO TABLE ls_sel-s_objnr.
ENDLOOP.
CALL FUNCTION 'IB_COM_NEW'
IMPORTING
e_ibco_handle = lv_handle.
CALL FUNCTION 'IB_COM1_READ_INSTANCES_OBJ_TAB'
EXPORTING
i_ibco_handle = lv_handle
i_sel_rec = ls_sel
CHANGING
e_obj_tab = lt_obj
EXCEPTIONS
ib_handle_not_defined = 1
ib_not_successful = 2
ib_criteria_incomplete = 3
OTHERS = 4.
ASSERT sy-subrc = 0.
LOOP AT lt_obj ASSIGNING FIELD-SYMBOL(<obj>).
TRY.
lo_object = CAST cl_ibase_crm_object( <obj>-object ).
ls_product = lo_object->get_product( ).
CATCH cx_root.
lo_product = CAST cl_ibase_crm_product( <obj>-object ).
ls_product = lo_product->get_product( ).
ENDTRY.
APPEND ls_product-product_guid TO lt_ibase_tab.
ENDLOOP.
LOOP AT lt_product ASSIGNING FIELD-SYMBOL(<ibase>).
READ TABLE lt_ibase_tab WITH KEY table_line = <ibase>-product_guid TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
DELETE TABLE lt_product FROM <ibase>.
ENDIF.
ENDLOOP.
DO num TIMES.
READ TABLE lt_product ASSIGNING FIELD-SYMBOL(<result>) INDEX sy-index.
IF sy-subrc = 0.
IF <result>-object_family IS INITIAL.
WRITE: / 'Product ID: ' , <result>-product_id COLOR COL_NEGATIVE.
ELSE.
WRITE: / 'Object ID: ' , <result>-product_id COLOR COL_NEGATIVE.
ENDIF.
ELSE.
RETURN.
ENDIF.
ENDDO.