REPORT zmmr084. ************************************************************************ * 功能/技術文檔:DANZ-MM-84-批導-供應商批量導入-V01 * 描述: * * 變更記錄 * * 修改日期 開發人員 請求號 描述 *----------------------------------------------------------------------* ************************************************************************ * Includes ************************************************************************ INCLUDE zmmr084_top. INCLUDE zmmr084_sel. INCLUDE zmmr084_frm. ************************************************************************ * Initialization ************************************************************************ INITIALIZATION. functxt-icon_id = icon_export. functxt-quickinfo = '模版下載'. functxt-icon_text = '模版下載'. sscrfields-functxt_01 = functxt. ************************************************************************ * at selection screen ************************************************************************ AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_flname." SEACH HELP. PERFORM frm_get_file USING p_flname. AT SELECTION-SCREEN. IF sscrfields-ucomm = 'FC01'. PERFORM frm_get_model USING 'ZMMR084.XLS'. ENDIF. ************************************************************************ * Start of Selection ************************************************************************ START-OF-SELECTION. IF p_flname IS NOT INITIAL. IF p_vendor = 'X'. g_flag = 1. PERFORM frm_alv_show ."ALV結果展示 * PERFORM frm_create_vendor."創建供應商 ELSEIF p_bukrs = 'X'. g_flag = 2. PERFORM frm_alv_show ."ALV結果展示 * PERFORM frm_add_bukrs."擴充公司代碼 ENDIF. ENDIF.
*&---------------------------------------------------------------------* *& 包含 ZMMR084_TOP *&---------------------------------------------------------------------* ************************************************************************ * tables ************************************************************************ TABLES:sscrfields. ************************************************************************ * TYPES ************************************************************************ TYPE-POOLS: slis. TYPES:BEGIN OF ty_basic_lf,"供應商創建 "一般數據 lifnr LIKE lfa1-lifnr, partn LIKE but000-partner, ktokk LIKE lfa1-ktokk, name1 LIKE lfa1-name1, sortl LIKE lfa1-sortl, stras LIKE lfa1-stras, ort01 LIKE lfa1-ort01, land1 LIKE lfa1-land1, spras LIKE lfa1-spras, telf1 LIKE lfa1-telf1, telfx LIKE lfa1-telfx, telbx LIKE lfa1-telbx, taxtype LIKE dfkkbptaxnum-taxtype, taxnumxl LIKE dfkkbptaxnum-taxnumxl, augrp LIKE but000-augrp, "權限組 "公司代碼 bukrs LIKE lfb1-bukrs, kunnr LIKE lfa1-kunnr, akont LIKE lfb1-akont, ztermb LIKE lfb1-zterm, bankl LIKE lfbk-bankl, bankn LIKE lfbk-bankn, reprf LIKE lfb1-reprf, "采購組織 ekorg LIKE lfm1-ekorg, waers LIKE lfm1-waers, ztermc LIKE lfm1-zterm, webre LIKE lfm1-webre, END OF ty_basic_lf. TYPES:BEGIN OF ty_basic_bk,"公司代碼擴充 "一般數據 lifnr LIKE lfa1-lifnr, "公司代碼 bukrs LIKE lfb1-bukrs, kunnr LIKE lfa1-kunnr, akont LIKE lfb1-akont, zterm LIKE lfb1-zterm, bankl LIKE lfbk-bankl, bankn LIKE lfbk-bankn, reprf LIKE lfb1-reprf, END OF ty_basic_bk. TYPES:BEGIN OF ty_bankdetail,"銀行數據 lifnr TYPE lifnr, banks TYPE banks, bankl TYPE bankk, bankn TYPE bankn, END OF ty_bankdetail. TYPES:BEGIN OF ty_lfb1,"公司代碼 lifnr TYPE lfb1-lifnr, bukrs TYPE lfb1-bukrs, akont TYPE lfb1-akont, zterm TYPE lfb1-zterm, zuawa TYPE lfb1-zuawa, END OF ty_lfb1. * ALV輸出 TYPES:BEGIN OF ty_vendor,"創建供應商 sel TYPE c, lifnr LIKE lfa1-lifnr, partn LIKE but000-partner, ktokk LIKE lfa1-ktokk, name1 LIKE lfa1-name1, sortl LIKE lfa1-sortl, stras LIKE lfa1-stras, ort01 LIKE lfa1-ort01, land1 LIKE lfa1-land1, spras LIKE lfa1-spras, telf1 LIKE lfa1-telf1, telfx LIKE lfa1-telfx, telbx LIKE lfa1-telbx, taxtype LIKE dfkkbptaxnum-taxtype, taxnumxl LIKE dfkkbptaxnum-taxnumxl, augrp LIKE but000-augrp, "權限組 "公司代碼 bukrs LIKE lfb1-bukrs, kunnr LIKE lfa1-kunnr, akont LIKE lfb1-akont, ztermb LIKE lfb1-zterm, bankl LIKE lfbk-bankl, bankn LIKE lfbk-bankn, reprf LIKE lfb1-reprf, "采購組織 ekorg LIKE lfm1-ekorg, waers LIKE lfm1-waers, ztermc LIKE lfm1-zterm, webre LIKE lfm1-webre, *&----------------附加數據 num(3) TYPE c, "當前行數 type(1) TYPE c, "執行結果 message(60) TYPE c, "消息 light(4) TYPE c, "執行情況(燈) END OF ty_vendor. TYPES:BEGIN OF ty_bukrs,"擴充公司代碼 sel TYPE c, "一般數據 lifnr LIKE lfa1-lifnr, "公司代碼 bukrs LIKE lfb1-bukrs, kunnr LIKE lfa1-kunnr, akont LIKE lfb1-akont, zterm LIKE lfb1-zterm, bankl LIKE lfbk-bankl, bankn LIKE lfbk-bankn, reprf LIKE lfb1-reprf, *&----------------附加數據 num(3) TYPE c, "當前行數 type(1) TYPE c, "執行結果 message(60) TYPE c, "消息 light(4) TYPE c, "執行情況(燈) END OF ty_bukrs. ************************************************************************ * internal tables ************************************************************************ DATA:gt_data TYPE STANDARD TABLE OF alsmex_tabline WITH HEADER LINE."保存EXCEL數據的內表 FIELD-SYMBOLS: <gs_itab> TYPE alsmex_tabline."同上,結構 DATA:gt_basic_lf TYPE TABLE OF ty_basic_lf, "保存EXCEL導入的原始數據,供應商創建 gs_basic_lf TYPE ty_basic_lf. DATA:gt_basic_bk TYPE TABLE OF ty_basic_bk, "保存EXCEL導入的原始數據,公司代碼擴充 gs_basic_bk TYPE ty_basic_bk. DATA functxt TYPE smp_dyntxt."下載模板按鈕要用到的結構 * ALV相關的內表和結構 DATA:gs_fieldcat TYPE slis_fieldcat_alv, gt_fieldcat TYPE slis_t_fieldcat_alv, g_layout TYPE slis_layout_alv. DATA:gt_alv_vendor TYPE TABLE OF ty_vendor, gs_alv_vendor TYPE ty_vendor. DATA:gt_alv_bukrs TYPE TABLE OF ty_bukrs, gs_alv_bukrs TYPE ty_bukrs. ************************************************************************ * internal data fields ************************************************************************ DATA g_flag TYPE i. DATA g_msg TYPE c VALUE IS INITIAL. DATA g_mode TYPE c VALUE IS INITIAL."業務邏輯判斷 DATA g_num TYPE i VALUE 0. DATA:gs_value TYPE string, "字段格式轉換時用到的變量 gs_code TYPE string. CONSTANTS:yes TYPE flag VALUE 'X', no TYPE flag VALUE space. CONSTANTS:c_insr TYPE flag VALUE 'I', c_edit TYPE flag VALUE 'U', c_del TYPE flag VALUE 'D'. * ALV常量 CONSTANTS c_cns_pf_status TYPE slis_formname VALUE 'ALV_PF_STATUS'. " ALV自定義按鈕 CONSTANTS c_cns_user_command TYPE slis_formname VALUE 'ALV_USER_COMMAND'." ALV自定義按鈕響應事件
*&---------------------------------------------------------------------* *& 包含 ZMMR084_SEL *&---------------------------------------------------------------------* ************************************************************************ * Parameters and Selection Options ************************************************************************ SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001. PARAMETERS: p_flname TYPE rlgrap-filename. SELECTION-SCREEN END OF BLOCK blk1. SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE TEXT-002. PARAMETERS p_vendor RADIOBUTTON GROUP rad1. PARAMETERS p_bukrs RADIOBUTTON GROUP rad1. SELECTION-SCREEN END OF BLOCK blk2. SELECTION-SCREEN:FUNCTION KEY 1.
*&---------------------------------------------------------------------* *& 包含 ZMMR084_FRM *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form FRM_GET_FILE *&---------------------------------------------------------------------* * 選擇要上傳的模板文件 *----------------------------------------------------------------------* * -->P_P_FLNAME text *----------------------------------------------------------------------* FORM frm_get_file USING p_flname. CALL FUNCTION 'WS_FILENAME_GET' EXPORTING mask = ',EXCEL FILE,*.XLS;*.XLSX;' mode = 'O' "S為保存,O為打開 IMPORTING filename = p_flname EXCEPTIONS inv_winsys = 1 no_batch = 2 selection_cancel = 3 selection_error = 4 OTHERS = 5. IF sy-subrc <> 0. EXIT. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CREATE_VENDOR *&---------------------------------------------------------------------* * 創建供應商 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_create_vendor . *----------------------------供應商創建-函數參數----------------------------------------* * 最外層參數 DATA:lt_extern TYPE cvis_ei_extern_t, "輸入參數 ls_extern TYPE cvis_ei_extern. DATA:lt_return TYPE bapiretm, "返回參數 ls_return TYPE bapireti, lt_omsg TYPE bapiretct, ls_omsg TYPE bapiretc. * 伙伴 DATA ls_partner TYPE bus_ei_extern. DATA:lt_addr TYPE bus_ei_bupa_address_t, "地址 ls_addr TYPE bus_ei_bupa_address. DATA:lt_smtp TYPE bus_ei_bupa_smtp_t, "電子郵件 ls_smtp TYPE bus_ei_bupa_smtp. DATA:lt_phone TYPE bus_ei_bupa_telephone_t, "電話 ls_phone TYPE bus_ei_bupa_telephone. DATA:lt_fax TYPE bus_ei_bupa_fax_t, "傳真 ls_fax TYPE bus_ei_bupa_fax. * 供應商 DATA ls_vendor TYPE vmds_ei_extern. DATA:lt_company TYPE vmds_ei_company_t, "公司視圖 ls_company TYPE vmds_ei_company. DATA:lt_bankdetail TYPE cvis_ei_bankdetail_t, "銀行信息 ls_bankdetail TYPE cvis_ei_cvi_bankdetail. DATA:lt_purchasing TYPE vmds_ei_purchasing_t, "采購視圖 ls_purchasing TYPE vmds_ei_purchasing. DATA:lt_purchasing_function TYPE vmds_ei_functions_t, "合作伙伴功能 ls_purchasing_function TYPE vmds_ei_functions. * 其它字段 "取供應商編號的類的方法的參數 cvi_mapper DATA: lt_partnerguid_list TYPE bu_partner_guid_t, ls_partnerguid_list LIKE LINE OF lt_partnerguid_list, lt_vendor_list TYPE cvis_vend_link_t, ls_vendor_list LIKE LINE OF lt_vendor_list. DATA l_bpcat TYPE c VALUE '2'."伙伴類型 DATA l_bprole1 TYPE c LENGTH 6 VALUE 'FLVN00'."伙伴角色 DATA l_bprolecat1 TYPE c LENGTH 6 VALUE 'FLVN00'."伙伴角色類型 DATA l_bprole2 TYPE c LENGTH 6 VALUE 'FLVN01'."伙伴角色 DATA l_bprolecat2 TYPE c LENGTH 6 VALUE 'FLVN01'."伙伴角色類型 DATA l_bprole3 TYPE c LENGTH 6 VALUE 'ZLVN00'."伙伴角色 DATA l_bprolecat3 TYPE c LENGTH 6 VALUE 'FLVN00'."伙伴角色類型 DATA l_bprole4 TYPE c LENGTH 6 VALUE 'ZLVN01'."伙伴角色 DATA l_bprolecat4 TYPE c LENGTH 6 VALUE 'FLVN01'."伙伴角色類型 DATA l_parvw TYPE parvw."用來保存通過函數轉換過后的合作伙伴功能字段 CONSTANTS c_parvw1 TYPE c LENGTH 2 VALUE 'OA'."合作伙伴功能 CONSTANTS c_parvw2 TYPE c LENGTH 2 VALUE 'VN'."合作伙伴功能 CONSTANTS c_parvw3 TYPE c LENGTH 2 VALUE 'PI'."合作伙伴功能 * 異常 DATA l_uuid_error TYPE REF TO cx_uuid_error."調用UUID的相關創建類時可能出現的異常 g_mode = 'I'. IF gs_basic_lf-lifnr IS INITIAL."EXCEL中沒有傳入供應商編號的情況 "新增或更新業務伙伴的標識 ls_partner-header-object_task = g_mode. "通過系統類方法生成一個16位的GUID給業務伙伴 TRY . ls_partner-header-object_instance-bpartnerguid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ). CATCH cx_uuid_error . ENDTRY. "業務伙伴類別 ls_partner-central_data-common-data-bp_control-category = l_bpcat. "簡稱(搜索項) ls_partner-central_data-common-data-bp_centraldata-searchterm1 = gs_basic_lf-sortl. ls_partner-central_data-common-data-bp_centraldata-authorizationgroup = gs_basic_lf-augrp. "供應商名稱(中文) ls_partner-central_data-common-data-bp_organization-name1 = gs_basic_lf-name1. "為業務伙伴添加角色 ls_partner-central_data-role-roles[] = VALUE #( ( task = g_mode data_key = l_bprole1 data-rolecategory = l_bprolecat1 ) ( task = g_mode data_key = l_bprole2 data-rolecategory = l_bprolecat2 ) ). "稅 IF gs_basic_lf-taxtype IS NOT INITIAL AND gs_basic_lf-taxnumxl IS NOT INITIAL. ls_partner-central_data-taxnumber-taxnumbers[] = VALUE #( ( task = g_mode data_key-taxtype = gs_basic_lf-taxtype data_key-taxnumber = gs_basic_lf-taxnumxl data_key-taxnumxl = gs_basic_lf-taxnumxl ) ). ENDIF . "銀行代碼 IF gs_basic_lf-bankl IS NOT INITIAL OR gs_basic_lf-bankn IS NOT INITIAL. ls_partner-central_data-bankdetail-bankdetails[] = VALUE #( ( task = g_mode data-bank_ctry = gs_basic_lf-land1 data-bank_key = gs_basic_lf-bankl data-bank_acct = gs_basic_lf-bankn ) ). ENDIF. * 電子郵件 ls_smtp-contact-data-e_mail = gs_basic_lf-telbx. APPEND ls_smtp TO lt_smtp. MOVE-CORRESPONDING lt_smtp TO ls_addr-data-communication-smtp-smtp. * 傳真 ls_fax-contact-data-fax = gs_basic_lf-telfx. APPEND ls_fax TO lt_fax. MOVE-CORRESPONDING lt_fax TO ls_addr-data-communication-fax-fax. * 電話 ls_phone-contact-data-telephone = gs_basic_lf-telf1. APPEND ls_phone TO lt_phone. MOVE-CORRESPONDING lt_phone TO ls_addr-data-communication-phone-phone. * 其它地址信息 "國家 ls_addr-data-postal-data-country = gs_basic_lf-land1. "語言 ls_addr-data-postal-data-langu = gs_basic_lf-spras. "城市 ls_addr-data-postal-data-city = gs_basic_lf-ort01. "地址 ls_addr-data-postal-data-street = gs_basic_lf-stras. "郵政編碼 ls_addr-data-postal-data-postl_cod1 = '000000'. APPEND ls_addr TO lt_addr. MOVE-CORRESPONDING lt_addr TO ls_partner-central_data-address-addresses. MOVE-CORRESPONDING ls_partner TO ls_extern-partner. "供應商編號,標識為創建 ls_vendor-header-object_task = g_mode. "外部界面:中心數據 ls_vendor-central_data-central-data-kunnr = gs_basic_lf-kunnr."客戶 ls_vendor-central_data-central-data-stenr = gs_basic_lf-taxnumxl."稅號 * 公司信息 ls_company-task = g_mode. ls_company-data_key-bukrs = gs_basic_lf-bukrs."公司代碼 "格式化akont輸入,在前面加夠0. PERFORM frm_format_alpha_input USING gs_basic_lf-akont. ls_company-data-akont = gs_basic_lf-akont."統馭科目 ls_company-data-zterm = gs_basic_lf-ztermb."付款條件代碼 ls_company-data-reprf = gs_basic_lf-reprf."雙重發票檢查 APPEND ls_company TO lt_company. ls_vendor-company_data-company = lt_company. * 銀行信息 * ls_bankdetail-task = g_mode. * ls_bankdetail-data_key-banks = gs_basic_lf-land1. "國家 * ls_bankdetail-data_key-bankl = gs_basic_lf-bankl. "銀行代碼 * ls_bankdetail-data_key-bankn = gs_basic_lf-bankn. "銀行帳戶 * APPEND ls_bankdetail TO lt_bankdetail. * ls_vendor-central_data-bankdetail-bankdetails = lt_bankdetail. * 采購組織 ls_purchasing-task = g_mode. ls_purchasing-data_key-ekorg = gs_basic_lf-ekorg."采購組織 ls_purchasing-data-waers = gs_basic_lf-waers."訂單貨幣 ls_purchasing-data-zterm = gs_basic_lf-ztermc."付款條件 ls_purchasing-data-webre = gs_basic_lf-webre."基於收貨的發票校驗 * 合作伙伴功能 CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw1 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. CLEAR l_parvw. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw2 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. CLEAR l_parvw. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw3 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. MOVE-CORRESPONDING lt_purchasing_function TO ls_purchasing-functions-functions. CLEAR lt_purchasing_function. APPEND ls_purchasing TO lt_purchasing. ls_vendor-purchasing_data-purchasing = lt_purchasing. MOVE-CORRESPONDING ls_vendor TO ls_extern-vendor. APPEND ls_extern TO lt_extern. CALL FUNCTION 'CVI_EI_INBOUND_MAIN' EXPORTING i_data = lt_extern IMPORTING e_return = lt_return. READ TABLE lt_return INTO ls_return INDEX 1. READ TABLE ls_return-object_msg WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. g_msg = 'E'. ELSE. READ TABLE ls_return-object_msg WITH KEY type = 'A' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. g_msg = 'E'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. g_msg = 'S'. ENDIF. ENDIF. * 根據伙伴GUID取出供應商編號 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 . ENDIF. "附加數據 gs_alv_vendor-lifnr = ls_vendor_list-vendor. gs_alv_vendor-num = g_num. gs_alv_vendor-type = g_msg. IF g_msg = 'S'. gs_alv_vendor-light = '@5B@'. CONCATENATE '供應商'gs_basic_lf-name1'創建成功' INTO gs_alv_vendor-message. ELSEIF g_msg = 'E'. gs_alv_vendor-light = '@5C@'. READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'E'. IF sy-subrc <> 0. READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'A'. ENDIF. CONCATENATE '供應商'gs_basic_lf-name1'創建失敗,原因是:'ls_omsg-message INTO gs_alv_vendor-message. ENDIF. MODIFY gt_alv_vendor FROM gs_alv_vendor. CLEAR:ls_partner,ls_smtp,ls_fax,ls_phone,ls_addr,ls_vendor,ls_company,ls_bankdetail, ls_purchasing,ls_purchasing_function,ls_extern,ls_return,ls_partnerguid_list, ls_vendor_list. REFRESH:lt_smtp,lt_fax,lt_phone,lt_addr,lt_company,lt_bankdetail,lt_purchasing,lt_purchasing_function, lt_extern,lt_return,lt_partnerguid_list,lt_vendor_list. CLEAR:l_parvw. ELSE."EXCEL中傳入了供應商編號的情況 "新增或更新業務伙伴的標識 ls_partner-header-object_task = g_mode. PERFORM frm_format_alpha_input USING gs_basic_lf-lifnr. ls_partner-header-object_instance-bpartner = gs_basic_lf-partn. "通過系統類方法生成一個16位的GUID給業務伙伴 TRY . ls_partner-header-object_instance-bpartnerguid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ). CATCH cx_uuid_error . ENDTRY. "業務伙伴類別 ls_partner-central_data-common-data-bp_control-category = l_bpcat. ls_partner-central_data-common-data-bp_control-grouping = gs_basic_lf-ktokk. "簡稱(搜索項) ls_partner-central_data-common-data-bp_centraldata-searchterm1 = gs_basic_lf-sortl. "供應商名稱(中文) ls_partner-central_data-common-data-bp_organization-name1 = gs_basic_lf-name1. "為業務伙伴添加角色 ls_partner-central_data-role-roles[] = VALUE #( ( task = g_mode data_key = l_bprole1 data-rolecategory = l_bprolecat1 ) ( task = g_mode data_key = l_bprole2 data-rolecategory = l_bprolecat2 ) ). * IF gs_basic_lf-bankl IS NOT INITIAL OR * gs_basic_lf-bankn IS NOT INITIAL. * "銀行代碼 * ls_partner-central_data-bankdetail-bankdetails[] = VALUE #( * ( task = g_mode * data-bank_ctry = gs_basic_lf-land1 * data-bank_key = gs_basic_lf-bankl * data-bank_acct = gs_basic_lf-bankn * ) * ). * ENDIF. * 電子郵件 ls_smtp-contact-data-e_mail = gs_basic_lf-telbx. APPEND ls_smtp TO lt_smtp. MOVE-CORRESPONDING lt_smtp TO ls_addr-data-communication-smtp-smtp. * 傳真 ls_fax-contact-data-fax = gs_basic_lf-telfx. APPEND ls_fax TO lt_fax. MOVE-CORRESPONDING lt_fax TO ls_addr-data-communication-fax-fax. * 電話 ls_phone-contact-data-telephone = gs_basic_lf-telf1. APPEND ls_phone TO lt_phone. MOVE-CORRESPONDING lt_phone TO ls_addr-data-communication-phone-phone. * 其它地址信息 "國家 ls_addr-data-postal-data-country = gs_basic_lf-land1. "語言 ls_addr-data-postal-data-langu = gs_basic_lf-spras. "城市 ls_addr-data-postal-data-city = gs_basic_lf-ort01. "地址 ls_addr-data-postal-data-street = gs_basic_lf-stras. "郵政編碼 ls_addr-data-postal-data-postl_cod1 = '000000'. APPEND ls_addr TO lt_addr. MOVE-CORRESPONDING lt_addr TO ls_partner-central_data-address-addresses. MOVE-CORRESPONDING ls_partner TO ls_extern-partner. * ls_extern-ensure_create-create_vendor = 'X'. "供應商編號,標識為創建 ls_vendor-header-object_task = g_mode. PERFORM frm_format_alpha_input USING gs_basic_lf-lifnr. ls_vendor-header-object_instance-lifnr = gs_basic_lf-lifnr. "外部界面:中心數據 ls_vendor-central_data-central-data-kunnr = gs_basic_lf-kunnr."客戶 ls_vendor-central_data-central-data-stenr = gs_basic_lf-taxnumxl."稅號 * ls_vendor-central_data-central-data-ktokk = gs_basic_lf-ktokk."稅號 * 公司信息 ls_company-task = g_mode. ls_company-data_key-bukrs = gs_basic_lf-bukrs."公司代碼 "格式化akont輸入,在前面加夠0. PERFORM frm_format_alpha_input USING gs_basic_lf-akont. ls_company-data-akont = gs_basic_lf-akont."統馭科目 ls_company-data-zterm = gs_basic_lf-ztermb."付款條件代碼 ls_company-data-reprf = gs_basic_lf-reprf."雙重發票檢查 APPEND ls_company TO lt_company. ls_vendor-company_data-company = lt_company. * 銀行信息 * ls_bankdetail-task = g_mode. * ls_bankdetail-data_key-banks = gs_basic_lf-land1. "國家 * ls_bankdetail-data_key-bankl = gs_basic_lf-bankl. "銀行代碼 * ls_bankdetail-data_key-bankn = gs_basic_lf-bankn. "銀行帳戶 * APPEND ls_bankdetail TO lt_bankdetail. * ls_vendor-central_data-bankdetail-bankdetails = lt_bankdetail. * 采購組織 ls_purchasing-task = g_mode. ls_purchasing-data_key-ekorg = gs_basic_lf-ekorg."采購組織 ls_purchasing-data-waers = gs_basic_lf-waers."訂單貨幣 ls_purchasing-data-zterm = gs_basic_lf-ztermc."付款條件 ls_purchasing-data-webre = gs_basic_lf-webre."基於收貨的發票校驗 * 合作伙伴功能 CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw1 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. CLEAR l_parvw. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw2 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. CLEAR l_parvw. CALL FUNCTION 'CONVERSION_EXIT_PARVW_INPUT' EXPORTING input = c_parvw3 IMPORTING output = l_parvw. ls_purchasing_function-task = g_mode. ls_purchasing_function-data_key-parvw = l_parvw. APPEND ls_purchasing_function TO lt_purchasing_function. MOVE-CORRESPONDING lt_purchasing_function TO ls_purchasing-functions-functions. CLEAR lt_purchasing_function. APPEND ls_purchasing TO lt_purchasing. ls_vendor-purchasing_data-purchasing = lt_purchasing. MOVE-CORRESPONDING ls_vendor TO ls_extern-vendor. APPEND ls_extern TO lt_extern. CALL FUNCTION 'CVI_EI_INBOUND_MAIN' EXPORTING i_data = lt_extern IMPORTING e_return = lt_return. READ TABLE lt_return INTO ls_return INDEX 1. READ TABLE ls_return-object_msg WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. g_msg = 'E'. ELSE. READ TABLE ls_return-object_msg WITH KEY type = 'A' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. g_msg = 'E'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. g_msg = 'S'. ENDIF. ENDIF. "附加數據 gs_alv_vendor-lifnr = gs_basic_lf-lifnr. gs_alv_vendor-num = g_num. gs_alv_vendor-type = g_msg. IF g_msg = 'S'. gs_alv_vendor-light = '@5B@'. CONCATENATE '供應商'gs_basic_lf-name1'創建成功' INTO gs_alv_vendor-message. ELSEIF g_msg = 'E'. gs_alv_vendor-light = '@5C@'. READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'E'. IF sy-subrc <> 0. READ TABLE ls_return-object_msg INTO ls_omsg WITH KEY type = 'A'. ENDIF. CONCATENATE '供應商'gs_basic_lf-name1'創建失敗,原因是:'ls_omsg-message INTO gs_alv_vendor-message. ENDIF. MODIFY gt_alv_vendor FROM gs_alv_vendor. CLEAR:ls_partner,ls_smtp,ls_fax,ls_phone,ls_addr,ls_vendor,ls_company,ls_bankdetail, ls_purchasing,ls_purchasing_function,ls_extern,ls_return. REFRESH:lt_smtp,lt_fax,lt_phone,lt_addr,lt_company,lt_bankdetail,lt_purchasing,lt_purchasing_function, lt_extern,lt_return. CLEAR:l_parvw. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_ADD_BUKRS *&---------------------------------------------------------------------* * 擴充公司代碼 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_add_bukrs . *-------------------------------公司代碼擴充-函數參數-------------------------------------* * 中間處理時用到的參數 DATA:lt_bankdetail2 TYPE TABLE OF ty_bankdetail, "從數據表里取出的銀行數據 ls_bankdetail2 TYPE ty_bankdetail, ls_bankdetail2_1 TYPE ty_bankdetail. DATA:lt_bankdetail4 TYPE TABLE OF ty_bankdetail, "從數據表里取出的銀行數據 ls_bankdetail4 TYPE ty_bankdetail. DATA:lt_lfb1 TYPE TABLE OF ty_lfb1, "從數據表中取出的公司代碼數據 ls_lfb1 TYPE ty_lfb1. * 調用類需要的參數 DATA ls_master_data TYPE vmds_ei_main. "最外層參數 DATA:lt_vendor2 TYPE vmds_ei_extern_t, ls_vendor2 TYPE vmds_ei_extern. DATA:lt_bankdetail3 TYPE cvis_ei_bankdetail_t, "銀行數據 ls_bankdetail3 TYPE cvis_ei_cvi_bankdetail. DATA:lt_company2 TYPE vmds_ei_company_t, ls_company2 TYPE vmds_ei_company. DATA:ls_return_message TYPE cvis_message, lt_message TYPE bapiret2_t, ls_message TYPE bapiret2. DATA:ls_return_data TYPE vmds_ei_main, "返回的供應商數據 lt_return_vendors TYPE vmds_ei_extern_t, "返回的供應商編號 ls_return_verdors LIKE LINE OF lt_return_vendors. * 其它字段 DATA l_ifbukrs TYPE c. "判斷是否供應商創建過視圖 DATA l_land1 TYPE c LENGTH 2 VALUE 'CN'."默認國家 DATA l_lifnr TYPE lifnr VALUE 0. "返回的供應商編號 g_mode = 'U'. * 查出所有的銀行信息 SELECT lifnr "供應商或債權人的帳號 banks "銀行國家代碼 bankl "銀行代碼 bankn "銀行帳戶號碼 FROM lfbk INTO CORRESPONDING FIELDS OF TABLE lt_bankdetail2. SORT lt_bankdetail2 BY lifnr. * 查出所有公司代碼數據 SELECT lifnr bukrs akont zterm zuawa INTO CORRESPONDING FIELDS OF TABLE lt_lfb1 FROM lfb1. SORT lt_lfb1 BY lifnr bukrs. PERFORM frm_format_alpha_input USING gs_basic_bk-lifnr."添加前導零 * 找出對應供應商編號的銀行代碼數據 READ TABLE lt_bankdetail2 INTO ls_bankdetail2 WITH KEY lifnr = gs_basic_bk-lifnr BINARY SEARCH. IF sy-subrc = 0. LOOP AT lt_bankdetail2 INTO ls_bankdetail2_1 FROM sy-tabix . IF ls_bankdetail2_1-lifnr = ls_bankdetail2-lifnr. MOVE-CORRESPONDING ls_bankdetail2_1 TO ls_bankdetail4. APPEND ls_bankdetail4 TO lt_bankdetail4. ELSE. EXIT. ENDIF. CLEAR:ls_bankdetail4,ls_bankdetail2_1. ENDLOOP. ENDIF. "查找了LFB1中是否存在公司,即該供應商是否之前創建公司視圖 READ TABLE lt_lfb1 WITH KEY lifnr = gs_basic_bk-lifnr bukrs = gs_basic_bk-bukrs TRANSPORTING NO FIELDS . IF sy-subrc = 0. CLEAR l_ifbukrs. l_ifbukrs = yes."之前有創建過當前傳入的公司代碼數據 ENDIF. * 銀行數據 "將傳入的銀行數據和根據供應商查找到的數據進行比對,如果相同,則將查找到的內表數據打上刪除標記 LOOP AT lt_bankdetail4 INTO ls_bankdetail4 WHERE bankl = gs_basic_bk-bankl AND bankn = gs_basic_bk-bankn. ls_bankdetail3-task = c_del. " 打上刪除標記 ls_bankdetail3-data_key-banks = ls_bankdetail4-banks. "國家 ls_bankdetail3-data_key-bankl = ls_bankdetail4-bankl. "銀行代碼 ls_bankdetail3-data_key-bankn = ls_bankdetail4-bankn. "銀行帳戶 APPEND ls_bankdetail3 TO lt_bankdetail3. CLEAR:ls_bankdetail3,ls_bankdetail4. ENDLOOP. * 客戶通用數據 ls_vendor2-header-object_task = g_mode."更新標識 ls_vendor2-header-object_instance-lifnr = gs_basic_bk-lifnr."供應商編號 ls_vendor2-central_data-central-data-kunnr = gs_basic_bk-kunnr."客戶 ls_vendor2-central_data-central-datax-kunnr = yes. * 公司代碼數據 "如果之前已經創建了公司視圖的話,就對其進行修改,否則對其進行新建 IF l_ifbukrs = yes. ls_company2-task = c_edit. "如果傳入的公司存在,則進行修改 ELSE. ls_company2-task = c_insr. "如果一個供應商沒有公司視圖,則進行新建公司視圖 ENDIF. ls_company2-data_key-bukrs = gs_basic_bk-bukrs."公司代碼 ls_company2-data-akont = gs_basic_bk-akont. "統馭科目 ls_company2-data-zterm = gs_basic_bk-zterm. "付款條件代碼 ls_company2-data-reprf = gs_basic_bk-reprf. "付款條件代碼 ls_company2-datax-akont = yes. ls_company2-datax-zterm = yes. ls_company2-datax-reprf = yes. APPEND ls_company2 TO lt_company2. ls_vendor2-company_data-company = lt_company2. "此時再將傳入的數據導入系統中進行賦值 ls_bankdetail3-task = c_insr. ls_bankdetail3-data_key-banks = l_land1."國家 ls_bankdetail3-data_key-bankl = gs_basic_bk-bankl."銀行代碼 ls_bankdetail3-data_key-bankn = gs_basic_bk-bankn."銀行帳戶 = 合作銀行類型 APPEND ls_bankdetail3 TO lt_bankdetail3. CLEAR ls_bankdetail3. IF gs_basic_bk-bankl IS NOT INITIAL OR gs_basic_bk-bankn IS NOT INITIAL. "這2個值有其中一個不為空時才加入銀行數據 ls_vendor2-central_data-bankdetail-bankdetails = lt_bankdetail3."銀行明細 ENDIF. *將整理好的數據添加到供應商主數據中 APPEND ls_vendor2 TO lt_vendor2. ls_master_data-vendors = lt_vendor2. CALL METHOD vmd_ei_api=>maintain_bapi EXPORTING is_master_data = ls_master_data IMPORTING es_message_defective = ls_return_message "錯誤消息 es_master_data_correct = ls_return_data. "創建成功返回的供應商數據 lt_message = ls_return_message-messages. lt_return_vendors = ls_return_data-vendors. READ TABLE lt_return_vendors INTO ls_return_verdors INDEX 1. IF sy-subrc = 0 . WRITE ls_return_verdors-header-object_instance TO l_lifnr."讀取供應商編號 ENDIF. IF lt_message IS INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. g_msg = 'S'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. g_msg = 'E'. ENDIF. "附加數據 gs_alv_bukrs-num = g_num. gs_alv_bukrs-type = g_msg. IF g_msg = 'S'. gs_alv_bukrs-light = '@5B@'. CONCATENATE '供應商'gs_basic_bk-lifnr'擴充公司代碼成功' INTO gs_alv_bukrs-message. ELSEIF g_msg = 'E'. gs_alv_bukrs-light = '@5C@'. CONCATENATE '供應商'gs_basic_bk-lifnr'擴充公司代碼失敗' INTO gs_alv_bukrs-message. ENDIF. MODIFY gt_alv_bukrs FROM gs_alv_bukrs. CLEAR:ls_bankdetail2,ls_bankdetail3,ls_vendor2,ls_company2,ls_master_data,ls_return_message, ls_return_data,ls_return_verdors. REFRESH:lt_bankdetail3,lt_company2,lt_vendor2,lt_message,lt_return_vendors,lt_bankdetail2, lt_lfb1. CLEAR:l_ifbukrs,l_lifnr. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_MODEL *&---------------------------------------------------------------------* * 下載模板 *----------------------------------------------------------------------* * -->P_0146 text *----------------------------------------------------------------------* FORM frm_get_model USING p_objid TYPE wwwdata-objid. DATA: l_objdata LIKE wwwdatatab, l_destination LIKE rlgrap-filename, l_rc LIKE sy-subrc, l_errtxt TYPE string. DATA: l_fullpath TYPE string, l_extension TYPE string, l_fname LIKE rlgrap-filename, l_formkey LIKE wwwdatatab. l_extension = p_objid. PERFORM get_file_name USING '.xls' 'Excel|*.xls;' CHANGING l_fullpath. IF l_fullpath = space. MESSAGE '請選擇下載文件名' TYPE 'E'. ELSE. CONCATENATE l_fullpath '' INTO l_fname. SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF l_objdata WHERE relid = 'MI' AND objid = p_objid . IF sy-subrc NE 0 OR l_objdata-objid = space. MESSAGE e001(00) WITH '文件不存在!'. ELSE. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = l_objdata destination = l_fname IMPORTING rc = l_rc CHANGING temp = l_fname. IF l_rc NE 0. MESSAGE e001(00) WITH '文件下載失敗!'. ENDIF. ENDIF. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form GET_FILE_NAME *&---------------------------------------------------------------------* * 獲取要下載的文件名字 *----------------------------------------------------------------------* * -->P_0274 text * -->P_0275 text * <--P_L_FULLPATH text *----------------------------------------------------------------------* FORM get_file_name USING p_extension p_file_filter CHANGING p_fullpath. DATA: l_filename TYPE string, l_path TYPE string, l_fullpath TYPE string, l_titile TYPE string, l_init_dir TYPE string. CLEAR p_fullpath. l_titile = TEXT-t04. l_init_dir = TEXT-t03. CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = l_titile default_extension = '.xls' initial_directory = l_init_dir prompt_on_overwrite = 'X' file_filter = p_file_filter CHANGING filename = l_filename path = l_path fullpath = l_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. p_fullpath = l_fullpath. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_FORMAT_ALPHA_INPUT *&---------------------------------------------------------------------* * 添加前導零 *----------------------------------------------------------------------* * -->P_IM_S_GENERAL_LIFNR text *----------------------------------------------------------------------* FORM frm_format_alpha_input USING p1. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = p1 IMPORTING output = p1. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_ALV_SHOW *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_G_flag text *----------------------------------------------------------------------* FORM frm_alv_show . PERFORM frm_get_data."數據獲取 PERFORM frm_layout_build." 設置表格樣式 PERFORM frm_field_build. " 建立表頭數據 PERFORM frm_data_out."輸出 ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* * 往ALV輸出內表里填值 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_get_data . IF g_flag = 1. CALL FUNCTION 'ZXXX001' EXPORTING filename = p_flname i_begin_col = '1' "起始列號 i_begin_row = '3' "起始行號 i_end_col = '26' "終止列號 i_end_row = '65535' "終止行號 im_sheet_name = 1 TABLES intern = gt_data[] EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF gt_data[] IS INITIAL. MESSAGE '清單中無數據' TYPE 'E'. ENDIF. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *格式轉化 LOOP AT gt_data ASSIGNING <gs_itab>. CASE <gs_itab>-col. WHEN '0001'. gs_alv_vendor-lifnr = <gs_itab>-value."供應商編號 WHEN '0002'. gs_alv_vendor-partn = <gs_itab>-value."供應商賬戶組 WHEN '0003'. gs_alv_vendor-ktokk = <gs_itab>-value."供應商賬戶組 WHEN '0004'. gs_alv_vendor-name1 = <gs_itab>-value."供應商名稱 WHEN '0005'. gs_alv_vendor-sortl = <gs_itab>-value."簡稱(搜索項) WHEN '0006'. gs_alv_vendor-stras = <gs_itab>-value."地址(中) WHEN '0007'. gs_alv_vendor-ort01 = <gs_itab>-value."城市 WHEN '0008'. gs_alv_vendor-land1 = <gs_itab>-value."國家 WHEN '0009'. gs_alv_vendor-spras = <gs_itab>-value."語言 WHEN '0010'. gs_alv_vendor-telf1 = <gs_itab>-value."電話 WHEN '0011'. gs_alv_vendor-telfx = <gs_itab>-value."傳真 WHEN '0012'. gs_alv_vendor-telbx = <gs_itab>-value."郵箱地址 WHEN '0013'. gs_alv_vendor-taxtype = <gs_itab>-value."稅類別 WHEN '0014'. gs_alv_vendor-taxnumxl = <gs_itab>-value."稅號 WHEN '0015'. gs_alv_vendor-augrp = <gs_itab>-value."權限組 WHEN '0016'. gs_alv_vendor-bukrs = <gs_itab>-value."公司代碼 WHEN '0017'. gs_alv_vendor-kunnr = <gs_itab>-value."客戶 WHEN '0018'. gs_alv_vendor-akont = <gs_itab>-value."統馭科目 WHEN '0019'. gs_alv_vendor-ztermb = <gs_itab>-value."付款條件 WHEN '0020'. gs_alv_vendor-bankl = <gs_itab>-value."銀行代碼 WHEN '0021'. gs_alv_vendor-bankn = <gs_itab>-value."銀行帳號 WHEN '0022'. gs_alv_vendor-reprf = <gs_itab>-value."雙重發票檢查 WHEN '0023'. gs_alv_vendor-ekorg = <gs_itab>-value."采購組織 WHEN '0024'. gs_alv_vendor-waers = <gs_itab>-value."訂單貨幣 WHEN '0025'. gs_alv_vendor-ztermc = <gs_itab>-value."付款條件 WHEN '0026'. gs_alv_vendor-webre = <gs_itab>-value."基於收貨的發票校驗 ENDCASE. AT END OF row. "權限檢查 AUTHORITY-CHECK OBJECT 'ZBUKRS' ID 'BUKRS' FIELD gs_alv_vendor-bukrs. IF sy-subrc <> 0. MESSAGE ID 'ZMM001' TYPE 'E' NUMBER '19' WITH gs_alv_vendor-bukrs. ENDIF. AUTHORITY-CHECK OBJECT 'ZAUGRP' ID 'AUGRP' FIELD gs_alv_vendor-augrp. IF sy-subrc <> 0. MESSAGE ID 'ZMM001' TYPE 'E' NUMBER '20' WITH gs_alv_vendor-augrp. ENDIF. APPEND gs_alv_vendor TO gt_alv_vendor. CLEAR gs_alv_vendor. ENDAT. ENDLOOP. ELSEIF g_flag = 2. CALL FUNCTION 'ZXXX001' EXPORTING filename = p_flname i_begin_col = '1' "起始列號 i_begin_row = '3' "起始行號 i_end_col = '8' "終止列號 i_end_row = '65535' "終止行號 im_sheet_name = 2 TABLES intern = gt_data[] EXCEPTIONS inconsistent_parameters = 1 upload_ole = 2 OTHERS = 3. IF gt_data[] IS INITIAL. MESSAGE '清單中無數據' TYPE 'E'. ENDIF. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *格式轉化 LOOP AT gt_data ASSIGNING <gs_itab>. CASE <gs_itab>-col. WHEN '0001'. gs_alv_bukrs-lifnr = <gs_itab>-value."供應商編號 WHEN '0002'. gs_alv_bukrs-bukrs = <gs_itab>-value."公司代碼 WHEN '0003'. gs_alv_bukrs-kunnr = <gs_itab>-value."客戶 WHEN '0004'. gs_alv_bukrs-akont = <gs_itab>-value."統馭科目 WHEN '0005'. gs_alv_bukrs-zterm = <gs_itab>-value."付款條件 WHEN '0006'. gs_alv_bukrs-bankl = <gs_itab>-value."銀行代碼 WHEN '0007'. gs_alv_bukrs-bankn = <gs_itab>-value."銀行帳號 WHEN '0008'. gs_alv_bukrs-reprf = <gs_itab>-value."雙重發票檢查 ENDCASE. AT END OF row. APPEND gs_alv_bukrs TO gt_alv_bukrs. CLEAR gs_alv_bukrs. ENDAT. ENDLOOP. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_LAYOUT_BUILD *&---------------------------------------------------------------------* * " 設置表格樣式 *----------------------------------------------------------------------* FORM frm_layout_build . g_layout-box_fieldname = 'SEL'. " 選擇模式,在最左端有選擇按鈕 g_layout-colwidth_optimize = 'X'. " 自動調整列寬 g_layout-zebra = 'X'. " 表格斑馬線 ENDFORM. "frm_layout_build *&---------------------------------------------------------------------* *& Form FRM_FIELD_BUILD *&---------------------------------------------------------------------* * " 建立表頭數據 *----------------------------------------------------------------------* FORM frm_field_build . IF g_flag = 1. "一般數據 * PERFORM field_set USING 'SEL' '' '' '15' '' '' . PERFORM field_set USING 'LIFNR' '供應商號' '供應商號' '15' '' '' . PERFORM field_set USING 'KTOKK' '供應商賬戶組' '供應商賬戶組' '15' '' '' . PERFORM field_set USING 'NAME1' '供應商名稱(中文)' '供應商名稱(中文)' '15' '' '' . PERFORM field_set USING 'SORTL' '簡稱(搜索項)' '簡稱(搜索項)' '15' '' '' . PERFORM field_set USING 'STRAS' '地址(中)' '地址(中)' '15' '' '' . PERFORM field_set USING 'ORT01' '城市' '城市' '15' '' '' . PERFORM field_set USING 'LAND1' '國家' '國家' '15' '' '' . PERFORM field_set USING 'SPRAS' '語言' '語言' '15' '' '' . PERFORM field_set USING 'TELF1' '電話' '電話' '15' '' '' . PERFORM field_set USING 'TELFX' '傳真' '傳真' '15' '' '' . PERFORM field_set USING 'TELBX' '郵箱地址' '郵箱地址' '15' '' '' . PERFORM field_set USING 'TAXTYPE' '稅類別' '稅類別' '15' '' '' . PERFORM field_set USING 'TAXNUMXL' '稅號' '稅號' '15' '' '' . PERFORM field_set USING 'AUGRP' '權限組' '權限組' '15' '' '' . "公司代碼 PERFORM field_set USING 'BUKRS' '公司代碼' '公司代碼' '15' '' '' . PERFORM field_set USING 'KUNNR' '客戶' '客戶' '15' '' '' . PERFORM field_set USING 'AKONT' '統馭科目' '統馭科目' '15' '' '' . PERFORM field_set USING 'ZTERMB' '付款條件' '付款條件' '15' '' '' . PERFORM field_set USING 'BANKL' '銀行代碼' '銀行代碼' '15' '' '' . PERFORM field_set USING 'BANKN' '銀行帳號' '銀行帳號' '15' '' '' . PERFORM field_set USING 'REPRF' '雙重發票檢查' '雙重發票檢查' '15' '' '' . "采購組織 PERFORM field_set USING 'EKORG' '采購組織' '采購組織' '15' '' '' . PERFORM field_set USING 'WAERS' '訂單貨幣' '訂單貨幣' '15' '' '' . PERFORM field_set USING 'ZTERMC' '付款條件' '付款條件' '15' '' '' . PERFORM field_set USING 'WEBRE' '基於收貨的發票校驗' '基於收貨的發票校驗' '15' '' '' . "附加數據 PERFORM field_set USING 'NUM' '當前行數' '當前行數' '15' '' '' . PERFORM field_set USING 'TYPE' '執行結果' '執行結果' '15' '' '' . PERFORM field_set USING 'MESSAGE' '返回消息' '返回消息' '15' '' '' . PERFORM field_set USING 'LIGHT' '執行情況' '執行情況' '15' '' '' . ELSEIF g_flag = 2. "一般數據 * PERFORM field_set USING 'SEL' '' '' '15' '' '' . PERFORM field_set USING 'LIFNR' '供應商號' '供應商號' '15' '' '' . "公司代碼 PERFORM field_set USING 'BUKRS' '公司代碼' '公司代碼' '15' '' '' . PERFORM field_set USING 'KUNNR' '客戶' '客戶' '15' '' '' . PERFORM field_set USING 'AKONT' '統馭科目' '統馭科目' '15' '' '' . PERFORM field_set USING 'ZTERM' '付款條件' '付款條件' '15' '' '' . PERFORM field_set USING 'BANKL' '銀行代碼' '銀行代碼' '15' '' '' . PERFORM field_set USING 'BANKN' '銀行帳號' '銀行帳號' '15' '' '' . PERFORM field_set USING 'REPRF' '雙重發票檢查' '雙重發票檢查' '15' '' '' . "附加數據 PERFORM field_set USING 'NUM' '當前行數' '當前行數' '15' '' '' . PERFORM field_set USING 'TYPE' '執行結果' '執行結果' '15' '' '' . PERFORM field_set USING 'MESSAGE' '返回消息' '返回消息' '15' '' '' . PERFORM field_set USING 'LIGHT' '執行情況' '執行情況' '15' '' '' . ENDIF. ENDFORM. "frm_field_build *&---------------------------------------------------------------------* *& Form FRM_DATA_OUT *&---------------------------------------------------------------------* * 輸出數據 *----------------------------------------------------------------------* FORM frm_data_out . IF g_flag = 1. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = c_cns_pf_status i_callback_user_command = c_cns_user_command is_layout = g_layout it_fieldcat = gt_fieldcat i_save = 'X' TABLES t_outtab = gt_alv_vendor EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ELSEIF g_flag = 2. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = c_cns_pf_status i_callback_user_command = c_cns_user_command is_layout = g_layout it_fieldcat = gt_fieldcat i_save = 'X' TABLES t_outtab = gt_alv_bukrs EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDIF. ENDFORM. "frm_data_out *&---------------------------------------------------------------------* *& Form FIELD_SET *&---------------------------------------------------------------------* FORM field_set USING p_fieldname p_seltext_l p_seltext_s p_outputlen p_ref_fieldname p_ref_tabname . IF p_fieldname = 'MESSAGE'. gs_fieldcat-key = 'X'. ELSEIF p_fieldname = 'TYPE'. gs_fieldcat-key = 'X'. ELSEIF p_fieldname = 'NUM'. gs_fieldcat-key = 'X'. ELSEIF p_fieldname = 'LIGHT'. gs_fieldcat-key = 'X'. ENDIF. gs_fieldcat-fieldname = p_fieldname . gs_fieldcat-seltext_l = p_seltext_l . gs_fieldcat-seltext_s = p_seltext_s . gs_fieldcat-outputlen = p_outputlen . gs_fieldcat-ref_fieldname = p_ref_fieldname. gs_fieldcat-ref_tabname = p_ref_tabname. APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat. ENDFORM. "field_set *&------------------------------------------------------------------- * 添加按鈕,雙擊下面的 STANDARD_FULLSCREEN *-------------------------------------------------------------------- FORM alv_pf_status USING ut_extab TYPE slis_t_extab. SET PF-STATUS 'STANDARD_FULLSCREEN' EXCLUDING ut_extab. ENDFORM. "ALV_PF_STATUS *-------------------------------------------------------------------- * 自定義事件、雙擊事件 *-------------------------------------------------------------------- FORM alv_user_command USING u_ucomm LIKE sy-ucomm us_selfield TYPE slis_selfield. DATA:l_index TYPE sy-tabix. CASE u_ucomm. WHEN 'SAVE'."保存數據到數據表 * PERFORM F_REFRESH_ALV. "刷新ALV,下面有說明 PERFORM frm_create. * WHEN '&IC1'."雙擊 ** 獲取當前ALV所在行數據 * READ TABLE IT_GW INDEX RS_SELFIELD-TABINDEX. * SET PARAMETER ID: 'ANR' FIELD IT_GW-AUFNR. * CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN. ENDCASE. us_selfield-refresh = 'X'. ENDFORM. "ALV_USER_COMMAND *&---------------------------------------------------------------------* *& Form FRM_PRINT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_create . IF g_flag = 1." 供應商創建 LOOP AT gt_alv_vendor INTO gs_alv_vendor. g_num = g_num + 1. MOVE-CORRESPONDING gs_alv_vendor TO gs_basic_lf. PERFORM frm_create_vendor. CLEAR:gs_alv_vendor,gs_basic_lf. ENDLOOP. ELSEIF g_flag = 2."公司代碼擴充 LOOP AT gt_alv_bukrs INTO gs_alv_bukrs. g_num = g_num + 1. MOVE-CORRESPONDING gs_alv_bukrs TO gs_basic_bk. PERFORM frm_add_bukrs. CLEAR:gs_alv_bukrs,gs_basic_bk. ENDLOOP. ENDIF. CLEAR g_num. ENDFORM. " FRM_CREATE FORM sub_auth_chk. ENDFORM.