BP扩展销售组织视图

FUNCTION ZFM_SD_BP_SH_CREATE.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_BPARTNER) TYPE  BU_PARTNER OPTIONAL
*"  EXPORTING
*"     VALUE(E_CODE) TYPE  CHAR1
*"     VALUE(E_MSG) TYPE  STRING
*"  TABLES
*"      IT_HEADER STRUCTURE  ZSDS_BP_SH_CREATE
*"----------------------------------------------------------------------
  DATA:LS_KNA1 TYPE KNA1. "基本信息
  DATA:LS_ADDR  TYPE BAPIADDR1, "地址1
       LS_ADDR2 TYPE BAPIADDR2. "地址2

  "创建BP基本视图
  DATA :
    LV_BPARTNER     TYPE BAPIBUS1006_HEAD-BPARTNER,
    LV_CATEGORY     TYPE BAPIBUS1006_HEAD-PARTN_CAT,
    LV_PARTNERGROUP TYPE BAPIBUS1006_HEAD-PARTN_GRP,
    LS_CENTRALDATA  TYPE BAPIBUS1006_CENTRAL,
    LS_ORG          TYPE BAPIBUS1006_CENTRAL_ORGAN,
    LS_ADDRESS      TYPE BAPIBUS1006_ADDRESS.

  DATA E_PARTNER TYPE  BU_PARTNER.

  "执行结果反馈
  DATA:LS_RETURN TYPE BAPIRET2,
       LT_RETURN TYPE STANDARD TABLE OF BAPIRET2.

  DATA:LS_ADDRESSNOTES TYPE  BAPIAD_REM,
       LT_ADDRESSNOTES TYPE STANDARD TABLE OF  BAPIAD_REM.

*  客户编码校验
  IF I_BPARTNER IS NOT INITIAL.
    SELECT COUNT(*) FROM BUT000 WHERE PARTNER EQ @I_BPARTNER.
    IF SY-SUBRC NE 0.
      E_CODE = 'E'.
      E_MSG = '传入的客户编码不存在!'.
      RETURN.
    ENDIF.
*    获取传入客户编码扩展的销售信息用户扩展到送达方
    SELECT KUNNR,VKORG,VTWEG,SPART FROM KNVV
     WHERE KUNNR EQ @I_BPARTNER INTO CORRESPONDING FIELDS OF TABLE @GT_KNVV.
    IF SY-SUBRC NE 0.
      E_MSG = '传入的客户编码不存在销售视图数据!'.
    ENDIF.
  ENDIF.

  IF IT_HEADER[] IS INITIAL.
    E_CODE = 'E'.
    E_MSG = '传入的送达方数据为空!'.
    RETURN.
  ENDIF.

*逐行创建送达方BP
  LOOP AT IT_HEADER.
    LV_CATEGORY        = '2'.  " 1 .人员  2.组织   3.组
    LV_PARTNERGROUP    = 'Z004'. "BP组
    LS_ORG-NAME1       = IT_HEADER-NAME1.
    LS_ADDRESS-COUNTRY = 'CN'.
    LS_ADDRESS-LANGU   = '1'.
    LS_ADDRESS-STREET  = IT_HEADER-STREET."街道
    LS_ADDRESS-REGION  = IT_HEADER-REGION. "地区码
    LS_ADDRESS-CITY    = IT_HEADER-ORT01.

    LS_ADDRESSNOTES-ADR_NOTES = IT_HEADER-ADR_NOTES.   "REMARK  联系人及电话
    LS_ADDRESSNOTES-LANGU     = '1'.
    APPEND LS_ADDRESSNOTES TO LT_ADDRESSNOTES.

    CLEAR :LT_RETURN,LT_RETURN[].
    CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
      EXPORTING
        BUSINESSPARTNEREXTERN   = LV_BPARTNER
        PARTNERCATEGORY         = LV_CATEGORY
        PARTNERGROUP            = LV_PARTNERGROUP
        CENTRALDATA             = LS_CENTRALDATA
*       CENTRALDATAPERSON       =
        CENTRALDATAORGANIZATION = LS_ORG
*       CENTRALDATAGROUP        =
        ADDRESSDATA             = LS_ADDRESS
