目录
背景:ECC升级S4项目,迁移客户主数据
1.客户基础视图
LOOP AT GT_ITAB1 ASSIGNING <FS_ITAB1> WHERE SEL = 'X'.
CLEAR:LV_BPARTNERGUID,LT_DATA,LS_DATA,LT_RETURN,LS_RETURN,LS_MSG,LS_PARTNER,LS_CUSTOMER,LT_ROLES,LS_ROLES,LT_TAXS,LS_TAXS,LT_ADDRESSES,LS_ADDRESSES,
LT_PHONE,LS_PHONE,LT_FAX,LS_FAX,LT_SMTP,LS_SMTP,LV_GUID,LV_SPRAS,LT_REMARKS,LS_REMARKS,LS_TAXNUMBERS,LT_TAXNUMBERS,LS_CENTER,LS_CENTERX.
<FS_ITAB1>-KUNNR = |{ <FS_ITAB1>-KUNNR ALPHA = IN }|.
"查业务伙伴是否存在
CLEAR LV_GUID.
SELECT SINGLE PARTNER_GUID INTO LV_GUID
FROM BUT000 WHERE PARTNER = <FS_ITAB1>-KUNNR.
IF SY-SUBRC = 0. "修改
LV_BPARTNERGUID = LV_GUID.
LV_OBJECT_TASK = 'U'.
LV_TASK = 'U'.
LV_FUNCTIONS_TASK = 'M'.
ELSE. "创建
LV_OBJECT_TASK = 'I'.
LV_TASK = 'I'.
LV_FUNCTIONS_TASK = 'I'.
TRY .
CLEAR LV_BPARTNERGUID.
LV_BPARTNERGUID = CL_UUID_FACTORY=>CREATE_SYSTEM_UUID( )->CREATE_UUID_X16( ).
CATCH CX_UUID_ERROR.
"返回消息
<FS_ITAB1>-MESSAGE = '客户GUID创建失败!'.
<FS_ITAB1>-ZCHECK = ICON_LED_RED.
ENDTRY.
ENDIF.
CLEAR LS_PARTNER.
LS_PARTNER-HEADER-OBJECT_TASK = LV_OBJECT_TASK.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNER = <FS_ITAB1>-KUNNR.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID = LV_BPARTNERGUID.
LS_CUSTOMER-HEADER-OBJECT_INSTANCE-KUNNR = <FS_ITAB1>-KUNNR.
LS_CUSTOMER-HEADER-OBJECT_TASK = LV_OBJECT_TASK.
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-CATEGORY = '2'.
<FS_ITAB1>-KTOKD = |{ <FS_ITAB1>-KTOKD ALPHA = IN }|.
IF <FS_ITAB1>-KTOKD = '0021'.
LV_KTOKD = 'C021'.
ELSEIF <FS_ITAB1>-KTOKD = '0001'.
LV_KTOKD = 'C001'.
ELSEIF <FS_ITAB1>-KTOKD = 'ZAVN'.
LV_KTOKD = 'CAVN'.
ELSEIF <FS_ITAB1>-KTOKD = '0003'.
LV_KTOKD = 'C003'.
ELSEIF <FS_ITAB1>-KTOKD = '0004'.
LV_KTOKD = 'C004'.
ELSEIF <FS_ITAB1>-KTOKD = '0002'.
LV_KTOKD = 'C002'.
ELSEIF <FS_ITAB1>-KTOKD = '0012'.
LV_KTOKD = 'C012'.
ELSEIF <FS_ITAB1>-KTOKD = 'CPDA'.
LV_KTOKD = 'CPDA'.
ENDIF.
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-GROUPING = LV_KTOKD. "科目组
IF <FS_ITAB1>-ANRED = '0003'.
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-TITLE_KEY = <FS_ITAB1>-ANRED. "称谓
ENDIF.
* LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-TITLELETTER = <FS_ITAB1>-ANRED. "称谓
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME1 = <FS_ITAB1>-NAME1. "名称1
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME2 = <FS_ITAB1>-NAME2. "名称1
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME3 = <FS_ITAB1>-NAME3. "名称1
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME4 = <FS_ITAB1>-NAME4. "名称1
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-SEARCHTERM1 = <FS_ITAB1>-SORT1. "搜索项1 必填校验
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-SEARCHTERM2 = <FS_ITAB1>-SORT2. "搜索项1
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-SEARCHTERM1 = 'X'.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-SEARCHTERM2 = 'X'.
* LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-TITLELETTER = 'X'.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-TITLE_KEY = 'X'.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME1 = 'X'.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME2 = 'X'.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME3 = 'X'.
LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME4 = 'X'.
LS_REMARKS-DATA-COMM_NOTES = <FS_ITAB1>-REMARK. "客户联系人
LS_REMARKS-DATA-LANGU_ISO = SY-LANGU.
LS_REMARKS-DATAX-COMM_NOTES = 'X'.
LS_REMARKS-DATAX-LANGU_ISO = 'X'.
LS_REMARKS-TASK = LV_TASK.
APPEND LS_REMARKS TO LT_REMARKS.
LS_ADDRESSES-DATA-REMARK-REMARKS = LT_REMARKS.
"地址数据
LS_ADDRESSES-TASK = LV_TASK.
IF LV_TASK = 'U'.
SELECT SINGLE ADDRESS_GUID INTO @DATA(LV_GUID1) FROM BUT020 WHERE PARTNER = @<FS_ITAB1>-KUNNR.
LS_ADDRESSES-DATA_KEY-GUID = LV_GUID1.
ENDIF.
* LS_ADDRESSES-DATA_KEY-GUID = LV_GUID.
LS_ADDRESSES-DATA-POSTAL-DATA-STR_SUPPL1 = <FS_ITAB1>-STR_SUPPL1. "
LS_ADDRESSES-DATA-POSTAL-DATA-STR_SUPPL2 = <FS_ITAB1>-STR_SUPPL2. "
LS_ADDRESSES-DATA-POSTAL-DATA-STR_SUPPL3 = <FS_ITAB1>-STR_SUPPL3. "
LS_ADDRESSES-DATA-POSTAL-DATA-FLOOR = <FS_ITAB1>-FLOOR. "
LS_ADDRESSES-DATA-POSTAL-DATA-LOCATION = <FS_ITAB1>-LOCATION. "
LS_ADDRESSES-DATA-POSTAL-DATA-HOUSE_NO = <FS_ITAB1>-HOUSE_NUM1. "
LS_ADDRESSES-DATA-POSTAL-DATA-STREET = <FS_ITAB1>-STREET. "
LS_ADDRESSES-DATA-POSTAL-DATA-BUILDING = <FS_ITAB1>-BUILDING. "
LS_ADDRESSES-DATA-POSTAL-DATA-ROOM_NO = <FS_ITAB1>-ROOMNUMBER. "
LS_ADDRESSES-DATA-POSTAL-DATA-DISTRICT = <FS_ITAB1>-CITY2. "
LS_ADDRESSES-DATA-POSTAL-DATA-CITY = <FS_ITAB1>-CITY1. "
LS_ADDRESSES-DATA-POSTAL-DATA-POSTL_COD1 = <FS_ITAB1>-POST_CODE1. "
LS_ADDRESSES-DATA-POSTAL-DATA-POSTL_COD2 = <FS_ITAB1>-POST_CODE2. "
LS_ADDRESSES-DATA-POSTAL-DATA-REGION = <FS_ITAB1>-REGIO. "
LS_ADDRESSES-DATA-POSTAL-DATA-COUNTRY = <FS_ITAB1>-LAND1. "
LS_ADDRESSES-DATA-POSTAL-DATA-TRANSPZONE = <FS_ITAB1>-TRANSPZONE. "
* LS_ADDRESSES-DATA-POSTAL-DATA-TRANSPZONE = |{ LS_ADDRESSES-DATA-POSTAL-DATA-TRANSPZONE ALPHA = IN }|. "pce生产不需要加前导零
LS_ADDRESSES-DATA-POSTAL-DATA-TIME_ZONE = <FS_ITAB1>-TIME_ZONE. "
LS_ADDRESSES-DATA-POSTAL-DATA-TAXJURCODE = <FS_ITAB1>-TXJCD. "
LS_ADDRESSES-DATA-POSTAL-DATA-PO_BOX = <FS_ITAB1>-PO_BOX. "
LS_ADDRESSES-DATA-POSTAL-DATA-PO_BOX_CIT = <FS_ITAB1>-PO_BOX_LOC. "
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
INPUT = <FS_ITAB1>-SPRAS
IMPORTING
OUTPUT = LV_SPRAS
EXCEPTIONS
UNKNOWN_LANGUAGE = 1
OTHERS = 2.
LS_ADDRESSES-DATA-POSTAL-DATA-LANGU = LV_SPRAS. "语言
LS_ADDRESSES-DATA-POSTAL-DATA-STANDARDADDRESS = 'X'. "
LS_ADDRESSES-DATA-POSTAL-DATAX-STR_SUPPL1 = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-STR_SUPPL2 = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-STR_SUPPL3 = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-FLOOR = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-LOCATION = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-HOUSE_NO = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-STREET = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-BUILDING = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-ROOM_NO = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-DISTRICT = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-CITY = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-POSTL_COD1 = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-POSTL_COD2 = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-COUNTRY = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-REGION = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-STANDARDADDRESS = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-LANGU = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-TRANSPZONE = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-TIME_ZONE = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-TAXJURCODE = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-PO_BOX = 'X'.
LS_ADDRESSES-DATA-POSTAL-DATAX-PO_BOX_CIT = 'X'.
LS_LOCATION-LOCATION_1 = <FS_ITAB1>-BBBNR.
LS_LOCATION-LOCATION_2 = <FS_ITAB1>-BBSNR.
LS_LOCATION-LOCATION_3 = <FS_ITAB1>-BUBKZ.
LS_LOCATIONX-LOCATION_1 = 'X'.
LS_LOCATIONX-LOCATION_2 = 'X'.
LS_LOCATIONX-LOCATION_3 = 'X'.
LS_ADDRESSES-DATA-ADDR_DEP_ATTR-DATA = LS_LOCATION.
LS_ADDRESSES-DATA-ADDR_DEP_ATTR-DATAX = LS_LOCATIONX.
LS_PHONE-CONTACT-TASK = LV_TASK.
LS_PHONE-CONTACT-DATA-TELEPHONE = <FS_ITAB1>-TEL_NUMBER. "移动电话
LS_PHONE-CONTACT-DATA-R_3_USER = ''. "3表示移动电话
LS_PHONE-CONTACT-DATAX-TELEPHONE = ABAP_TRUE.
LS_PHONE-CONTACT-DATAX-R_3_USER = ABAP_TRUE.
APPEND LS_PHONE TO LT_PHONE.
LS_ADDRESSES-DATA-COMMUNICATION-PHONE-PHONE = LT_PHONE.
LS_SMTP-CONTACT-TASK = LV_TASK.
LS_SMTP-CONTACT-DATA-E_MAIL = <FS_ITAB1>-SMTP_ADDR. "邮件
LS_SMTP-CONTACT-DATAX-E_MAIL = ABAP_TRUE.
APPEND LS_SMTP TO LT_SMTP.
LS_ADDRESSES-DATA-COMMUNICATION-SMTP-SMTP = LT_SMTP.
LS_REMARKS-DATA-COMM_NOTES = <FS_ITAB1>-REMARK. "客户联系人
LS_REMARKS-DATA-LANGU_ISO = SY-LANGU.
LS_REMARKS-DATAX-COMM_NOTES = 'X'.
LS_REMARKS-DATAX-LANGU_ISO = 'X'.
LS_REMARKS-TASK = LV_TASK.
APPEND LS_REMARKS TO LT_REMARKS.
CLEAR :LS_REMARKS.
LS_ADDRESSES-DATA-REMARK-REMARKS = LT_REMARKS.
CLEAR LT_REMARKS.
*--传真 WD
CLEAR:LS_FAX.
REFRESH LT_FAX[].
LS_FAX-CONTACT-TASK = LV_TASK.
LS_FAX-CONTACT-DATA-FAX = <FS_ITAB1>-FAX_NUMBER . "传真
LS_FAX-CONTACT-DATAX-FAX = ABAP_TRUE.
APPEND LS_FAX TO LT_FAX .
LS_ADDRESSES-DATA-COMMUNICATION-FAX-FAX = LT_FAX.
APPEND LS_ADDRESSES TO LT_ADDRESSES.
LS_PARTNER-CENTRAL_DATA-ADDRESS-ADDRESSES = LT_ADDRESSES.
LS_CENTER-STCD1 = <FS_ITAB1>-STCD1.
LS_CENTER-STCD2 = <FS_ITAB1>-STCD2.
LS_CENTER-STCEG = <FS_ITAB1>-STCEG.
LS_CENTER-LIFNR = <FS_ITAB1>-LIFNR .
LS_CENTER-VBUND = <FS_ITAB1>-VBUND .
LS_CENTER-AUFSD = <FS_ITAB1>-AUFSD .
LS_CENTER-LIFSD = <FS_ITAB1>-LIFSD .
LS_CENTER-FAKSD = <FS_ITAB1>-FAKSD .
LS_CENTER-CASSD = <FS_ITAB1>-CASSD .
LS_CENTERX-STCD1 = 'X'.
LS_CENTERX-STCD2 = 'X'.
LS_CENTERX-STCEG = 'X'.
LS_CENTERX-LIFNR = 'X'.
LS_CENTERX-VBUND = 'X'.
LS_CENTERX-AUFSD = 'X'.
LS_CENTERX-LIFSD = 'X'.
LS_CENTERX-FAKSD = 'X'.
LS_CENTERX-CASSD = 'X'.
LS_CUSTOMER-CENTRAL_DATA-CENTRAL-DATA = LS_CENTER.
LS_CUSTOMER-CENTRAL_DATA-CENTRAL-DATAX = LS_CENTERX.
IF LV_TASK = 'I'. "创建角色
CLEAR:LS_ROLES,LT_ROLES[].
LS_ROLES-TASK = 'I'.
LS_ROLES-DATA_KEY = 'FLCU01'.
APPEND LS_ROLES TO LT_ROLES.
LS_PARTNER-CENTRAL_DATA-ROLE-ROLES = LT_ROLES.
ENDIF.
LS_DATA-PARTNER = LS_PARTNER.
LS_DATA-CUSTOMER = LS_CUSTOMER.
APPEND LS_DATA TO LT_DATA.
"正式执行
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
EXPORTING
I_DATA = LT_DATA
* I_EXT_DATA =
IMPORTING
E_RETURN = LT_RETURN.
CLEAR:LV_MSG,LS_DATA,LT_DATA,LS_PARTNER,LS_CUSTOMER.
LOOP AT LT_RETURN INTO LS_RETURN.
LOOP AT LS_RETURN-OBJECT_MSG INTO LS_MSG WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE LV_MSG LS_MSG-MESSAGE INTO LV_MSG.
ENDLOOP.
ENDLOOP.
IF LV_MSG IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
LV_NUM1 = LV_NUM1 + 1.
IF LV_TASK <> 'I'.
CONCATENATE '客户-' <FS_ITAB1>-KUNNR '扩展成功!' INTO <FS_ITAB1>-MESSAGE.
ELSE.
CONCATENATE '客户-' <FS_ITAB1>-KUNNR '创建成功!' INTO <FS_ITAB1>-MESSAGE.
ENDIF.
<FS_ITAB1>-ZCHECK = ICON_GREEN_LIGHT.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
<FS_ITAB1>-MESSAGE = LV_MSG.
<FS_ITAB1>-ZCHECK = ICON_RED_LIGHT.
LV_NUM2 = LV_NUM2 + 1.
ENDIF.
<FS_ITAB1>-KTOKD = |{ <FS_ITAB1>-KTOKD ALPHA = OUT }|.
<FS_ITAB1>-KUNNR = |{ <FS_ITAB1>-KUNNR ALPHA = OUT }|.
ENDLOOP.
2.客户长文本
- XD03查看客户销售视图的长文本
- 获取客户长文本方法(我是在ECC这边写了个接口,S4调用接口获取ECC的文本数据)
FUNCTION GET_KUNNR_TEXT. *"---------------------------------------------------------------------- *"*"局部接口: *" TABLES *" T_LINES STRUCTURE ZSD_STXH_TLINE *"---------------------------------------------------------------------- TABLES: ZSD_STXH_TLINE. DATA: LV_VKORG TYPE VKORG, LV_VTWEG TYPE VTWEG, LV_TWEG TYPE VTWEG, LV_TDOBJECT TYPE TDOBJECT, LV_TDNAME TYPE TDNAME, LV_TDID TYPE TDID, LV_TDSPRAS TYPE TDSPRAS. DATA: LT_KNVV TYPE TABLE OF KNVV, LS_KNVV LIKE LINE OF LT_KNVV, * LT_STXH_TLINE TYPE TABLE OF ZSD_STXH_TLINE, * LS_STXH_TLINE TYPE ZSD_STXH_TLINE, * LT_STXH TYPE TABLE OF STXH, * LS_STXH TYPE STXH, LT_LINES TYPE TABLE OF TLINE, LS_LINES LIKE LINE OF LT_LINES. * DATA: GT_STXH TYPE TABLE OF STXH, * GS_STXH LIKE LINE OF GT_STXH. TYPES: BEGIN OF TY_STXH. INCLUDE TYPE STXH. TYPES: KUNNR TYPE KUNNR, VKORG TYPE VKORG, VTWEG TYPE VTWEG, SPART TYPE SPART. TYPES: END OF TY_STXH. TYPES:BEGIN OF TY_ZSD_STXH_TLINE. INCLUDE TYPE ZSD_STXH_TLINE. TYPES END OF TY_ZSD_STXH_TLINE. DATA:LT_STXH TYPE TABLE OF TY_STXH, GT_STXH TYPE TABLE OF TY_STXH, GS_STXH TYPE TY_STXH. FIELD-SYMBOLS: <FS_VALUE> TYPE TY_STXH. DATA: LT_STXH_TLINE TYPE TABLE OF TY_ZSD_STXH_TLINE, LS_STXH_TLINE TYPE TY_ZSD_STXH_TLINE. FIELD-SYMBOLS: <FS_STXH_TLINE> TYPE TY_ZSD_STXH_TLINE. SELECT KUNNR VKORG VTWEG SPART FROM KNVV INTO CORRESPONDING FIELDS OF TABLE LT_KNVV. * WHERE KUNNR = LV_KUNNR. "1.循环客户的销售数据 LOOP AT LT_KNVV INTO LS_KNVV. DATA: LV_STR TYPE STRING. CONCATENATE LS_KNVV-KUNNR LS_KNVV-VKORG LS_KNVV-VTWEG LS_KNVV-SPART INTO LV_STR. SELECT TDOBJECT TDNAME TDID TDSPRAS FROM STXH INTO CORRESPONDING FIELDS OF TABLE LT_STXH WHERE TDNAME = LV_STR AND TDOBJECT = 'KNVV'. IF LT_STXH IS NOT INITIAL. LOOP AT LT_STXH ASSIGNING <FS_VALUE>. <FS_VALUE>-KUNNR = LS_KNVV-KUNNR. <FS_VALUE>-VKORG = LS_KNVV-VKORG. <FS_VALUE>-VTWEG = LS_KNVV-VTWEG. <FS_VALUE>-SPART = LS_KNVV-SPART. ENDLOOP. ENDIF. APPEND LINES OF LT_STXH TO GT_STXH. CLEAR LT_STXH[]. ENDLOOP. "2.循环客户的文本抬头数据 LOOP AT GT_STXH INTO GS_STXH. CALL FUNCTION 'READ_TEXT' EXPORTING * CLIENT = SY-MANDT ID = GS_STXH-TDID LANGUAGE = GS_STXH-TDSPRAS NAME = GS_STXH-TDNAME OBJECT = GS_STXH-TDOBJECT TABLES LINES = LT_LINES . IF SY-SUBRC = 0. LOOP AT LT_LINES INTO LS_LINES. MOVE-CORRESPONDING LS_LINES TO LS_STXH_TLINE. LS_STXH_TLINE-TDID = GS_STXH-TDID. LS_STXH_TLINE-TDSPRAS = GS_STXH-TDSPRAS. LS_STXH_TLINE-TDNAME = GS_STXH-TDNAME. LS_STXH_TLINE-TDOBJECT = GS_STXH-TDOBJECT. LS_STXH_TLINE-KUNNR = GS_STXH-KUNNR. LS_STXH_TLINE-VKORG = GS_STXH-VKORG. LS_STXH_TLINE-VTWEG = GS_STXH-VTWEG. LS_STXH_TLINE-SPART = GS_STXH-SPART. APPEND LS_STXH_TLINE TO LT_STXH_TLINE. ENDLOOP. ENDIF. CLEAR GS_STXH. ENDLOOP. APPEND LINES OF LT_STXH_TLINE TO T_LINES. MODIFY ZSD_STXH_TLINE FROM TABLE T_LINES. ENDFUNCTION.
- S4这边创建客户长文本
FORM FRM_DATA_DR14. DATA: LT_RETURNX TYPE TABLE OF BAPIRET2. DATA: LV_MSG TYPE STRING. DATA: LV_RESULT TYPE P LENGTH 6 DECIMALS 2. DATA: LV_STXT TYPE STRING. DATA: LV_RESTEX TYPE CHAR8. DATA: LV_NUM TYPE I, LV_NUM1 TYPE I, LV_NUM2 TYPE I. DATA: LT_TLINES TYPE TABLE OF ZSD_STXH_TLINE, LT_COPY_TLINES TYPE TABLE OF ZSD_STXH_TLINE. DATA(LV_LINE1) = LINES( GT_ITAB14 ). DATA:LV_TDNAME TYPE THEAD-TDNAME. DATA: FLINES_TAB TYPE TABLE OF TLINE, FLINES_WA TYPE TLINE. CALL FUNCTION 'GET_KUNNR_TEXT' DESTINATION GV_RFC TABLES T_LINES = LT_TLINES. LOOP AT GT_ITAB14 ASSIGNING FIELD-SYMBOL(<FS_ITAB14>) WHERE SEL = 'X' AND MESSAGE IS INITIAL AND ZCHECK IS INITIAL. *------显示导入进程 重点 CLEAR:LV_RESULT,LV_RESTEX,LV_STXT. LV_NUM = LV_NUM + 1. LV_RESULT = LV_NUM / LV_LINE1. LV_RESTEX = LV_RESULT * 100. CLEAR LT_RETURNX. CONCATENATE <FS_ITAB14>-KUNNR <FS_ITAB14>-VKORG <FS_ITAB14>-VTWEG <FS_ITAB14>-SPART INTO LV_TDNAME. LOOP AT LT_TLINES INTO DATA(LS_TLINE) WHERE TDNAME = LV_TDNAME. "将当前客户的所有文本添加到LT_COPY_TLINES当中 APPEND LS_TLINE TO LT_COPY_TLINES. CLEAR: LS_TLINE. ENDLOOP. "根据TDID分组进行create_text LOOP AT LT_COPY_TLINES INTO DATA(LS_COPY_TLINES) GROUP BY ( TDID = LS_COPY_TLINES-TDID ) ASCENDING ASSIGNING FIELD-SYMBOL(<GROUP>). LOOP AT GROUP <GROUP> ASSIGNING FIELD-SYMBOL(<LS_MEMBER>). MOVE-CORRESPONDING <LS_MEMBER> TO FLINES_WA. APPEND FLINES_WA TO FLINES_TAB. CLEAR:FLINES_WA. ENDLOOP. "拿到当前用户某个TDID 的文本内容,然后调用create_text CALL FUNCTION 'CREATE_TEXT' EXPORTING FID = <LS_MEMBER>-TDID FLANGUAGE = <LS_MEMBER>-TDSPRAS FNAME = LV_TDNAME FOBJECT = 'KNVV' SAVE_DIRECT = 'X' * FFORMAT = '*' FFORMAT = LS_COPY_TLINES-TDFORMAT TABLES FLINES = FLINES_TAB * EXCEPTIONS * NO_INIT = 1 * NO_SAVE = 2 * OTHERS = 3 . IF SY-SUBRC <> 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. LV_NUM2 = LV_NUM2 + 1. <FS_ITAB14>-MESSAGE = '当前客户' && <FS_ITAB14>-KUNNR &&'创建长文本失败'. <FS_ITAB14>-ZCHECK = ICON_RED_LIGHT. ENDIF. CLEAR FLINES_TAB. ENDLOOP. IF <FS_ITAB14>-MESSAGE IS INITIAL AND LT_COPY_TLINES IS NOT INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = ABAP_TRUE. LV_NUM1 = LV_NUM1 + 1. <FS_ITAB14>-MESSAGE = '当前客户' && <FS_ITAB14>-KUNNR &&'创建长文本成功'. <FS_ITAB14>-ZCHECK = ICON_GREEN_LIGHT. ELSEIF LT_COPY_TLINES IS INITIAL. <FS_ITAB14>-MESSAGE = '当前客户' && <FS_ITAB14>-KUNNR &&'无长文本'. <FS_ITAB14>-ZCHECK = ICON_YELLOW_LIGHT. ENDIF. CLEAR:LT_COPY_TLINES. MODIFY GT_ITAB14 FROM <FS_ITAB14> TRANSPORTING MESSAGE ZCHECK WHERE KUNNR = <FS_ITAB14>-KUNNR. LV_STXT = '正在拼命加载中 : ' && LV_RESTEX && '%' && '总共' && LV_LINE1 && '条,现在批导第' && LV_NUM && '条,成功导入-' && LV_NUM1 && '条,失败-' && LV_NUM2 && '条'. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING PERCENTAGE = LV_RESULT TEXT = LV_STXT. ENDLOOP. ENDFORM.
3.客户销售视图
LOOP AT GT_ITAB2 ASSIGNING <FS_ITAB2> WHERE SEL = 'X'.
CLEAR:LV_BPARTNERGUID,LT_DATA,LS_DATA,LT_RETURN,LS_RETURN,LS_MSG,LS_PARTNER,LS_CUSTOMER,LT_ROLES,LS_ROLES,LT_FUNCTIONS, LS_FUNCTIONS ,
LV_GUID,LT_SALES,LS_SALES ,LV_RLTYP,LV_KUNNR,LV_KTOKD.
<FS_ITAB2>-KUNNR = |{ <FS_ITAB2>-KUNNR ALPHA = IN }|.
"查业务伙伴是否存在
CLEAR LV_GUID.
SELECT SINGLE PARTNER_GUID INTO LV_GUID
FROM BUT000 WHERE PARTNER = <FS_ITAB2>-KUNNR.
IF SY-SUBRC <> 0. "不存在
<FS_ITAB2>-ZCHECK = ICON_RED_LIGHT.
<FS_ITAB2>-MESSAGE = 'THE KUNNR DOES NOT EXIST'.
LV_NUM2 = LV_NUM + 1.
CONTINUE.
ELSE. "修改
LV_OBJECT_TASK = 'U'.
LV_TASK = 'U'.
LV_FUNCTIONS_TASK = 'M'.
LV_BPARTNERGUID = LV_GUID.
ENDIF.
CLEAR LS_PARTNER.
LS_PARTNER-HEADER-OBJECT_TASK = LV_OBJECT_TASK.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNER = <FS_ITAB2>-KUNNR.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID = LV_BPARTNERGUID.
LS_CUSTOMER-HEADER-OBJECT_INSTANCE-KUNNR = <FS_ITAB2>-KUNNR.
LS_CUSTOMER-HEADER-OBJECT_TASK = LV_OBJECT_TASK.
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-CATEGORY = '2'.
SELECT SINGLE KTOKD INTO LV_KTOKD FROM KNA1 WHERE KUNNR = <FS_ITAB2>-KUNNR.
IF SY-SUBRC = 0.
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-GROUPING = LV_KTOKD. "科目组
ENDIF.
SELECT SINGLE KUNNR INTO LV_KUNNR FROM KNVV WHERE KUNNR = <FS_ITAB2>-KUNNR AND VKORG = <FS_ITAB2>-VKORG
AND VTWEG = <FS_ITAB2>-VTWEG AND SPART = <FS_ITAB2>-SPART.
IF LV_KUNNR IS NOT INITIAL.
LS_SALES-TASK = 'U'.
ELSE.
LS_SALES-TASK = 'I'.
ENDIF.
<FS_ITAB2>-VTWEG = |{ <FS_ITAB2>-VTWEG ALPHA = IN }|.
<FS_ITAB2>-SPART = |{ <FS_ITAB2>-SPART ALPHA = IN }|.
LS_SALES-DATA_KEY-VKORG = <FS_ITAB2>-VKORG. "销售组织
LS_SALES-DATA_KEY-VTWEG = <FS_ITAB2>-VTWEG. "分销渠道
LS_SALES-DATA_KEY-SPART = <FS_ITAB2>-SPART. "产品组
LS_SALES-DATA-BZIRK = <FS_ITAB2>-BZIRK. "销售区域
LS_SALES-DATA-VKBUR = <FS_ITAB2>-VKBUR. "销售办公室
LS_SALES-DATA-VKGRP = <FS_ITAB2>-VKGRP. "销售组
LS_SALES-DATA-WAERS = <FS_ITAB2>-WAERS. "货币
LS_SALES-DATA-KONDA = <FS_ITAB2>-KONDA. "价格组
LS_SALES-DATA-KONDA = |{ LS_SALES-DATA-KONDA ALPHA = IN }|.
LS_SALES-DATA-INCO1 = <FS_ITAB2>-INCO1. "国际贸易条款
LS_SALES-DATA-INCO2 = <FS_ITAB2>-INCO2. "国际贸易条款2
LS_SALES-DATA-KTGRD = |{ <FS_ITAB2>-KTGRD ALPHA = IN }|. "科目分配组
LS_SALES-DATA-ZTERM = <FS_ITAB2>-ZTERM. "付款条件
LS_SALES-DATA-VSBED = |{ <FS_ITAB2>-VSBED ALPHA = IN }|. "装运条件
LS_SALES-DATA-KALKS = <FS_ITAB2>-KALKS. "客户定价过程
LS_SALES-DATA-LPRIO = <FS_ITAB2>-LPRIO. "
LS_SALES-DATA-VERSG = <FS_ITAB2>-VERSG. "
LS_SALES-DATA-KDGRP = <FS_ITAB2>-KDGRP. "
LS_SALES-DATA-AWAHR = <FS_ITAB2>-AWAHR. "
LS_SALES-DATA-KALKS = <FS_ITAB2>-KALKS. "
LS_SALES-DATA-PLTYP = <FS_ITAB2>-PLTYP. "
LS_SALES-DATA-VWERK = <FS_ITAB2>-VWERK. "
LS_SALES-DATA-KZTLF = <FS_ITAB2>-KZTLF. "
LS_SALES-DATA-ANTLF = <FS_ITAB2>-ANTLF. "
LS_SALES-DATA-AUTLF = <FS_ITAB2>-AUTLF. "
LS_SALES-DATA-KZAZU = <FS_ITAB2>-KZAZU. "
LS_SALES-DATA-KKBER = <FS_ITAB2>-KKBER. "
LS_SALES-DATA-MRNKZ = <FS_ITAB2>-MRNKZ. "
LS_SALES-DATA-PRFRE = <FS_ITAB2>-PRFRE. "
LS_SALES-DATA-PERFK = <FS_ITAB2>-PERFK. "
LS_SALES-DATA-CASSD = <FS_ITAB2>-CASSD. "
LS_SALES-DATA-AUFSD = <FS_ITAB2>-AUFSD. "
LS_SALES-DATA-LIFSD = <FS_ITAB2>-LIFSD. "
LS_SALES-DATA-FAKSD = <FS_ITAB2>-FAKSD. "
LS_SALES-DATA-LOEVM = <FS_ITAB2>-LOEVM. "
LS_SALES-DATAX-KALKS = 'X'.
LS_SALES-DATAX-LPRIO = 'X'.
LS_SALES-DATAX-ZTERM = 'X'.
LS_SALES-DATAX-KTGRD = 'X'.
LS_SALES-DATAX-INCO1 = 'X'.
LS_SALES-DATAX-INCO2 = 'X'.
LS_SALES-DATAX-VSBED = 'X'.
LS_SALES-DATAX-VKBUR = 'X'.
LS_SALES-DATAX-BZIRK = 'X'.
LS_SALES-DATAX-VKGRP = 'X'.
LS_SALES-DATAX-WAERS = 'X'.
LS_SALES-DATAX-KONDA = 'X'.
LS_SALES-DATAX-VERSG = 'X'.
LS_SALES-DATAX-KDGRP = 'X'.
LS_SALES-DATAX-AWAHR = 'X'.
LS_SALES-DATAX-KALKS = 'X'.
LS_SALES-DATAX-PLTYP = 'X'.
LS_SALES-DATAX-VWERK = 'X'.
LS_SALES-DATAX-KZTLF = 'X'.
LS_SALES-DATAX-ANTLF = 'X'.
LS_SALES-DATAX-AUTLF = 'X'.
LS_SALES-DATAX-AUTLF = 'X'.
LS_SALES-DATAX-KKBER = 'X'.
LS_SALES-DATAX-MRNKZ = 'X'.
LS_SALES-DATAX-PRFRE = 'X'.
LS_SALES-DATAX-PERFK = 'X'.
LS_SALES-DATAX-CASSD = 'X'.
LS_SALES-DATAX-AUFSD = 'X'.
LS_SALES-DATAX-LIFSD = 'X'.
LS_SALES-DATAX-FAKSD = 'X'.
LS_SALES-DATAX-LOEVM = 'X'.
******合作伙伴角色详细信息开始*****
LOOP AT LT_ITAB5 INTO LS_ITAB5 WHERE KUNNR = <FS_ITAB2>-KUNNR AND VKORG = <FS_ITAB2>-VKORG
AND VTWEG = <FS_ITAB2>-VTWEG AND SPART = <FS_ITAB2>-SPART.
LOOP AT GT_ITAB5 INTO GS_ITAB5 WHERE KUNNR = LS_ITAB5-KUNNR AND VKORG = LS_ITAB5-VKORG
AND VTWEG = LS_ITAB5-VTWEG AND SPART = LS_ITAB5-SPART
AND KUNN2 <> ''."mod by luoyx on 20250417
* AND PARVW <> 'AG' AND KUNN2 <> ''..
* CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT'
* EXPORTING
* INPUT = GS_ITAB5-PARVW
* IMPORTING
* OUTPUT = GS_ITAB5-PARVW.
* IF GS_ITAB5-PARVW = 'AG'.
* CONTINUE.
* ENDIF.
IF LS_SALES-TASK = 'I'.
LS_FUNCTIONS-TASK = 'I'.
ELSE.
LS_FUNCTIONS-TASK = 'M'.
ENDIF.
LV_JS = LV_JS + 1.
LS_FUNCTIONS-DATA_KEY-PARZA = LV_JS.
LS_FUNCTIONS-DATAX-PARTNER = 'X'.
IF GS_ITAB5-KUNN2 IS NOT INITIAL.
LS_FUNCTIONS-DATA-PARTNER = GS_ITAB5-KUNN2.
LS_FUNCTIONS-DATA-PARTNER = |{ LS_FUNCTIONS-DATA-PARTNER ALPHA = IN }|.
ENDIF.
LS_FUNCTIONS-DATA_KEY-PARVW = GS_ITAB5-PARVW.
APPEND LS_FUNCTIONS TO LT_FUNCTIONS.
CLEAR LS_FUNCTIONS.
ENDLOOP.
CLEAR LV_JS.
ENDLOOP.
LS_SALES-FUNCTIONS-CURRENT_STATE = 'X'.
LS_SALES-FUNCTIONS-FUNCTIONS = LT_FUNCTIONS[].
APPEND LS_SALES TO LT_SALES.
LS_CUSTOMER-SALES_DATA-SALES = LT_SALES.
LS_DATA-PARTNER = LS_PARTNER.
LS_DATA-CUSTOMER = LS_CUSTOMER.
APPEND LS_DATA TO LT_DATA.
"正式执行
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
EXPORTING
I_DATA = LT_DATA
* I_EXT_DATA =
IMPORTING
E_RETURN = LT_RETURN.
CLEAR:LV_MSG,LS_DATA,LT_DATA,LS_PARTNER,LS_CUSTOMER.
LOOP AT LT_RETURN INTO LS_RETURN.
LOOP AT LS_RETURN-OBJECT_MSG INTO LS_MSG WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE LV_MSG LS_MSG-MESSAGE INTO LV_MSG.
ENDLOOP.
ENDLOOP.
IF LV_MSG IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
LV_NUM1 = LV_NUM1 + 1.
IF LV_TASK <> 'I'.
CONCATENATE '客户-' <FS_ITAB2>-KUNNR '销售视图扩展成功!' INTO <FS_ITAB2>-MESSAGE.
ELSE.
CONCATENATE '客户-' <FS_ITAB2>-KUNNR '销售视图创建成功!' INTO <FS_ITAB2>-MESSAGE.
ENDIF.
CONCATENATE '客户-' <FS_ITAB2>-KUNNR '销售视图创建成功!' INTO <FS_ITAB2>-MESSAGE.
<FS_ITAB2>-ZCHECK = ICON_GREEN_LIGHT.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
<FS_ITAB2>-MESSAGE = LV_MSG.
<FS_ITAB2>-ZCHECK = ICON_RED_LIGHT.
LV_NUM2 = LV_NUM2 + 1.
ENDIF.
<FS_ITAB2>-KUNNR = |{ <FS_ITAB2>-KUNNR ALPHA = OUT }|.
ENDLOOP.
4.客户公司视图
LOOP AT GT_ITAB3 ASSIGNING <FS_ITAB3> WHERE SEL = 'X'.
CLEAR:LV_BPARTNERGUID,LT_DATA,LS_DATA,LT_RETURN,LS_RETURN,LS_MSG,LS_PARTNER,LS_CUSTOMER,LT_ROLES,LS_ROLES,LT_FUNCTIONS, LS_FUNCTIONS ,
LV_GUID,LT_SALES,LS_SALES ,LV_RLTYP,LT_COMPANY,LS_COMPANY,LS_COMPANY_DATA,LS_DUNNIN,LT_DUNNIN[],LV_KUNNR.
<FS_ITAB3>-KUNNR = |{ <FS_ITAB3>-KUNNR ALPHA = IN }|.
"查业务伙伴是否存在
CLEAR LV_GUID.
SELECT SINGLE PARTNER_GUID INTO LV_GUID
FROM BUT000 WHERE PARTNER = <FS_ITAB3>-KUNNR.
IF SY-SUBRC = 0. "修改
LV_BPARTNERGUID = LV_GUID.
LV_OBJECT_TASK = 'U'.
LV_TASK = 'U'.
LV_FUNCTIONS_TASK = 'M'.
ELSE. "创建
LV_NUM2 = LV_NUM2 + 1.
<FS_ITAB3>-ZCHECK = ICON_RED_LIGHT.
<FS_ITAB3>-MESSAGE = 'THE KUNNR DOES NOT EXIST'.
CONTINUE.
ENDIF.
CLEAR LS_PARTNER.
LS_PARTNER-HEADER-OBJECT_TASK = LV_OBJECT_TASK.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNER = <FS_ITAB3>-KUNNR.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID = LV_BPARTNERGUID.
LS_CUSTOMER-HEADER-OBJECT_INSTANCE-KUNNR = <FS_ITAB3>-KUNNR.
LS_CUSTOMER-HEADER-OBJECT_TASK = LV_OBJECT_TASK.
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-CATEGORY = '2'.
SELECT SINGLE KUNNR INTO LV_KUNNR FROM KNB1 WHERE KUNNR = <FS_ITAB3>-KUNNR AND BUKRS = <FS_ITAB3>-BUKRS.
IF SY-SUBRC = 0.
LS_COMPANY-TASK = 'U'.
ELSE.
LS_COMPANY-TASK = 'I'.
ENDIF.
LS_COMPANY-DATA_KEY-BUKRS = <FS_ITAB3>-BUKRS.
LS_COMPANY-DATA-AKONT = <FS_ITAB3>-AKONT.
LS_COMPANY-DATA-ZTERM = <FS_ITAB3>-ZTERM.
LS_COMPANY-DATA-FDGRV = <FS_ITAB3>-FDGRV.
LS_COMPANY-DATA-XZVER = <FS_ITAB3>-XZVER.
LS_COMPANY-DATA-ZWELS = <FS_ITAB3>-ZWELS.
LS_COMPANY-DATA-XPORE = <FS_ITAB3>-XPORE.
LS_COMPANY-DATA-XAUSZ = <FS_ITAB3>-XAUSZ.
IF <FS_ITAB3>-BUSAB IS NOT INITIAL.
LS_COMPANY-DATA-BUSAB = <FS_ITAB3>-BUSAB.
LS_COMPANY-DATAX-BUSAB = 'X'.
ENDIF.
LS_COMPANY-DATAX-AKONT = 'X'.
LS_COMPANY-DATAX-ZTERM = 'X'.
LS_COMPANY-DATAX-FDGRV = 'X'.
LS_COMPANY-DATAX-XZVER = 'X'.
LS_COMPANY-DATAX-ZWELS = 'X'.
LS_COMPANY-DATAX-XPORE = 'X'.
IF <FS_ITAB3>-MAHNA IS NOT INITIAL.
LS_DUNNIN-DATA-MAHNA = <FS_ITAB3>-MAHNA.
LS_DUNNIN-DATAX-MAHNA = 'X'.
ENDIF.
IF <FS_ITAB3>-BUSAB1 IS NOT INITIAL.
LS_DUNNIN-DATA-BUSAB = <FS_ITAB3>-BUSAB1.
LS_DUNNIN-DATAX-BUSAB = 'X'.
ENDIF.
LS_DUNNIN-DATA-BUSAB = <FS_ITAB3>-BUSAB.
LS_DUNNIN-DATA-MADAT = <FS_ITAB3>-MADAT.
LS_DUNNIN-DATA-MAHNS = <FS_ITAB3>-MAHNS.
LS_DUNNIN-DATA-MANSP = <FS_ITAB3>-MANSP.
LS_DUNNIN-DATAX-BUSAB = 'X'.
LS_DUNNIN-DATAX-MADAT = 'X'.
LS_DUNNIN-DATAX-MAHNS = 'X'.
LS_DUNNIN-DATAX-MANSP = 'X'.
APPEND LS_DUNNIN TO LT_DUNNIN.
CLEAR LS_DUNNIN.
LS_COMPANY-DUNNING-DUNNING = LT_DUNNIN[].
APPEND LS_COMPANY TO LT_COMPANY.
LS_COMPANY_DATA-COMPANY = LT_COMPANY.
LS_CUSTOMER-COMPANY_DATA = LS_COMPANY_DATA.
"判断是否已有销售角色
SELECT SINGLE RLTYP INTO LV_RLTYP FROM BUT100 WHERE PARTNER = <FS_ITAB3>-KUNNR AND RLTYP = 'FLCU00'.
IF LV_RLTYP IS INITIAL.
CLEAR:LS_ROLES,LT_ROLES[].
LS_ROLES-TASK = 'I'.
LS_ROLES-DATA_KEY = 'FLCU00'.
APPEND LS_ROLES TO LT_ROLES.
LS_PARTNER-CENTRAL_DATA-ROLE-ROLES = LT_ROLES.
ENDIF.
LS_DATA-PARTNER = LS_PARTNER.
LS_DATA-CUSTOMER = LS_CUSTOMER.
APPEND LS_DATA TO LT_DATA.
"正式执行
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
EXPORTING
I_DATA = LT_DATA
* I_EXT_DATA =
IMPORTING
E_RETURN = LT_RETURN.
CLEAR:LV_MSG,LS_DATA,LT_DATA.
LOOP AT LT_RETURN INTO LS_RETURN.
LOOP AT LS_RETURN-OBJECT_MSG INTO LS_MSG WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE LV_MSG LS_MSG-MESSAGE INTO LV_MSG.
ENDLOOP.
ENDLOOP.
IF LV_MSG IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
LV_NUM1 = LV_NUM1 + 1.
IF LV_TASK <> 'I'.
CONCATENATE '客户-' <FS_ITAB3>-KUNNR '公司视图扩展成功!' INTO <FS_ITAB3>-MESSAGE.
ELSE.
CONCATENATE '客户-' <FS_ITAB3>-KUNNR '公司视图创建成功!' INTO <FS_ITAB3>-MESSAGE.
ENDIF.
<FS_ITAB3>-ZCHECK = ICON_GREEN_LIGHT.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
<FS_ITAB3>-MESSAGE = LV_MSG.
<FS_ITAB3>-ZCHECK = ICON_RED_LIGHT.
LV_NUM2 = LV_NUM2 + 1.
ENDIF.
<FS_ITAB3>-KUNNR = |{ <FS_ITAB3>-KUNNR ALPHA = OUT }|.
ENDLOOP.
5.税类别
LOOP AT GT_ITAB4 ASSIGNING <FS_ITAB4> WHERE SEL = 'X'.
CLEAR:LV_BPARTNERGUID,LT_DATA,LS_DATA,LT_RETURN,LS_RETURN,LS_MSG,LS_PARTNER,LS_CUSTOMER,
LV_GUID,LS_TAX,LT_TAX,LV_KUNNR,LV_TASK,LV_TASK1,LS_TAXNUMBERS,LT_TAXNUMBERS[].
CLEAR: LV_VATTAX,LV_CD1TAX,LV_CD2TAX.
* SELECT SINGLE LAND1 FROM KNA1 INTO LV_LAND WHERE KUNNR = <FS_ITAB4>-KUNNR.
SELECT SINGLE TAXTYPE FROM ZTFKTAXNUMTYPE_T WHERE SPRAS = 'E' AND LAND1 = @<FS_ITAB4>-LAND1 AND FLAG = 'X' INTO @LV_VATTAX.
SELECT SINGLE TAXTYPE FROM ZTFKTAXNUMTYPE_T WHERE SPRAS = 'E' AND LAND1 = @<FS_ITAB4>-LAND1 AND FLAG2 = 'X' INTO @LV_CD1TAX.
SELECT SINGLE TAXTYPE FROM ZTFKTAXNUMTYPE_T WHERE SPRAS = 'E' AND LAND1 = @<FS_ITAB4>-LAND1 AND FLAG3 = 'X' INTO @LV_CD2TAX.
CLEAR LT_RETURNX[].
IF <FS_ITAB4>-STCEG IS NOT INITIAL.
PERFORM FRM_BAPI_BUPA_TAX_ADD TABLES LT_RETURNX
USING <FS_ITAB4>-KUNNR
LV_VATTAX
<FS_ITAB4>-STCEG
''.
ENDIF.
IF <FS_ITAB4>-STCD1 IS NOT INITIAL.
PERFORM FRM_BAPI_BUPA_TAX_ADD TABLES LT_RETURNX
USING <FS_ITAB4>-KUNNR
LV_CD1TAX
<FS_ITAB4>-STCD1
''.
ENDIF.
IF <FS_ITAB4>-STCD2 IS NOT INITIAL.
PERFORM FRM_BAPI_BUPA_TAX_ADD TABLES LT_RETURNX
USING <FS_ITAB4>-KUNNR
LV_CD2TAX
<FS_ITAB4>-STCD2
''.
ENDIF.
* DATA(LV_INDEX) = 0.
* LOOP AT LT_ITAB11 INTO DATA(LS_KNAS) WHERE KUNNR = <FS_ITAB4>-KUNNR.
* LV_INDEX = LV_INDEX + 1.
* CLEAR LV_TAX.
* READ TABLE LT_ZTFKTAXNUMTYPE INTO LS_ZTFKTAXNUMTYPE WITH KEY LAND1 = LS_KNAS-LAND1 FLAG = 'X'.
* IF SY-SUBRC = 0.
* PERFORM FRM_BAPI_BUPA_TAX_ADD TABLES LT_RETURNX
* USING <FS_ITAB4>-KUNNR
* LS_ZTFKTAXNUMTYPE-TAXTYPE
* LS_KNAS-STCEG
* ''.
* IF LINE_EXISTS( LT_RETURNX[ TYPE = 'E' ] ) OR LINE_EXISTS( LT_RETURNX[ TYPE = 'A' ] ).
* CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
* ELSE.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT = ABAP_TRUE.
* ENDIF.
* ENDIF.
* ENDLOOP.
"税号和税分类的取值逻辑
* SELECT SINGLE TAXTYPE FROM ZTFKTAXNUMTYPE_T WHERE SPRAS = 'E' AND LAND1 = @LV_LAND AND FLAG = 'X' INTO @LV_VATTAX.
*
*
* "税号添加处理 (下面的BAPI CVI_EI_INBOUND_MAIN生成税号不会写入KNA1表中)
* CLEAR LT_RETURNX[].
* CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
* EXPORTING
* BUSINESSPARTNER = <FS_ITAB4>-KUNNR
* TAXTYPE = LV_VATTAX
* TAXNUMBER = <FS_ITAB4>-STCEG
** TAXNUMXL = <FS_ITAB4>-STCEG
* TABLES
* RETURN = LT_RETURNX.
CLEAR LV_MSG.
LOOP AT LT_RETURNX INTO DATA(LS_RETURNX) WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE LV_MSG LS_RETURNX-MESSAGE INTO LV_MSG.
ENDLOOP.
IF LV_MSG IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
LV_NUM1 = LV_NUM1 + 1.
IF LV_TASK <> 'I'.
CONCATENATE '客户-' <FS_ITAB4>-KUNNR '税数据扩展成功!' INTO <FS_ITAB4>-MESSAGE.
ELSE.
CONCATENATE '客户-' <FS_ITAB4>-KUNNR '税数据创建成功!' INTO <FS_ITAB4>-MESSAGE.
ENDIF.
<FS_ITAB4>-ZCHECK = ICON_GREEN_LIGHT.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
<FS_ITAB4>-MESSAGE = LV_MSG.
<FS_ITAB4>-ZCHECK = ICON_RED_LIGHT.
LV_NUM2 = LV_NUM2 + 1.
ENDIF.
MODIFY GT_ITAB4 FROM <FS_ITAB4> TRANSPORTING MESSAGE ZCHECK WHERE KUNNR = <FS_ITAB4>-KUNNR
AND LAND1 = <FS_ITAB4>-LAND1
AND STCEG = <FS_ITAB4>-STCEG
AND ALAND = <FS_ITAB4>-ALAND
AND STCD1 = <FS_ITAB4>-STCD1
AND STCD2 = <FS_ITAB4>-STCD2.
<FS_ITAB4>-KUNNR = |{ <FS_ITAB4>-KUNNR ALPHA = OUT }|.
ENDLOOP.
FORM FRM_BAPI_BUPA_TAX_ADD TABLES P_RETURNX STRUCTURE BAPIRET2
USING P_KUNNR
P_TAX
P_STCEG
P_STCD.
.
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
EXPORTING
BUSINESSPARTNER = P_KUNNR
TAXTYPE = P_TAX
TAXNUMBER = P_STCEG
TAXNUMXL = P_STCD
TABLES
RETURN = P_RETURNX.
ENDFORM.
6.客户联系人
LT_COPY = GT_ITAB8.
DELETE ADJACENT DUPLICATES FROM GT_ITAB8 COMPARING KUNNR PARNR.
SELECT * FROM ZSD_INT008 INTO TABLE @DATA(LT_SMTP_INI008).
SELECT * FROM ZSD_ADR2 INTO TABLE @DATA(LT_ADR2).
SELECT * FROM ZSD_ADR3 INTO TABLE @DATA(LT_ADR3).
SELECT * FROM ZSD_ADR6 INTO TABLE @DATA(LT_ADR6).
LOOP AT GT_ITAB8 ASSIGNING <FS_ITAB8> WHERE SEL = 'X' AND MESSAGE IS INITIAL.
IF <FS_ITAB8>-S4_PARNR IS NOT INITIAL AND <FS_ITAB8>-S4_PARNR <> '0000000000'.
<FS_ITAB8>-MESSAGE = '当前客户联系人已经添加!'.
<FS_ITAB8>-ZCHECK = ICON_RED_LIGHT.
CONTINUE.
ENDIF.
LS_PERSON-FIRSTNAME = <FS_ITAB8>-NAMEV.
LS_PERSON-LASTNAME = <FS_ITAB8>-NAME1.
* LS_PERSON-NATIONALITYISO = <FS_ITAB8>-LAND1.
* LS_PERSON-NAMCOUNTRYISO = <FS_ITAB8>-LAND1.
LS_PERSON-NATIONALITY = <FS_ITAB8>-LAND1.
LS_ADDRESS-COUNTRY = <FS_ITAB8>-LAND1.
CLEAR: LT_BAPIADSMTP[],lt_TELEFONDATA[],Lt_FAXDATA.
* LOOP AT LT_SMTP_INI008 INTO DATA(LS_SMTP_INI008) WHERE KUNNR = <FS_ITAB8>-KUNNR AND PARNR = <FS_ITAB8>-PARNR.
* LS_BAPIADSMTP-E_MAIL = LS_SMTP_INI008-E_MAIL.
* APPEND LS_BAPIADSMTP TO LT_BAPIADSMTP.
* CLEAR LS_BAPIADSMTP.
* ENDLOOP.
LOOP AT LT_ADR6 INTO DATA(LS_ADR6) WHERE PERSNUMBER = <FS_ITAB8>-PRSNR.
LS_BAPIADSMTP-E_MAIL = LS_ADR6-SMTP_ADDR.
LS_BAPIADSMTP-STD_NO = LS_ADR6-FLGDEFAULT.
APPEND LS_BAPIADSMTP TO LT_BAPIADSMTP.
CLEAR LS_BAPIADSMTP.
ENDLOOP.
LOOP AT LT_ADR2 INTO DATA(LS_ADR2) WHERE PERSNUMBER = <FS_ITAB8>-PRSNR.
lS_TELEFONDATA-TELEPHONE = LS_ADR2-TEL_NUMBER.
lS_TELEFONDATA-R_3_USER = LS_ADR2-R3_USER.
APPEND lS_TELEFONDATA TO lt_TELEFONDATA.
ENDLOOP.
* lS_TELEFONDATA-TELEPHONE = <FS_ITAB8>-TELF1.
* APPEND lS_TELEFONDATA TO lt_TELEFONDATA.
READ TABLE LT_ADR3 INTO DATA(LS_ADR3) WITH KEY PERSNUMBER = <FS_ITAB8>-PRSNR.
IF SY-SUBRC = 0.
LS_FAXDATA-FAX = LS_ADR3-FAX_NUMBER.
APPEND LS_FAXDATA TO Lt_FAXDATA.
ENDIF.
LS_CENTRAL-SEARCHTERM2 = <FS_ITAB8>-PARNR.
"1.先创建人员
CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
EXPORTING
* BUSINESSPARTNEREXTERN =
PARTNERCATEGORY = '1'
PARTNERGROUP = 'P001'
CENTRALDATA = LS_CENTRAL
CENTRALDATAPERSON = LS_PERSON
ADDRESSDATA = LS_ADDRESS
IMPORTING
BUSINESSPARTNER = <FS_ITAB8>-S4_PARNR
TABLES
FAXDATA = Lt_FAXDATA
TELEFONDATA = lt_TELEFONDATA
E_MAILDATA = LT_BAPIADSMTP
RETURN = LT_RETURNX
* ADDRESSDUPLICATES =
.
"2.添加角色
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
EXPORTING
BUSINESSPARTNER = <FS_ITAB8>-S4_PARNR
BUSINESSPARTNERROLECATEGORY = 'BUP001'
* ALL_BUSINESSPARTNERROLES = ' '
* BUSINESSPARTNERROLE =
* DIFFERENTIATIONTYPEVALUE =
* VALIDFROMDATE =
* VALIDUNTILDATE = '99991231'
TABLES
RETURN = LT_RETURNX.
* LS_CONTP_CEN-FUNCTION = <FS_ITAB8>-PAFKT.
LS_CONTP_CEN-FUNCTION = <FS_ITAB8>-PAKN4. "属性9
LS_CONTP_CEN-DEPARTMENT = <FS_ITAB8>-ABTNR.
* LS_CONTP_CEN-TEL1_NUMBR = <FS_ITAB8>-TELF1.
* LS_CONTP_CEN-FAX_NUMBER = <FS_ITAB8>-FAX_NUMBER.
"3.关联联系人
CALL FUNCTION 'BAPI_BUPR_CONTP_CREATE'
EXPORTING
BUSINESSPARTNER = <FS_ITAB8>-KUNNR
CONTACTPERSON = <FS_ITAB8>-S4_PARNR
* VALIDFROMDATE = '00010101'
* VALIDUNTILDATE = '99991231'
* DEFAULTRELATIONSHIP =
* ADDRESSGUID =
CENTRALDATA = LS_CONTP_CEN
* ADDRESSDATA =
* DUPLICATE_MESSAGE_TYPE =
TABLES
RETURN = LT_RETURNX.
IF NOT ( LINE_EXISTS( LT_RETURNX[ TYPE = 'E' ] ) OR LINE_EXISTS( LT_RETURNX[ TYPE = 'A' ] ) ).
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
LV_NUM1 = LV_NUM1 + 1.
<FS_ITAB8>-ZCHECK = ICON_GREEN_LIGHT.
<FS_ITAB8>-MESSAGE = '客户' && <FS_ITAB8>-KUNNR && '添加联系人' && <FS_ITAB8>-S4_PARNR && '成功!'.
MOVE-CORRESPONDING <FS_ITAB8> TO LS_ZSD_INT008.
MODIFY ZSD_INT008 FROM LS_ZSD_INT008.
ELSE.
CLEAR LV_MSG.
LOOP AT LT_RETURNX INTO DATA(LS_RETURNX) WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE LV_MSG LS_RETURNX-MESSAGE INTO LV_MSG.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LV_NUM2 = LV_NUM2 + 1.
<FS_ITAB8>-ZCHECK = ICON_RED_LIGHT.
<FS_ITAB8>-MESSAGE = '客户' && <FS_ITAB8>-KUNNR && '添加联系人失败!' && LV_MSG.
ENDIF.
ENDLOOP.
7.客户信用数据
LOOP AT GT_ITAB9 ASSIGNING <FS_ITAB9> WHERE SEL = 'X'.
CLEAR:LV_BPARTNERGUID,LT_DATA,LS_DATA,LT_RETURN,LS_RETURN,LS_MSG,LS_PARTNER,LS_CUSTOMER,LT_ROLES,LS_ROLES,
LV_GUID,LV_KUNNR,LV_TASK,LV_TASK1,LV_MSG1,LS_CMS_PROFILE,LT_CMS_SEGMENTS,LS_CMS_SEGMENTS.
*------显示导入进程 重点
CLEAR:LV_RESULT,LV_RESTEX,LV_STXT.
LV_NUM = LV_NUM + 1.
LV_RESULT = LV_NUM / LV_LINE1.
LV_RESTEX = LV_RESULT * 100.
<FS_ITAB9>-KUNNR = |{ <FS_ITAB9>-KUNNR ALPHA = IN }|.
"查业务伙伴是否存在
CLEAR LV_GUID.
SELECT SINGLE PARTNER_GUID INTO LV_GUID
FROM BUT000 WHERE PARTNER = <FS_ITAB9>-KUNNR.
IF SY-SUBRC = 0. "修改
LV_BPARTNERGUID = LV_GUID.
LV_OBJECT_TASK = 'U'.
LV_TASK = 'U'.
LV_FUNCTIONS_TASK = 'M'.
ELSE. "创建
LV_NUM2 = LV_NUM2 + 1.
<FS_ITAB9>-MESSAGE = 'THE KUNNR DOES NOT EXIST'.
<FS_ITAB9>-ZCHECK = ICON_RED_LIGHT.
CONTINUE.
ENDIF.
CLEAR LS_PARTNER.
LS_PARTNER-HEADER-OBJECT_TASK = LV_OBJECT_TASK.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNER = <FS_ITAB9>-KUNNR.
LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID = LV_BPARTNERGUID.
LS_CUSTOMER-HEADER-OBJECT_INSTANCE-KUNNR = <FS_ITAB9>-KUNNR.
LS_CUSTOMER-HEADER-OBJECT_TASK = LV_OBJECT_TASK.
LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-CATEGORY = '2'.
LS_CMS_PROFILE-DATA-RISK_CLASS = <FS_ITAB9>-CTLPC. " 风险类
LS_CMS_PROFILE-DATAX-RISK_CLASS = ABAP_TRUE.
LS_CMS_PROFILE-DATA-LIMIT_RULE = 'STANDARD'. " 规则
LS_CMS_PROFILE-DATA-CREDIT_GROUP = <FS_ITAB9>-SBGRP. " 信用组
LS_CMS_PROFILE-DATAX-CREDIT_GROUP = ABAP_TRUE.
LS_CMS_PROFILE-DATAX-LIMIT_RULE = ABAP_TRUE.
* LS_CMS_PROFILE-DATA-CHECK_RULE = 'Z1'. " 检查规则
LS_CMS_PROFILE-DATA-CHECK_RULE = <FS_ITAB9>-CTLPC. " 检查规则
LS_CMS_PROFILE-DATAX-CHECK_RULE = ABAP_TRUE.
LS_CMS_SEGMENTS-DATA_KEY-CREDIT_SGMNT = <FS_ITAB9>-KKBER. "信贷区域
LS_CMS_SEGMENTS-DATA_KEY-PARTNER = <FS_ITAB9>-KUNNR. "合作伙伴
LS_CMS_SEGMENTS-DATA-CREDIT_LIMIT = <FS_ITAB9>-KLIMK.
LS_CMS_SEGMENTS-DATA-XBLOCKED = <FS_ITAB9>-CRBLB.
LS_CMS_SEGMENTS-DATAX-CREDIT_LIMIT = ABAP_TRUE.
LS_CMS_SEGMENTS-DATAX-XBLOCKED = ABAP_TRUE.
"判断信用段走什么方式
SELECT SINGLE CREDIT_SGMNT INTO @DATA(LV_SGMNT) FROM UKMBP_CMS_SGM WHERE PARTNER = @<FS_ITAB9>-KUNNR AND CREDIT_SGMNT = @<FS_ITAB9>-KKBER.
IF SY-SUBRC = 0.
LS_CMS_SEGMENTS-TASK = 'M'.
ELSE.
LS_CMS_SEGMENTS-TASK = 'I'.
ENDIF.
SELECT SINGLE PARTNER INTO @DATA(LV_PARTNER) FROM BUT100 WHERE PARTNER = @<FS_ITAB9>-KUNNR AND RLTYP = 'UKM000'..
IF SY-SUBRC <> 0.
LS_ROLES-TASK = 'I'.
LS_ROLES-DATA_KEY = 'UKM000'.
APPEND LS_ROLES TO LT_ROLES.
CLEAR:LS_ROLES.
LS_PARTNER-CENTRAL_DATA-ROLE-ROLES = LT_ROLES.
ENDIF.
APPEND LS_CMS_SEGMENTS TO LT_CMS_SEGMENTS.
LS_PARTNER-UKMBP_DATA-PROFILE = LS_CMS_PROFILE.
LS_PARTNER-UKMBP_DATA-SEGMENTS-SEGMENTS = LT_CMS_SEGMENTS.
LS_DATA-PARTNER = LS_PARTNER.
LS_DATA-CUSTOMER = LS_CUSTOMER.
APPEND LS_DATA TO LT_DATA.
"正式执行
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
EXPORTING
I_DATA = LT_DATA
* I_EXT_DATA =
IMPORTING
E_RETURN = LT_RETURN.
CLEAR:LV_MSG,LS_DATA,LT_DATA.
LOOP AT LT_RETURN INTO LS_RETURN.
LOOP AT LS_RETURN-OBJECT_MSG INTO LS_MSG WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE LV_MSG LS_MSG-MESSAGE INTO LV_MSG.
ENDLOOP.
ENDLOOP.
IF LV_MSG IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = ABAP_TRUE.
LV_NUM1 = LV_NUM1 + 1.
IF LV_TASK <> 'I'.
CONCATENATE '客户-' <FS_ITAB9>-KUNNR '信用数据扩展成功!' INTO <FS_ITAB9>-MESSAGE.
ELSE.
CONCATENATE '客户-' <FS_ITAB9>-KUNNR '信用数据创建成功!' INTO <FS_ITAB9>-MESSAGE.
ENDIF.
<FS_ITAB9>-ZCHECK = ICON_GREEN_LIGHT.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
<FS_ITAB9>-MESSAGE = LV_MSG.
<FS_ITAB9>-ZCHECK = ICON_RED_LIGHT.
LV_NUM2 = LV_NUM2 + 1.
ENDIF.
LV_STXT = '正在拼命加载中 : ' && LV_RESTEX && '%' && '总共' && LV_LINE1 && '条,现在批导第' && LV_NUM && '条,成功导入-' && LV_NUM1 && '条,失败-' && LV_NUM2 && '条'.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = LV_RESULT
TEXT = LV_STXT.
<FS_ITAB9>-KUNNR = |{ <FS_ITAB9>-KUNNR ALPHA = OUT }|.
ENDLOOP.