FORM frm_bp02 .
* 更改供应商所需变量
DATA:l_xfeld TYPE xfeld, "复选框
ls_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,
l_msg_tmp TYPE char255.
* 复杂外部接口的供应商
DATA:ls_vendor TYPE vmds_ei_extern,
lt_vendor TYPE vmds_ei_extern_t.
* 供应商抬头数据
DATA ls_header TYPE vmds_ei_header.
ls_header-object_instance-lifnr = gs_alv-partner.
ls_header-object_task = 'U'.
* 供应商中心数据
DATA ls_central_data TYPE vmds_ei_central_data.
ls_central_data-address-task = 'U'.
ls_central_data-address-postal-data-name = gs_alv-name_org1.
ls_central_data-address-postal-datax-name = 'X'.
ls_central_data-address-postal-data-name_2 = gs_alv-name_org2.
ls_central_data-address-postal-datax-name_2 = 'X'.
ls_central_data-address-postal-data-sort1 = gs_alv-bu_sort1.
ls_central_data-address-postal-datax-sort1 = 'X'.
ls_central_data-address-postal-data-street = gs_alv-street.
ls_central_data-address-postal-datax-street = 'X'.
ls_central_data-address-postal-data-postl_cod1 = gs_alv-post_code1.
ls_central_data-address-postal-datax-postl_cod1 = 'X'.
ls_central_data-address-postal-data-city = gs_alv-city1.
ls_central_data-address-postal-datax-city = 'X'.
ls_central_data-address-postal-data-pobox_ctry = gs_alv-land1.
ls_central_data-address-postal-datax-pobox_ctry = 'X'.
ls_central_data-address-postal-data-regiogroup = gs_alv-regio.
ls_central_data-address-postal-data-regiogroup = 'X'.
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = gs_alv-langu
IMPORTING
output = gs_alv-langu
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ls_central_data-address-postal-data-langu = gs_alv-langu.
ls_central_data-address-postal-datax-langu = 'X'.
*****************************************************************************************
* 银行信息
DATA: lv_bankl TYPE bnka-bankl,
* LS_BANK TYPE CVIS_EI_CVI_BANKDETAIL,
* LT_BANK TYPE CVIS_EI_BANKDETAIL_T.
ls_bapibus1006_bankdetail TYPE bapibus1006_bankdetail.
CLEAR lv_bankl.
SELECT SINGLE bankl FROM bnka INTO lv_bankl WHERE banka = gs_alv-bank_name.
IF lv_bankl <> ''.
ls_bapibus1006_bankdetail-bank_key = lv_bankl.
ELSE.
"暂不直接创建供应商
* DATA: LV_BANK_CTRY LIKE BAPI1011_KEY-BANK_CTRY,
* LT_BANK_ADDRESS LIKE BAPI1011_ADDRESS OCCURS 0 WITH HEADER LINE,
* LT_RETURN_BK LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
*
* LV_BANK_CTRY = GS_ALV-BANK_LAND.
* LT_BANK_ADDRESS-BANK_NAME = GS_ALV-BANK_NAME.
* APPEND LT_BANK_ADDRESS.
*
* CLEAR: LT_RETURN_BK,LT_RETURN_BK[].
* CALL FUNCTION 'BAPI_BANK_CREATE'
* EXPORTING
* BANK_CTRY = LV_BANK_CTRY
** BANK_KEY =
* BANK_ADDRESS = LT_BANK_ADDRESS
** BANK_METHOD =
** BANK_FORMATTING =
** BANK_ADDRESS1 =
** I_XUPDATE = 'X'
** I_CHECK_BEFORE_SAVE =
** BANK_IBAN_RULE =
** BANK_B2B_SUPPORTED =
** BANK_COR1_SUPPORTED =
** BANK_R_TRANSACTION_SUPPORTED =
* IMPORTING
* RETURN = LT_RETURN_BK
** BANKCOUNTRY =
* BANKKEY = LS_BAPIBUS1006_BANKDETAIL-BANK_KEY.
ENDIF.
ls_bapibus1006_bankdetail-bank_ctry = gs_alv-bank_land. "银行国家
ls_bapibus1006_bankdetail-accountholder = gs_alv-koinh. "账户持有人
ls_bapibus1006_bankdetail-bank_acct = gs_alv-bank_no+0(18). "银行账户
ls_bapibus1006_bankdetail-bank_ref = gs_alv-bank_no+18(20). "参考明细
"LS_BAPIBUS1006_BANKDETAIL-BANKACCOUNTNAME = GS_ALV-BANK_NO. "账户名称
CLEAR: lt_return2, lt_return2[].
CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_CHANGE'
EXPORTING
businesspartner = gs_alv-partner
bankdetailid = '0001'
bankdetaildata = ls_bapibus1006_bankdetail
* BANKDETAILDATA_X =
TABLES
return = lt_return2.
* CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
* EXPORTING
* BUSINESSPARTNER = GS_ALV-PARTNER
** BANKDETAILID =
* BANKDETAILDATA = LS_BAPIBUS1006_BANKDETAIL
** IMPORTING
** BANKDETAILIDOUT =
* TABLES
* RETURN = LT_RETURN2.
CLEAR l_msg2.
LOOP AT lt_return2 WHERE type = 'E' OR type = 'A'.
CONCATENATE lt_return2-message l_msg2 INTO l_msg2 SEPARATED BY ';'.
CONDENSE l_msg2.
ENDLOOP.
IF l_msg2 = ''.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ENDIF.
**************************************************************************
* 电话信息更改
DATA:ls_contact TYPE cvis_ei_phone_str,
lt_contact TYPE cvis_ei_phone_t.
ls_contact-contact-task = 'U'.
ls_contact-contact-data-telephone = gs_alv-tel_number.
ls_contact-contact-datax-telephone = 'X'.
ls_contact-contact-data-extension = gs_alv-tel_extens.
ls_contact-contact-datax-extension = 'X'.
APPEND ls_contact TO lt_contact.
ls_central_data-address-communication-phone-phone[] = lt_contact.
ls_contact-contact-task = 'U'.
ls_contact-contact-data-r_3_user = '2'.
ls_contact-contact-datax-r_3_user = 'X'.
ls_contact-contact-data-telephone = gs_alv-mob_number.
ls_contact-contact-datax-telephone = 'X'.
APPEND ls_contact TO lt_contact.
ls_central_data-address-communication-phone-phone[] = lt_contact.
* 传真信息更改
DATA:ls_fax TYPE cvis_ei_fax_str,
lt_fax TYPE cvis_ei_fax_t.
ls_fax-contact-task = 'U'.
ls_fax-contact-data-fax = gs_alv-fax_number.
ls_fax-contact-datax-fax = 'X'.
ls_fax-contact-data-extension = gs_alv-fax_extens.
ls_fax-contact-datax-extension = 'X'.
APPEND ls_fax TO lt_fax.
ls_central_data-address-communication-fax-fax[] = lt_fax[].
* 电子邮箱
DATA:ls_smtp TYPE cvis_ei_smtp_str,
lt_smtp TYPE cvis_ei_smtp_t.
ls_smtp-contact-task = 'U'.
ls_smtp-contact-data-e_mail = gs_alv-smtp_addr.
ls_smtp-contact-datax-e_mail = 'X'.
APPEND ls_smtp TO lt_smtp.
ls_central_data-address-communication-smtp-smtp[] = lt_smtp[].
* 税号
* DATA:LT_VAT_NUMBERS TYPE CVIS_EI_VAT_T,
* LS_VAT_NUMBERS TYPE CVIS_EI_VAT.
* LS_VAT_NUMBERS-TASK = 'U'.
* LS_VAT_NUMBERS-DATA_KEY-LAND1 = GS_ALV-LAND1.
* LS_VAT_NUMBERS-DATA-STCEG = GS_ALV-TAXNUM.
* LS_VAT_NUMBERS-DATAX-STCEG = 'X'.
* APPEND LS_VAT_NUMBERS TO LT_VAT_NUMBERS.
* LS_CENTRAL_DATA-VAT_NUMBER-VAT_NUMBERS[] = LT_VAT_NUMBERS[].
MOVE-CORRESPONDING ls_header TO ls_vendor-header. "20160905
MOVE-CORRESPONDING ls_central_data TO ls_vendor-central_data. "20160905
* 公司数据
DATA:ls_company_data TYPE vmds_ei_vmd_company,
ls_company TYPE vmds_ei_company,
lt_company TYPE vmds_ei_company_t.
ls_company-task = 'U'.
ls_company-data_key-bukrs = gs_alv-bukrs.
ls_company-data-akont = gs_alv-akont.
ls_company-datax-akont = 'X'.
ls_company-data-zuawa = gs_alv-zuawa.
ls_company-datax-zuawa = 'X'.
ls_company-data-zterm = gs_alv-zterm.
ls_company-datax-zterm = 'X'.
ls_company-data-zwels = gs_alv-dzwels.
ls_company-datax-zwels = 'X'.
ls_company-data-altkn = gs_alv-zaltkn.
ls_company-datax-altkn = 'X'.
ls_company-data-reprf = 'X'. "检查重复发票
ls_company-datax-reprf = 'X'.
APPEND ls_company TO lt_company.
ls_company_data-company[] = lt_company[].
MOVE-CORRESPONDING ls_company_data TO ls_vendor-company_data.
* 组织数据
DATA:ls_purchasing_data TYPE vmds_ei_vmd_purchasing,
ls_purchasing TYPE vmds_ei_purchasing,
lt_purchasing TYPE vmds_ei_purchasing_t.
ls_purchasing-task = 'U'.
ls_purchasing-data_key-ekorg = gs_alv-ekorg.
ls_purchasing-data-waers = gs_alv-waers.
ls_purchasing-datax-waers = 'X'.
ls_purchasing-data-zterm = gs_alv-zterm2.
ls_purchasing-datax-zterm = 'X'.
ls_purchasing-data-ekgrp = gs_alv-ekgrp. "采购组
ls_purchasing-datax-ekgrp = 'X'.
ls_purchasing-data-telf1 = gs_alv-telf1.
ls_purchasing-datax-telf1 = 'X'.
ls_purchasing-data-verkf = gs_alv-verkf.
ls_purchasing-datax-verkf = 'X'.
ls_purchasing-data-webre = 'X'. "基于收货的发票校验
ls_purchasing-datax-webre = 'X'.
ls_functions-task = 'U'.
IF gs_alv-ktonr <> ''.
ls_functions-data_key-parvw = 'ZM'. "ER内外部转换后为ZM
* LS_FUNCTIONS-DATA-DEFPA = ''.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_alv-ktonr
IMPORTING
output = gs_alv-ktonr.
ls_functions-data-partner = gs_alv-ktonr.
ls_functions-datax-partner = 'X'.
APPEND ls_functions TO ls_purchasing-functions-functions.
ENDIF.
APPEND ls_purchasing TO lt_purchasing.
MOVE-CORRESPONDING ls_purchasing_data TO ls_vendor-purchasing_data.
APPEND ls_vendor TO lt_vendor.
ls_data-vendors[] = lt_vendor[].
vmd_ei_api=>initialize( ).
CALL METHOD vmd_ei_api=>maintain_bapi
EXPORTING
iv_collect_messages = 'X'
is_master_data = ls_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'.
DATA ls_msg4_tmp LIKE LINE OF ls_msg4-messages.
LOOP AT ls_msg4-messages INTO ls_msg4_tmp WHERE type = 'E' OR type = 'A'.
CONCATENATE l_msg_tmp ls_msg4_tmp-message INTO l_msg_tmp SEPARATED BY ';'.
CONDENSE l_msg_tmp.
ENDLOOP.
ENDIF.
CLEAR: ls_contact, lt_contact[], ls_contact, lt_contact[], ls_fax, lt_fax[], ls_smtp, lt_smtp[].
IF l_msg2 = '' AND l_msg_tmp = ''.
gs_alv-remark = '信息修改成功。'.
gs_alv-icon_a = icon_green_light.
MODIFY gt_alv FROM gs_alv TRANSPORTING icon_a remark WHERE partner = g_partner AND bukrs = gs_alv-bukrs AND ekorg = gs_alv-ekorg.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "获取alv
IMPORTING
e_grid = l_grid.
CALL METHOD l_grid->check_changed_data. "获取alv改变值
CALL METHOD l_grid->refresh_table_display. "刷新ALV界面
ELSE.
CONCATENATE l_msg2 l_msg_tmp INTO gs_alv-remark SEPARATED BY ';'.
gs_alv-icon_a = icon_red_light.
MODIFY gt_alv FROM gs_alv TRANSPORTING icon_a remark WHERE partner = g_partner AND bukrs = gs_alv-bukrs AND ekorg = gs_alv-ekorg.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "获取alv
IMPORTING
e_grid = l_grid.
CALL METHOD l_grid->check_changed_data. "获取alv改变值
CALL METHOD l_grid->refresh_table_display. "刷新ALV界面
ENDIF.
ENDFORM.