Chinaunix首页 | 论坛 | 博客
  • 博客访问: 150311
  • 博文数量: 54
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 508
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-18 09:25
个人简介

好男人就是我,我就是你兵哥

文章分类

全部博文(54)

我的朋友

分类: Web开发

2015-10-29 17:03:11

初步判断原因, bp同步是 以修改的模式发送到crm后,crm不存在该bp 所以报 guid不存在的错误。

解决方法: 609766提供的方案太麻烦,最简单的方法:在CRM建一个相同号码的bp,然后将but000里的partner_guid改成和ECC的一样,再去ECC抽下数据就行了。
解决方法: 参考 note 步骤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                      .
TABLEScrmm_but_custnobut000.

TYPESBEGIN OF ty_but000 ,
         partner      LIKE but000-partner,
         partner_guid LIKE but000-partner_guid,
       END   OF ty_but000 .
TYPESBEGIN OF ty_crmkunnr ,
         client     TYPE mandt,
         custome_no TYPE kunnr,
         partn_guid TYPE sychar32,
       END   OF ty_crmkunnr .

DATAlv_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.

DATAlt_smoferpsh LIKE smof_erpsh OCCURS 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-OPTIONSs_kunnr FOR crmm_but_custno-customer_no.
PARAMETERS:     p_test LIKE boole-boole DEFAULT 'X'.

START-OF-SELECTION .

  REFRESHlt_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 .

  CLEARls_but000 .
  LOOP AT lt_but000 INTO ls_but000 .

    CLEARls_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_korrCLEAR 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 .
  CLEARls_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
*"----------------------------------------------------------------------

  TABLEScrmkunnr.

  DATAlt_crmkunnr   TYPE TABLE OF crmkunnr,
        ls_crmkunnr   TYPE crmkunnr,
        lt_crmkunnr_u TYPE TABLE OF crmkunnr.

**********************************************************************

  CHECK t_crmm_but_custno[] IS NOT INITIAL .

  REFRESHlt_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.

阅读(1437) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~