*       DUPLICATE_MESSAGE_TYPE  =
*       ACCEPT_ERROR            = ' '
      IMPORTING
        BUSINESSPARTNER         = E_PARTNER
      TABLES
*       TELEFONDATA             = LT_BAPIADTEL
*       FAXDATA                 =
*       TELETEXDATA             =
*       TELEXDATA               =
*       E_MAILDATA              =
*       RMLADDRESSDATA          =
*       X400ADDRESSDATA         =
*       RFCADDRESSDATA          =
*       PRTADDRESSDATA          =
*       SSFADDRESSDATA          =
*       URIADDRESSDATA          =
*       PAGADDRESSDATA          =
        ADDRESSNOTES            = LT_ADDRESSNOTES
*       COMMUNICATIONNOTES      =
*       COMMUNICATIONUSAGE      =
*       TELEFONDATANONADDRESS   =
*       FAXDATANONADDRESS       =
*       TELETEXDATANONADDRESS   =
*       TELEXDATANONADDRESS     =
*       E_MAILDATANONADDRESS    =
*       RMLADDRESSDATANONADDRESS           =
*       X400ADDRESSDATANONADDRESS          =
*       RFCADDRESSDATANONADDRESS           =
*       PRTADDRESSDATANONADDRESS           =
*       SSFADDRESSDATANONADDRESS           =
*       URIADDRESSDATANONADDRESS           =
*       PAGADDRESSDATANONADDRESS           =
*       COMMUNICATIONNOTESNONADDRESS       =
*       COMMUNICATIONUSAGENONADDRESS       =
        RETURN                  = LT_RETURN
*       ADDRESSDUPLICATES       =
      .
    IF E_PARTNER IS INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.  "如没返回BP号,则判断为失败,回滚数据
      IT_HEADER-ZCODE = 'E'.
      E_CODE = 'E'.

      DELETE LT_RETURN WHERE TYPE NE 'E' AND TYPE NE 'A'.
      LOOP AT  LT_RETURN INTO LS_RETURN.
        IT_HEADER-ZMSG = IT_HEADER-ZMSG && LS_RETURN-MESSAGE.
        E_MSG = E_MSG && '第' && IT_HEADER-ZNUM && '行,' && LS_RETURN-MESSAGE.
      ENDLOOP.
      RETURN.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.
      IT_HEADER-BPARTNER = E_PARTNER.
      IT_HEADER-ZCODE = 'S'.
      IT_HEADER-ZMSG = 'BP基础视图创建成功!'.

*      扩展角色
      DATA L_CDDE TYPE CHAR1.
      PERFORM SET_ROLE_DATA USING E_PARTNER CHANGING L_CDDE.
      CASE L_CDDE.
        WHEN 'S'.
*     扩展销售组织 角色创建成功才扩展销售组织
          IF GT_KNVV[] IS NOT INITIAL.
            PERFORM SET_KNVV_DATA USING E_PARTNER I_BPARTNER CHANGING IT_HEADER-ZMSG.
          ENDIF.
        WHEN 'E'.
          IT_HEADER-ZMSG = IT_HEADER-ZMSG && '角色视图扩展失败!'.
        WHEN OTHERS.
      ENDCASE.
    ENDIF.

    MODIFY IT_HEADER.
  ENDLOOP.

*  将新建的送达方扩展到参考BP的伙伴SH
  IF GT_KNVV[] IS NOT INITIAL.
    DATA:LT_KNVP TYPE TABLE OF FKNVP,
         LS_KNVP TYPE FKNVP.
    DATA LV_PARZA TYPE PARZA.

    LOOP AT GT_KNVV INTO DATA(WA_KNVV) WHERE KUNNR IS NOT INITIAL.
      CLEAR LV_PARZA.
      LOOP AT IT_HEADER WHERE ZCODE EQ 'S'.
        LS_KNVP-KUNNR = WA_KNVV-KUNNR.  "送达方
        LS_KNVP-VKORG = WA_KNVV-VKORG.  "销售组织
        LS_KNVP-VTWEG = WA_KNVV-VTWEG.  "分销渠道
        LS_KNVP-SPART = WA_KNVV-SPART.  "产品组
        LS_KNVP-PARVW = 'WE'.           "合作伙伴功能

        IF LV_PARZA EQ '000'.
          SELECT SINGLE MAX( PARZA ) FROM KNVP
           WHERE KUNNR EQ @WA_KNVV-KUNNR
             AND VKORG EQ @WA_KNVV-VKORG
             AND VTWEG EQ @WA_KNVV-VTWEG
             AND SPART EQ @WA_KNVV-SPART
             AND PARVW EQ 'WE'
            INTO @LV_PARZA.
          IF SY-SUBRC EQ 0.
            LV_PARZA = LV_PARZA + 1."'000'.           "合作伙伴计数器
          ENDIF.
        ELSE.
          LV_PARZA = LV_PARZA + 1.
        ENDIF.

        LS_KNVP-PARZA = LV_PARZA.

        LS_KNVP-KUNN2 = IT_HEADER-BPARTNER.  "业务伙伴编号
        LS_KNVP-KZ = 'I'.           "更改类型
        APPEND LS_KNVP TO LT_KNVP.
        CLEAR LS_KNVP.
      ENDLOOP.

      CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
