Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *&---------------------------------------------------------------------*
- *& Report Z_CRMD_PARTNER_ADDR_CORR
- *&
- *&---------------------------------------------------------------------*
- *& Corrects CRMD_PARTNER records with ADDR_ORIGIN = C that have invalid
- *& ADDR_NR (records that do not exist in ADRC).
- *& Report finds PARTNER_NO address using COM_PARTNER_ADDRESS_DETERMINE
- *& to replace missing address.
- *&
- *& The input 'Execute program in simulation' turns simulation mode on or off.
- *& If this is unchecked, the program will alter the CRMD_PARTNER db table replacing
- *& the invalid address with a valid one.
- *&
- *& There are three ways to execute this program:
- *&
- *& 1. With no inputs (e.g. Transaction number, Transaction type and Address
- *& number all blank).
- *& This will validate all records in CRMD_PARTNER with ADDR_ORIGIN = 'C'
- *& to ensure that they all have valid ADRC records.
- *& NOTE: depending on the size of the CRMD_PARTNER table in your installation,
- *& this can be very time consuming.
- *&
- *& 2. By Transaction number and Transaction type.
- *& In this case both the number and type are required.
- *& The program will validate all the partners on this transaction with
- *& ADDR_ORIGIN = 'C' to ensure they have valid ADRC records.
- *&
- *& 3. By Address number.
- *& The program will validate all CRMD_PARTNER records with the given address
- *& and ADDR_ORIGIN = 'C'.
- *&---------------------------------------------------------------------*
- REPORT Z_CRMD_PARTNER_ADDR_CORR.
- INCLUDE com_partner.
- TABLES: crmd_partner.
- DATA: lt_partnertab LIKE TABLE OF crmd_partner,
- lt_orderadm_i LIKE TABLE OF crmd_orderadm_i,
- ls_partner TYPE crmd_partner,
- ls_link TYPE crmd_link,
- ls_orderadm_h TYPE crmd_orderadm_h,
- ls_orderadm_i TYPE crmd_orderadm_i,
- ls_proc_type TYPE CRMC_PROC_TYPE,
- ls_item_proc_type TYPE CRMC_ITEM_TYPE,
- lv_partner_guid TYPE bu_partner_guid,
- lv_determ_proc TYPE comt_partner_determ_proc,
- lv_addr_nr TYPE ad_addrnum,
- lv_addr_np TYPE adrnp,
- lv_addr_type TYPE addr_type,
- lv_addr_origin TYPE comt_addr_origin,
- lv_addr_operation TYPE bu_operation,
- lv_relation_partner TYPE bu_partner_guid,
- lv_address_count TYPE i,
- lv_addr_is_standard TYPE comt_partner_std_bp_address,
- cursor1 TYPE cursor,
- p_size TYPE i,
- lv_partner_number(10),
- lv_total_rec TYPE i,
- lv_addr_missing TYPE i,
- lv_no_addr TYPE i,
- lv_replace_addr TYPE i,
- lv_no_replace_addr TYPE i,
- lv_partner_update TYPE i,
- lv_partner_update_fail TYPE i,
- lv_header_no_pdp TYPE i,
- lv_item_no_pdp TYPE i,
- lv_rec_update TYPE i,
- lv_rec_update_fail TYPE i.
- **********************************************************************
- * S C R E E N D E F I N I T I O N *
- **********************************************************************
- SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE transact.
- PARAMETERS: trans_id TYPE crmd_orderadm_h-object_id,
- tran_typ TYPE crmd_orderadm_h-process_type.
- SELECTION-SCREEN: END OF BLOCK blk1.
- SELECTION-SCREEN: BEGIN OF BLOCK blk2 WITH FRAME TITLE addr_num.
- PARAMETERS: addr_nr TYPE crmd_partner-addr_nr.
- SELECTION-SCREEN: END OF BLOCK blk2.
- SELECTION-SCREEN: BEGIN OF BLOCK blk3 WITH FRAME TITLE simulat.
- PARAMETERS: p_simu TYPE c AS CHECKBOX DEFAULT 'X'.
- SELECTION-SCREEN: END OF BLOCK blk3.
- INITIALIZATION.
- %_trans_id_%_app_%-text = ' Transaction number'.
- %_tran_typ_%_app_%-text = ' Transaction type'.
- %_p_simu_%_app_%-text = ' Execute program in simulation'.
- %_addr_nr_%_app_%-text = ' Address number'.
- transact = 'By Transaction'.
- addr_num = 'By Address Number'.
- simulat = 'Simulate On/Off'.
- **********************************************************************
- * S T A R T - O F - S E L E C T I O N *
- **********************************************************************
- START-OF-SELECTION.
- p_size = 10000.
- OPEN CURSOR cursor1 FOR SELECT * FROM crmd_partner WHERE addr_origin = 'C'.
- lv_total_rec = 0.
- lv_addr_missing = 0.
- lv_no_addr = 0.
- lv_replace_addr = 0.
- lv_no_replace_addr = 0.
- lv_partner_update = 0.
- lv_partner_update_fail = 0.
- lv_header_no_pdp = 0.
- lv_item_no_pdp = 0.
- lv_rec_update = 0.
- lv_rec_update_fail = 0.
- DO.
- CLEAR lt_partnertab.
- IF trans_id = SPACE AND tran_typ = SPACE and addr_nr = SPACE.
- FETCH NEXT CURSOR cursor1 INTO TABLE lt_partnertab
- PACKAGE SIZE p_size.
- IF sy-subrc <> 0.
- CLOSE CURSOR cursor1.
- EXIT.
- ENDIF.
- ELSE.
- IF trans_id IS NOT INITIAL or tran_typ IS NOT INITIAL.
- IF trans_id = SPACE.
- WRITE: / 'Required input Transaction number not entered.'.
- EXIT.
- ENDIF.
- IF tran_typ = SPACE.
- WRITE: / 'Required input Transaction type not entered.'.
- EXIT.
- ENDIF.
- SELECT SINGLE * FROM crmd_orderadm_h INTO ls_orderadm_h WHERE object_id = trans_id AND process_type = tran_typ.
- IF sy-subrc = 0.
- SELECT SINGLE * FROM crmd_link INTO ls_link WHERE guid_hi = ls_orderadm_h-GUID AND OBJTYPE_SET = '07'.
- IF sy-subrc = 0.
- SELECT * FROM crmd_partner INTO ls_partner WHERE addr_origin = 'C' AND guid = ls_link-guid_set.
- INSERT ls_partner INTO TABLE lt_partnertab.
- ENDSELECT.
- ENDIF.
- SELECT * FROM crmd_orderadm_i INTO ls_orderadm_i WHERE HEADER = ls_orderadm_h-GUID.
- INSERT ls_orderadm_i INTO TABLE lt_orderadm_i.
- ENDSELECT.
- IF sy-subrc = 0.
- LOOP AT lt_orderadm_i INTO ls_orderadm_i.
- SELECT SINGLE * FROM crmd_link INTO ls_link WHERE guid_hi = ls_orderadm_i-GUID AND OBJTYPE_SET = '07'.
- IF sy-subrc = 0.
- SELECT * FROM crmd_partner INTO ls_partner WHERE addr_origin = 'C' AND guid = ls_link-guid_set.
- INSERT ls_partner INTO TABLE lt_partnertab.
- ENDSELECT.
- ENDIF.
- ENDLOOP.
- ENDIF.
- ENDIF.
- ELSE.
- SELECT * FROM crmd_partner INTO ls_partner WHERE addr_origin = 'C' AND addr_nr = addr_nr.
- INSERT ls_partner INTO TABLE lt_partnertab.
- ENDSELECT.
- ENDIF.
- ENDIF.
- LOOP AT lt_partnertab INTO ls_partner.
- lv_total_rec = lv_total_rec + 1.
- IF ls_partner-addr_nr IS NOT INITIAL.
- SELECT SINGLE COUNT( * ) FROM adrc WHERE addrnumber = ls_partner-addr_nr.
- IF sy-subrc <> 0.
- lv_addr_missing = lv_addr_missing + 1.
- lv_partner_guid = ls_partner-partner_no.
- CALL FUNCTION 'COM_PARTNER_CONVERT_GUID_TO_NO'
- EXPORTING
- iv_partner_guid = lv_partner_guid
- IMPORTING
- ev_partner = lv_partner_number
- EXCEPTIONS
- partner_does_not_exist = 1
- OTHERS = 2.
- " determine whether header or item
- SELECT SINGLE * FROM crmd_link INTO ls_link WHERE guid_set = ls_partner-guid.
- IF ls_link-objtype_hi = 05.
- "header
- SELECT SINGLE * FROM crmd_orderadm_h INTO ls_orderadm_h WHERE guid = ls_link-guid_hi.
- WRITE: 'Transaction ', ls_orderadm_h-object_id, ' has partner function ', ls_partner-partner_fct, ' and partner number ', lv_partner_number, ' that uses a missing address record ', ls_partner-addr_nr.
- CALL FUNCTION 'CRM_ORDER_PROC_TYPE_SELECT_CB'
- EXPORTING
- iv_process_type = ls_orderadm_h-PROCESS_TYPE
- IMPORTING
- es_proc_type = ls_proc_type
- EXCEPTIONS
- OTHERS = 0.
- IF sy-subrc <> 0.
- lv_header_no_pdp = lv_header_no_pdp + 1.
- lv_no_replace_addr = lv_no_replace_addr + 1.
- CONTINUE.
- ENDIF.
- lv_determ_proc = ls_proc_type-part_determ_proc.
- ELSE.
- "item
- SELECT SINGLE * FROM crmd_orderadm_i INTO ls_orderadm_i WHERE guid = ls_link-guid_hi.
- SELECT SINGLE * FROM crmd_orderadm_h INTO ls_orderadm_h WHERE guid = ls_orderadm_i-header.
- WRITE: 'Transaction ', ls_orderadm_h-object_id, ' has item ', ls_orderadm_i-number_int, ' with partner function ', ls_partner-partner_fct, ' and partner number ', lv_partner_number, ' that uses a missing address record ', ls_partner-addr_nr.
- CALL FUNCTION 'CRM_ORDER_ITEM_TYPE_SELECT_CB'
- EXPORTING
- iv_item_type = ls_orderadm_i-ITM_TYPE
- IMPORTING
- es_item_type = ls_item_proc_type
- EXCEPTIONS
- entry_not_found = 1
- text_entry_not_found = 2
- OTHERS = 3.
- IF sy-subrc <> 0.
- lv_item_no_pdp = lv_item_no_pdp + 1.
- lv_no_replace_addr = lv_no_replace_addr + 1.
- CONTINUE.
- ENDIF.
- lv_determ_proc = ls_item_proc_type-part_determ_proc.
- ENDIF.
- " find current master address
- CLEAR lv_addr_nr.
- CLEAR lv_addr_np.
- CLEAR lv_addr_type.
- CLEAR lv_addr_origin.
- CLEAR lv_addr_operation.
- CLEAR lv_relation_partner.
- CLEAR lv_address_count.
- CLEAR lv_addr_is_standard.
- CALL FUNCTION 'COM_PARTNER_ADDRESS_DETERMINE'
- EXPORTING
- iv_partner_guid = lv_partner_guid
- iv_relation_partner_guid = ls_partner-relation_partner
- iv_partner_fct = ls_partner-partner_fct
- iv_determ_proc = lv_determ_proc
- IMPORTING
- ev_addr_nr = lv_addr_nr
- ev_addr_np = lv_addr_np
- ev_addr_type = lv_addr_type
- ev_addr_origin = lv_addr_origin
- ev_addr_operation = lv_addr_operation
- ev_relation_partner = lv_relation_partner
- ev_addr_count = lv_address_count
- ev_addr_is_standard = lv_addr_is_standard
- EXCEPTIONS
- partner_not_defined = 1
- partner_does_not_exist = 2
- rel_partner_does_not_exist = 3
- no_address_found = 4
- OTHERS = 5.
- IF sy-subrc = 0.
- WRITE: / 'Will be replaced with address number: ', lv_addr_nr, /.
- lv_replace_addr = lv_replace_addr + 1.
- " logic to update CRMD_PARTNER
- IF p_simu = space.
- ls_partner-ADDR_NR = lv_addr_nr.
- ls_partner-ADDR_NP = lv_addr_np.
- ls_partner-ADDR_TYPE = lv_addr_type.
- ls_partner-ADDR_ORIGIN = lv_addr_origin.
- ls_partner-ADDR_OPERATION = lv_addr_operation.
- ls_partner-STD_BP_ADDRESS = lv_addr_is_standard.
- UPDATE CRMD_PARTNER FROM ls_partner.
- IF sy-subrc = 0.
- lv_rec_update = lv_rec_update + 1.
- ELSE.
- lv_rec_update_fail = lv_rec_update_fail + 1.
- ENDIF.
- ENDIF.
- ELSE.
- WRITE: / 'No replacement address found!', /.
- lv_no_replace_addr = lv_no_replace_addr + 1.
- ENDIF.
- ENDIF.
- ELSE.
- lv_no_addr = lv_no_addr + 1.
- ENDIF.
- ENDLOOP.
- IF trans_id <> SPACE or addr_nr <> SPACE.
- EXIT.
- ENDIF.
- ENDDO.
- WRITE: /.
- WRITE: / 'Total CRMD_PARTNER records queried: ', lv_total_rec.
- WRITE: / 'Total records without address number: ', lv_no_addr.
- WRITE: / 'Total records with bad addresses: ', lv_addr_missing.
- WRITE: / 'Total replacement addresses found: ', lv_replace_addr.
- WRITE: / 'Total replacement addresses not found: ', lv_no_replace_addr.
- WRITE: / ' Not found because header pdp missing: ', lv_header_no_pdp.
- WRITE: / ' Not found because item pdp missing: ', lv_item_no_pdp.
- WRITE: /.
- WRITE: / 'Total CRMD_PARTNER records updated: ', lv_rec_update.
- WRITE: / 'Total CRMD_PARTNER records update failed: ', lv_rec_update_fail.
- IF p_simu = space.
- COMMIT WORK AND WAIT.
- ENDIF.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement