sap 採購訂單 bapi (建立外協採購訂單-元件為手工輸入)
其實則不然,只要把U改成 'E' 即可
另外:採購價格問題。
如果採購訂單憑證日期決定的資訊記錄有效就會取資訊記錄,不會取EXCEL .
處理方法:1 保證取不到資訊記錄。 2 或者 修改後臺配置(取價策略)不讓取資訊記錄。
匯入模板
1 更改物料主資料MOQ MPQ
2 修改程式的憑證日期
2.1 短文字為空,取主資料裡面的描述
2.2 同一個訂單的供應商,日期 、採購組織、採購組、工廠都要一樣。否則會分單。
3 修改取價配置PB00
4 停用增強
5 號碼範圍更改
6 測試執行
7 測試2條
注意條件一樣的切換單
匯入完成後
1 改號碼
2 改PB00
3 改 增強
*&---------------------------------------------------------------------*
*& Report ZMMR005
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr008.
*&---------------------------------------------------------------------*
*& 宣告型別池
*&---------------------------------------------------------------------*
TYPE-POOLS:sils.
************************************************************************
* <第一部分---宣告程式的引數和變數> Declaration *
************************************************************************
*----------------------------------------------------------------------*
* <宣告表工作區> Table_Work_Areas Declaration *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* <宣告使用者自定義資料型別> Local Data Types in Program *
*----------------------------------------------------------------------*
TYPES: BEGIN OF typ_main,
ebeln LIKE ekpo-ebeln, "採購訂單號
bsart TYPE ekko-bsart, "採購憑證型別
lifnr TYPE ekko-lifnr, "供應商帳戶號
ekorg TYPE ekko-ekorg, "採購組織
ekgrp TYPE ekko-ekgrp, "採購組
bukrs TYPE ekko-bukrs, "公司程式碼
unsez TYPE ekko-unsez, "我們的參考, U9採購訂單日期
ihrez TYPE ekpo-ext_rfx_number, "你的參考,U9採購訂單號
ext_rfx_item TYPE ekpo-ext_rfx_item, "U9採購訂單行專案
bstyp TYPE ekpo-bstyp, "科目分配類別
epstp TYPE string, "專案類別
matnr TYPE ekpo-matnr, "物料號
txz01 TYPE ekpo-txz01, "文字
menge TYPE string, "數量
meins TYPE ekpo-meins, "訂單單位
eeind TYPE string, "交貨日期
matkl TYPE ekpo-matkl, "物料組
mwskz TYPE ekpo-mwskz, "稅碼
lnetpr TYPE string, "淨價
peinh TYPE ekpo-peinh, "價格單位
werks TYPE ekpo-werks, "工廠
lgort TYPE ekpo-lgort, "庫存地點
* ps_psp_pnr TYPE prps-posid, "WBS元素
aufnr TYPE ekkn-aufnr, "訂單號
*add
kostl TYPE kostl, "成本中心
anln1 TYPE string, "資產
afnam LIKE ekpo-afnam, "申請者
umson TYPE umson, "免費標識
retpo TYPE retpo, "退貨標識
ww_matnr TYPE string,
ww_menge TYPE string, "ekpo-menge, "數量
hxmwb TYPE string, "行專案文字
*end add
* konnr TYPE ekpo-konnr, "合同號
* ktpnr TYPE ekpo-ktpnr, "行專案
banfn TYPE ekpo-banfn, "採購申請
bnfpo TYPE ekpo-bnfpo, " 採購申請行專案
* geber TYPE ekpo-geber, "U9 SRM 合同號
* fistl TYPE ekpo-fistl, "U9 SRM 合同行專案
* srm_contract_id TYPE ekpo-srm_contract_id, "U9 SRM 合同號
* srm_contract_itm TYPE ekpo-srm_contract_itm, "U9 SRM 合同行專案
* ekorg TYPE ekko-ekorg, "採購組織
* EBELP TYPE EKPO-EBELP, "採購憑證的專案編號
aedat TYPE ekko-aedat, "憑證日期
ebelp TYPE ekpo-ebelp, "行專案
veten TYPE ekkn-veten, "交貨計劃行號
netpr TYPE ekpo-netpr,
icon TYPE icon_d, "紅綠燈
select TYPE c, "選擇列
message TYPE string, "訊息
gxx TYPE string, "建立訂單標識
END OF typ_main.
*----------------------------------------------------------------------*
* <宣告全域性變數> Global Variants Declaration *
*----------------------------------------------------------------------*
DATA: gw_main TYPE typ_main,
gt_main TYPE STANDARD TABLE OF typ_main INITIAL SIZE 0 WITH HEADER LINE.
DATA: gw_out TYPE typ_main,
gt_out TYPE STANDARD TABLE OF typ_main INITIAL SIZE 0 WITH HEADER LINE.
DATA:poheader LIKE TABLE OF bapimepoheader WITH HEADER LINE,
poheaderx LIKE TABLE OF bapimepoheaderx WITH HEADER LINE,
return LIKE TABLE OF bapiret2 WITH HEADER LINE,
poitem LIKE TABLE OF bapimepoitem WITH HEADER LINE,
poitemx LIKE TABLE OF bapimepoitemx WITH HEADER LINE,
poschedule LIKE TABLE OF bapimeposchedule WITH HEADER LINE,
poschedulex LIKE TABLE OF bapimeposchedulx WITH HEADER LINE,
poaccount LIKE TABLE OF bapimepoaccount WITH HEADER LINE,
poaccountx LIKE TABLE OF bapimepoaccountx WITH HEADER LINE,
pocond LIKE TABLE OF bapimepocond WITH HEADER LINE,
pocondx LIKE TABLE OF bapimepocondx WITH HEADER LINE,
potextitem LIKE TABLE OF bapimepotext WITH HEADER LINE,
pocondheader LIKE TABLE OF bapimepocondheader WITH HEADER LINE,
pocondheaderx LIKE TABLE OF bapimepocondheaderx WITH HEADER LINE.
* potextitem LIKE TABLE OF bapimepotext WITH HEADER LINE.
DATA: pocomponent LIKE TABLE OF bapimepocomponent WITH HEADER LINE.
DATA: pocomponentx LIKE TABLE OF bapimepocomponentx WITH HEADER LINE.
DATA: epo LIKE bapimepoheader-po_number.
DATA: l_return LIKE return.
DATA: lv_message(255).
DATA: pp_file TYPE string.
DATA: lifnr TYPE elifn.
DATA: netpr TYPE bapimepoitem-net_price.
DATA: l_gxx TYPE string.
*----------------------------------------------------------------------*
* <宣告選擇螢幕> Selection Screen *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001 .
PARAMETERS:p_down RADIOBUTTON GROUP p1 DEFAULT 'X' USER-COMMAND fcode,
p_up RADIOBUTTON GROUP p1.
PARAMETERS: p_box AS CHECKBOX DEFAULT 'X' .
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETERS:p_file LIKE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK b2.
*----------------------------------------------------------------------*
* 選擇螢幕PBI處理 *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
IF p_down = 'X'.
LOOP AT SCREEN.
IF screen-name = '%B002004_BLOCK_1000'
OR screen-name = 'P_FILE'
OR screen-name = '%_P_FILE_%_APP_%-TEXT'.
screen-active = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
*----------------------------------------------------------------------*
* <為螢幕欄位新增搜尋幫助> AT SELECTION-SCREEN ON VALUE-REQUEST *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM frm_select_file.
*----------------------------------------------------------------------*
* 在選擇螢幕被處理後觸發的事件,程式預設的開始事件> *
* Event Occurs After The Selection Screen Has Been Processed *
*----------------------------------------------------------------------*
START-OF-SELECTION.
IF p_down = 'X'.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = '正在下載模板,請稍等...'.
PERFORM frm_down_excel.
ELSE.
IF p_file IS INITIAL .
MESSAGE '請選擇需要匯入的檔案' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ELSE.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = '正在讀取資料,請稍等...'.
"lxf
PERFORM frm_get_data . "讀取EXCEL 表
IF gt_main[] IS NOT INITIAL .
PERFORM frm_check_data.
CLEAR:gw_out,gt_out,gt_out[].
PERFORM alv_disp_data.
ELSE.
MESSAGE '無資料被匯入,請檢查模板' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_FILE
*&---------------------------------------------------------------------*
* 選取檔案
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_select_file .
DATA : l_filetab TYPE filetable,
l_waftab LIKE LINE OF l_filetab,
l_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = '開啟檔案'
initial_directory = 'C:/'
CHANGING
file_table = l_filetab
rc = l_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ELSE.
READ TABLE l_filetab INTO l_waftab INDEX 1.
p_file = l_waftab-filename.
CLEAR: l_filetab,
l_waftab.
ENDIF.
ENDFORM. " FRM_SELECT_FILE
*&---------------------------------------------------------------------*
*& Form FRM_DOWN_EXCEL
*&---------------------------------------------------------------------*
* 下載匯入的EXCEL模板
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_down_excel .
DATA: lo_objdata LIKE wwwdatatab,
lo_mime LIKE w3mime,
lc_filename TYPE string VALUE'採購訂單匯入模版',
lc_fullpath TYPE string VALUE'c:/SapReport/',
lc_path TYPE string VALUE'c:/SapReport/',
ls_destination LIKE rlgrap-filename,
ls_objnam TYPE string,
li_rc LIKE sy-subrc,
ls_errtxt TYPE string.
DATA:p_objid TYPE wwwdatatab-objid,
p_dest LIKE sapb-sappfad.
p_objid = 'ZMMR008'.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'XLS'
default_file_name = lc_filename
CHANGING
filename = lc_filename
path = lc_path
fullpath = lc_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF lc_fullpath = ''.
MESSAGE '不能開啟excel' TYPE 'E'.
ENDIF.
IF sy-subrc = 0.
p_dest = lc_fullpath.
ls_objnam = lc_filename.
CONDENSE ls_objnam NO-GAPS.
SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata
WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.
IF sy-subrc NE 0 OR lo_objdata-objid EQ space.
CONCATENATE '模板檔案' ls_objnam '不存在' INTO ls_errtxt.
MESSAGE ls_errtxt TYPE 'I'.
ENDIF.
ls_destination = p_dest.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lo_objdata
destination = ls_destination
IMPORTING
rc = li_rc.
IF li_rc NE 0.
CONCATENATE '模板檔案:' ls_objnam '下載失敗' INTO ls_errtxt.
MESSAGE ls_errtxt TYPE 'E'.
ELSE.
CLEAR ls_errtxt.
CONCATENATE '模板檔案:' ls_objnam '下載成功' INTO ls_errtxt.
MESSAGE ls_errtxt TYPE 'S'.
ENDIF.
ENDIF.
ENDFORM. " FRM_DOWN_EXCEL
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* 讀取EXCEL資料
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
FIELD-SYMBOLS: <f1> TYPE any .
DATA lt_excel TYPE TABLE OF zalsmex_tabline WITH HEADER LINE.
DATA l_index LIKE sy-tabix.
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 3
i_end_col = 32
i_end_row = 9999
TABLES
intern = lt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
LOOP AT lt_excel.
l_index = lt_excel-col . "設定列號
ASSIGN COMPONENT l_index OF STRUCTURE gt_main TO <f1> ."將指標指向指定列
TRANSLATE lt_excel-value TO UPPER CASE.
* IF L_INDEX = 1 .
* CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
* EXPORTING
* INPUT = LT_EXCEL-VALUE
* IMPORTING
* OUTPUT = <F1>.
* ELSE.
<f1> = lt_excel-value .
* ENDIF.
AT END OF row .
APPEND gt_main.
CLEAR gt_main.
ENDAT .
ENDLOOP.
* DELETE GT_MAIN WHERE MATNR IS INITIAL .
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_check_data .
DATA: l_bsart TYPE typ_main-bsart,
l_lifnr TYPE typ_main-lifnr,
l_ekgrp TYPE typ_main-ekgrp,
l_bukrs TYPE typ_main-bukrs.
DATA: ladd TYPE i VALUE 10,
ladd2 TYPE i VALUE 1.
DATA: lt_main LIKE STANDARD TABLE OF gt_main,
ls_main LIKE LINE OF gt_main.
SORT gt_main BY ebeln bsart lifnr ekorg ekgrp bukrs ihrez ext_rfx_item .
LOOP AT gt_main INTO gw_main.
IF gw_main-ebeln IS NOT INITIAL.
SELECT COUNT(*)
FROM ekko
WHERE ebeln = gw_main-ebeln.
IF sy-subrc EQ 0.
gw_main-message = '訂單號已經存在!'.
MODIFY gt_main FROM gw_main TRANSPORTING message.
CONTINUE.
ENDIF.
ENDIF.
* IF gw_main-konnr IS NOT INITIAL .
* SELECT SINGLE a~lifnr a~ekgrp a~bukrs b~werks b~matnr b~meins b~matkl b~mwskz b~netpr b~peinh
* FROM ekko AS a INNER JOIN ekpo AS b ON a~ebeln = b~ebeln
* INTO CORRESPONDING FIELDS OF ls_main
* WHERE b~ebeln = gw_main-konnr AND b~ebelp = gw_main-ktpnr.
* SELECT SINGLE ktmng FROM ekpo INTO ls_main-menge WHERE ebeln = gw_main-konnr AND ebelp = gw_main-ktpnr.
* ENDIF.
IF gw_main-bsart IS INITIAL.
gw_main-bsart = 'NB'.
ENDIF.
IF gw_main-lifnr IS INITIAL.
gw_main-lifnr = ls_main-lifnr.
ENDIF.
IF gw_main-ekgrp IS INITIAL.
gw_main-ekgrp = ls_main-ekgrp.
ENDIF.
IF gw_main-bukrs IS INITIAL.
gw_main-bukrs = 1000.
ENDIF.
IF gw_main-matnr IS INITIAL.
gw_main-matnr = ls_main-matnr.
ENDIF.
IF gw_main-menge IS INITIAL.
gw_main-menge = ls_main-menge.
ENDIF.
IF gw_main-meins IS INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = ls_main-meins
IMPORTING
output = gw_main-meins.
ENDIF.
IF gw_main-matkl IS INITIAL.
gw_main-matkl = ls_main-matkl.
ENDIF.
IF gw_main-mwskz IS INITIAL. "稅碼
IF ls_main-mwskz IS NOT INITIAL.
gw_main-mwskz = ls_main-mwskz.
ELSE.
gw_main-mwskz = 'J1'.
ENDIF.
ENDIF.
IF gw_main-lnetpr IS INITIAL.
gw_main-lnetpr = ls_main-netpr.
ENDIF.
IF gw_main-peinh IS INITIAL.
gw_main-peinh = ls_main-peinh.
ENDIF.
IF gw_main-werks IS INITIAL.
gw_main-werks = 1000.
ENDIF.
MODIFY gt_main FROM gw_main.
CLEAR ls_main.
ENDLOOP.
LOOP AT gt_main INTO gw_main.
* IF sy-mandt EQ '400' OR sy-mandt EQ '900'.
* gw_main-ekorg = 2000.
* ELSE.
* gw_main-ekorg = 1000.
* ENDIF.
IF gw_main-txz01 IS INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gw_main-matnr
IMPORTING
output = gw_main-matnr.
SELECT SINGLE maktx INTO gw_main-txz01 FROM makt WHERE matnr = gw_main-matnr.
ENDIF.
MOVE-CORRESPONDING gw_main TO ls_main.
AT NEW ihrez.
* AT NEW ext_rfx_item. "lxf 舊訂單號
gw_main-gxx = 'X'. "建立訂單標識
ls_main-gxx = gw_main-gxx.
ls_main-ebelp = 10.
ls_main-veten = 1.
ladd = 10.
ladd2 = 1.
ENDAT.
IF ls_main-gxx IS INITIAL.
ladd = ladd + 10.
ladd2 = ladd2 + 1.
ls_main-ebelp = ladd.
ls_main-veten = ladd2.
ENDIF.
MOVE-CORRESPONDING ls_main TO gw_main.
MODIFY gt_main FROM gw_main.
ENDLOOP.
ENDFORM. " FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*& Form ALV_DISP_DATA
*&---------------------------------------------------------------------*
* ALV 展現準備匯入的資料
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_disp_data .
DATA: lt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: lw_layout TYPE slis_layout_alv.
DATA: l_i TYPE i VALUE 1.
DATA: l_repid LIKE sy-repid VALUE sy-repid.
lw_layout-group_change_edit = 'X'.
lw_layout-colwidth_optimize = 'X'.
lw_layout-box_fieldname = 'SELECT'.
DEFINE alv_head.
CLEAR lt_fieldcat.
lt_fieldcat-col_pos = l_i.
lt_fieldcat-fieldname = &1.
lt_fieldcat-tabname = 'GT_MAIN'.
lt_fieldcat-seltext_l = &2.
IF lt_fieldcat-fieldname = 'ICON'.
lt_fieldcat-icon = 'X'.
ENDIF.
IF lt_fieldcat-fieldname = 'MESSAGE'.
lt_fieldcat-outputlen = '15'.
ENDIF.
IF lt_fieldcat-fieldname = 'MATNR'.
lt_fieldcat-ref_fieldname = 'MATNR'.
lt_fieldcat-ref_tabname = 'MARA'.
ENDIF.
lt_fieldcat-no_zero = 0 .
APPEND lt_fieldcat TO lt_fieldcat.
ADD 1 TO l_i.
END-OF-DEFINITION.
alv_head 'ICON' '檢查'.
alv_head 'MESSAGE' '訊息'.
* alv_head 'EXT_RFX_ITEM' 'U9採購訂單行專案'.
* alv_head 'UNSEZ ' 'U9採購訂單日期'.
alv_head 'EBELN' '採購訂單'.
alv_head 'BSART' '採購憑證型別'.
alv_head 'LIFNR' '供應商帳戶號'.
alv_head 'EKORG' '採購組織'.
alv_head 'EKGRP' '採購組'.
alv_head 'BUKRS' '公司程式碼'.
alv_head 'EBELP' '行專案'.
alv_head 'BSTYP' '科目分配類別'.
alv_head 'EPSTP' '專案類別'.
alv_head 'MATNR' '物料號'.
alv_head 'TXZ01' '文字'.
alv_head 'MENGE' '數量'.
alv_head 'MEINS' '訂單單位'.
alv_head 'EEIND' '交貨日期'.
alv_head 'MATKL' '物料組'.
alv_head 'MWSKZ' '稅碼'.
alv_head 'LNETPR' '含稅價'.
alv_head 'WERKS' '工廠'.
alv_head 'LGORT' '庫存地點'.
alv_head 'PEINH' '價格單位'.
* alv_head 'PS_PSP_PNR' 'WBS元素'.
alv_head 'AUFNR' '訂單號'.
alv_head 'KOSTL' '成本中心'.
alv_head 'ANLN1' '資產'.
alv_head 'AFNAM' '申請者'.
alv_head 'UMSON' '免費標識'.
alv_head 'RETPO' '退貨標識'.
alv_head 'WW_MATNR' '委外元件'.
alv_head 'WW_MENGE' '委外元件數量'.
alv_head 'HXMWB' '行專案文字'.
* alv_head 'KONNR' '採購合同'.
* alv_head 'KTPNR' '採購合同專案'.
alv_head 'BANFN' '採購申請號'.
alv_head 'BNFPO' '採購申請行專案'.
alv_head 'IHREZ' 'U9採購訂單號'.
alv_head 'EXT_RFX_ITEM' 'U9採購訂單行專案'.
alv_head 'UNSEZ ' 'U9採購訂單日期'.
*
* alv_head 'SRM_CONTRACT_ID' 'U9 SRM合同號'.
* alv_head 'SRM_CONTRACT_ITM' 'U9 SRM合同行專案'.
*呼叫ALV函式顯示資料
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_background_id = 'ALV_BACKGROUND'
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
i_callback_program = l_repid
is_layout = lw_layout
i_save = 'X' "A:ALL U:USER X:SYSTEM
* it_events = gt_events
it_fieldcat = lt_fieldcat[]
TABLES
t_outtab = gt_main
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.
ENDFORM. " ALV_DISP_DATA
*&--------------------------------------------------------------------*
*& Form set_pf_status
*&--------------------------------------------------------------------*
* ALV自定義個工具條
*---------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD' .
ENDFORM. "set_pf_status
*&--------------------------------------------------------------------*
*& Form user_command
*&--------------------------------------------------------------------*
* 響應自定義按鈕
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: gd_repid LIKE sy-repid,
ref_grid TYPE REF TO cl_gui_alv_grid.
DATA: l_mess TYPE string.
CASE r_ucomm.
WHEN 'ALL'.
LOOP AT gt_main INTO gw_main.
gw_main-select = 'X'.
MODIFY gt_main FROM gw_main.
ENDLOOP.
rs_selfield-refresh = 'X'.
WHEN 'UNALL'.
LOOP AT gt_main INTO gw_main.
gw_main-select = ''.
MODIFY gt_main FROM gw_main.
ENDLOOP.
rs_selfield-refresh = 'X'.
WHEN 'ZPOST'.
SORT gt_main BY ebeln bsart lifnr ekorg ekgrp bukrs ihrez gxx.
CLEAR:gt_out,gt_out[].
gt_out[] = gt_main[].
READ TABLE gt_main WITH KEY select = 'X' icon = '@
IF sy-subrc = 0.
MESSAGE '請不要選擇已檢查出錯誤的資料' TYPE 'E'.
EXIT.
ENDIF.
DELETE gt_out WHERE select <> 'X'.
SORT gt_out BY ebeln.
DELETE ADJACENT DUPLICATES FROM gt_out COMPARING ebeln.
LOOP AT gt_out INTO gw_out.
LOOP AT gt_main INTO gw_main WHERE ebeln = gw_out-ebeln .
PERFORM frm_create_data.
IF gw_main-gxx EQ 'X'.
PERFORM frm_callbapi.
* MODIFY GT_MAIN FROM GW_MAIN.
ENDIF.
ENDLOOP.
ENDLOOP.
* SORT gt_main BY bsart lifnr ekorg ekgrp bukrs ebelp.
rs_selfield-refresh = 'X'.
WHEN OTHERS.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_DATA
*&---------------------------------------------------------------------*
* 建立物料主資料
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_create_data .
DATA: l_netpr TYPE eine-netpr.
DATA: lt_table_matnr TYPE TABLE OF string WITH HEADER LINE.
DATA: lt_table_menge TYPE TABLE OF string WITH HEADER LINE.
DATA: lv_tabix LIKE sy-tabix.
DATA: lv_menge LIKE ekpo-menge.
CLEAR lifnr.
lifnr = gw_main-lifnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lifnr
IMPORTING
output = lifnr.
poheader-po_number = gw_main-ebeln.
poheader-doc_type = gw_main-bsart.
poheader-vendor = lifnr.
poheader-purch_org = gw_main-ekorg.
poheader-pur_group = gw_main-ekgrp.
poheader-comp_code = gw_main-bukrs.
poheader-doc_date = '20181128'.
poheader-langu = sy-langu.
poheader-ref_1 = gw_main-ihrez.
poheader-our_ref = gw_main-unsez.
poheaderx-po_number = 'X'.
poheaderx-doc_type = 'X'.
poheaderx-vendor = 'X'.
poheaderx-purch_org = 'X'.
poheaderx-pur_group = 'X'.
poheaderx-comp_code = 'X'.
poheaderx-doc_date = 'X'.
poheaderx-langu = 'X'.
poheaderx-ref_1 = 'X'.
poheaderx-our_ref = 'X'.
CLEAR: lt_table_matnr[],lt_table_menge[],lv_tabix.
IF gw_main-bstyp EQ 'A'.
SPLIT gw_main-anln1 AT '/' INTO TABLE lt_table_matnr.
SPLIT gw_main-menge AT '/' INTO TABLE lt_table_menge.
LOOP AT lt_table_matnr.
lv_tabix = lv_tabix + 1.
poaccount-po_item = gw_main-ebelp. "採購憑證的專案編號
poaccount-asset_no = lt_table_matnr."資產
READ TABLE lt_table_menge INDEX lv_tabix.
poaccount-quantity = lt_table_menge.
lv_menge = lv_menge + lt_table_menge.
APPEND poaccount.
CLEAR poaccount.
poaccountx-po_item = gw_main-ebelp. "採購憑證的專案編號
poaccountx-asset_no = 'X'."資產
poaccountx-quantity = 'X'."數量
APPEND poaccountx.
CLEAR poaccountx.
ENDLOOP.
ELSE.
poaccount-po_item = gw_main-ebelp. "採購憑證的專案編號
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gw_main-aufnr
IMPORTING
output = poaccount-orderid. "訂單號
&nbs