FUNCTION ZFM_BP_LIFNR. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_JOEL) TYPE ZJOEL_MAIN *" VALUE(I_CENTRAL) TYPE BAPIBUS1006_CENTRAL *" VALUE(I_ORG) TYPE BAPIBUS1006_CENTRAL_ORGAN *" VALUE(I_ADDRESS) TYPE BAPIBUS1006_ADDRESS OPTIONAL *" VALUE(I_BAPIADTEL) TYPE ZSRM_BP_ADDR_TEL OPTIONAL *" VALUE(I_EXT) TYPE CI_EEW_BUT000 OPTIONAL *" VALUE(I_TESTRUN) TYPE CHAR1 OPTIONAL *" EXPORTING *" VALUE(E_CODE) TYPE CHAR1 *" VALUE(E_MSG) TYPE STRING *" VALUE(E_BUSINESSPARTNER) TYPE BU_PARTNER *" VALUE(E_BU_PARTNER_GUID) TYPE BU_PARTNER_GUID *" TABLES *" ET_RETURN STRUCTURE BAPIRET2 OPTIONAL *" IT_ROLES STRUCTURE ZSD_BP_ROLE_S OPTIONAL *" IT_COMPANY STRUCTURE ZSRM_COMPANY OPTIONAL *" IT_LFM1 STRUCTURE ZSRM_LFM1 OPTIONAL *" IT_PARTNER STRUCTURE ZSRM_PARTNER OPTIONAL *" IT_BANK STRUCTURE ZSRMS_BANK OPTIONAL *"---------------------------------------------------------------------- * INCLUDE ZAFL_MACROS. * ***initialize logger. It should be always on the top of the FUNCTION. * /AFL/LOG_INIT. ***optional, you can specify at most 3 fields for search. * /AFL/SET_CUSTOM_FIELDS I_CENTRAL-SEARCHTERM1 I_CENTRAL-SEARCHTERM2 I_TESTRUN . * ***optional, you can save a status code and message text for search. * /AFL/SET_STATUS 'I' 'MSG 记录'. ***save logs. It should be always on the bottom of the FUNCTION. * /AFL/SAVE. "执行结果反馈 DATA:LS_RETURN TYPE BAPIRET2, LT_RETURN TYPE STANDARD TABLE OF BAPIRET2. DATA:E_RETURN TYPE BAPIRETM, LS_BAPIRETI TYPE BAPIRETI, LS_BAPIRETCT TYPE BAPIRETCT, LS_BAPIRETC TYPE BAPIRETC, LS_BAPIRET2 TYPE BAPIRET2. "创建BP基本数据 DATA : LV_CATEGORY TYPE BAPIBUS1006_HEAD-PARTN_CAT, LV_PARTNERGROUP TYPE BAPIBUS1006_HEAD-PARTN_GRP, LS_CENTRALDATA TYPE BAPIBUS1006_CENTRAL, LS_CENTRALDATAX TYPE BAPIBUS1006_CENTRAL_X, LS_ORG TYPE BAPIBUS1006_CENTRAL_ORGAN, LS_ORGX TYPE BAPIBUS1006_CENTRAL_ORGAN_X, LS_ADDRESS TYPE BAPIBUS1006_ADDRESS, LS_ADDRESSX TYPE BAPIBUS1006_ADDRESS_X. DATA:LT_BAPIADTEL TYPE STANDARD TABLE OF BAPIADTEL, LS_BAPIADTEL TYPE BAPIADTEL, LT_BAPIADTELX TYPE STANDARD TABLE OF BAPIADTELX, LS_BAPIADTELX TYPE BAPIADTELX, LT_ADDRESSNOTES TYPE STANDARD TABLE OF BAPIAD_REM, LS_ADDRESSNOTES TYPE BAPIAD_REM, LT_ADDRESSNOTESX TYPE STANDARD TABLE OF BAPIAD_REX, LS_ADDRESSNOTESX TYPE BAPIAD_REX, LS_E_MAILDATA TYPE BAPIADSMTP, LT_E_MAILDATA TYPE STANDARD TABLE OF BAPIADSMTP, LS_E_MAILDATAX TYPE BAPIADSMTX, LT_E_MAILDATAX TYPE STANDARD TABLE OF BAPIADSMTX. "获取GUI ID DATA: LT_GUID LIKE BUS000___I OCCURS 0 WITH HEADER LINE. * E_BU_PARTNER_GUID TYPE BU_PARTNER_GUID. DATA: LT_CUSTO LIKE BUS000_EEW OCCURS 0 WITH HEADER LINE. DATA:LV_GUID TYPE BUT020-GUID. "地址变更guid DATA:GV_PARTNER_GUID TYPE BU_PARTNER_GUID. "添加角色 DATA:LV_ADD_ROLE TYPE BAPIBUS1006_BPROLES-PARTNERROLECATEGORY, LS_ROLE TYPE ZSD_BP_ROLE_S, LT_ROLE TYPE STANDARD TABLE OF ZSD_BP_ROLE_S, LT_ROLES TYPE BUS_EI_BUPA_ROLES_T, LS_ROLES TYPE BUS_EI_BUPA_ROLES. "扩展视图 DATA: LS_PARTN_HDR TYPE BUS_EI_HEADER, LS_PARTN TYPE BUS_EI_EXTERN, LS_PARTN_HDR_OBJECT_INSTANCE TYPE BUS_EI_INSTANCE, LS_PARTN_CTR_DATA TYPE BUS_EI_CENTRAL_DATA, LS_DATA TYPE CVIS_EI_EXTERN, "公司数据 LS_COMPANY TYPE VMDS_EI_COMPANY, LT_DATA TYPE CVIS_EI_EXTERN_T, "银行数据 LT_BANKDETAILS TYPE BUS_EI_BUPA_BANKDETAIL_T, LS_BANKDETAILS TYPE BUS_EI_BUPA_BANKDETAIL, LT_BUT0BK TYPE TABLE OF BUT0BK, LS_BUT0BK TYPE BUT0BK, "采购组织数据 LT_PURCHASING TYPE VMDS_EI_PURCHASING_T, LS_PURCHASING TYPE VMDS_EI_PURCHASING. "合作伙伴功能 DATA: LT_FUNCTIONS TYPE VMDS_EI_FUNCTIONS_T, LS_FUNCTIONS TYPE VMDS_EI_FUNCTIONS. *--------------------------------------------------------------------* *-- 描述:参数处理 *-- 日期:30.07.2020 19:13:14 *--------------------------------------------------------------------* LV_CATEGORY = '2'."类别用:2 组织 LV_PARTNERGROUP = I_JOEL-I_PARTN_GRP."业务伙伴组:Z001 Z1 国内BP Z002 Z2 国外BP Z007 Z7 集团BP IF I_JOEL-I_BPARTNER IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = I_JOEL-I_BPARTNER IMPORTING OUTPUT = I_JOEL-I_BPARTNER. ENDIF. IF I_BAPIADTEL IS NOT INITIAL. CLEAR:LT_BAPIADTEL,LT_BAPIADTEL[]. MOVE-CORRESPONDING I_BAPIADTEL TO LS_BAPIADTEL. IF LS_BAPIADTEL-TELEPHONE IS NOT INITIAL. LS_BAPIADTELX-TELEPHONE = 'X'. APPEND LS_BAPIADTELX TO LT_BAPIADTELX. ENDIF. APPEND LS_BAPIADTEL TO LT_BAPIADTEL. ENDIF. MOVE-CORRESPONDING I_CENTRAL TO LS_CENTRALDATA. CLEAR:LS_CENTRALDATA-PARTNERLANGUAGE. MOVE-CORRESPONDING I_ORG TO LS_ORG. I_ADDRESS-LANGU = '1'. "默认中文 MOVE-CORRESPONDING I_ADDRESS TO LS_ADDRESS. IF I_BAPIADTEL-ADR_NOTES IS NOT INITIAL. CLEAR:LS_ADDRESSNOTES. LS_ADDRESSNOTES-LANGU = '1' . " 语言代码 LS_ADDRESSNOTES-LANGU_ISO = 'ZH' ."2 字符 SAP 语言代码 LS_ADDRESSNOTES-ADR_NOTES = I_BAPIADTEL-ADR_NOTES ."联系人及电话 LS_ADDRESSNOTESX-LANGU = 'X'. LS_ADDRESSNOTESX-ADR_NOTES = 'X'. IF I_JOEL-I_TASK EQ 'U'. * 校验 无值需要传I,有值传U SELECT COUNT(*) FROM ADRCT JOIN KNA1 ON KNA1~ADRNR EQ ADRCT~ADDRNUMBER WHERE KNA1~KUNNR EQ @I_JOEL-I_BPARTNER. IF SY-SUBRC EQ 0. LS_ADDRESSNOTESX-UPDATEFLAG = 'U'. ELSE. LS_ADDRESSNOTESX-UPDATEFLAG = 'I'. ENDIF. APPEND LS_ADDRESSNOTES TO LT_ADDRESSNOTES. ENDIF. APPEND LS_ADDRESSNOTESX TO LT_ADDRESSNOTESX. ENDIF. IF I_JOEL-E_MAIL IS NOT INITIAL. LS_E_MAILDATA-E_MAIL = I_JOEL-E_MAIL. LS_E_MAILDATAX-E_MAIL = 'X'. APPEND LS_E_MAILDATA TO LT_E_MAILDATA. APPEND LS_E_MAILDATAX TO LT_E_MAILDATAX. ENDIF. *--------------------------------------------------------------------* *-- 描述:数据检查 *-- 日期:28.09.2020 08:10:36 *--------------------------------------------------------------------* DATA:LV_COUNT_TAX TYPE INT4. IF I_JOEL-I_BPARTNER IS NOT INITIAL. SELECT COUNT( * ) INTO LV_COUNT_TAX FROM BUT000 WHERE PARTNER = I_JOEL-I_BPARTNER. IF LV_COUNT_TAX NE 1. E_CODE = 'E'. E_MSG = '系统中不存在该BP号码!!!'. RETURN. ELSE. IF I_JOEL-I_TASK EQ 'I'. E_CODE = 'E'. E_MSG = '系统中存在该BP号码,请进行更改操作!!!'. RETURN. ENDIF. ENDIF. ELSE. *****************检查 BP的税号 是否重复***************** SELECT COUNT( * ) INTO LV_COUNT_TAX FROM DFKKBPTAXNUM WHERE TAXNUM = I_JOEL-BPTAXNUMXL. IF LV_COUNT_TAX GT 0. E_CODE = 'E'. E_MSG = '系统中存在相同的 税号!!!'. RETURN. ENDIF. TRY . GV_PARTNER_GUID = CL_UUID_FACTORY=>CREATE_SYSTEM_UUID( )->CREATE_UUID_X16( ). CATCH CX_UUID_ERROR. "返回消息 E_CODE = 'E'. E_MSG = '根据BP号,找不到供应商的UUID数据!'. RETURN. ENDTRY. ENDIF. *--------------------------------------------------------------------* *-- 描述:创建基础数据 *-- 日期:30.07.2020 19:26:20 *--------------------------------------------------------------------* IF I_JOEL-I_TASK EQ 'I'. LS_ORG-NAME1 = LS_CENTRALDATA-SEARCHTERM1. CLEAR :LT_RETURN,LT_RETURN[]. CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA' EXPORTING BUSINESSPARTNEREXTERN = I_JOEL-I_BPARTNER PARTNERCATEGORY = LV_CATEGORY PARTNERGROUP = LV_PARTNERGROUP CENTRALDATA = LS_CENTRALDATA CENTRALDATAORGANIZATION = LS_ORG ADDRESSDATA = LS_ADDRESS IMPORTING BUSINESSPARTNER = E_BUSINESSPARTNER TABLES TELEFONDATA = LT_BAPIADTEL ADDRESSNOTES = LT_ADDRESSNOTES E_MAILDATA = LT_E_MAILDATA RETURN = ET_RETURN. IF LINES( LT_RETURN ) GT 0. LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE EQ 'E' OR TYPE EQ 'A'. E_CODE = 'E'. CONCATENATE LS_RETURN-MESSAGE E_MSG INTO E_MSG. ENDLOOP. ENDIF. IF E_CODE EQ 'E'. PERFORM FRM_ROLLBACK USING LS_RETURN. RETURN . ENDIF. IF E_BUSINESSPARTNER IS NOT INITIAL. TRY. CALL FUNCTION 'BUP_MEMORY_BUT000_GET' EXPORTING IV_PARTNER = E_BUSINESSPARTNER IMPORTING ES_BUT000 = LT_GUID. READ TABLE LT_GUID INDEX 1. CLEAR LT_CUSTO. REFRESH LT_CUSTO. LT_CUSTO-PARTNR_GUID = LT_GUID-PARTNER_GUID. E_BU_PARTNER_GUID = LT_GUID-PARTNER_GUID. CATCH CX_UUID_ERROR. "返回消息 E_CODE = 'E'. E_MSG = '根据BP号,找不到供应商的UUID数据!'. ENDTRY. READ TABLE LT_GUID INDEX 1. CLEAR LT_CUSTO. REFRESH LT_CUSTO. LT_CUSTO-PARTNR_GUID = LT_GUID-PARTNER_GUID. E_BU_PARTNER_GUID = LT_GUID-PARTNER_GUID. LT_CUSTO-ZZTELF1 = I_EXT-ZZTELF1. LT_CUSTO-ZZTELF2 = I_EXT-ZZTELF2. LT_CUSTO-ZZTELF3 = I_EXT-ZZTELF3. LT_CUSTO-ZZSMTPADDR1 = I_EXT-ZZSMTPADDR1. LT_CUSTO-ZZSMTPADDR2 = I_EXT-ZZSMTPADDR2. LT_CUSTO-ZZSMTPADDR3 = I_EXT-ZZSMTPADDR3. LT_CUSTO-ZZNAMTEXT1 = I_EXT-ZZNAMTEXT1. LT_CUSTO-ZZNAMTEXT2 = I_EXT-ZZNAMTEXT2. LT_CUSTO-ZZNAMTEXT3 = I_EXT-ZZNAMTEXT3. LT_CUSTO-ZZVIP = I_EXT-ZZVIP. LT_CUSTO-ZZMILVE = I_EXT-ZZMILVE. LT_CUSTO-ZZNUC_SEC = I_EXT-ZZNUC_SEC. APPEND LT_CUSTO. CLEAR :LT_RETURN,LT_RETURN[]. CALL FUNCTION 'BUPA_CENTRAL_CI_CHANGE' EXPORTING IS_BUS000_EEW = LT_CUSTO * IS_BUS000_EEW_X = * IV_XSAVE = 'X' IMPORTING ET_RETURN = LT_RETURN. IF LINES( LT_RETURN ) GT 0. LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE EQ 'E'. E_CODE = 'E'. CONCATENATE LS_RETURN-MESSAGE ' . ' E_MSG INTO E_MSG. RETURN. ENDLOOP. ENDIF. ELSE. E_CODE = 'E'. E_MSG = '无法创建BP数据,请检查输入数据'. ENDIF. "检查测试运行 IF I_TESTRUN EQ 'X'. PERFORM FRM_ROLLBACK USING LS_RETURN. RETURN. ELSE. I_JOEL-I_BPARTNER = E_BUSINESSPARTNER . PERFORM FRM_COMMIT USING LS_RETURN. ENDIF. IF I_CENTRAL-CENTRALBLOCK EQ 'X'. RETURN."供应商冻结, ENDIF. IF LS_ROLE-FROM IS INITIAL. LS_ROLE-FROM = SY-DATUM. ENDIF. IF LS_ROLE-TO IS INITIAL. LS_ROLE-TO = '99991231'. ENDIF. LS_ROLE-ROLE = 'FLVN00'. APPEND LS_ROLE TO LT_ROLE. LS_ROLE-ROLE = 'FLVN01'. APPEND LS_ROLE TO LT_ROLE. CLEAR:LS_ROLE. LOOP AT LT_ROLE INTO LS_ROLE. CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2' EXPORTING BUSINESSPARTNER = I_JOEL-I_BPARTNER BUSINESSPARTNERROLECATEGORY = LS_ROLE-ROLE VALIDFROMDATE = LS_ROLE-FROM VALIDUNTILDATE = LS_ROLE-TO TABLES RETURN = LT_RETURN. IF LINES( LT_RETURN ) GT 0. LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE EQ 'E' OR TYPE EQ 'A'. E_CODE = 'E'. CONCATENATE '[创建角色]' LS_RETURN-MESSAGE E_MSG INTO E_MSG. ENDLOOP. ENDIF. IF E_CODE EQ 'E'. PERFORM FRM_ROLLBACK USING LS_RETURN. RETURN . ENDIF. ENDLOOP. *****************纳税号**************** DATA: LV_TAXTYPE TYPE BAPIBUS1006TAX-TAXTYPE, LV_TAXNUMBER TYPE BAPIBUS1006TAX-TAXNUMBER, LV_RTNER TYPE BAPIBUS1006_HEAD-BPARTNER. MOVE I_JOEL-BPTAXTYPE TO LV_TAXTYPE. MOVE I_JOEL-BPTAXNUMXL TO LV_TAXNUMBER. MOVE E_BUSINESSPARTNER TO LV_RTNER. CALL FUNCTION 'BAPI_BUPA_TAX_ADD' EXPORTING BUSINESSPARTNER = LV_RTNER TAXTYPE = LV_TAXTYPE TAXNUMBER = LV_TAXNUMBER TABLES RETURN = LT_RETURN. LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE EQ 'E' OR TYPE EQ 'A'. E_CODE = 'E'. CONCATENATE '[创建角色]' LS_RETURN-MESSAGE E_MSG INTO E_MSG. ENDLOOP. ELSE. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = I_JOEL-I_BPARTNER IMPORTING OUTPUT = I_JOEL-I_BPARTNER. SELECT SINGLE PARTNER INTO E_BUSINESSPARTNER FROM BUT000 WHERE PARTNER = I_JOEL-I_BPARTNER. IF SY-SUBRC NE 0. E_CODE = 'E'. E_MSG = 'BP号码不正确,请查询验证!'. RETURN. ENDIF. IF LS_CENTRALDATA-SEARCHTERM1 IS NOT INITIAL. LS_CENTRALDATAX-SEARCHTERM1 = 'X'. ENDIF. IF LS_CENTRALDATA-SEARCHTERM2 IS NOT INITIAL. LS_CENTRALDATAX-SEARCHTERM2 = 'X'. ENDIF. IF LS_CENTRALDATA-CENTRALARCHIVINGFLAG IS NOT INITIAL. LS_CENTRALDATAX-CENTRALARCHIVINGFLAG = 'X'. ENDIF. IF LS_CENTRALDATA-CENTRALBLOCK IS NOT INITIAL. LS_CENTRALDATAX-CENTRALBLOCK = 'X'. ENDIF. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING INPUT = I_JOEL-I_BPARTNER IMPORTING OUTPUT = E_BUSINESSPARTNER. *BAPIBUS1006_CENTRAL_ORGAN *BAPIBUS1006_CENTRAL_ORGAN IF I_ORG-NAME1 IS NOT INITIAL. LS_ORGX-NAME1 = 'X'. ENDIF. IF I_ORG-NAME2 IS NOT INITIAL. LS_ORGX-NAME2 = 'X'. ENDIF. IF I_ORG-NAME3 IS NOT INITIAL. LS_ORGX-NAME3 = 'X'. ENDIF. IF I_ORG-NAME4 IS NOT INITIAL. LS_ORGX-NAME4 = 'X'. ENDIF. CALL FUNCTION 'BAPI_BUPA_CENTRAL_CHANGE' EXPORTING BUSINESSPARTNER = I_JOEL-I_BPARTNER CENTRALDATA = LS_CENTRALDATA CENTRALDATA_X = LS_CENTRALDATAX CENTRALDATAORGANIZATION = I_ORG CENTRALDATAORGANIZATION_X = LS_ORGX TABLES E_MAILDATANONADDRESS = LT_E_MAILDATA E_MAILDATANONADDRESSX = LT_E_MAILDATAX RETURN = LT_RETURN[]. APPEND LINES OF LT_RETURN TO ET_RETURN. IF LINE_EXISTS( ET_RETURN[ TYPE = 'E' ] ) OR LINE_EXISTS( ET_RETURN[ TYPE = 'A' ] ). E_CODE = 'E'. E_MSG = '基本视图更改失败,请查询验证!'. RETURN. ENDIF. DATA:LV_BUSINESSPARTNER LIKE BAPIBUS1006_HEAD-BPARTNER. MOVE I_JOEL-I_BPARTNER TO LV_BUSINESSPARTNER. CALL FUNCTION 'BAPI_BUPA_ADDRESS_GET_NUMBERS' EXPORTING BUSINESSPARTNER = LV_BUSINESSPARTNER IMPORTING ADDRESSGUIDOUT = LV_GUID * EXTERNALADDRESSNUMBEROUT = TABLES RETURN = LT_RETURN[]. APPEND LINES OF LT_RETURN TO ET_RETURN. IF LINE_EXISTS( ET_RETURN[ TYPE = 'E' ] ) OR LINE_EXISTS( ET_RETURN[ TYPE = 'A' ] ). E_CODE = 'E'. E_MSG = '更改地址信息失败,请查询验证!'. RETURN. ENDIF. IF LS_ADDRESS-POSTL_COD1 IS NOT INITIAL . LS_ADDRESSX-POSTL_COD1 = 'X'. ENDIF. IF I_ADDRESS-PO_BOX IS NOT INITIAL . LS_ADDRESSX-PO_BOX = 'X'. ENDIF. IF I_ADDRESS-STREET IS NOT INITIAL. LS_ADDRESSX-STREET = 'X'. ENDIF. IF I_ADDRESS-HOUSE_NO IS NOT INITIAL. LS_ADDRESSX-HOUSE_NO = 'X'. ENDIF. IF I_ADDRESS-REGION IS NOT INITIAL. LS_ADDRESSX-REGION = 'X'. ENDIF. CALL FUNCTION 'BAPI_BUPA_ADDRESS_CHANGE' EXPORTING BUSINESSPARTNER = LV_BUSINESSPARTNER ADDRESSGUID = LV_GUID ADDRESSDATA = LS_ADDRESS ADDRESSDATA_X = LS_ADDRESSX * DUPLICATE_MESSAGE_TYPE = * ACCEPT_ERROR = ' ' TABLES BAPIADTEL = LT_BAPIADTEL * BAPIADFAX = * BAPIADTTX = * BAPIADTLX = BAPIADSMTP = LT_E_MAILDATA * BAPIADRML = * BAPIADX400 = * BAPIADRFC = * BAPIADPRT = * BAPIADSSF = * BAPIADURI = * BAPIADPAG = * BAPIAD_REM = * BAPICOMREM = * ADDRESSUSAGE = * BAPIADVERSORG = * BAPIADVERSPERS = * BAPIADUSE = BAPIADTEL_X = LT_BAPIADTELX * BAPIADFAX_X = * BAPIADTTX_X = * BAPIADTLX_X = BAPIADSMT_X = LT_E_MAILDATAX * BAPIADRML_X = * BAPIADX40_X = * BAPIADRFC_X = * BAPIADPRT_X = * BAPIADSSF_X = * BAPIADURI_X = * BAPIADPAG_X = * BAPIAD_RE_X = * BAPICOMRE_X = * ADDRESSUSAGE_X = * BAPIADVERSORG_X = * BAPIADVERSPERS_X = * BAPIADUSE_X = RETURN = LT_RETURN * ADDRESSDUPLICATES = . * CALL FUNCTION 'BAPI_BUPA_ADDRESS_CHANGE' * EXPORTING * BUSINESSPARTNER = LV_BUSINESSPARTNER * ADDRESSGUID = LV_GUID * ADDRESSDATA = LS_ADDRESS * ADDRESSDATA_X = LS_ADDRESSX ** DUPLICATE_MESSAGE_TYPE = ** ACCEPT_ERROR = ' ' * TABLES ** BAPIADTEL = LT_BAPIADTEL ** BAPIADTEL_X = * RETURN = LT_RETURN[]. IF LINES( LT_RETURN ) GT 0. LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE EQ 'E' OR TYPE EQ 'A'. E_CODE = 'E'. CONCATENATE LS_RETURN-MESSAGE E_MSG INTO E_MSG. ENDLOOP. ENDIF. IF E_CODE EQ 'E'. PERFORM FRM_ROLLBACK USING LS_RETURN. RETURN . ENDIF. CALL FUNCTION 'BUPA_ADDRESS_CHANGE' EXPORTING IV_PARTNER = LV_BUSINESSPARTNER * IV_PARTNER_GUID = * IV_ADDRNUMBER = * IV_ADDRGUID = * IS_ADDRESS = * IS_ADDRESS_X = * IV_DUPLICATE_MESSAGE_TYPE = * IV_ACCEPT_ERROR = ' ' * IV_X_SAVE = 'X' * IV_CHANGE_BAS = 'X' * IV_CHECK_ADDRESS = 'X' TABLES * IT_ADTEL = * IT_ADFAX = * IT_ADTTX = * IT_ADTLX = * IT_ADSMTP = * IT_ADRML = * IT_ADX400 = * IT_ADRFC = * IT_ADPRT = * IT_ADSSF = * IT_ADURI = * IT_ADPAG = IT_AD_REM = LT_ADDRESSNOTES * IT_COMREM = * IT_ADUSE = * IT_ADDR_VERS_ORG = * IT_ADDR_VERS_PERS = * IT_ADDR_COMM_USE = * IT_ADTEL_X = * IT_ADFAX_X = * IT_ADTTX_X = * IT_ADTLX_X = * IT_ADSMT_X = * IT_ADRML_X = * IT_ADX40_X = * IT_ADRFC_X = * IT_ADPRT_X = * IT_ADSSF_X = * IT_ADURI_X = * IT_ADPAG_X = IT_AD_RE_X = LT_ADDRESSNOTESX * IT_COMRE_X = * IT_ADUSE_X = * IT_ADDR_VERS_ORG_X = * IT_ADDR_VERS_PERS_X = * IT_ADDR_COMM_USE_X = ET_RETURN = LT_RETURN * ET_ADDR_DUPLICATES = . IF LINES( LT_RETURN ) GT 0. LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE EQ 'E' OR TYPE EQ 'A'. E_CODE = 'E'. CONCATENATE LS_RETURN-MESSAGE E_MSG INTO E_MSG. ENDLOOP. ENDIF. IF E_CODE EQ 'E'. PERFORM FRM_ROLLBACK USING LS_RETURN. RETURN . ENDIF. "检查测试运行 IF I_TESTRUN EQ 'X'. PERFORM FRM_ROLLBACK USING LS_RETURN. RETURN. ELSE. I_JOEL-I_BPARTNER = E_BUSINESSPARTNER . PERFORM FRM_COMMIT USING LS_RETURN. ENDIF. ENDIF. ***** DATA:IV_PARTNER TYPE BU_PARTNER, ***** IV_PARTNER_GUID TYPE BU_PARTNER_GUID, ***** IS_BP001 TYPE BP001, ***** IS_BP001_X TYPE BP001_X. ***** ***** IS_BP001-PARTNER = E_BUSINESSPARTNER. ***** IS_BP001-VIP = I_JOEL-BP_VIP_PARTNER. ***** IS_BP001_X-VIP = 'X'. ***** ***** CALL FUNCTION 'FS_API_BP001_SET' ***** EXPORTING ***** IV_PARTNER = E_BUSINESSPARTNER ***** IV_PARTNER_GUID = LT_GUID-PARTNER_GUID ***** IS_BP001 = IS_BP001 ***** IS_BP001_X = IS_BP001_X ***** TABLES ***** ET_RETURN = LT_RETURN. *--------------------------------------------------------------------* *-- 描述:扩展视图操作 *-- 日期:31.07.2020 09:37:35 *--------------------------------------------------------------------* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = I_JOEL-I_BPARTNER IMPORTING OUTPUT = I_JOEL-I_BPARTNER. LS_PARTN_HDR-OBJECT_INSTANCE-BPARTNER = I_JOEL-I_BPARTNER. IF I_JOEL-I_TASK EQ 'I'. IF E_BU_PARTNER_GUID IS NOT INITIAL. LS_PARTN_HDR-OBJECT_INSTANCE-BPARTNERGUID = E_BU_PARTNER_GUID. ELSE. LS_PARTN_HDR-OBJECT_INSTANCE-BPARTNERGUID = GV_PARTNER_GUID. ENDIF. ELSE. SELECT SINGLE PARTNER_GUID INTO GV_PARTNER_GUID FROM BUT000 WHERE PARTNER = I_JOEL-I_BPARTNER. LS_PARTN_HDR-OBJECT_INSTANCE-BPARTNERGUID = GV_PARTNER_GUID. ENDIF. LS_PARTN-HEADER-OBJECT_TASK = I_JOEL-I_TASK. LS_PARTN-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-CATEGORY = 2. "业务伙伴类别 LS_PARTN-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-GROUPING = I_JOEL-I_PARTN_GRP. " 分组 IF I_EXT IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATA-ZZTELF1 = I_EXT-ZZTELF1. LS_PARTN-CENTRAL_DATA-COMMON-DATA-ZZTELF2 = I_EXT-ZZTELF2. LS_PARTN-CENTRAL_DATA-COMMON-DATA-ZZTELF3 = I_EXT-ZZTELF3. LS_PARTN-CENTRAL_DATA-COMMON-DATA-ZZSMTPADDR1 = I_EXT-ZZSMTPADDR1. LS_PARTN-CENTRAL_DATA-COMMON-DATA-ZZSMTPADDR2 = I_EXT-ZZSMTPADDR2. LS_PARTN-CENTRAL_DATA-COMMON-DATA-ZZSMTPADDR3 = I_EXT-ZZSMTPADDR3. LS_PARTN-CENTRAL_DATA-COMMON-DATA-ZZNAMTEXT1 = I_EXT-ZZNAMTEXT1. LS_PARTN-CENTRAL_DATA-COMMON-DATA-ZZNAMTEXT2 = I_EXT-ZZNAMTEXT2. LS_PARTN-CENTRAL_DATA-COMMON-DATA-ZZNAMTEXT3 = I_EXT-ZZNAMTEXT3. LS_PARTN-CENTRAL_DATA-COMMON-DATA-ZZVIP = I_EXT-ZZVIP. IF I_EXT-ZZTELF1 IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATAX-ZZTELF1 = 'X'. ENDIF. IF I_EXT-ZZTELF2 IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATAX-ZZTELF2 = 'X'. ENDIF. IF I_EXT-ZZTELF3 IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATAX-ZZTELF3 = 'X'. ENDIF. IF I_EXT-ZZSMTPADDR1 IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATAX-ZZSMTPADDR1 = 'X'. ENDIF. IF I_EXT-ZZSMTPADDR2 IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATAX-ZZSMTPADDR2 = 'X'. ENDIF. IF I_EXT-ZZSMTPADDR3 IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATAX-ZZSMTPADDR3 = 'X'. ENDIF. IF I_EXT-ZZNAMTEXT1 IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATAX-ZZNAMTEXT1 = 'X'. ENDIF. IF I_EXT-ZZNAMTEXT2 IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATAX-ZZNAMTEXT2 = 'X'. ENDIF. IF I_EXT-ZZNAMTEXT3 IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATAX-ZZNAMTEXT3 = 'X'. ENDIF. IF I_EXT-ZZVIP IS NOT INITIAL. LS_PARTN-CENTRAL_DATA-COMMON-DATAX-ZZVIP = 'X'. ENDIF. ENDIF. * LS_PARTN-CENTRAL_DATA-BANKDETAIL-BANKDETAILS * LS_PARTN-CENTRAL_DATA-TAXNUMBER-TAXNUMBERS MOVE-CORRESPONDING LS_PARTN_HDR TO LS_PARTN-HEADER. MOVE-CORRESPONDING LS_PARTN TO LS_DATA-PARTNER. LS_DATA-VENDOR-HEADER-OBJECT_INSTANCE-LIFNR = I_JOEL-I_BPARTNER. LS_DATA-VENDOR-HEADER-OBJECT_TASK = I_JOEL-I_TASK. * LS_DATA-PARTNER-FINSERV_DATA-COMMON-DATA-FSBP_CENTRL-VIP = . * LS_DATA-PARTNER-FINSERV_DATA-COMMON-DATAX-FSBP_CENTRL-VIP = ''. * LS_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATA-KUNNR = I_JOEL-I_BPARTNER. * LS_DATA-VENDOR-CENTRAL_DATA-CENTRAL-DATAX-KUNNR = 'X'. LS_DATA-PARTNER-FINSERV_DATA-COMMON-DATA-FSBP_CENTRL-VIP = I_JOEL-BP_VIP_PARTNER. "VIP标识 LS_DATA-PARTNER-FINSERV_DATA-COMMON-DATAX-FSBP_CENTRL-VIP = 'X'. "VIP标识 IF I_ORG-NAME1 IS NOT INITIAL. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME1 = I_ORG-NAME1. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME1 = 'X'. ENDIF. IF I_ORG-NAME2 IS NOT INITIAL. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME2 = I_ORG-NAME2. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME2 = 'X'. ENDIF. IF I_ORG-NAME3 IS NOT INITIAL. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME3 = I_ORG-NAME3. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME3 = 'X'. ENDIF. IF I_ORG-NAME4 IS NOT INITIAL. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME4 = I_ORG-NAME4. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME4 = 'X'. ENDIF. IF I_ORG-LEGALORG IS NOT INITIAL. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-LEGALORG = I_ORG-LEGALORG. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-LEGALORG = 'X'. ENDIF. IF I_ORG-INDUSTRYSECTOR IS NOT INITIAL. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-INDUSTRYSECTOR = I_ORG-INDUSTRYSECTOR. LS_DATA-PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-INDUSTRYSECTOR = 'X'. ENDIF. LOOP AT IT_COMPANY. LS_COMPANY-TASK = IT_COMPANY-TASK. "维护标识:I,U,M,D LS_COMPANY-DATA_KEY = IT_COMPANY-BUKRS."公司代码数 IF IT_COMPANY-ZTERM IS NOT INITIAL. LS_COMPANY-DATA-ZTERM = IT_COMPANY-ZTERM."收付条件代码 LS_COMPANY-DATAX-ZTERM = 'X'. ENDIF. IF IT_COMPANY-AKONT IS NOT INITIAL. LS_COMPANY-DATA-AKONT = IT_COMPANY-AKONT."总账中的对账科目 LS_COMPANY-DATAX-AKONT = 'X'. ENDIF. IF IT_COMPANY-FDGRV IS NOT INITIAL. LS_COMPANY-DATA-FDGRV = IT_COMPANY-FDGRV. LS_COMPANY-DATAX-FDGRV = 'X'. ENDIF. IF IT_COMPANY-QLAND IS NOT INITIAL. LS_COMPANY-DATA-QLAND = IT_COMPANY-QLAND."预扣税国家代码 LS_COMPANY-DATAX-QLAND = 'X'. ENDIF. IF IT_COMPANY-ALTKN IS NOT INITIAL. LS_COMPANY-DATA-ALTKN = IT_COMPANY-ALTKN. "先前主记录号码 LS_COMPANY-DATAX-ALTKN = 'X'. ENDIF. IF IT_COMPANY-BUSAB IS NOT INITIAL. LS_COMPANY-DATA-BUSAB = IT_COMPANY-BUSAB. "会计员缩写 LS_COMPANY-DATAX-BUSAB = 'X'. ENDIF. IF IT_COMPANY-ZSABE IS NOT INITIAL. LS_COMPANY-DATA-ZSABE = IT_COMPANY-ZSABE. "供应商处的职员 LS_COMPANY-DATAX-ZSABE = 'X'. ENDIF. IF IT_COMPANY-REPRF IS NOT INITIAL. LS_COMPANY-DATA-REPRF = IT_COMPANY-REPRF. "检查双重发票或信贷凭单的标志 LS_COMPANY-DATAX-REPRF = 'X'. ENDIF. IF IT_COMPANY-ZWELS IS NOT INITIAL. LS_COMPANY-DATA-ZWELS = IT_COMPANY-ZWELS. "考虑的付款方式清单 LS_COMPANY-DATAX-ZWELS = 'X'. ENDIF. APPEND LS_COMPANY TO LS_DATA-VENDOR-COMPANY_DATA-COMPANY. ENDLOOP. CLEAR:LT_FUNCTIONS,LT_FUNCTIONS[]. LOOP AT IT_LFM1. LS_PURCHASING-TASK = IT_LFM1-TASK. LS_PURCHASING-DATA_KEY = IT_LFM1-EKORG. LS_PURCHASING-DATA-SPERM = IT_LFM1-LOEVM. LS_PURCHASING-DATAX-SPERM = 'X'. "冻结和解冻皆可以用 LS_PURCHASING-DATA-LOEVM = IT_LFM1-LOEVM. LS_PURCHASING-DATAX-LOEVM = 'X'. "冻结和解冻皆可以用 LS_PURCHASING-DATA-LFABC = IT_LFM1-LFABC. IF LS_PURCHASING-DATA-LFABC IS NOT INITIAL. LS_PURCHASING-DATAX-LFABC = 'X'. ENDIF. LS_PURCHASING-DATA-WAERS = IT_LFM1-WAERS. IF LS_PURCHASING-DATA-WAERS IS NOT INITIAL. LS_PURCHASING-DATAX-WAERS = 'X'. ENDIF. LS_PURCHASING-DATA-ZTERM = IT_LFM1-ZTERM. IF LS_PURCHASING-DATA-ZTERM IS NOT INITIAL. LS_PURCHASING-DATAX-ZTERM = 'X'. ENDIF. LS_PURCHASING-DATA-WEBRE = IT_LFM1-WEBRE. IF LS_PURCHASING-DATA-WEBRE IS NOT INITIAL. LS_PURCHASING-DATAX-WEBRE = 'X'. ENDIF. LS_PURCHASING-DATA-KALSK = IT_LFM1-KALSK. IF LS_PURCHASING-DATA-KALSK IS NOT INITIAL. LS_PURCHASING-DATAX-KALSK = 'X'. ENDIF. LS_PURCHASING-DATA-INCOV = IT_LFM1-INCOV. IF LS_PURCHASING-DATA-INCOV IS NOT INITIAL. LS_PURCHASING-DATAX-INCOV = 'X'. ENDIF. LS_PURCHASING-DATA-FSH_SC_CID = IT_LFM1-FSH_SC_CID. IF LS_PURCHASING-DATA-FSH_SC_CID IS NOT INITIAL. LS_PURCHASING-DATAX-FSH_SC_CID = 'X'. ENDIF. * LS_PURCHASING-DATAX-LFABC = * LS_PURCHASING-DATAX-WAERS = * LS_PURCHASING-DATAX-ZTERM = * LS_PURCHASING-DATAX-WEBRE = * LS_PURCHASING-DATAX-KALSK = * LS_PURCHASING-DATAX-INCOV = * LS_PURCHASING-DATAX-FSH_SC_CID = IF I_JOEL-I_TASK EQ 'I' AND LINES( LT_FUNCTIONS[] ) EQ 0. CLEAR LS_FUNCTIONS. LS_FUNCTIONS-TASK = IT_LFM1-TASK. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING INPUT = 'VN' IMPORTING OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW. LS_FUNCTIONS-DATA-PARTNER = I_JOEL-I_BPARTNER. LS_FUNCTIONS-DATAX-PARTNER = ABAP_TRUE. APPEND LS_FUNCTIONS TO LT_FUNCTIONS. CLEAR LS_FUNCTIONS. LS_FUNCTIONS-TASK = IT_LFM1-TASK. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING INPUT = 'PI' IMPORTING OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW. LS_FUNCTIONS-DATA-PARTNER = I_JOEL-I_BPARTNER. LS_FUNCTIONS-DATAX-PARTNER = ''. APPEND LS_FUNCTIONS TO LT_FUNCTIONS. CLEAR LS_FUNCTIONS. LS_FUNCTIONS-TASK = IT_LFM1-TASK. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING INPUT = 'OA' IMPORTING OUTPUT = LS_FUNCTIONS-DATA_KEY-PARVW. LS_FUNCTIONS-DATA-PARTNER = I_JOEL-I_BPARTNER. LS_FUNCTIONS-DATAX-PARTNER = ''. APPEND LS_FUNCTIONS TO LT_FUNCTIONS. LS_PURCHASING-FUNCTIONS-FUNCTIONS = LT_FUNCTIONS. ENDIF. APPEND LS_PURCHASING TO LT_PURCHASING. * LS_DATA-VENDOR-PURCHASING_DATA-PURCHASING = LT_PURCHASING. ENDLOOP. LS_DATA-VENDOR-PURCHASING_DATA-PURCHASING = LT_PURCHASING[]. APPEND LS_DATA TO LT_DATA. CALL METHOD CL_MD_BP_MAINTAIN=>MAINTAIN EXPORTING I_DATA = LT_DATA I_TEST_RUN = I_TESTRUN IMPORTING E_RETURN = E_RETURN. LOOP AT E_RETURN INTO LS_BAPIRETI. LS_BAPIRETCT = LS_BAPIRETI-OBJECT_MSG . LOOP AT LS_BAPIRETCT INTO LS_BAPIRETC WHERE TYPE EQ 'A' OR TYPE EQ 'E'. MOVE-CORRESPONDING LS_BAPIRETC TO LS_BAPIRET2. APPEND LS_BAPIRET2 TO ET_RETURN. ENDLOOP. ENDLOOP. "提交数据 IF LINE_EXISTS( ET_RETURN[ TYPE = 'E' ] ) OR LINE_EXISTS( ET_RETURN[ TYPE = 'A' ] ) OR I_TESTRUN EQ 'X'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' IMPORTING RETURN = LS_RETURN. IF I_TESTRUN EQ 'X'. E_CODE = 'S'. E_MSG = '测试运行,请查看消息!'. IF LINE_EXISTS( ET_RETURN[ TYPE = 'E' ] ) OR LINE_EXISTS( ET_RETURN[ TYPE = 'A' ] ). E_CODE = 'E'. E_MSG = '测试运行,请查看消息!'. ENDIF. ELSE. E_CODE = 'E'. E_MSG = '出现错误,请查看消息!'. ENDIF. ELSE. "银行信息 "先删除已存在的银行信息 IF I_JOEL-BU_BANKN IS NOT INITIAL. DATA :LS_BANK TYPE BAPIBUS1006_BANKDETAIL, LS_KNBK TYPE FKNBK, LS_BANKX LIKE BAPIBUS1006_BANKDETAIL_X. "新的银行数据 CLEAR:LS_BANK. LS_BANK-BANK_CTRY = I_JOEL-BU_BANKS." 银行所属国家/地区代码 LS_BANK-BANK_KEY = I_JOEL-BU_BANKK." 银行代码 LS_BANK-BANK_ACCT = I_JOEL-BU_BANKN." 银行帐户号码 LS_BANK-BANK_REF = I_JOEL-BU_BKREF." 银行帐户号码 * LS_BANK-ACCOUNTHOLDER = LS_KNBK-KOINH." 帐户持有人姓名 * BANKACCOUNTNAME = LS_KNBK-BANKS." 银行帐户的名称 LS_BANK-BANKDETAILVALIDFROM = SY-DATUM." 有效日期(有效起始日期) LS_BANK-BANKDETAILVALIDTO = '99991231' ." 有效日期(有效截止日期) LS_BANK-BANK_ACCOUNT_TYPE = LS_KNBK-BVTYP." 银行账户类型 SELECT SINGLE * INTO LS_BUT0BK FROM BUT0BK WHERE PARTNER = I_JOEL-I_BPARTNER. IF SY-SUBRC EQ 0. LS_BANKX-BANK_CTRY = 'X'." 银行所属国家/地区代码 LS_BANKX-BANK_KEY = 'X'." 银行代码 LS_BANKX-BANK_ACCT = 'X'." 银行帐户号码 LS_BANKX-BANK_REF = 'X'." 银行帐户号码 * LS_BANKx-ACCOUNTHOLDER = LS_KNBK-KOINH." 帐户持有人姓名 * BANKACCOUNTNAME = LS_KNBK-BANKS." 银行帐户的名称 LS_BANKX-BANKDETAILVALIDFROM = 'X'." 有效日期(有效起始日期) LS_BANKX-BANKDETAILVALIDTO = 'X' ." 有效日期(有效截止日期) LS_BANKX-BANK_ACCOUNT_TYPE = 'X'." 银行账户类型 CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_CHANGE' EXPORTING BUSINESSPARTNER = I_JOEL-I_BPARTNER BANKDETAILID = LS_BUT0BK-BKVID BANKDETAILDATA = LS_BANK BANKDETAILDATA_X = LS_BANKX TABLES RETURN = LT_RETURN. ELSE. CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD' EXPORTING BUSINESSPARTNER = I_JOEL-I_BPARTNER " 客户编号 BANKDETAILDATA = LS_BANK TABLES RETURN = LT_RETURN. ENDIF. ENDIF. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X' IMPORTING RETURN = LS_RETURN. E_CODE = 'S'. E_MSG = '成功处理!'. LS_RETURN-TYPE = 'S'. LS_RETURN-MESSAGE = '处理成功'. APPEND LS_RETURN TO ET_RETURN. CLEAR LS_RETURN. ENDIF. IF LS_RETURN IS NOT INITIAL. APPEND LS_RETURN TO ET_RETURN. ENDIF. *----------begin of by Luolin 21.01.2021 14:21:53---------- *批量银行账户维护 IF IT_BANK[] IS NOT INITIAL. DATA :WA_BANK TYPE BAPIBUS1006_BANKDETAIL, LT_BAPIRET2 TYPE TABLE OF BAPIRET2, LV_BP TYPE BU_PARTNER. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = I_JOEL-I_BPARTNER IMPORTING OUTPUT = LV_BP. * "先删除已存在的银行信息 IF I_JOEL-I_TASK EQ 'U'. SELECT * FROM BUT0BK WHERE PARTNER EQ @LV_BP INTO TABLE @LT_BUT0BK. IF SY-SUBRC EQ 0. LOOP AT LT_BUT0BK INTO LS_BUT0BK. CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_REMOVE' EXPORTING BUSINESSPARTNER = LV_BP BANKDETAILID = LS_BUT0BK-BKVID TABLES RETURN = LT_BAPIRET2. APPEND LINES OF LT_BAPIRET2 TO LT_RETURN. CLEAR:LS_BUT0BK,LT_BAPIRET2[]. ENDLOOP. ENDIF. ENDIF. LOOP AT IT_BANK. WA_BANK-BANK_CTRY = IT_BANK-BU_BANKS." 银行所属国家/地区代码 WA_BANK-BANK_KEY = IT_BANK-BU_BANKK." 银行代码 WA_BANK-BANK_ACCT = IT_BANK-BU_BANKN." 银行帐户号码 WA_BANK-BANK_REF = IT_BANK-BU_BKREF." 银行帐户号码 WA_BANK-BANKDETAILVALIDFROM = SY-DATUM." 有效日期(有效起始日期) WA_BANK-BANKDETAILVALIDTO = '99991231' ." 有效日期(有效截止日期) CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD' EXPORTING BUSINESSPARTNER = LV_BP " 客户编号 BANKDETAILDATA = WA_BANK TABLES RETURN = LT_BAPIRET2. IF LT_BAPIRET2 IS NOT INITIAL. APPEND LINES OF LT_BAPIRET2 TO LT_RETURN. E_MSG = E_MSG && '银行账号:' && IT_BANK-BU_BANKN && IT_BANK-BU_BKREF && '保存失败,请手工处理!'. CONTINUE. ENDIF. CLEAR:WA_BANK,LT_BAPIRET2,IT_BANK. ENDLOOP. IF LINE_EXISTS( LT_RETURN[ TYPE = 'E' ] ) AND I_TESTRUN EQ 'X'. APPEND LINES OF LT_RETURN TO ET_RETURN. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. E_MSG = E_MSG && '银行账号处理失败,请查看日志!'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X' IMPORTING RETURN = LS_RETURN. IF LS_RETURN-TYPE EQ 'E'. APPEND LS_RETURN TO ET_RETURN. E_MSG = E_MSG && '银行账号COMMIT异常,请联系管理员!'. ENDIF. ENDIF. CLEAR:LS_RETURN. ENDIF. *----------end of by Luolin 21.01.2021 14:21:53---------- DELETE ET_RETURN[] WHERE TYPE EQ '' OR TYPE EQ 'S' . IF E_BUSINESSPARTNER IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING INPUT = E_BUSINESSPARTNER IMPORTING OUTPUT = E_BUSINESSPARTNER. ENDIF. *所有采购组织冻结 DATA: LS_MASTER_DATA TYPE VMDS_EI_EXTERN, "外部界面:中心数据 LT_MASTER_DATA TYPE VMDS_EI_MAIN, LS_MSG1 TYPE VMDS_EI_MAIN, LS_MSG2 TYPE CVIS_MESSAGE, LS_MSG3 TYPE VMDS_EI_MAIN, LS_MSG4 TYPE CVIS_MESSAGE. IF I_JOEL-SPERM IS NOT INITIAL AND I_JOEL-I_TASK EQ 'U'. CLEAR:LS_PURCHASING,LT_MASTER_DATA,LS_MASTER_DATA,LT_MASTER_DATA, LS_MSG1,LS_MSG2,LS_MSG3,LS_MSG4. SELECT COUNT(*) FROM LFA1 WHERE LIFNR EQ @I_JOEL-I_BPARTNER AND SPERM IS INITIAL. CHECK SY-SUBRC EQ 0. SELECT SINGLE EKORG FROM LFM1 WHERE LIFNR EQ @I_JOEL-I_BPARTNER INTO @LS_PURCHASING-DATA_KEY-EKORG." 采购组织 CHECK SY-SUBRC EQ 0. LS_MASTER_DATA-HEADER-OBJECT_TASK = I_JOEL-I_TASK. LS_MASTER_DATA-HEADER-OBJECT_INSTANCE-LIFNR = I_JOEL-I_BPARTNER. LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATA-SPERM = 'X'. LS_MASTER_DATA-CENTRAL_DATA-CENTRAL-DATAX-SPERM = 'X'. LS_PURCHASING-TASK = I_JOEL-I_TASK. APPEND LS_PURCHASING TO LS_MASTER_DATA-PURCHASING_DATA-PURCHASING. APPEND LS_MASTER_DATA TO LT_MASTER_DATA-VENDORS[]. VMD_EI_API=>INITIALIZE( ). CALL METHOD VMD_EI_API=>MAINTAIN_BAPI "VMD_EI_API=>MAINTAIN_DIRECT_INPUT EXPORTING IV_COLLECT_MESSAGES = 'X' IS_MASTER_DATA = LT_MASTER_DATA IMPORTING ES_MASTER_DATA_CORRECT = LS_MSG1 ES_MESSAGE_CORRECT = LS_MSG2 ES_MASTER_DATA_DEFECTIVE = LS_MSG3 ES_MESSAGE_DEFECTIVE = LS_MSG4. IF LS_MSG4-IS_ERROR = ''. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. E_MSG = E_MSG && '所有采购组织冻结修改失败,请手工处理!'. ENDIF. ENDIF. ENDFUNCTION. *&---------------------------------------------------------------------* *& Form FRM_ROLLBACK *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> LS_RETURN *&---------------------------------------------------------------------* FORM FRM_ROLLBACK USING LS_RETURN. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' IMPORTING RETURN = LS_RETURN. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_COMMIT *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> LS_RETURN *&---------------------------------------------------------------------* FORM FRM_COMMIT USING LS_RETURN. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X' IMPORTING RETURN = LS_RETURN. ENDFORM.