採購資訊記錄批導完美版
*&---------------------------------------------------------------------*
*& Report ZMMR036
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMMR036B.
INCLUDE ZMMR036B_TOP.
*INCLUDE ZMMR036_top.
INCLUDE ZMMR036B_SCR.
*INCLUDE ZMMR036_scr.
INCLUDE ZMMR036B_FRM.
*INCLUDE ZMMR036_frm.
INITIALIZATION.
"下載模板按鈕
* 工具欄新增下載模板按鈕
CLEAR g_function_key.
g_function_key-icon_id = icon_read_file.
g_function_key-icon_text = '供應商匯入模版下載'.
g_function_key-quickinfo = '供應商匯入模版下載'.
sscrfields-functxt_01 = g_function_key.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT *
*----------------------------------------------------------------------*
*顯示註釋
AT SELECTION-SCREEN OUTPUT.
* MOVE '1、請選擇正確的模板填寫資料' TO T1.
* MOVE '1、請嚴格按照模板要求填寫資料' TO t2.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
* 下載資料匯入模板
IF sscrfields-ucomm = 'FC01'.
PERFORM frm_excel_down.
sscrfields-ucomm = ''.
ENDIF.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* 選擇檔案搜尋幫助
PERFORM frm_set_file_f4 USING p_file.
START-OF-SELECTION.
* 檔案必輸校驗
PERFORM frm_file_obligatory.
* 批量匯入資料
if r_1 eq 'X' .
PERFORM frm_upload_data. "模版階梯縱向
ENDIF .
IF R_2 EQ 'X' .
PERFORM frm_upload_data2. "模版階梯橫向
ENDIF .
END-OF-SELECTION.
* alv顯示
* PERFORM frm_display_data.
perform frm_display_alv2 .
*&---------------------------------------------------------------------*
*& 包含 ZMMR036_TOP
*&---------------------------------------------------------------------*
TABLES sscrfields.
INCLUDE <list>.
INCLUDE <icon>.
DATA: g_function_key TYPE smp_dyntxt . "功能按鈕
DATA: lv_msg TYPE string.
DATA: gs_bdcdata LIKE bdcdata,
gs_messtab LIKE bdcmsgcoll.
DATA: gt_bdcdata LIKE TABLE OF bdcdata. "OCCURS 0 WITH HEADER LINE.
DATA: gwa_messtab LIKE bdcmsgcoll.
DATA: gt_messtab LIKE TABLE OF bdcmsgcoll." O
DATA: l_option TYPE ctu_params.
DATA: wa_eina TYPE eina,
wa_eine TYPE eine,
wa_eina_new TYPE eina,
wa_eine_new TYPE eine.
DATA: it_head TYPE STANDARD TABLE OF mestxh,
it_line TYPE STANDARD TABLE OF mestxl.
DATA: it_eina TYPE STANDARD TABLE OF eina WITH HEADER LINE,
it_eine TYPE STANDARD TABLE OF eine.
DATA: return TYPE STANDARD TABLE OF bapireturn WITH HEADER LINE.
DATA: l_netpr LIKE ekpo-netpr.
DATA: l_komv TYPE komv,
l_ekpo TYPE ekpo.
DATA: BEGIN OF gs_alv ,
matnr LIKE eina-matnr, "物料
lifnr LIKE eina-lifnr, " 供應商編號
vkorg LIKE eine-ekorg, "採購組織
werks LIKE eine-werks, " 工廠
* netpr LIKE eine-netpr," 淨價
netpr TYPE string,
mwskz LIKE eine-mwskz , "稅率
* peinh LIKE eine-peinh, " 價格單位
peinh TYPE string, " 價格單位
waers LIKE eine-waers , "幣種
* lifab LIKE wa_eina-lifab , "
* lifbi LIKE wa_eina-lifbi , "
lifab TYPE string , "
lifbi TYPE string , "
kstbm LIKE konm-kstbm , "等級
kbetr LIKE konm-kbetr , "等級價格
p TYPE c,
w TYPE c,
mark TYPE c,
light(4),
result TYPE c LENGTH 100,
END OF gs_alv .
DATA : gt_alv LIKE TABLE OF gs_alv .
DATA: gt_fieldcat TYPE TABLE OF slis_fieldcat_alv.
DATA: gs_fieldcat TYPE slis_fieldcat_alv.
DATA: gs_layout TYPE slis_layout_alv .
DATA: gv_c TYPE c ."有效期重疊控制
DATA: ls_alv LIKE gs_alv .
DATA: lt_alv LIKE TABLE OF gs_alv .
DATA: ls_alv2 LIKE gs_alv .
DATA: lt_alv2 LIKE TABLE OF gs_alv .
*&---------------------------------------------------------------------*
*& 包含 ZMMR036_SCR
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk02 WITH FRAME TITLE TEXT-005.
PARAMETERS p_file LIKE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK blk02.
*SELECTION-SCREEN BEGIN OF BLOCK blk03 WITH FRAME TITLE TEXT-006.
PARAMETERS : r_1 RADIOBUTTON GROUP g1 .
PARAMETERS : r_2 RADIOBUTTON GROUP g1 DEFAULT 'X' .
*SELECTION-SCREEN BEGIN OF BLOCK blk03 WITH FRAME TITLE TEXT-006.
PARAMETERS : r_3 RADIOBUTTON GROUP g2 .
PARAMETERS : r_4 RADIOBUTTON GROUP g2 .
PARAMETERS : cb_1 AS CHECKBOX .
*PARAMETERS : cb_2 AS CHECKBOX .
*&---------------------------------------------------------------------*
*& 包含 ZMMR036_FRM
*&---------------------------------------------------------------------*
FORM frm_file_obligatory .
IF p_file IS INITIAL.
MESSAGE '請選擇匯入的檔案' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
* 區域性變數的定義
DATA:lt_excel TYPE TABLE OF alsmex_tabline. "參照型別有標準的調整為ZALSMEX_TABLINE_LINE。
DATA: ls_excel TYPE alsmex_tabline.
*** IF RB1 = 'X'.
CLEAR gt_alv.
* 選擇檔案後做後續處理
CHECK p_file IS NOT INITIAL.
* 把檔案的資料變成內表
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 16
i_end_row = 5000
"SHEET_NAME = '新增修改擴充套件'
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
* 處理內表資料
CLEAR ls_excel.
LOOP AT lt_excel INTO ls_excel.
CASE ls_excel-col.
WHEN 1.
gs_alv-lifnr = ls_excel-value."供應商程式碼 (4)
WHEN 3.
gs_alv-matnr = ls_excel-value."物料程式碼(4)
WHEN 5.
gs_alv-vkorg = ls_excel-value."採購組織(4)
WHEN 6.
gs_alv-werks = ls_excel-value."工廠 (4)
WHEN 7.
gs_alv-netpr = ls_excel-value."淨價 (4)
WHEN 8.
gs_alv-waers = ls_excel-value."幣種(4)WHEN 1.
WHEN 9.
gs_alv-peinh = ls_excel-value."價格係數(4)WHEN 1.
WHEN 10.
gs_alv-mwskz = ls_excel-value."稅碼(4)WHEN 1.
WHEN 11.
gs_alv-lifab = ls_excel-value."有效開始日期 (4)WHEN 1.
WHEN 12.
gs_alv-lifbi = ls_excel-value."有效結束日期 (4)WHEN 1.
WHEN 13.
gs_alv-p = ls_excel-value."採購
WHEN 14.
gs_alv-w = ls_excel-value."委外
WHEN 15.
gs_alv-kstbm = ls_excel-value."階梯數量
WHEN 16.
gs_alv-kbetr = ls_excel-value."階梯價
ENDCASE.
AT END OF row.
APPEND gs_alv TO gt_alv.
CLEAR gs_alv.
ENDAT.
ENDLOOP .
* 下面是供應商匯入程式
* LOOP AT lt_excel INTO ls_excel.
* CASE ls_excel-col.
* WHEN 1.
* gs_alv-partner = ls_excel-value."SAP 供應商號碼 (10)
* IF gs_alv-partner IS NOT INITIAL.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = gs_alv-partner
* IMPORTING
* output = gs_alv-partner.
* ENDIF.
*
*
*
* WHEN 2.
* gs_alv-bukrs = ls_excel-value."公司程式碼 (4)
* WHEN 3.
* gs_alv-ekorg = ls_excel-value."採購組織程式碼 (4)
* WHEN 4.
* gs_alv-bu_group = ls_excel-value."分組(4)
* WHEN 5.
* gs_alv-name_org1 = ls_excel-value."供應商名稱 1 (40)
* WHEN 6.
* gs_alv-name_org2 = ls_excel-value."供應商名稱 2(40)
* WHEN 7.
* gs_alv-name_org3 = ls_excel-value."供應商名稱 3 (40)
* WHEN 8.
* gs_alv-name_org4 = ls_excel-value."供應商名稱 4 (40)
* WHEN 9.
* gs_alv-bu_sort1 = ls_excel-value."搜尋專案1 (20)
* WHEN 10.
* gs_alv-bu_sort2 = ls_excel-value."搜尋專案2 (20)
* WHEN 11.
* gs_alv-street = ls_excel-value."供應商地址 1 (35)
* WHEN 12.
* gs_alv-post_code1 = ls_excel-value."郵政編碼 (6)
* WHEN 13.
* gs_alv-regio = ls_excel-value."地區(3)
* WHEN 14.
* gs_alv-city1 = ls_excel-value."城市(40)
* WHEN 15.
* gs_alv-land1 = ls_excel-value."國家 (2)
* WHEN 16.
* gs_alv-langu = ls_excel-value."語言
* WHEN 17.
* gs_alv-tel_number = ls_excel-value."電話
* WHEN 18.
* gs_alv-mob_number = ls_excel-value."行動電話
* WHEN 19.
* gs_alv-fax_number = ls_excel-value."傳真
* WHEN 20.
* gs_alv-smtp_addr = ls_excel-value."Email
* WHEN 21.
* gs_alv-kunnr = ls_excel-value."客戶
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = gs_alv-kunnr
* IMPORTING
* output = gs_alv-kunnr.
*
* WHEN 22.
* gs_alv-taxnum = ls_excel-value."稅號(18)
* WHEN 23.
* gs_alv-akont = ls_excel-value."統馭科目
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = gs_alv-akont
* IMPORTING
* output = gs_alv-akont.
* WHEN 24.
* gs_alv-zterm = ls_excel-value."付款條件
* WHEN 25.
* gs_alv-reprf = ls_excel-value."檢查雙重發票
* WHEN 26.
* gs_alv-waers = ls_excel-value."訂單幣別
* WHEN 27.
* gs_alv-zterm2 = ls_excel-value."付款條件
* WHEN 28.
* gs_alv-webre = ls_excel-value."基於收貨的發票校驗
* WHEN 29.
* gs_alv-telf1 = ls_excel-value."供應商業務員
* WHEN 30.
* gs_alv-verkf = ls_excel-value."供應商業務員電話
* WHEN 31.
* gs_alv-ktonr = ls_excel-value."夥伴功能:L1
** WHEN 32.
** gs_alv-verkf = ls_excel-value.
** WHEN 33.
** gs_alv-telf1 = ls_excel-value.
** WHEN 34.
** gs_alv-ktonr = ls_excel-value.
** WHEN 35.
** gs_alv-ekgrp = ls_excel-value.
* WHEN OTHERS.
* ENDCASE.
* AT END OF row.
* APPEND gs_alv TO gt_alv.
* CLEAR gs_alv.
* ENDAT.
* ENDLOOP.
*
* LOOP AT gt_alv INTO gs_alv.
* SELECT COUNT(*)
* FROM lfa1
* WHERE lifnr = gs_alv-partner.
* IF sy-subrc EQ 0.
* CONCATENATE '供應商編號:' gs_alv-partner '已經存在' INTO gs_alv-remark.
* gs_alv-icon_a = '@[email protected] '.
* MODIFY gt_alv FROM gs_alv.
* ENDIF.
* ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_EXCEL_DOWN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_excel_down .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FILE_F4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_P_FILE text
*&---------------------------------------------------------------------*
FORM frm_set_file_f4 USING i_file TYPE rlgrap-filename.
* 區域性變數-檔名定義
DATA l_filename TYPE rlgrap-filename.
CLEAR l_filename.
* 選擇檔案搜尋幫助
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_path = i_file
mask = ',*.xlsx,*.XLSX,*.xls,*.XLS.'
mode = '0'
title = TEXT-002
IMPORTING
filename = l_filename
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
* 如果選擇了檔案
IF sy-subrc = 0 AND l_filename IS NOT INITIAL.
p_file = l_filename.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_data .
* alv相關變數定義
DATA:lt_fcat TYPE lvc_t_fcat,
ls_layo TYPE lvc_s_layo.
* FIELDCAT欄位填充
CLEAR lt_fcat[].
PERFORM frm_fill_fcat TABLES lt_fcat.
* 佈局設定
CLEAR ls_layo.
ls_layo-zebra = 'X'. "斑馬線
ls_layo-cwidth_opt = 'X'. "最優寬
ls_layo-box_fname = 'SEL'. "選擇模式
* ALV顯示資料
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = ls_layo
i_callback_pf_status_set = 'FRM_SET_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND'
it_fieldcat_lvc = lt_fcat[]
i_save = 'A'
TABLES
t_outtab = gt_alv[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
* 資料顯示失敗
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
* 設定狀態列
*----------------------------------------------------------------------*
FORM frm_set_status USING extab TYPE slis_t_extab.
SET PF-STATUS 'ZSTANDARD_FULLSCREEN'.
* DATA: BEGIN OF ls_code,
* code LIKE sy-ucomm,
* END OF ls_code.
* DATA: lt_code LIKE TABLE OF ls_code.
* ls_code-code = 'INSERT'.
* APPEND ls_code TO lt_code.
* ls_code-code = 'CHANGE'.
* APPEND ls_code TO lt_code.
*
* SET PF-STATUS 'ZSTANDARD_FULLSCREEN' EXCLUDING lt_code.
* SET TITLEBAR 'TI_1000'.
ENDFORM. " FRM_SET_STATUS
FORM frm_user_command USING i_ucomm LIKE sy-ucomm
i_selfield TYPE slis_selfield.
IF sy-ucomm EQ 'IMPORT' .
ENDIF .
* CASE i_ucomm.
* WHEN 'BACK'.
* LEAVE TO SCREEN 0.
*
* WHEN 'EXIT'.
* LEAVE PROGRAM.
*
* WHEN 'IMPORT'. "採購資訊記錄建立
* LOOP AT gt_alv INTO gs_alv.
* PERFORM frm_data_import.
* ENDLOOP .
* WHEN 'CHANGE'.
* PERFORM frm_data_change. "供應商資訊修改
*
* WHEN 'INSERT'.
* PERFORM frm_data_insert. "已存在供應商擴充套件
*
* WHEN 'INSERT2'.
* " PERFORM FRM_DATA_INSERT2. "客戶擴充套件供應商
*** WHEN 'EXPORT'. "------------------------------------20160722登出,採用系統標準電子表格。
*** PERFORM FRM_DATA_EXPORT.
* WHEN OTHERS.
* ENDCASE.
ENDFORM. " FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_FILL_FCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
* -->P_LT_FCAT text
*&---------------------------------------------------------------------*
FORM frm_fill_fcat TABLES t_fcat TYPE lvc_t_fcat.
"區域性變數的定義
DATA ls_fcat TYPE lvc_s_fcat.
DEFINE m_fieldcat.
CLEAR ls_fcat.
ls_fcat-fieldname = &1.
ls_fcat-coltext = &2.
ls_fcat-outputlen = &3.
ls_fcat-no_zero = &4.
IF ls_fcat-fieldname = 'ICON_A'.
ls_fcat-icon = 'X'.
ENDIF.
APPEND ls_fcat TO t_fcat.
END-OF-DEFINITION.
* m_fieldcat 'ICON_A ' '指示燈 ' '' ''.
m_fieldcat 'MATNR' '物料' '' ''.
m_fieldcat 'LIFNR' '供應商程式碼 ' '' ''.
m_fieldcat 'VKORG' '採購組織 ' '' ''.
m_fieldcat 'WERKS' '工廠 ' '' ''.
m_fieldcat 'NETPR' '淨價 ' '' ''.
m_fieldcat 'MWSKZ' '稅率 ' '' ''.
m_fieldcat 'PEINH' '價格單位 ' '' ''.
m_fieldcat 'WAERS' '幣種' '' ''.
m_fieldcat 'LIFAB' '有效開始日期' '' ''.
m_fieldcat 'LIFBI' '有效結束日期 ' '' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_IMPORT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_data_import .
CLEAR :wa_eina,wa_eine,wa_eina_new,wa_eine_new,it_head,it_line,it_eina,it_eine,return,l_netpr,l_komv,l_ekpo.
* **供應商主資料加前導零
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_alv-lifnr
IMPORTING
output = gs_alv-lifnr.
wa_eina-lifnr = gs_alv-lifnr. " 供應商編號
wa_eina-matnr = gs_alv-matnr. "物料
wa_eine-ekorg = gs_alv-vkorg. "採購組織
wa_eine-werks = gs_alv-werks. " 工廠
wa_eine-esokz = '0'. " 0 標準採購 3 委外
wa_eine-netpr = gs_alv-netpr. " 淨價
wa_eine-waers = gs_alv-waers ."幣種
* wa_eine-ekgrp = 'D01'. ” 採購組
wa_eine-norbm = '1'. "標準採購訂單數量
wa_eine-aplfz = '1'. "計劃交貨時間
* wa_eine-effpr = gs_alv-abmpr. "採購資訊記錄中的有效價格
wa_eine-mwskz = gs_alv-mwskz. " 稅碼
wa_eine-peinh = gs_alv-peinh. " 價格單位
wa_eine-webre = 'X' ." 基於收貨的發票校驗
* wa_eina-lifab = gs_alv-lifab. "有效開始日期 沒用
* wa_eina-lifbi = gs_alv-lifbi. "有效結束日期 沒用
" 報價單號
* CONCATENATE 'ZSDP201建立' INTO WA_EINA-IDNLF.
CALL FUNCTION 'ME_INITIALIZE_INFORECORD'.
CALL FUNCTION 'ME_DIRECT_INPUT_INFORECORD'
EXPORTING
activity = 'V' "V 修改,H建立
i_eina = wa_eina
i_eine = wa_eine
i_no_suppose = ''
i_vorga = 'A'
* I_NO_SUPPOSE = 'X'"重要
* I_VORGA = 'B'
* i_skip_nr_check = '1'
IMPORTING
e_eina = wa_eina_new
e_eine = wa_eine_new
TABLES
t_head = it_head
t_line = it_line
EXCEPTIONS
textname_invalid = 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.
CALL FUNCTION 'ME_POST_INFORECORD'
EXPORTING
i_matnr = wa_eina-matnr
o_matnr = wa_eina-matnr
TABLES
t_eina_i = it_eina.
*APPEND wa_eine_new to it_eine.
CALL FUNCTION 'ME_UPDATE_INFORECORD_COND'
TABLES
reine = it_eine.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
READ TABLE it_eina INDEX 1.
* WRITE:/ icon_green_light AS ICON, l_tabix,'行','採購資訊記錄建立成功,資訊記錄號:',it_eina-infnr.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_display_alv2 .
DEFINE append_field.
gs_fieldcat-fieldname = &1.
gs_fieldcat-seltext_l = &2.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
END-OF-DEFINITION.
append_field 'LIGHT' '指示燈 ' .
append_field 'RESULT' '處理結果 ' .
append_field: 'MATNR' '編號' .
append_field 'LIFNR' '供應商程式碼 '.
append_field 'VKORG' '採購組織 '.
append_field 'WERKS' '工廠 '.
append_field 'NETPR' '淨價 ' .
append_field 'MWSKZ' '稅率 ' .
append_field 'PEINH' '價格單位 ' .
append_field 'WAERS' '幣種' .
append_field 'LIFAB' '有效開始日期' .
append_field 'LIFBI' '有效結束日期 ' .
append_field 'P' '採購' .
append_field 'W' '委外' .
append_field 'KSTBM' '階梯數量' .
append_field 'KBETR' '階梯價格' .
gs_layout-box_fieldname = 'MARK'.
gs_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_STATUS_SET2'
i_callback_user_command = 'FRM_USER_COMMAND2'
*
* I_GRID_SETTINGS =
is_layout = gs_layout
it_fieldcat = gt_fieldcat
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
FORM frm_status_set2 USING ut_extab TYPE slis_t_extab.
SET PF-STATUS 'ZSTANDARD_FULLSCREEN'.
ENDFORM.
FORM frm_user_command2 USING uv_ucomm LIKE sy-ucomm
us_selfield TYPE slis_selfield.
IF sy-ucomm EQ 'IMPORT' .
* LOOP AT gt_alv into gs_alv .
* PERFORM frm_data_import .
* ENDLOOP .
CLEAR gv_c .
IF cb_1 EQ 'X'.
gv_c = 'X' .
ENDIF .
lt_alv = gt_alv .
SORT lt_alv BY matnr lifnr vkorg werks p w.
DELETE ADJACENT DUPLICATES FROM lt_alv COMPARING matnr lifnr vkorg werks p w .
LOOP AT lt_alv INTO ls_alv WHERE mark EQ 'X' .
IF r_3 EQ 'X' .
PERFORM frm_data_import_bdc . "新增加
ELSE .
PERFORM frm_data_import_bdc2 ."修改
ENDIF .
CLEAR ls_alv.
ENDLOOP .
* 更新結果
SORT lt_alv BY matnr lifnr vkorg werks p w.
LOOP AT gt_alv INTO gs_alv .
CLEAR ls_alv .
READ TABLE lt_alv INTO ls_alv WITH KEY matnr = gs_alv-matnr
lifnr = gs_alv-lifnr
vkorg = gs_alv-vkorg
werks = gs_alv-werks
p = gs_alv-p
w = gs_alv-w
BINARY SEARCH .
gs_alv-light = ls_alv-light .
gs_alv-result = ls_alv-result .
MODIFY gt_alv FROM gs_alv .
ENDLOOP .
ENDIF .
us_selfield-refresh = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_IMPORT_BDC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_data_import_bdc .
* *設定方式
l_option-dismode = 'N'.
* l_option-dismode = 'E'.
l_option-updmode = 'S'.
l_option-defsize = 'X'.
l_option-nobinpt = 'X'.
l_option-racommit = 'X'." ne.
CLEAR:gt_bdcdata,gt_bdcdata[].
PERFORM frm_bdc_dynpro USING 'SAPMM06I' '0100'.
PERFORM frm_bdc_field USING 'BDC_CURSOR' 'EINE-EKORG' .
PERFORM frm_bdc_field USING 'BDC_OKCODE' '/00' .
PERFORM frm_bdc_field USING 'EINA-LIFNR' ls_alv-lifnr. " 供應商編號
PERFORM frm_bdc_field USING 'EINA-MATNR' ls_alv-matnr. "物料
PERFORM frm_bdc_field USING 'EINE-EKORG' ls_alv-vkorg . "採購組織
PERFORM frm_bdc_field USING 'EINE-WERKS' ls_alv-werks . " 工廠
IF ls_alv-p EQ 'X' .
PERFORM frm_bdc_field USING 'RM06I-NORMB' 'X' . "標準採購
ENDIF .
IF ls_alv-w EQ 'X' .
PERFORM frm_bdc_field USING 'RM06I-LOHNB' 'X' . "標準採購
ENDIF .
PERFORM frm_bdc_dynpro USING 'SAPMM06I' '0101'.
PERFORM frm_bdc_field USING 'BDC_CURSOR' 'EINA-MAHN1' .
PERFORM frm_bdc_field USING 'BDC_OKCODE' '=EINE' .
PERFORM frm_bdc_dynpro USING 'SAPMM06I' '0102'.
PERFORM frm_bdc_field USING 'BDC_CURSOR' 'EINE-MWSKZ' .
PERFORM frm_bdc_field USING 'BDC_OKCODE' '=KO' .
PERFORM frm_bdc_field USING 'EINE-APLFZ' '10' .
PERFORM frm_bdc_field USING 'EINE-NORBM' '1' .
PERFORM frm_bdc_field USING 'EINE-MWSKZ' ls_alv-mwskz. " 稅碼
PERFORM frm_bdc_field USING 'EINE-NETPR' ls_alv-netpr . " 淨價
PERFORM frm_bdc_field USING 'EINE-WAERS' ls_alv-waers . "幣種
PERFORM frm_bdc_field USING 'EINE-PEINH' ls_alv-peinh . " 價格單位
PERFORM frm_bdc_dynpro USING 'SAPMV13A' '0201'.
PERFORM frm_bdc_field USING 'BDC_CURSOR' 'RV13A-DATAB' .
PERFORM frm_bdc_field USING 'BDC_OKCODE' '=SICH' .
PERFORM frm_bdc_field USING 'RV13A-DATAB' ls_alv-lifab .
PERFORM frm_bdc_field USING 'RV13A-DATBI' ls_alv-lifbi .
CLEAR : gt_messtab[] .
CALL TRANSACTION 'ME11' USING gt_bdcdata
OPTIONS FROM l_option
MESSAGES INTO gt_messtab.
READ TABLE gt_messtab INTO gs_messtab WITH KEY msgid = '06' msgnr = '331'.
IF sy-subrc <> 0.
LOOP AT gt_messtab INTO gwa_messtab.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = gwa_messtab-msgid
msgnr = gwa_messtab-msgnr
msgv1 = gwa_messtab-msgv1
msgv2 = gwa_messtab-msgv2
msgv3 = gwa_messtab-msgv3
msgv4 = gwa_messtab-msgv4
IMPORTING
message_text_output = lv_msg.
IF ls_alv-result IS INITIAL.
ls_alv-result = lv_msg.
ELSE.
CONCATENATE lv_msg '/' ls_alv-result INTO ls_alv-result.
ENDIF.
CLEAR: gwa_messtab.
ENDLOOP.
ls_alv-light = '@[email protected]'.
ELSE.
ls_alv-light = '@[email protected]'.
ls_alv-result = '處理成功!'.
ENDIF.
MODIFY lt_alv FROM ls_alv TRANSPORTING light result .
CLEAR: ls_alv.
ENDFORM.
FORM frm_bdc_dynpro USING program dynpro.
CLEAR: gs_bdcdata.
gs_bdcdata-program = program.
gs_bdcdata-dynpro = dynpro.
gs_bdcdata-dynbegin = 'X'.
APPEND gs_bdcdata TO gt_bdcdata.
ENDFORM.
FORM frm_bdc_field USING fnam fval.
CLEAR gs_bdcdata.
gs_bdcdata-fnam = fnam.
gs_bdcdata-fval = fval.
APPEND gs_bdcdata TO gt_bdcdata.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_IMPORT_BDC2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_da