* EXPORTING
*   I_KNA1                              =
*   I_KNB1                              =
*   I_KNVV                              =
*   I_BAPIADDR1                         =
*   I_BAPIADDR2                         =
*   I_MAINTAIN_ADDRESS_BY_KNA1          = ' '
*   I_KNB1_REFERENCE                    = ' '
*   I_FORCE_EXTERNAL_NUMBER_RANGE       = ' '
*   I_NO_BANK_MASTER_UPDATE             = ' '
*   I_CUSTOMER_IS_CONSUMER              = ' '
*   I_RAISE_NO_BTE                      = ' '
*   PI_POSTFLAG                         = ' '
*   PI_CAM_CHANGED                      = ' '
*   PI_ADD_ON_DATA                      =
*   I_FROM_CUSTOMERMASTER               = ' '
* IMPORTING
*   E_KUNNR                             =
*   O_KNA1                              =
*   E_SD_CUST_1321_DONE                 =
        TABLES
*         T_XKNAS                 =
*         T_XKNBK                 =
*         T_XKNB5                 =
*         T_XKNVA                 =
*         T_XKNVD                 =
*         T_XKNVI                 =
*         T_XKNVK                 =
*         T_XKNVL                 =
          T_XKNVP                 = LT_KNVP
*         T_XKNZA                 =
*         T_YKNAS                 =
*         T_YKNBK                 =
*         T_YKNB5                 =
*         T_YKNVA                 =
*         T_YKNVD                 =
*         T_YKNVI                 =
*         T_YKNVK                 =
*         T_YKNVL                 =
*         T_YKNVP                 =
*         T_YKNZA                 =
*         T_UPD_TXT               =
        EXCEPTIONS
          CLIENT_ERROR            = 1
          KNA1_INCOMPLETE         = 2
          KNB1_INCOMPLETE         = 3
          KNB5_INCOMPLETE         = 4
          KNVV_INCOMPLETE         = 5
          KUNNR_NOT_UNIQUE        = 6
          SALES_AREA_NOT_UNIQUE   = 7
          SALES_AREA_NOT_VALID    = 8
          INSERT_UPDATE_CONFLICT  = 9
          NUMBER_ASSIGNMENT_ERROR = 10
          NUMBER_NOT_IN_RANGE     = 11
          NUMBER_RANGE_NOT_EXTERN = 12
          NUMBER_RANGE_NOT_INTERN = 13
          ACCOUNT_GROUP_NOT_VALID = 14
          PARNR_INVALID           = 15
          BANK_ADDRESS_INVALID    = 16
          TAX_DATA_NOT_VALID      = 17
          NO_AUTHORITY            = 18
          COMPANY_CODE_NOT_UNIQUE = 19
          DUNNING_DATA_NOT_VALID  = 20
          KNB1_REFERENCE_INVALID  = 21
          CAM_ERROR               = 22
          OTHERS                  = 23.

      IF SY-SUBRC EQ 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT = 'X'.
      ELSE.

        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        E_MSG = E_MSG && ',' && I_BPARTNER && '送达方关系扩展失败。'.
      ENDIF.
      CLEAR:WA_KNVV,LT_KNVP[].
    ENDLOOP.

  ENDIF.

ENDFUNCTION.


关键词: ABAP

网友评论

发表评论