FUNCTION zmd_creat_lifnr.
*"----------------------------------------------------------------------
*"*"局部接口:
*" IMPORTING
*" VALUE(IT_MD017) TYPE ZPIDT_MD017_BODY_TAB
*" EXPORTING
*" VALUE(EV_TYPE) TYPE BAPI_MTYPE
*" VALUE(EV_MSG) TYPE BAPI_MSG
*" VALUE(EV_LIFNR) TYPE LIFNR
*"----------------------------------------------------------------------
DATA:ls_md017 LIKE LINE OF it_md017.
DATA:ls_item1 LIKE LINE OF ls_md017-item1.
DATA:ls_item2 LIKE LINE OF ls_md017-item2.
DATA:ls_item3 LIKE LINE OF ls_md017-item3.
DATA:ls_mesg TYPE cvis_message,
lt_msg TYPE bapiret2_t,
lwa_msg TYPE bapiret2.
DATA: ls_return TYPE bapiret2.
DATA: ls_master_data TYPE vmds_ei_main. "基礎資訊
DATA: ls_master_data_correct TYPE vmds_ei_main,
ls_message_correct TYPE cvis_message,
ls_master_data_defective TYPE vmds_ei_main,
ls_message_defective TYPE cvis_message.
*DATA: ls_vmds_pur TYPE vmds_ei_purchasing.
DATA:lt_vendors TYPE vmds_ei_extern_t.
DATA:ls_vendors TYPE vmds_ei_extern.
DATA:ls_lifnr TYPE vmds_ei_extern-header.
DATA: ls_vmds_ei_extern TYPE vmds_ei_extern.
DATA: ls_correct_extern TYPE vmds_ei_extern.
DATA: ls_remarks TYPE cvis_ei_rem.
DATA: lt_functions TYPE vmds_ei_functions_t,
lwa_functions TYPE vmds_ei_functions.
DATA: ls_bank TYPE cvis_ei_cvi_bankdetail.
DATA: ls_communication_phone TYPE cvis_ei_phone_str,
ls_communication_fax TYPE cvis_ei_fax_str,
ls_communication_smtp TYPE cvis_ei_smtp_str.
DATA: lv_string TYPE string .
DATA: lv_approved_date TYPE string,
lv_approved_date1 TYPE string.
DATA: lv_adrnr TYPE adrnr,
ls_knvk TYPE knvk,
* LS_ZMMR1010 TYPE ZMMR1010,
lv_retcode TYPE nrreturn,
lv_person_number TYPE ad_persnum.
DATA: ls_cvi_bankdetail TYPE cvis_ei_cvi_bankdetail,
ls_bankdetail_key TYPE cvis_ei_bankdetail_key,
ls_bankdetail_data TYPE cvis_ei_bankdetail_data,
ls_bankdetail_datax TYPE cvis_ei_bankdetail_datax.
DATA: lv_max_lifnr TYPE lifnr.
DATA: ls_vmds_cmp TYPE vmds_ei_company,
ls_vmds_pur TYPE vmds_ei_purchasing,
ls_vmds_fun TYPE vmds_ei_functions.
DATA: zlfbk TYPE lfbk.
DATA:iv_flag TYPE c .
DATA:lv_lifnr TYPE lifnr.
DATA: lv_message TYPE bapiret2_t.
DATA: ls_msg LIKE LINE OF lv_message.
DATA: lt_xlfas TYPE TABLE OF flfas,
lt_xlfb5 TYPE TABLE OF flfb5,
lt_xlfbk TYPE TABLE OF flfbk,
lt_xlfza TYPE TABLE OF flfza.
DATA: l_lfb1 LIKE lfb1,
l_ylfb1 TYPE lfb1,
l_lfa1 TYPE lfa1,
l_ylfa1 TYPE lfa1,
l_ylfm1 TYPE lfm1,
l_lfm1 TYPE lfm1.
DATA:lt_bukrs TYPE bukrs,
lt_lifnr2 TYPE lifnr.
DATA:lt_ztmm298 LIKE TABLE OF ztmm298.
DATA:lv_ztmm298 LIKE LINE OF lt_ztmm298.
DATA:lv_partner TYPE lifnr.
DATA:lv_name TYPE name1_gp.
DATA: lt_lifnr3 TYPE vmds_ei_extern-header.
DATA: ls_lifnr3 TYPE vmds_ei_header-object_instance.
CLEAR:ls_return ,
ls_master_data ,
ls_master_data_correct ,
ls_message_correct ,
ls_master_data_defective ,
ls_message_defective ,
ls_vmds_ei_extern ,
ls_correct_extern ,
ls_remarks ,
ls_bank ,
ls_communication_phone ,
ls_communication_fax ,
ls_communication_smtp ,
lv_string ,
lv_approved_date ,
lv_approved_date1 ,
lv_adrnr ,
ls_knvk ,
lv_retcode ,
lv_person_number ,
ls_cvi_bankdetail ,
ls_bankdetail_key ,
ls_bankdetail_data ,
ls_bankdetail_datax ,
lv_max_lifnr ,
ls_vmds_cmp ,
ls_vmds_pur ,
ls_vmds_fun ,
zlfbk ,
iv_flag .
IF it_md017[] IS NOT INITIAL.
LOOP AT it_md017 INTO ls_md017.
CLEAR:ls_vmds_ei_extern,lv_partner.
SELECT SINGLE ecc_lifnr eccname1 INTO (lv_partner,lv_name) FROM ztmm298 WHERE s4_lifnr = ls_md017-partner.
* SELECT SINGLE ecc_name1 INTO lv_name FROM ztmm298 WHERE s4name1 = ls_md017-name1.
IF ls_md017-item2[] IS NOT INITIAL OR ls_md017-item3[] IS NOT INITIAL.
SELECT SINGLE lifnr INTO lv_lifnr FROM lfa1 WHERE lifnr = lv_partner.
IF sy-subrc <> 0.
iv_flag = 'I'.
ENDIF.
ELSE.
iv_flag = 'M'.
ENDIF.
IF lv_partner IS INITIAL.
lv_partner = ls_md017-partner.
ENDIF.
IF lv_name IS INITIAL.
lv_name = ls_md017-name1.
ENDIF.
ls_vmds_ei_extern-header-object_task = iv_flag.
ls_vmds_ei_extern-header-object_instance-lifnr = lv_partner.
*通用資料
* ls_vmds_ei_extern-central_data-central-data-ktokk = ls_md017-bu_group. "分組
*⑧科目組的确定:如果BUT000-BU_GROUP = Z100,則LFA1-KTOKK = Z004,
* 如果BUT000-BU_GROUP = Z201 or Z202 且BUT000-BPKIND = Z001 OR Z002 OR Z003,則LFA1-KTOKK = Z002,
* 如果BUT000-BU_GROUP = Z201 or Z202 且BUT000-BPKIND = SPACE,則LFA1-KTOKK = Z001,
* 如果BUT000-BU_GROUP = Z300,則LFA1-KTOKK = Z003,
* 如果BUT000-BU_GROUP = ZP00,則LFA1-KTOKK = Z100
* IF ls_md017-bu_group = 'Z100'.
* ls_vmds_ei_extern-central_data-central-data-ktokk = 'Z004'.
IF ls_md017-bu_group = 'Z201' OR ls_md017-bu_group = 'Z202'.
IF ls_md017-bpkind = 'Z001' OR ls_md017-bpkind = 'Z002' OR ls_md017-bpkind = 'Z003'.
ls_vmds_ei_extern-central_data-central-data-ktokk = 'Z002'.
ELSEIF ls_md017-bpkind = ' '.
ls_vmds_ei_extern-central_data-central-data-ktokk = 'Z001'.
ENDIF.
ELSEIF ls_md017-bu_group = 'Z300'.
ls_vmds_ei_extern-central_data-central-data-ktokk = 'Z003'.
ELSEIF ls_md017-bu_group = 'ZP00'.
ls_vmds_ei_extern-central_data-central-data-ktokk = 'Z100'.
ENDIF.
ls_vmds_ei_extern-central_data-central-data-sperr = ls_md017-xblck. "記賬當機
ls_vmds_ei_extern-central_data-central-data-stceg = ls_md017-idnumber. "證件号碼
* ls_vmds_ei_extern-central_data-central-data-fityp = ls_md017-taxnumxl. "稅号
IF ls_md017-bu_group = 'Z201'.
IF ls_md017-bpkind = 'Z001' OR ls_md017-bpkind = 'Z002' OR ls_md017-bpkind = 'Z003'.
* ls_vmds_ei_extern-central_data-central-data-sx = 'N'.
* ls_vmds_ei_extern-central_data-central-data-gs = 'N'.
ENDIF.
ENDIF.
IF ls_md017-bpkind = 'Z001'. "合作夥伴類型
ls_vmds_ei_extern-central_data-central-data-brsch = '01'.
ELSEIF ls_md017-bpkind = 'Z002'.
ls_vmds_ei_extern-central_data-central-data-brsch = '10'.
ELSEIF ls_md017-bpkind = 'Z003'.
ls_vmds_ei_extern-central_data-central-data-brsch = '11'.
ELSE.
ls_vmds_ei_extern-central_data-central-data-brsch = '06'.
ENDIF.
ls_vmds_ei_extern-central_data-central-data-vbund = ls_md017-vbund. "貿易夥伴
ls_vmds_ei_extern-central_data-central-datax-ktokk = 'X'. "分組
ls_vmds_ei_extern-central_data-central-datax-sperr = 'X'. "記賬當機
ls_vmds_ei_extern-central_data-central-datax-brsch = 'X'. "合作夥伴類型
ls_vmds_ei_extern-central_data-central-datax-vbund = 'X'. "貿易夥伴
* ls_vmds_ei_extern-central_data-address-postal-data-name = ls_md017-name1. "名稱
ls_vmds_ei_extern-central_data-address-postal-data-name = lv_name. "名稱
ls_vmds_ei_extern-central_data-address-postal-data-name_2 = ls_md017-name2. "名稱2
ls_vmds_ei_extern-central_data-address-postal-data-name_3 = ls_md017-name3. "名稱3
ls_vmds_ei_extern-central_data-address-postal-data-name_4 = ls_md017-name4. "名稱4
ls_vmds_ei_extern-central_data-address-postal-data-sort1 = ls_md017-sort1. "搜尋項1
ls_vmds_ei_extern-central_data-address-postal-data-sort2 = ls_md017-sort2. "搜尋項2
ls_vmds_ei_extern-central_data-address-postal-data-street = ls_md017-street."街道
ls_vmds_ei_extern-central_data-address-postal-data-house_no = ls_md017-house_num1."門牌号
ls_vmds_ei_extern-central_data-address-postal-data-postl_cod1 = ls_md017-post_code1."郵編
ls_vmds_ei_extern-central_data-address-postal-data-city = ls_md017-city1."城市
ls_vmds_ei_extern-central_data-address-postal-data-country = ls_md017-country."國家
ls_vmds_ei_extern-central_data-address-postal-data-region = ls_md017-region."地區
ls_vmds_ei_extern-central_data-address-postal-data-langu = ls_md017-langu."語言
ls_vmds_ei_extern-central_data-address-postal-datax-street = 'X'.
ls_vmds_ei_extern-central_data-address-postal-datax-house_no = 'X'.
ls_vmds_ei_extern-central_data-address-postal-datax-postl_cod1 = 'X'.
ls_vmds_ei_extern-central_data-address-postal-datax-city = 'X'.
ls_vmds_ei_extern-central_data-address-postal-datax-country = 'X'.
ls_vmds_ei_extern-central_data-address-postal-datax-region = 'X'.
ls_vmds_ei_extern-central_data-address-postal-datax-langu = 'X'.
***電話
ls_communication_phone-contact-task = iv_flag.
ls_communication_phone-contact-data-telephone = ls_md017-tel_number.
ls_communication_phone-contact-datax-telephone = 'X'.
ls_communication_phone-contact-datax-country = 'X'.
APPEND ls_communication_phone TO ls_vmds_ei_extern-central_data-address-communication-phone-phone.
***傳真
ls_communication_fax-contact-task = iv_flag.
ls_communication_fax-contact-data-fax = ls_md017-fax_number.
ls_communication_fax-contact-datax-fax = 'X'.
APPEND ls_communication_fax TO ls_vmds_ei_extern-central_data-address-communication-fax-fax.
***銀行資訊
IF ls_md017-item1[] IS NOT INITIAL.
LOOP AT ls_md017-item1 INTO ls_item1.
CLEAR lv_lifnr.
SELECT SINGLE lifnr INTO lv_lifnr FROM lfbk WHERE lifnr = lv_partner AND banks = ls_item1-banks AND bankl = ls_item1-bankl AND bankn = ls_item1-sbpbkid.
IF lv_lifnr IS NOT INITIAL.
ls_bank-task = 'M'.
ELSE.
ls_bank-task = 'I'.
ENDIF.
ls_bank-data_key-banks = ls_item1-banks. "銀行國家代碼 = IV_FLAG.
ls_bank-data_key-bankl = ls_item1-bankl. "銀行帳戶号碼
ls_bank-data_key-bankn = ls_item1-sbpbkid."銀行賬号
ls_bank-data-bkref = ls_item1-bkref."參考明細
ls_bank-data-bkont = ls_item1-bkont."控制碼
ls_bank-data-koinh = ls_item1-accname."賬戶名稱
ls_bank-datax-bkref = 'X'."參考明細
ls_bank-datax-bkont = 'X'."控制碼
ls_bank-datax-koinh = 'X'."賬戶名稱
APPEND ls_bank TO ls_vmds_ei_extern-central_data-bankdetail-bankdetails.
CLEAR ls_bank.
ENDLOOP.
ENDIF.
***采購視圖
IF ls_md017-item2[] IS NOT INITIAL.
LOOP AT ls_md017-item2 INTO ls_item2.
CLEAR lv_lifnr.
SELECT SINGLE lifnr INTO lv_lifnr FROM lfm1 WHERE lifnr = lv_partner AND ekorg = ls_item2-ekorg.
IF lv_lifnr IS NOT INITIAL.
ls_vmds_pur-task = 'M'.
ELSE.
ls_vmds_pur-task = 'I'.
ENDIF.
* ls_vmds_pur-data_key-ekorg = ls_item2-ekorg. "采購組織
ls_vmds_pur-data_key-ekorg = '8000'. "采購組織
ls_vmds_pur-data-waers = ls_item2-waers. "訂單貨币
ls_vmds_pur-data-zterm = ls_item2-zterm. "付款條款
ls_vmds_pur-data-kalsk = ls_item2-kalsk. "方案組
ls_vmds_pur-data-webre = ls_item2-webre. "基于收貨的發票校驗
* ls_vmds_pur-data-inco1 = ls_item2-inco1. "國際貿易術語
ls_vmds_pur-data-inco1 = ''. "國際貿易術語
ls_vmds_pur-data-sperm = ls_item2-sperm. "供應商采購組織當機
ls_vmds_pur-datax-waers = 'X'. "訂單貨币
ls_vmds_pur-datax-zterm = 'X'. "付款條款
ls_vmds_pur-datax-kalsk = 'X'. "方案組
ls_vmds_pur-datax-webre = 'X'. "基于收貨的發票校驗
ls_vmds_pur-datax-inco1 = 'X'. "國際貿易術語
ls_vmds_pur-datax-sperm = 'X'.. "供應商采購組織當機
lwa_functions-task = 'I'.
lwa_functions-data_key-parvw = 'LF'.
APPEND lwa_functions TO lt_functions.
lwa_functions-task = 'I'.
lwa_functions-data_key-parvw = 'RS'.
APPEND lwa_functions TO lt_functions.
ls_vmds_pur-functions-functions = lt_functions.
APPEND ls_vmds_pur TO ls_vmds_ei_extern-purchasing_data-purchasing.
CLEAR ls_vmds_pur.
ENDLOOP.
ENDIF.
***财務視圖
IF ls_md017-item3[] IS NOT INITIAL.
LOOP AT ls_md017-item3 INTO ls_item3.
CLEAR lv_lifnr.
SELECT SINGLE lifnr INTO lv_lifnr FROM lfb1 WHERE lifnr = lv_partner AND bukrs = ls_item3-sbpscid.
IF lv_lifnr IS NOT INITIAL.
ls_vmds_cmp-task = 'M'.
ELSE.
ls_vmds_cmp-task = 'I'.
ENDIF.
SELECT SINGLE eccgsdm INTO ls_vmds_cmp-data_key-bukrs FROM ztmm299 WHERE s4gsdm = ls_item3-sbpscid."公司代碼
IF ls_vmds_cmp-data_key-bukrs IS NOT INITIAL.
lt_bukrs = ls_vmds_cmp-data_key-bukrs.
ELSE.
ev_type = 'E'.
ev_msg = '請維護ZTMM299公司代碼資料'.
CONTINUE.
ENDIF.
* ls_vmds_cmp-data_key-bukrs = ls_item3-sbpscid. "公司代碼
ls_vmds_cmp-data-akont = ls_item3-zsakonte. "統馭科目
ls_vmds_cmp-data-fdgrv = ls_item3-fdgrv. "現金管理組
ls_vmds_cmp-data-zterm = ls_item3-zterm. "付款條款
ls_vmds_cmp-data-zwels = ls_item3-zwels. "支付方式
ls_vmds_cmp-data-sperr = ls_item3-sperr. "供應商公司代碼當機
ls_vmds_cmp-data-zuawa = '0001'. "排序碼
ls_vmds_cmp-data-reprf = 'X'. "檢查重複發票
ls_vmds_cmp-datax-akont = 'X'. "統馭科目
ls_vmds_cmp-datax-fdgrv = 'X'. "現金管理組
ls_vmds_cmp-datax-zterm = 'X'. "付款條款
ls_vmds_cmp-datax-zwels = 'X'. "支付方式
ls_vmds_cmp-datax-sperr = 'X'. "供應商公司代碼當機
ls_vmds_cmp-datax-zuawa = 'X'. "排序碼
ls_vmds_cmp-datax-reprf = 'X'. "檢查重複發票
APPEND ls_vmds_cmp TO ls_vmds_ei_extern-company_data-company.
CLEAR ls_vmds_cmp.
ENDLOOP.
ENDIF.
APPEND ls_vmds_ei_extern TO ls_master_data-vendors.
* 調用api維護供應商
CALL METHOD vmd_ei_api=>maintain_bapi
EXPORTING
iv_collect_messages = 'X'
is_master_data = ls_master_data
IMPORTING
es_master_data_correct = ls_master_data_correct
es_message_correct = ls_message_correct
es_master_data_defective = ls_master_data_defective
es_message_defective = ls_message_defective.
* lt_msg = ls_mesg-messages.
* LOOP AT lt_msg INTO lwa_msg.
*
* ENDLOOP.
IF ls_message_defective-is_error = ''.
lt_vendors = ls_master_data_correct-vendors.
LOOP AT lt_vendors INTO ls_vendors.
CLEAR:lt_lifnr3,ls_lifnr3.
lt_lifnr3 = ls_vendors-header.
ls_lifnr3 = lt_lifnr3-object_instance. "建立的供應商
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
IF ls_lifnr3 IS NOT INITIAL.
ev_type = 'S'.
ev_msg = '建立成功'.
ev_lifnr = ls_lifnr3.
ENDIF.
CLEAR:ls_vmds_ei_extern.
IF ls_md017-xblck = 'X'.
CLEAR :lt_xlfas,lt_xlfb5,lt_xlfbk, lt_xlfza,l_lfb1,l_ylfb1,l_lfa1,l_ylfa1,l_lfm1,l_ylfm1.
CALL FUNCTION 'VENDOR_READ'
EXPORTING
i_bukrs = lt_bukrs
i_lifnr = ls_lifnr3
IMPORTING
e_lfa1 = l_lfa1
* E_LFB1 =
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* l_lfm1-sperm = 'X'. "選擇采購組織當機
l_lfa1-sperm = 'X'. "所有采購組織當機
l_lfa1-sperr = 'X'."所有公司當機
IF l_lfa1 IS NOT INITIAL.
CALL FUNCTION 'VENDOR_UPDATE' IN UPDATE TASK
EXPORTING
i_lfa1 = l_lfa1
i_lfb1 = l_lfb1
i_lfm1 = l_lfm1
i_ylfa1 = l_ylfa1
i_ylfb1 = l_ylfb1
i_ylfm1 = l_ylfm1
TABLES
t_xlfas = lt_xlfas
t_xlfb5 = lt_xlfb5
t_xlfbk = lt_xlfbk
t_xlfza = lt_xlfza
t_ylfas = lt_xlfas
t_ylfb5 = lt_xlfb5
t_ylfbk = lt_xlfbk
t_ylfza = lt_xlfza.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ev_type = 'S'.
ev_msg = '當機成功'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ev_type = 'E'.
ev_msg = '當機失敗'.
ENDIF.
ENDIF.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ev_type = 'E'.
lv_message = ls_message_defective-messages.
LOOP AT lv_message INTO ls_msg WHERE type = 'E' OR type = 'A'.
ev_msg = ls_msg-message.
ENDLOOP.
ENDIF.
ENDLOOP.
ELSE.
ev_type = 'E'.
ev_msg = '無資料'.
ENDIF.
IF ls_lifnr3 IS NOT INITIAL AND ev_type <> 'E'.
ev_type = 'S'.
ev_msg = '建立成功'.
ev_lifnr = ls_lifnr3.
IF iv_flag = 'I'.
lv_ztmm298-ecc_lifnr = ev_lifnr.
lv_ztmm298-s4_lifnr = ls_md017-partner.
lv_ztmm298-eccname1 = lv_name.
lv_ztmm298-s4name1 = ls_md017-name1.
lv_ztmm298-cpudt = sy-datum.
lv_ztmm298-cputm = sy-uzeit.
lv_ztmm298-usnam = sy-uname.
APPEND lv_ztmm298 TO lt_ztmm298.
CLEAR lv_ztmm298.
ENDIF.
ENDIF.
MODIFY ztmm298 FROM TABLE lt_ztmm298.
COMMIT WORK AND WAIT.
ENDFUNCTION.