
NAME1 1 类型 BU_NAMEOR1 CHAR 40 0 组织名称 1
SEARCHTERM1 1 类型 BU_SORT1 CHAR 20 0 业务伙伴的搜索词 1
REGION 1 类型 REGIO CHAR 3 0 地区(省/自治区/直辖市、市、县)
ORT01 1 类型 ORT01_GP CHAR 35 0 城市
STREET 1 类型 AD_STREET CHAR 60 0 街道
ADR_NOTES 1 类型 AD_REMARK1 CHAR 50 0 地址注释

FUNCTION ZFM_SD_BP_WE.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(IS_DATA) TYPE ZSDS010
*" VALUE(I_TESTRUN) TYPE CHAR1 OPTIONAL
*" EXPORTING
*" VALUE(E_CODE) TYPE CHAR1
*" VALUE(E_MSG) TYPE STRING
*" VALUE(E_PARTNER) TYPE BU_PARTNER
*"----------------------------------------------------------------------
IF IS_DATA IS INITIAL.
E_CODE = 'E'.
E_MSG = '传入值不允许为空!'.
RETURN.
ENDIF.
SELECT SINGLE PARTNER FROM BUT000
WHERE NAME_ORG1 EQ @IS_DATA-NAME1
AND BU_SORT1 EQ @IS_DATA-SEARCHTERM1
INTO @E_PARTNER.
IF SY-SUBRC EQ 0.
E_CODE = 'S'.
E_MSG = '当前名称BP已存在!'.
RETURN.
ENDIF.
"创建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: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.
*销售组织数据
DATA:LT_KNVV TYPE TABLE OF KNVV, "销售组织
LS_KNVV TYPE KNVV, "销售组织
LT_XKNVI TYPE TABLE OF FKNVI,
LS_XKNVI TYPE FKNVI,
LT_XKNVP TYPE TABLE OF FKNVP,
LS_XKNVP TYPE FKNVP.
*BP基本视图创建
LV_CATEGORY = '2'. " 1 .人员 2.组织 3.组
LV_PARTNERGROUP = 'Z004'. "BP组
LS_ORG-NAME1 = LS_CENTRALDATA-SEARCHTERM2 = IS_DATA-NAME1.
LS_ORG-NAME2 = LS_CENTRALDATA-SEARCHTERM1 = IS_DATA-SEARCHTERM1.
LS_ADDRESS-COUNTRY = 'CN'.
LS_ADDRESS-LANGU = '1'.
LS_ADDRESS-STREET = IS_DATA-STREET && ' ' && IS_DATA-SEARCHTERM1."街道 20210806 by zenglimei 街道后面加上项目编号
LS_ADDRESS-REGION = IS_DATA-REGION. "地区码
IF IS_DATA-ORT01 IS INITIAL.
E_CODE = 'E'.
E_MSG = '城市代码不允许为空!'.
RETURN.
ENDIF.
SELECT SINGLE CITY_NAME FROM ADRCITYT
WHERE CITY_CODE EQ @IS_DATA-ORT01
AND COUNTRY EQ @LS_ADDRESS-COUNTRY
AND LANGU EQ @SY-LANGU
INTO @LS_ADDRESS-CITY.
IF SY-SUBRC NE 0.
LS_ADDRESS-CITY = IS_DATA-ORT01.
ENDIF.
IF LS_ADDRESSNOTES-ADR_NOTES IS INITIAL.
LS_ADDRESSNOTES-ADR_NOTES = IS_DATA-ADR_NOTES. " 联系人及电话
LS_ADDRESSNOTES-LANGU = '1'.
APPEND LS_ADDRESSNOTES TO LT_ADDRESSNOTES.
ENDIF.
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 = 'X'
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号,则判断为失败,回滚数据
E_CODE = 'E'.
E_MSG = 'BP基础视图创建失败!'.
DELETE LT_RETURN WHERE TYPE NE 'E' AND TYPE NE 'A'.
LOOP AT LT_RETURN INTO LS_RETURN.
E_MSG = E_MSG && LS_RETURN-MESSAGE.
ENDLOOP.
RETURN.
ELSE.
IF I_TESTRUN IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
E_CODE = 'S'.
E_MSG = 'BP基础视图创建成功!'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
E_CODE = 'S'.
E_MSG = 'BP基础视图校验成功!'.
RETURN.
ENDIF.
ENDIF.
* 扩展BP组
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
EXPORTING
BUSINESSPARTNER = E_PARTNER
BUSINESSPARTNERROLECATEGORY = 'FLCU01'
* ALL_BUSINESSPARTNERROLES = ' '
* BUSINESSPARTNERROLE =
* DIFFERENTIATIONTYPEVALUE =
* VALIDFROMDATE =
* VALIDUNTILDATE = '99991231'
TABLES
RETURN = LT_RETURN.
IF LINE_EXISTS( LT_RETURN[ TYPE = 'E' ] ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
E_CODE = 'E'.
E_MSG = E_MSG && 'BP组扩展失败!请手工处理!'.
LOOP AT LT_RETURN INTO LS_RETURN.
E_MSG = E_MSG && LS_RETURN-MESSAGE.
ENDLOOP.
RETURN.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
E_MSG = E_MSG && '/BP组扩展成功!'.
ENDIF.
LS_XKNVP-KUNNR = LS_KNVV-KUNNR = E_PARTNER.
LS_XKNVP-VKORG = LS_KNVV-VKORG = '1130'.
LS_XKNVP-VTWEG = LS_KNVV-VTWEG = '50'.
LS_XKNVP-SPART = LS_KNVV-SPART = '00'.
APPEND LS_XKNVP TO LT_XKNVP.
APPEND LS_KNVV TO LT_KNVV.
CLEAR:LS_XKNVP,LS_KNVV.
LS_XKNVP-KUNNR = LS_KNVV-KUNNR = E_PARTNER.
LS_XKNVP-VKORG = LS_KNVV-VKORG = '1150'.
LS_XKNVP-VTWEG = LS_KNVV-VTWEG = '50'.
LS_XKNVP-SPART = LS_KNVV-SPART = '00'.
APPEND LS_XKNVP TO LT_XKNVP.
APPEND LS_KNVV TO LT_KNVV.
CLEAR:LS_XKNVP,LS_KNVV.
LS_XKNVP-KUNNR = LS_KNVV-KUNNR = E_PARTNER.
LS_XKNVP-VKORG = LS_KNVV-VKORG = '2130'.
LS_XKNVP-VTWEG = LS_KNVV-VTWEG = '50'.
LS_XKNVP-SPART = LS_KNVV-SPART = '00'.
APPEND LS_XKNVP TO LT_XKNVP.
APPEND LS_KNVV TO LT_KNVV.
CLEAR:LS_XKNVP,LS_KNVV.
LS_XKNVP-KUNNR = LS_KNVV-KUNNR = E_PARTNER.
LS_XKNVP-VKORG = LS_KNVV-VKORG = '4000'.
LS_XKNVP-VTWEG = LS_KNVV-VTWEG = '50'.
LS_XKNVP-SPART = LS_KNVV-SPART = '00'.
APPEND LS_XKNVP TO LT_XKNVP.
APPEND LS_KNVV TO LT_KNVV.
CLEAR:LS_XKNVP,LS_KNVV.
LS_XKNVP-KUNNR = LS_KNVV-KUNNR = E_PARTNER.
LS_XKNVP-VKORG = LS_KNVV-VKORG = '3000'.
LS_XKNVP-VTWEG = LS_KNVV-VTWEG = '20'.
LS_XKNVP-SPART = LS_KNVV-SPART = '00'.
APPEND LS_XKNVP TO LT_XKNVP.
APPEND LS_KNVV TO LT_KNVV.
CLEAR:LS_XKNVP,LS_KNVV.
LS_XKNVP-KUNNR = LS_KNVV-KUNNR = E_PARTNER.
LS_XKNVP-VKORG = LS_KNVV-VKORG = '3010'.
LS_XKNVP-VTWEG = LS_KNVV-VTWEG = '20'.
LS_XKNVP-SPART = LS_KNVV-SPART = '00'.
APPEND LS_XKNVP TO LT_XKNVP.
APPEND LS_KNVV TO LT_KNVV.
CLEAR:LS_XKNVP,LS_KNVV.
LS_XKNVI-KUNNR = E_PARTNER.
LS_XKNVI-ALAND = 'CN'.
LS_XKNVI-TATYP = 'MWST'.
LS_XKNVI-TAXKD = '2'.
LS_XKNVI-KZ = 'U'.
APPEND LS_XKNVI TO LT_XKNVI.
* 扩展销售组织
LOOP AT LT_KNVV INTO LS_KNVV.
LS_KNVV-KUNNR = E_PARTNER.
LS_KNVV-KALKS = '1'.
LS_KNVV-WAERS = 'CNY'.
SELECT SINGLE * FROM KNA1
WHERE KUNNR EQ @E_PARTNER
INTO @DATA(LS_KNA1).
BREAK LUOLIN.
CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTING
I_KNA1 = LS_KNA1
* I_KNB1 =
I_KNVV = LS_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 = LT_XKNVI
* T_XKNVK =
* T_XKNVL =
* T_XKNVP = LT_XKNVP
* 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'.
E_MSG = E_MSG && '/销售组织' && LS_KNVV-VKORG && LS_KNVV-VKORG &&'扩展成功!'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
E_CODE = 'E'.
E_MSG = E_MSG && ',' && '销售组织扩展失败。请手工处理!'.
RETURN.
ENDIF.
CLEAR LS_KNVV.
ENDLOOP.
ENDFUNCTION.
网友评论