问题1:此方法创建税号国家CN0会被替换为CN5,需要后面单独用BAPI创建。
问题2:独立地址通讯使用方法没找到传入的位置,单独调用BAPI创建。
FUNCTION ZFM_MM_BP_MAIN. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(IS_HEAD) TYPE ZSSRM0002 *" VALUE(I_TESTRUN) TYPE CHAR1 OPTIONAL *" EXPORTING *" VALUE(E_CODE) TYPE CHAR1 *" VALUE(E_MSG) TYPE STRING *" VALUE(E_LIFNR) TYPE LIFNR *" TABLES *" IT_KNB1 STRUCTURE ZSSRM0003 *"---------------------------------------------------------------------- DATA LV_TASK TYPE BUS_EI_OBJECT_TASK. DATA: LV_TABIX TYPE SY-TABIX, LT_DATA TYPE CVIS_EI_EXTERN_T, LS_DATA TYPE CVIS_EI_EXTERN, LT_RETURN TYPE BAPIRETM, LS_RETURN TYPE BAPIRETI, LS_MSG TYPE BAPIRETC, LS_PARTNER TYPE BUS_EI_EXTERN, LS_VENDOR TYPE VMDS_EI_EXTERN, LT_ROLES TYPE BUS_EI_BUPA_ROLES_T, LS_ROLES TYPE BUS_EI_BUPA_ROLES, LT_ADDRESSES TYPE BUS_EI_BUPA_ADDRESS_T, LS_ADDRESSES TYPE BUS_EI_BUPA_ADDRESS, LT_PHONE TYPE BUS_EI_BUPA_TELEPHONE_T, LS_PHONE TYPE BUS_EI_BUPA_TELEPHONE, * LT_FAX TYPE BUS_EI_BUPA_FAX_T, * LS_FAX TYPE BUS_EI_BUPA_FAX, LT_MAIL TYPE BUS_EI_BUPA_SMTP_T, LS_MAIL TYPE BUS_EI_BUPA_SMTP, LT_TAXNUMBER TYPE BUS_EI_BUPA_TAXNUMBER_T, LS_TAXNUMBER TYPE BUS_EI_BUPA_TAXNUMBER, LS_STRUC_TAX TYPE BUS_EI_STRUC_TAX, LT_REMARKS TYPE BUS_EI_BUPA_COMREM_T, LS_REMARKS TYPE BUS_EI_BUPA_COMREM, LT_BANK TYPE BUS_EI_BUPA_BANKDETAIL_T, LS_BANK TYPE BUS_EI_BUPA_BANKDETAIL, LT_COMPANY TYPE VMDS_EI_COMPANY_T, LS_COMPANY TYPE VMDS_EI_COMPANY, LT_PURCHASING TYPE VMDS_EI_PURCHASING_T, LS_PURCHASING TYPE VMDS_EI_PURCHASING, LT_FUNCTIONS TYPE VMDS_EI_FUNCTIONS_T, LS_FUNCTIONS TYPE VMDS_EI_FUNCTIONS, LV_PARTNER_GUID TYPE BU_PARTNER_GUID, LS_CVIS_ERROR TYPE CVIS_ERROR, LT_BAPIRET2 TYPE BAPIRET2_T, LS_BAPIRET2 TYPE BAPIRET2, * 根据伙伴GUID取出供应商编号 LT_PARTNERGUID_LIST TYPE BU_PARTNER_GUID_T, LS_PARTNERGUID_LIST TYPE BU_PARTNER_GUID, LT_VENDOR_LIST TYPE CVIS_VEND_LINK_T, LS_VENDOR_LIST TYPE CVI_VEND_LINK.. IF IS_HEAD IS INITIAL. E_CODE = 'E'. E_MSG = 'IS_HEAD抬头数据为空!'. RETURN. ENDIF. * IF IT_KNB1[] IS INITIAL. * E_CODE = 'E'. * E_MSG = 'IT_KNB1表数据为空!'. * RETURN. * ENDIF. * IF IS_HEAD-LIFNR IS INITIAL. * E_CODE = 'E'. * E_MSG = 'IS_HEAD-LIFNR供应商编码必填!'. * RETURN. * ELSE. * CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' * EXPORTING * INPUT = IS_HEAD-LIFNR * IMPORTING * OUTPUT = IS_HEAD-LIFNR. * ENDIF. CASE IS_HEAD-ZTYPE. WHEN 1. LV_TASK = 'I'. WHEN 2. LV_TASK = 'U'. WHEN OTHERS. E_CODE = 'E'. IF IS_HEAD-ZTYPE IS INITIAL. E_MSG = 'IS_HEAD-ZTYPE业务类型必填!'. ELSE. E_MSG = 'IS_HEAD-ZTYPE传入了错误的业务类型!'. ENDIF. RETURN. ENDCASE. IF IS_HEAD-LTYPE IS INITIAL AND LV_TASK EQ 'I'. E_CODE = 'E'. E_MSG = 'IS_HEAD-LTYPE供应商类型必填!'. RETURN. RETURN. ENDIF. IF IS_HEAD-KTOKK IS INITIAL AND LV_TASK EQ 'I'. E_CODE = 'E'. E_MSG = 'IS_HEAD-KTOKK账户组必填!'. RETURN. ELSEIF IS_HEAD-KTOKK NE 'Z005' AND LV_TASK EQ 'I'. E_CODE = 'E'. E_MSG = 'IS_HEAD-KTOKK账户组仅允许默认值:Z005!'. RETURN. ENDIF. IF IS_HEAD-ROLE IS INITIAL AND LV_TASK EQ 'I'. E_CODE = 'E'. E_MSG = 'IS_HEAD-ROLEBP角色必填!'. RETURN. ELSEIF IS_HEAD-ROLE NE 'ZV01' AND LV_TASK EQ 'I'. E_CODE = 'E'. E_MSG = 'IS_HEAD-ROLEBP角色仅允许默认值:Z005!'. RETURN. ENDIF. IF IS_HEAD-NAME1 IS INITIAL AND LV_TASK EQ 'I'. E_CODE = 'E'. E_MSG = 'IS_HEAD-NAME1供应商名称必填!'. RETURN. ENDIF. IF IS_HEAD-BU_SORT1 IS INITIAL AND LV_TASK EQ 'I'. E_CODE = 'E'. E_MSG = 'IS_HEAD-BU_SORT1供应商简称必填!'. RETURN. ENDIF. IF IS_HEAD-STCEG IS INITIAL. E_CODE = 'E'. E_MSG = 'IS_HEAD-STCEG 税号必填!'. RETURN. ELSE. SELECT SINGLE PARTNER FROM DFKKBPTAXNUM WHERE TAXNUM EQ @IS_HEAD-STCEG AND TAXTYPE EQ 'CN0' INTO @E_LIFNR. IF SY-SUBRC EQ 0. E_CODE = 'E'. E_MSG = '当前客户税号:' && IS_HEAD-STCEG && '已经存在,BP号:' && E_LIFNR. RETURN. ENDIF. ENDIF. CASE LV_TASK. WHEN 'I'. TRY . LV_PARTNER_GUID = CL_UUID_FACTORY=>CREATE_SYSTEM_UUID( )->CREATE_UUID_X16( ). CATCH CX_UUID_ERROR. ENDTRY. WHEN 'U'. SELECT SINGLE BUT000~PARTNER_GUID INTO @LV_PARTNER_GUID FROM BUT000 WHERE PARTNER EQ @IS_HEAD-LIFNR. IF SY-SUBRC NE 0 . E_CODE = 'E'. E_MSG = '业务伙伴编号不存在,不能更新!'. RETURN. ENDIF. ENDCASE. "基本信息 LS_PARTNER-HEADER-OBJECT_TASK = LV_TASK. *LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNER = LV_LIFNR."i_data-lifnr. LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID = LV_PARTNER_GUID. ****业务合作伙伴数据的中心数据*********************************** IF LV_TASK EQ 'I'. LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-CATEGORY = 2. "业务伙伴类别 LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CONTROL-GROUPING = 'Z005'. "业务伙伴分组 LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-TITLE_KEY = '0003'. "称谓 ENDIF. IF IS_HEAD-BU_SORT1 IS NOT INITIAL. LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-SEARCHTERM1 = IS_HEAD-BU_SORT1. "检索项1 LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-SEARCHTERM1 = ABAP_TRUE. ENDIF. IF IS_HEAD-BU_SORT2 IS NOT INITIAL. LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_CENTRALDATA-SEARCHTERM2 = IS_HEAD-BU_SORT2. "检索项2 LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_CENTRALDATA-SEARCHTERM2 = ABAP_TRUE. ENDIF. IF IS_HEAD-NAME1 IS NOT INITIAL. LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME1 = IS_HEAD-NAME1. "名称 LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME1 = ABAP_TRUE. ENDIF. IF IS_HEAD-NAME2 IS NOT INITIAL. LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME2 = IS_HEAD-NAME2. "名称 LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME2 = ABAP_TRUE. ENDIF. IF IS_HEAD-NAME3 IS NOT INITIAL. LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME3 = IS_HEAD-NAME3. "名称 LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME3 = ABAP_TRUE. ENDIF. IF IS_HEAD-NAME4 IS NOT INITIAL. LS_PARTNER-CENTRAL_DATA-COMMON-DATA-BP_ORGANIZATION-NAME4 = IS_HEAD-NAME4. "名称 LS_PARTNER-CENTRAL_DATA-COMMON-DATAX-BP_ORGANIZATION-NAME4 = ABAP_TRUE. ENDIF. *角色 IF LV_TASK = 'I'. CLEAR LS_ROLES. LS_ROLES-TASK = LV_TASK. LS_ROLES-DATA_KEY = 'FLVN00'. LS_ROLES-DATA-ROLECATEGORY = 'FLVN00'. LS_ROLES-DATA-VALID_FROM = SY-DATUM. LS_ROLES-DATAX-VALID_FROM = ABAP_TRUE. LS_ROLES-DATA-VALID_TO = '99991231'. LS_ROLES-DATAX-VALID_TO = ABAP_TRUE. LS_ROLES-CURRENTLY_VALID = ABAP_TRUE. APPEND LS_ROLES TO LS_PARTNER-CENTRAL_DATA-ROLE-ROLES. CLEAR LS_ROLES. LS_ROLES-TASK = LV_TASK. LS_ROLES-DATA_KEY = 'FLVN01'. LS_ROLES-DATA-ROLECATEGORY = 'FLVN01'. LS_ROLES-DATA-VALID_FROM = SY-DATUM. LS_ROLES-DATAX-VALID_FROM = ABAP_TRUE. LS_ROLES-DATA-VALID_TO = '99991231'. LS_ROLES-DATAX-VALID_TO = ABAP_TRUE. LS_ROLES-CURRENTLY_VALID = ABAP_TRUE. APPEND LS_ROLES TO LS_PARTNER-CENTRAL_DATA-ROLE-ROLES. ENDIF. **税号(CN0会变成CN5???) * IF IS_HEAD-STCEG IS NOT INITIAL. * LS_TAXNUMBER-TASK = LV_TASK. * LS_STRUC_TAX-TAXTYPE = 'CN0'. * LS_STRUC_TAX-TAXNUMBER = IS_HEAD-STCEG. * LS_STRUC_TAX-TAXNUMXL = '1234567890'. * LS_TAXNUMBER-DATA_KEY = LS_STRUC_TAX. * APPEND LS_TAXNUMBER TO LT_TAXNUMBER. * LS_PARTNER-CENTRAL_DATA-TAXNUMBER-CURRENT_STATE = ABAP_TRUE. * LS_PARTNER-CENTRAL_DATA-TAXNUMBER-TAXNUMBERS = LT_TAXNUMBER. * ENDIF. "地址信息 CLEAR LT_ADDRESSES. LS_ADDRESSES-TASK = LV_TASK. LS_ADDRESSES-DATA_KEY-GUID = LV_PARTNER_GUID. IF IS_HEAD-STREET IS NOT INITIAL. LS_ADDRESSES-DATA-POSTAL-DATA-STREET = IS_HEAD-STREET. "街道地址 LS_ADDRESSES-DATA-POSTAL-DATAX-STREET = ABAP_TRUE. ENDIF. IF IS_HEAD-POST_CODE1 IS NOT INITIAL. LS_ADDRESSES-DATA-POSTAL-DATA-POSTL_COD1 = IS_HEAD-POST_CODE1. "邮编 LS_ADDRESSES-DATA-POSTAL-DATAX-POSTL_COD1 = ABAP_TRUE. ENDIF. IF IS_HEAD-CITY1 IS NOT INITIAL. LS_ADDRESSES-DATA-POSTAL-DATA-CITY = IS_HEAD-CITY1. "城市 LS_ADDRESSES-DATA-POSTAL-DATAX-CITY = ABAP_TRUE. ENDIF. IF IS_HEAD-LAND1 IS NOT INITIAL. LS_ADDRESSES-DATA-POSTAL-DATA-COUNTRY = IS_HEAD-LAND1. "国家 LS_ADDRESSES-DATA-POSTAL-DATAX-COUNTRY = ABAP_TRUE. ENDIF. IF IS_HEAD-POST_CODE1 IS NOT INITIAL. LS_ADDRESSES-DATA-POSTAL-DATA-LANGU = '1'. "语言 LS_ADDRESSES-DATA-POSTAL-DATAX-LANGU = ABAP_TRUE. ENDIF. IF IS_HEAD-TEL_EXTENS1 IS NOT INITIAL. LS_ADDRESSES-DATA-POSTAL-DATA-HOUSE_NO = IS_HEAD-TEL_EXTENS1. "门牌号 LS_ADDRESSES-DATA-POSTAL-DATAX-HOUSE_NO = ABAP_TRUE. ENDIF. * IF IS_HEAD-POST_CODE1 IS NOT INITIAL. * LS_ADDRESSES-DATA-POSTAL-DATA-STR_SUPPL1 = IS_HEAD-POST_CODE1. "街道2 * LS_ADDRESSES-DATA-POSTAL-DATAX-STR_SUPPL1 = ABAP_TRUE. * ENDIF. * IF IS_HEAD-POST_CODE1 IS NOT INITIAL. * LS_ADDRESSES-DATA-POSTAL-DATA-REGION = '190'. "省份 * LS_ADDRESSES-DATA-POSTAL-DATAX-REGION = ABAP_TRUE. * ENDIF. LS_ADDRESSES-DATA-REMARK-CURRENT_STATE = ABAP_TRUE. *手机 IF IS_HEAD-TEL_NUMBER1 IS NOT INITIAL. LS_PHONE-CONTACT-TASK = LV_TASK. LS_PHONE-CONTACT-DATA-TELEPHONE = IS_HEAD-TEL_NUMBER1. "移动电话 LS_PHONE-CONTACT-DATA-R_3_USER = '3'. "移动电话 LS_PHONE-CONTACT-DATAX-TELEPHONE = ABAP_TRUE. LS_PHONE-CONTACT-DATAX-R_3_USER = ABAP_TRUE. LS_PHONE-CONTACT-DATAX-TEL_NO = ABAP_TRUE. APPEND LS_PHONE TO LT_PHONE. CLEAR: LS_PHONE. LS_ADDRESSES-DATA-COMMUNICATION-PHONE-PHONE = LT_PHONE. ENDIF. *邮箱 IF IS_HEAD-E_MAIL IS NOT INITIAL. LS_MAIL-CONTACT-TASK = LV_TASK. LS_MAIL-CONTACT-DATA-E_MAIL = IS_HEAD-E_MAIL. "电子邮件地址 LS_MAIL-CONTACT-DATAX-E_MAIL = ABAP_TRUE. APPEND LS_MAIL TO LT_MAIL. CLEAR: LS_MAIL. LS_ADDRESSES-DATA-COMMUNICATION-SMTP-CURRENT_STATE = ABAP_TRUE. LS_ADDRESSES-DATA-COMMUNICATION-SMTP-SMTP = LT_MAIL. APPEND LS_ADDRESSES TO LS_PARTNER-CENTRAL_DATA-ADDRESS-ADDRESSES. CLEAR: LS_ADDRESSES. ENDIF. "银行数据(电汇) DATA LV_BKVID TYPE BU_BKVID VALUE '0001'. IF IS_HEAD-ZBKVID EQ 'A'. LS_BANK-TASK = LV_TASK. IF IS_HEAD-ZBANKS IS INITIAL. E_CODE = 'E'. E_MSG = 'IS_HEAD-ZBANKS银行国家(电汇)必填!'. RETURN. ENDIF. IF IS_HEAD-YBANKL IS INITIAL. E_CODE = 'E'. E_MSG = 'IS_HEAD-YBANKL银行代码(电汇)必填!'. RETURN. ENDIF. IF IS_HEAD-ZACCNAME IS INITIAL. E_CODE = 'E'. E_MSG = 'IS_HEAD-ZACCNAME银行账户(电汇)必填!'. RETURN. ENDIF. IF IS_HEAD-ZBANKN IS INITIAL. E_CODE = 'E'. E_MSG = 'IS_HEAD-ZBANKN银行账号(电汇)必填!'. RETURN. ENDIF. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LV_BKVID IMPORTING OUTPUT = LV_BKVID. LS_BANK-DATA_KEY = LV_BKVID. "银行标识 LS_BANK-DATA-BANK_CTRY = IS_HEAD-ZBANKS. "开户行国家 LS_BANK-DATA-BANK_KEY = IS_HEAD-ZBANKL. "银行代码 LS_BANK-DATA-ACCOUNTHOLDER = IS_HEAD-ZACCNAME. "开户名称 LS_BANK-DATA-BANK_ACCT = IS_HEAD-ZBANKN+0(18). "银行帐号 LS_BANK-DATA-BANK_REF = IS_HEAD-ZBANKN+18(12). "银行帐号超长 LS_BANK-DATA-ACCOUNTHOLDER = IS_HEAD-ZACCNAME. "开户名称 *LS_BANK-DATA-BANKACCOUNTNAME = LS_ZTSD0082-ACCNAME."银行帐户的名称 LS_BANK-DATAX-BANK_CTRY = ABAP_TRUE. LS_BANK-DATAX-BANK_KEY = ABAP_TRUE. LS_BANK-DATAX-BANK_ACCT = ABAP_TRUE. LS_BANK-DATAX-BANK_REF = ABAP_TRUE. LS_BANK-DATAX-ACCOUNTHOLDER = ABAP_TRUE. APPEND LS_BANK TO LT_BANK. CLEAR LS_BANK. LV_BKVID = LV_BKVID + 1. ENDIF. "银行数据(承兑) IF IS_HEAD-YBKVID EQ 'B'. LS_BANK-TASK = LV_TASK. IF IS_HEAD-YBANKS IS INITIAL. E_CODE = 'E'. E_MSG = 'IS_HEAD-YBANKS银行国家(承兑)必填!'. RETURN. ENDIF. IF IS_HEAD-YBANKL IS INITIAL. E_CODE = 'E'. E_MSG = 'IS_HEAD-YBANKL银行代码(承兑)必填!'. RETURN. ENDIF. IF IS_HEAD-YBANKN IS INITIAL. E_CODE = 'E'. E_MSG = 'IS_HEAD-YBANKN银行账号(承兑)必填!'. RETURN. ENDIF. IF IS_HEAD-YACCNAME IS INITIAL. E_CODE = 'E'. E_MSG = 'IS_HEAD-YACCNAME银行账户(承兑)必填!'. RETURN. ENDIF. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LV_BKVID IMPORTING OUTPUT = LV_BKVID. LS_BANK-DATA_KEY = LV_BKVID. "银行标识 LS_BANK-DATA-BANK_CTRY = IS_HEAD-YBANKS. "开户行国家 LS_BANK-DATA-BANK_KEY = IS_HEAD-YBANKL. "银行代码 LS_BANK-DATA-BANK_ACCT = IS_HEAD-YBANKN+0(18). "银行帐号 LS_BANK-DATA-BANK_REF = IS_HEAD-YBANKN+18(12). "银行帐号超长 LS_BANK-DATA-ACCOUNTHOLDER = IS_HEAD-YACCNAME. "开户名称 *LS_BANK-DATA-BANKACCOUNTNAME = LS_ZTSD0082-ACCNAME."银行帐户的名称 LS_BANK-DATAX-BANK_CTRY = ABAP_TRUE. LS_BANK-DATAX-BANK_KEY = ABAP_TRUE. LS_BANK-DATAX-BANK_ACCT = ABAP_TRUE. LS_BANK-DATAX-BANK_REF = ABAP_TRUE. LS_BANK-DATAX-ACCOUNTHOLDER = ABAP_TRUE. APPEND LS_BANK TO LT_BANK. CLEAR LS_BANK. ENDIF. IF LT_BANK[] IS NOT INITIAL. LS_PARTNER-CENTRAL_DATA-BANKDETAIL-BANKDETAILS = LT_BANK. *LS_VENDOR-HEADER-OBJECT_INSTANCE-LIFNR = LV_LIFNR."i_data-lifnr. LS_VENDOR-HEADER-OBJECT_TASK = LV_TASK. ENDIF. ****公司代码数据************************************************ LOOP AT IT_KNB1. IF IT_KNB1-BUKRS IS INITIAL. E_CODE = 'E'. E_MSG = 'IT_KNB1-BUKRS公司代码必填!'. RETURN. ENDIF. IF IT_KNB1-AKONT IS INITIAL. E_CODE = 'E'. E_MSG = 'IT_KNB1-AKONT统驭科目必填!'. RETURN. ENDIF. IF IT_KNB1-ZTERM IS INITIAL. E_CODE = 'E'. E_MSG = 'IT_KNB1-ZTERM付款条件必填!'. RETURN. ENDIF. IF IT_KNB1-REPRF IS INITIAL. E_CODE = 'E'. E_MSG = 'IT_KNB1-REPRF检查重复发票必填!'. RETURN. ENDIF. CLEAR:LT_COMPANY. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " 统驭科目补零 EXPORTING INPUT = IT_KNB1-AKONT IMPORTING OUTPUT = IT_KNB1-AKONT. LS_COMPANY-TASK = LV_TASK. LS_COMPANY-DATA_KEY-BUKRS = IT_KNB1-BUKRS."i_data-bukrs. "公司代码 LS_COMPANY-DATA-AKONT = IT_KNB1-AKONT."i_data-akont. "统驭科目 * ls_company-data-zuawa = i_data-zuawa. "排序码 LS_COMPANY-DATA-ZTERM = IT_KNB1-ZTERM."i_data-zterm. "付款条件 LS_COMPANY-DATA-REPRF = IT_KNB1-REPRF. "检查重复发票 LS_COMPANY-DATAX-AKONT = ABAP_TRUE. LS_COMPANY-DATAX-ZUAWA = ABAP_TRUE. LS_COMPANY-DATAX-ZTERM = ABAP_TRUE. LS_COMPANY-DATAX-REPRF = ABAP_TRUE. APPEND LS_COMPANY TO LT_COMPANY. CLEAR LS_COMPANY. ENDLOOP. LS_VENDOR-COMPANY_DATA-COMPANY = LT_COMPANY. ****采购数据**************************************************** CLEAR:LT_PURCHASING. LS_PURCHASING-TASK = LV_TASK. LS_PURCHASING-DATA_KEY-EKORG = '1000'. "采购组织 LS_PURCHASING-DATA-WAERS = 'CNY'. "货币 LS_PURCHASING-DATA-WEBRE = ABAP_TRUE. "基于收货的发票校验 LS_PURCHASING-DATA-ZTERM = '0001'. "付款条件 * ls_purchasing-data-ekgrp = i_data-ekgrp. LS_PURCHASING-DATAX-WAERS = ABAP_TRUE. LS_PURCHASING-DATAX-WEBRE = ABAP_TRUE. LS_PURCHASING-DATAX-ZTERM = ABAP_TRUE. * ls_purchasing-datax-ekgrp = abap_true. APPEND LS_PURCHASING TO LT_PURCHASING. LS_VENDOR-PURCHASING_DATA-PURCHASING = LT_PURCHASING. LS_DATA-PARTNER = LS_PARTNER. LS_DATA-VENDOR = LS_VENDOR. IF LV_TASK EQ 'I'. LS_DATA-ENSURE_CREATE-CREATE_VENDOR = ABAP_TRUE. ENDIF. APPEND LS_DATA TO LT_DATA. * DATA LS_000 TYPE BURS_EI_EXTERN. * APPEND LS_PR2 TO LS_000-CENTRAL_DATA-ADDRESS. *-CENTRAL_DATA-ADDRESS-ADDRESSES. *call bapi创建供应商主数据 CL_MD_BP_MAINTAIN=>MAINTAIN( EXPORTING I_DATA = LT_DATA I_TEST_RUN = I_TESTRUN IMPORTING E_RETURN = LT_RETURN ). LOOP AT LT_RETURN INTO LS_RETURN. LOOP AT LS_RETURN-OBJECT_MSG INTO LS_MSG WHERE TYPE = 'E' OR TYPE = 'A'. E_MSG = E_MSG && LS_MSG-MESSAGE. ENDLOOP. CLEAR LS_RETURN. ENDLOOP. IF LS_MSG IS INITIAL. IF I_TESTRUN IS INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = ABAP_TRUE. * 根据伙伴GUID取出供应商编号 CLEAR: LT_PARTNERGUID_LIST,LT_VENDOR_LIST. LS_PARTNERGUID_LIST = LS_PARTNER-HEADER-OBJECT_INSTANCE-BPARTNERGUID. APPEND LS_PARTNERGUID_LIST TO LT_PARTNERGUID_LIST. LT_VENDOR_LIST = CVI_MAPPER=>GET_INSTANCE( )->GET_ASSIGNED_VENDORS_FOR_BPS( I_PARTNER_GUIDS = LT_PARTNERGUID_LIST ). IF LT_VENDOR_LIST IS NOT INITIAL. READ TABLE LT_VENDOR_LIST INTO LS_VENDOR_LIST INDEX 1 . IF SY-SUBRC EQ 0. CONCATENATE '供应商' LS_VENDOR_LIST-VENDOR '创建成功!' INTO E_MSG. ENDIF. E_CODE = 'S'. E_LIFNR = LS_VENDOR_LIST-VENDOR. ELSE. "可能创建成功了BP,但未创建成功Vendor LS_CVIS_ERROR = CVI_MAPPER=>GET_INSTANCE( )->UNDO_ASSIGNMENTS( I_FOR_PARTNERS = LT_PARTNERGUID_LIST ). E_CODE = 'E'. E_MSG = '供应商创建出错,供应商部分数据出错,请检查是否是BP伙伴功能问题!'. ENDIF. ELSE. E_CODE = 'E'. E_MSG = '数据校验通过!'. RETURN. ENDIF. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' * IMPORTING * RETURN = . E_CODE = 'E'. ENDIF. IF E_CODE EQ 'S' AND I_TESTRUN IS INITIAL. *税号 IF IS_HEAD-STCEG IS NOT INITIAL. DATA: LV_TAXTYPE TYPE BAPIBUS1006TAX-TAXTYPE, LV_TAXNUMBER TYPE BAPIBUS1006TAX-TAXNUMBER. DATA:LS_RET_TAX TYPE BAPIRET2, LT_RET_TAX TYPE TABLE OF BAPIRET2. LV_TAXTYPE = 'CN0'. LV_TAXNUMBER = IS_HEAD-STCEG. CALL FUNCTION 'BAPI_BUPA_TAX_ADD' EXPORTING BUSINESSPARTNER = E_LIFNR TAXTYPE = LV_TAXTYPE TAXNUMBER = LV_TAXNUMBER TABLES RETURN = LT_RET_TAX. IF NOT LINE_EXISTS( LT_RET_TAX[ TYPE = 'E' ] ). CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X'. E_MSG = E_MSG && '税号写入成功!'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. E_MSG = E_MSG && '税号写入失败,请手工处理!'. ENDIF. ENDIF. IF IS_HEAD-TEL_NUMBER2 IS NOT INITIAL OR IS_HEAD-MOB_NUMBER2 IS NOT INITIAL OR IS_HEAD-FAX_NUMBER2 IS NOT INITIAL OR IS_HEAD-SMTP_ADDR2 IS NOT INITIAL. DATA:LS_TEL TYPE BAPIADTEL, LT_TEL TYPE TABLE OF BAPIADTEL, LS_TELX TYPE BAPIADTELX, LT_TELX TYPE TABLE OF BAPIADTELX, LS_FAX TYPE BAPIADFAX, LT_FAX TYPE TABLE OF BAPIADFAX, LS_FAXX TYPE BAPIADFAXX, LT_FAXX TYPE TABLE OF BAPIADFAXX, LS_MAIL_DL TYPE BAPIADSMTP, LT_MAIL_DL TYPE TABLE OF BAPIADSMTP, LS_MAILX TYPE BAPIADSMTX, LT_MAILX TYPE TABLE OF BAPIADSMTX, LS_RETURN2 TYPE BAPIRET2, LT_RETURN2 TYPE TABLE OF BAPIRET2. IF IS_HEAD-TEL_NUMBER2 IS NOT INITIAL. LS_TEL-COUNTRY = 'CN'. LS_TELX-COUNTRY = ABAP_TRUE. LS_TEL-TELEPHONE = IS_HEAD-TEL_NUMBER2. LS_TELX-TELEPHONE = ABAP_TRUE. LS_TEL-R_3_USER = '1'. LS_TELX-R_3_USER = ABAP_TRUE. LS_TEL-STD_NO = ABAP_TRUE. LS_TELX-STD_NO = ABAP_TRUE. APPEND LS_TEL TO LT_TEL. APPEND LS_TELX TO LT_TELX. CLEAR:LS_TEL,LS_TELX. ENDIF. IF IS_HEAD-MOB_NUMBER2 IS NOT INITIAL. LS_TEL-COUNTRY = 'CN'. LS_TELX-COUNTRY = ABAP_TRUE. LS_TEL-TELEPHONE = IS_HEAD-MOB_NUMBER2. LS_TELX-TELEPHONE = ABAP_TRUE. LS_TEL-R_3_USER = '3'. LS_TELX-R_3_USER = ABAP_TRUE. LS_TEL-STD_NO = ABAP_TRUE. LS_TELX-STD_NO = ABAP_TRUE. APPEND LS_TEL TO LT_TEL. APPEND LS_TELX TO LT_TELX. CLEAR:LS_TEL,LS_TELX. ENDIF. IF IS_HEAD-FAX_NUMBER2 IS NOT INITIAL. LS_FAX-COUNTRY = 'CN'. LS_FAXX-COUNTRY = ABAP_TRUE. LS_FAX-FAX = IS_HEAD-FAX_NUMBER2. LS_FAXX-FAX = ABAP_TRUE. APPEND LS_FAX TO LT_FAX. APPEND LS_FAXX TO LT_FAXX. CLEAR:LS_FAX,LS_FAXX. ENDIF. IF IS_HEAD-SMTP_ADDR2 IS NOT INITIAL.. LS_MAIL_DL-E_MAIL = IS_HEAD-SMTP_ADDR2. LS_MAILX-E_MAIL = ABAP_TRUE. APPEND LS_MAIL_DL TO LT_MAIL_DL. APPEND LS_MAILX TO LT_MAILX. CLEAR:LS_MAIL_DL,LS_MAILX. ENDIF. CALL FUNCTION 'BAPI_BUPA_CENTRAL_CHANGE' EXPORTING BUSINESSPARTNER = E_LIFNR * CENTRALDATA = * CENTRALDATAPERSON = * CENTRALDATAORGANIZATION = * CENTRALDATAGROUP = * CENTRALDATA_X = * CENTRALDATAPERSON_X = * CENTRALDATAORGANIZATION_X = * CENTRALDATAGROUP_X = * VALID_DATE = SY-DATLO * DUPLICATE_MESSAGE_TYPE = * DUPLICATE_CHECK_ADDRESS = TABLES TELEFONDATANONADDRESS = LT_TEL FAXDATANONADDRESS = LT_FAX * TELETEXDATANONADDRESS = * TELEXDATANONADDRESS = E_MAILDATANONADDRESS = LT_MAIL_DL * RMLADDRESSDATANONADDRESS = * X400ADDRESSDATANONADDRESS = * RFCADDRESSDATANONADDRESS = * PRTADDRESSDATANONADDRESS = * SSFADDRESSDATANONADDRESS = * URIADDRESSDATANONADDRESS = * PAGADDRESSDATANONADDRESS = * COMMUNICATIONNOTESNONADDRESS = * COMMUNICATIONUSAGENONADDRESS = TELEFONDATANONADDRESSX = LT_TELX FAXDATANONADDRESSX = LT_FAXX * TELETEXDATANONADDRESSX = * TELEXDATANONADDRESSX = E_MAILDATANONADDRESSX = LT_MAILX * RMLADDRESSDATANONADDRESSX = * X400ADDRESSDATANONADDRESSX = * RFCADDRESSDATANONADDRESSX = * PRTADDRESSDATANONADDRESSX = * SSFADDRESSDATANONADDRESSX = * URIADDRESSDATANONADDRESSX = * PAGADDRESSDATANONADDRESSX = * COMMUNICATIONNOTESNONADDRESSX = * COMMUNICATIONUSAGENONADDRESSX = RETURN = LT_RETURN2 * ADDRESSDUPLICATES = . DATA LV_MSG TYPE STRING. IF LINE_EXISTS( LT_RETURN2[ TYPE = 'E' ] ). CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. "如包含E类型,则判断为失败,回滚数据 LOOP AT LT_RETURN2 INTO LS_RETURN2 WHERE TYPE EQ 'E'. LV_MSG = LV_MSG && LS_RETURN2-MESSAGE. CLEAR:LS_RETURN2. ENDLOOP. E_MSG = E_MSG && '独立地址通讯扩展失败,请手工处理!' && LV_MSG. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X'. E_MSG = E_MSG && '独立地址通讯扩展成功!'. ENDIF. ENDIF. ENDIF. ENDFUNCTION.
网友评论