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.
网友评论