初步判断原因, bp同步是 以修改的模式发送到crm后,crm不存在该bp 所以报 guid不存在的错误。解决方法: 609766提供的方案太麻烦,最简单的方法:在CRM建一个相同号码的bp,然后将but000里的partner_guid改成和ECC的一样,再去ECC抽下数据就行了。解决方法: 参考 note 609766 - Correction of BP GUIDS in CRMM_BUT_CUSTNO,BUT000,CRMKUNNR步骤1, crm端新建一个相同编号的bp 2, crm开发一个报表 , ECC开发一个rfc函数Z_REPAIR_CRMKUNNR 3, 执行报表 Z_REPAIR_CRMKUNNR 4, R3AR4 把这个bp信息传到crm *&---------------------------------------------------------------------**& Report Z_CHECK_BP_GUID **& **&---------------------------------------------------------------------**& **& **&---------------------------------------------------------------------*REPORT z_check_bp_guid .TABLES: crmm_but_custno, but000.TYPES: BEGIN OF ty_but000 , partner LIKE but000-partner, partner_guid LIKE but000-partner_guid, END OF ty_but000 .TYPES: BEGIN OF ty_crmkunnr , client TYPE mandt, custome_no TYPE kunnr, partn_guid TYPE sychar32, END OF ty_crmkunnr .DATA: lv_partner LIKE but000-partner, lv_partner_guid LIKE but000-partner_guid, BEGIN OF lt_korr OCCURS 1, partner LIKE but000-partner, guid1 LIKE but000-partner_guid, guid2 LIKE but000-partner_guid, END OF lt_korr, lt_crmm_but_custno TYPE TABLE OF crmm_but_custno, ls_crmm_but_custno TYPE crmm_but_custno.DATA: lt_smoferpsh LIKE smof_erpsh OCCURS 1 WITH HEADER LINE, ls_smoferpsh TYPE smof_erpsh, lt_but000 TYPE TABLE OF ty_but000, ls_but000 TYPE ty_but000, lt_crmkunnr TYPE TABLE OF ty_crmkunnr, ls_crmkunnr TYPE ty_crmkunnr.***********************************************************************SELECT-OPTIONS: s_kunnr FOR crmm_but_custno-customer_no.PARAMETERS: p_test LIKE boole-boole DEFAULT 'X'.START-OF-SELECTION . REFRESH: lt_but000,lt_korr,lt_crmm_but_custno . SELECT partner partner_guid INTO CORRESPONDING FIELDS OF TABLE lt_but000 FROM but000 WHERE partner IN s_kunnr. SELECT * INTO TABLE lt_crmm_but_custno FROM crmm_but_custno WHERE customer_no IN s_kunnr. SORT lt_but000 BY partner . SORT lt_crmm_but_custno BY customer_no . CLEAR: ls_but000 . LOOP AT lt_but000 INTO ls_but000 . CLEAR: ls_crmm_but_custno . READ TABLE lt_crmm_but_custno INTO ls_crmm_but_custno WITH KEY customer_no = ls_but000-partner . IF ls_but000-partner_guid ls_crmm_but_custno-partner_guid. "取出guid不相同的bp lt_korr-partner = ls_but000-partner. lt_korr-guid1 = ls_but000-partner_guid. lt_korr-guid2 = ls_crmm_but_custno-partner_guid. APPEND lt_korr. CLEAR lt_korr . ENDIF. ls_crmkunnr-custome_no = ls_but000-partner. ls_crmkunnr-partn_guid = ls_but000-partner_guid. APPEND ls_crmkunnr TO lt_crmkunnr . CLEAR ls_crmkunnr . ENDLOOP. SORT lt_korr BY partner . CLEAR: ls_crmm_but_custno . LOOP AT lt_crmm_but_custno INTO ls_crmm_but_custno. READ TABLE lt_korr WITH KEY partner = ls_crmm_but_custno-customer_no . IF sy-subrc 0. " 取出正确的bp DELETE lt_crmm_but_custno . ENDIF. ENDLOOP. IF p_test IS INITIAL . IF lt_crmm_but_custno[] IS NOT INITIAL . DELETE crmm_but_custno FROM TABLE lt_crmm_but_custno . COMMIT WORK AND WAIT . ENDIF. REFRESH lt_crmm_but_custno . LOOP AT lt_korr. ls_crmm_but_custno-customer_no = lt_korr-partner. ls_crmm_but_custno-partner_guid = lt_korr-guid1. APPEND ls_crmm_but_custno TO lt_crmm_but_custno. ENDLOOP. IF lt_crmm_but_custno[] IS NOT INITIAL . MODIFY crmm_but_custno FROM TABLE lt_crmm_but_custno . COMMIT WORK AND WAIT . ENDIF. ENDIF. IF lt_crmkunnr[] IS NOT INITIAL .* repair crmkunnr in R/3 REFRESH lt_smoferpsh . CLEAR ls_smoferpsh . CALL FUNCTION 'SMOF_READ_SMOFERPSH' EXPORTING i_sitetypeid = 'SMOF_ERPSITE' TABLES t_erpsites = lt_smoferpsh. READ TABLE lt_smoferpsh INTO ls_smoferpsh INDEX 1. IF ls_smoferpsh-rfcdest = space. WRITE /01 'ECC连接不通'. EXIT. ENDIF. CALL FUNCTION 'Z_REPAIR_CRMKUNNR' DESTINATION ls_smoferpsh-rfcdest EXPORTING iv_test_mode = p_test TABLES t_crmm_but_custno = lt_crmkunnr EXCEPTIONS system_failure = 1 communication_failure = 2 OTHERS = 3. ENDIF. WRITE: /01 'CRM端'. LOOP AT lt_korr. WRITE: /01 'BP编号', lt_korr-partner, '正确GUID', lt_korr-guid1, '错误GUID', lt_korr-guid2. ENDLOOP. SKIP . WRITE: /01 'ECC端'. LOOP AT lt_crmkunnr INTO ls_crmkunnr. WRITE: /01 'BP编号', ls_crmkunnr-custome_no, '正确GUID', ls_crmkunnr-partn_guid. ENDLOOP.FUNCTION z_repair_crmkunnr.*"----------------------------------------------------------------------*"*"本地接口:*" IMPORTING*" VALUE(IV_TEST_MODE) LIKE BOOLE-BOOLE OPTIONAL*" TABLES*" T_CRMM_BUT_CUSTNO STRUCTURE CRMKUNNR*"---------------------------------------------------------------------- TABLES: crmkunnr. DATA: lt_crmkunnr TYPE TABLE OF crmkunnr, ls_crmkunnr TYPE crmkunnr, lt_crmkunnr_u TYPE TABLE OF crmkunnr.********************************************************************** CHECK t_crmm_but_custno[] IS NOT INITIAL . REFRESH: lt_crmkunnr,lt_crmkunnr_u . SELECT * INTO TABLE lt_crmkunnr FROM crmkunnr FOR ALL ENTRIES IN t_crmm_but_custno WHERE custome_no EQ t_crmm_but_custno-custome_no . SORT lt_crmkunnr BY custome_no . LOOP AT t_crmm_but_custno. CLEAR ls_crmkunnr . READ TABLE lt_crmkunnr INTO ls_crmkunnr WITH KEY custome_no = t_crmm_but_custno-custome_no . IF sy-subrc = 0. IF ls_crmkunnr-partn_guid = t_crmm_but_custno-partn_guid.* nothing to repair DELETE t_crmm_but_custno. CONTINUE . ELSE.* if guid does already exist with other customer number, delete IF iv_test_mode IS INITIAL. DELETE FROM crmkunnr WHERE custome_no = t_crmm_but_custno-custome_no. ENDIF. ls_crmkunnr-client = sy-mandt. ls_crmkunnr-custome_no = t_crmm_but_custno-custome_no. ls_crmkunnr-partn_guid = t_crmm_but_custno-partn_guid. APPEND ls_crmkunnr TO lt_crmkunnr_u . ENDIF. ELSE.* This means CUSTOMER NUMBER doesnot exist in CRMKUNNR. ls_crmkunnr-client = sy-mandt. ls_crmkunnr-custome_no = t_crmm_but_custno-custome_no. ls_crmkunnr-partn_guid = t_crmm_but_custno-partn_guid. APPEND ls_crmkunnr TO lt_crmkunnr_u . ENDIF. ENDLOOP. CHECK lt_crmkunnr_u[] IS NOT INITIAL AND iv_test_mode IS INITIAL . MODIFY crmkunnr FROM TABLE lt_crmkunnr_u . COMMIT WORK AND WAIT .ENDFUNCTION. 09-22 03:18