SD_CUSTOMER_MAINTAIN_ALL
TABLE 参数中有很多表,其中 X 开头代表要插入的数据,Y 开头代表要删除的数据。
DATA: TMP TYPE STRING,
LEN TYPE I,
FLAG TYPE CHAR1,
SY_SUBRC(2) TYPE C.
CLEAR:E_MESS.
*--判断是否存在同名客户
IF I_KNA1-KUNNR IS INITIAL.
SELECT SINGLE NAME1 INTO TMP
FROM KNA1
WHERE NAME1 = I_KNA1-NAME1
AND NAME2 = I_KNA1-NAME2.
IF SY-SUBRC = 0.
FLAG = 'X'.
E_STATU = 'E'.
E_MESS = '存在名称相同的客户'.
ENDIF.
ENDIF.
*--判断邮编的长度
LEN = STRLEN( I_KNA1-PSTLZ ).
IF LEN <> 6.
FLAG = 'X'.
E_STATU = 'E'.
E_MESS = '邮编应该是6位数'.
ENDIF.
IF FLAG = ''.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = I_KNA1-KUNNR
IMPORTING
OUTPUT = I_KNA1-KUNNR.
I_KNA1-LAND1 = 'CN'.
I_KNA1-SPRAS = 1.
**--客户的销售数据
I_KNVV-KUNNR = I_KNA1-KUNNR.
* I_KNVV-VKORG = ' ' . "销售组织"
I_KNVV-VTWEG = '10' . "分销渠道"
I_KNVV-SPART = '00' . "产品组"
I_KNVV-BZIRK = ' ' . "销售地区"
I_KNVV-VKBUR = ' ' . "销售部门"
I_KNVV-WAERS = 'RMB' . "货币"
I_KNVV-KALKS = '1' . "定价过程"
I_KNVV-VERSG = '1' . "客户统计组"
I_KNVV-ANTLF = '9'. "最大部分交货"
I_KNVV-VSBED = '01'. "装运条件"
I_KNVV-KZAZU = 'X'. "订单组合chk"
I_KNVV-ZTERM = '9101'. "付款条件"
I_KNVV-KABSS = '0001'. "付款担保过程"
I_KNVV-KKBER = '9999'. "信贷控制范围"
I_KNVV-KTGRD = '01'. "账户分配组"
IF I_KNA1-KTOKD = 'A001'.
I_KNVV-KDGRP = '11'. "客户组"
I_KNVV-KONDA = '01'. "价格组"
I_KNB1-FDGRV = 'E1'. "现金管理组"
ELSEIF I_KNA1-KTOKD = 'A002'.
I_KNVV-KDGRP = '21'. "客户组"
I_KNVV-KONDA = '02'. "价格组"
I_KNB1-FDGRV = 'E2'. "现金管理组"
ENDIF.
**--客户的公司数据
I_KNB1-KUNNR = I_KNA1-KUNNR.
I_KNB1-BUKRS = I_KNVV-VKORG.
I_KNB1-AKONT = ''. "统驭科目"
I_KNB1-ZTERM = '9101'. "付款条件"
I_KNB1-XZVER = 'X'. "付款历史记录chk"
**--银行
READ TABLE T_XKNBK INDEX 1.
IF I_KNA1-KUNNR IS NOT INITIAL.
SELECT SINGLE * INTO T_YKNBK
FROM KNBK
WHERE KUNNR = I_KNA1-KUNNR
AND BANKS = 'CN'.
IF SY-SUBRC EQ 0.
APPEND T_YKNBK.
ENDIF.
ENDIF.
T_XKNBK-KUNNR = I_KNA1-KUNNR.
T_XKNBK-BANKS = 'CN'. "银行国家代码"
T_XKNBK-BANKL = '20000'. "银行码"
MODIFY T_XKNBK INDEX 1 TRANSPORTING KUNNR BANKS BANKL.
**--客户联系人
READ TABLE T_XKNVK INDEX 1.
IF I_KNA1-KUNNR IS NOT INITIAL.
SELECT SINGLE * INTO T_YKNVK
FROM KNVK
WHERE KUNNR = I_KNA1-KUNNR.
IF SY-SUBRC EQ 0.
APPEND T_YKNVK.
ENDIF.
ENDIF.
T_XKNVK-KUNNR = I_KNA1-KUNNR.
T_XKNVK-NAMEV = '#'.
T_XKNVK-ABTNR = '0002'.
T_XKNVK-PAFKT = '02'.
MODIFY T_XKNVK INDEX 1 TRANSPORTING KUNNR NAMEV ABTNR PAFKT.
**--合作伙伴
IF I_KNA1-KUNNR IS NOT INITIAL.
SELECT SINGLE * INTO T_YKNVP
FROM KNVP
WHERE KUNNR = I_KNA1-KUNNR
AND VKORG = I_KNVV-VKORG
AND VTWEG = '10'
AND SPART = '00'
AND PARVW = 'VE'.
IF SY-SUBRC EQ 0.
APPEND T_YKNVP.
ENDIF.
ENDIF.
T_XKNVP-KUNNR = I_KNA1-KUNNR.
T_XKNVP-VKORG = I_KNVV-VKORG. "销售组织"
T_XKNVP-VTWEG = '10'. "分销渠道"
T_XKNVP-SPART = '00'. "产品组"
T_XKNVP-PARVW = 'VE '.
* T_XKNVP-PERNR = ''.
MODIFY T_XKNVP INDEX 1 TRANSPORTING KUNNR VKORG VTWEG SPART PARVW.
**--税收
IF I_KNA1-KUNNR IS NOT INITIAL.
SELECT SINGLE * INTO T_YKNVI
FROM KNVI
WHERE KUNNR = I_KNA1-KUNNR
AND ALAND = 'CN'
AND TATYP = 'MWST'.
IF SY-SUBRC EQ 0.
APPEND T_YKNVI.
ENDIF.
ENDIF.
T_XKNVI-KUNNR = I_KNA1-KUNNR.
T_XKNVI-ALAND = 'CN'.
T_XKNVI-TATYP = 'MWST'.
T_XKNVI-TAXKD = '1'.
APPEND T_XKNVI .
CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTING
I_KNA1 = I_KNA1
I_KNB1 = I_KNB1
I_KNVV = I_KNVV
I_MAINTAIN_ADDRESS_BY_KNA1 = 'X'
I_KNB1_REFERENCE = I_KNB1_REFERENCE
I_FORCE_EXTERNAL_NUMBER_RANGE = I_FORCE_EXTERNAL_NUMBER_RANGE
I_NO_BANK_MASTER_UPDATE = I_NO_BANK_MASTER_UPDATE
I_CUSTOMER_IS_CONSUMER = I_CUSTOMER_IS_CONSUMER
I_RAISE_NO_BTE = I_RAISE_NO_BTE
PI_POSTFLAG = 'X'
PI_CAM_CHANGED = PI_CAM_CHANGED
PI_ADD_ON_DATA = PI_ADD_ON_DATA
I_FROM_CUSTOMERMASTER = 'X'
IMPORTING
E_KUNNR = E_KUNNR
O_KNA1 = O_KNA1
TABLES
T_XKNAS = T_XKNAS
T_XKNBK = T_XKNBK
T_XKNB5 = T_XKNB5
T_XKNEX = T_XKNEX
T_XKNVA = T_XKNVA
T_XKNVD = T_XKNVD
T_XKNVI = T_XKNVI
T_XKNVK = T_XKNVK
T_XKNVL = T_XKNVL
T_XKNVP = T_XKNVP
T_XKNZA = T_XKNZA
T_YKNAS = T_YKNAS
T_YKNBK = T_YKNBK
T_YKNB5 = T_YKNB5
T_YKNEX = T_YKNEX
T_YKNVA = T_YKNVA
T_YKNVD = T_YKNVD
T_YKNVI = T_YKNVI
T_YKNVK = T_YKNVK
T_YKNVL = T_YKNVL
T_YKNVP = T_YKNVP
T_YKNZA = T_YKNZA
T_UPD_TXT = 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 NE 0.
SY_SUBRC = SY-SUBRC.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
E_STATU = 'E'.
CONCATENATE '客户更新失败(' SY_SUBRC ')' INTO E_MESS.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
IF SY-SUBRC = 0.
E_STATU = 'S'.
E_MESS = '客户更新成功'.
E_KUNNR = O_KNA1-KUNNR.
ELSE.
E_STATU = 'E'.
CONCATENATE '客户更新失败(' SY_SUBRC ')' INTO E_MESS.
ENDIF.
ENDIF.
ENDIF.