1. 程式人生 > 其它 >ABAP-批導採購訂單

ABAP-批導採購訂單

*&---------------------------------------------------------------------*
*&ReportZMMR_034
*&---------------------------------------------------------------------*
*&Responsibility
*&---------------------------------------------------------------------*
*&ProgramName:採購訂單批量匯入
*&Datewritten:2018.04.07
*&Author'sname:LiJun
*&Lastupdate:2018.04.11
*&Programtitle:採購訂單批量匯入
*&ProjectName:安全集團
*&Version:Ver.1.0
*&---------------------------------------------------------------------*
*&Description:(Incl.RelatedFunctionAreaandSystem)
*&---------------------------------------------------------------------*
*&ChangeHistory
*&---------------------------------------------------------------------*
*&Date|Programmer|Corr.#|Description
*&
*&
*&---------------------------------------------------------------------*
REPORTzmmr_034.

*----------------------------------------------------------------------*
*INCLUDE*
*----------------------------------------------------------------------*
INCLUDE<list>.
INCLUDE<icon>.

*----------------------------------------------------------------------*
*CONSTANTS*
*----------------------------------------------------------------------*
CONSTANTS:
*常量定義
BEGINOFgc_con,
dow(4)TYPEcVALUE'FC01',"下載按鈕
objidTYPEwwwdatatab-objidVALUE'ZMMR_034',"SAPWWW閘道器物件名
waersTYPEekko-waersVALUE'CNY',"貨幣碼
ENDOFgc_con,

*EXCEL檔案行和列
BEGINOFgc_line,
begin_rowTYPEiVALUE'5',"起始行
begin_colTYPEiVALUE'2',"起始單元格
end_rowTYPEiVALUE'65535',"終了行
end_colTYPEiVALUE'45',"終了單元格
ENDOFgc_line,

*科目分配類別
BEGINOFgc_knttp,
pTYPEeban-knttpVALUE'P',"專案
sTYPEeban-knttpVALUE'S',"展會類
aTYPEeban-knttpVALUE'A',"資產
kTYPEeban-knttpVALUE'K',"成本中
ENDOFgc_knttp.

*----------------------------------------------------------------------*
*TABLES*
*----------------------------------------------------------------------*
TABLESsscrfields.

*----------------------------------------------------------------------*
*TYPES*
*----------------------------------------------------------------------*
TYPES:BEGINOFty_upload,
iconTYPEstring,"狀態
remarkTYPEstring,"訊息
numberTYPEi,"序號
bedatTYPEstring,"憑證日期
bsartTYPEstring,"採購訂單型別
lifnrTYPEstring,"供應商編碼
waersTYPEstring,"貨幣
bukrsTYPEstring,"公司程式碼
ekorgTYPEstring,"採購組織
ekgrpTYPEstring,"採購組
ztermTYPEstring,"付款條件
ebelnTYPEstring,"採購訂單號
ebelpTYPEstring,"採購訂單行專案
werksTYPEstring,"工廠
knttpTYPEstring,"科目分配類別
matnrTYPEstring,"物料編碼
txz01TYPEstring,"物料描述
matklTYPEstring,"物料組
mengeTYPEstring,"採購數量
meinsTYPEstring,"訂單單位
netwrTYPEstring,"淨價
peinhTYPEstring,"價格單位
bprmeTYPEstring,"訂單價格單位(採購)
mwskzTYPEstring,"稅碼
eindtTYPEstring,"交貨日期
lgortTYPEstring,"庫存地點
uebtkTYPEstring,"標識:允許未限制的過量交貨
retpoTYPEstring,"退貨標識
kostlTYPEstring,"成本中心
anln1TYPEstring,"固定資產編號
saktoTYPEstring,"總賬科目
zcgppTYPEstring,"採購品牌
kschl1TYPEstring,"條件型別1
kbetr1TYPEstring,"條件金額1
kpein1TYPEstring,"條件定價單位1
kschl2TYPEstring,"條件型別2
kbetr2TYPEstring,"條件金額2
kpein2TYPEstring,"條件定價單位2
kschl3TYPEstring,"條件型別3
kbetr3TYPEstring,"條件金額3
kpein3TYPEstring,"條件定價單位3
kschl4TYPEstring,"條件型別4
kbetr4TYPEstring,"條件金額4
kpein4TYPEstring,"條件定價單位4
kschl5TYPEstring,"條件型別5
kbetr5TYPEstring,"條件金額5
kpein5TYPEstring,"條件定價單位5
*filed01TYPEstring,"專案01
*filed02TYPEstring,"專案02
*filed03TYPEstring,"專案03
*filed04TYPEstring,"專案04
*filed05TYPEstring,"專案05
*filed06TYPEstring,"專案06
*filed07TYPEstring,"專案07
*filed08TYPEstring,"專案08
*filed09TYPEstring,"專案09
*filed10TYPEstring,"專案10
*filed11TYPEstring,"專案11
*filed12TYPEstring,"專案12
*filed13TYPEstring,"專案13
*filed14TYPEstring,"專案14
*filed15TYPEstring,"專案15
*filed16TYPEstring,"專案16
*filed17TYPEstring,"專案17
*filed18TYPEstring,"專案18
*filed19TYPEstring,"專案19
*filed20TYPEstring,"專案20
*filed21TYPEstring,"專案21
*filed22TYPEstring,"專案22
*filed23TYPEstring,"專案23
*filed24TYPEstring,"專案24
*filed25TYPEstring,"專案25
*filed26TYPEstring,"專案26
*filed27TYPEstring,"專案27
*filed28TYPEstring,"專案28
*filed29TYPEstring,"專案29
*filed30TYPEstring,"專案30
*filed31TYPEstring,"專案31
*filed32TYPEstring,"專案32
*filed33TYPEstring,"專案33
*filed34TYPEstring,"專案34
*filed35TYPEstring,"專案35
*filed36TYPEstring,"專案36
*filed37TYPEstring,"專案37
*filed38TYPEstring,"專案38
*filed39TYPEstring,"專案39
*filed40TYPEstring,"專案40
*filed41TYPEstring,"專案41
*filed42TYPEstring,"專案42
*filed43TYPEstring,"專案43
*filed44TYPEstring,"專案44
ENDOFty_upload.

TYPES:BEGINOFty_alv,
selTYPEchar1,
bedatTYPEekko-bedat,"憑證日期
bsartTYPEekko-bsart,"採購訂單型別
lifnrTYPEekko-lifnr,"供應商編碼
waersTYPEekko-waers,"貨幣
bukrsTYPEekko-bukrs,"公司程式碼
ekorgTYPEekko-ekorg,"採購組織
ekgrpTYPEekko-ekgrp,"採購組
ztermTYPEekko-zterm,"付款條件
ebelnTYPEekko-ebeln,"採購訂單號
ebelpTYPEekpo-ebelp,"採購訂單行專案
werksTYPEekpo-werks,"工廠
knttpTYPEekpo-knttp,"科目分配類別
matnrTYPEekpo-matnr,"物料編碼
txz01TYPEekpo-txz01,"物料描述
matklTYPEekpo-matkl,"物料組
mengeTYPEekpo-menge,"採購數量
meinsTYPEekpo-meins,"訂單單位
netwrTYPEkomp-netwr,"淨價
peinhTYPEekpo-peinh,"價格單位
bprmeTYPEekpo-bprme,"訂單價格單位(採購)
mwskzTYPEekpo-mwskz,"稅碼
eindtTYPEeket-eindt,"交貨日期
lgortTYPEekpo-lgort,"庫存地點
uebtkTYPEekpo-uebtk,"標識:允許未限制的過量交貨
retpoTYPEekpo-retpo,"退貨標識
kostlTYPEekkn-kostl,"成本中心
anln1TYPEekkn-anln1,"固定資產編號
saktoTYPEekkn-sakto,"總賬科目
*posidTYPEprps-posid,"WBS元素
zcgppTYPEekpo-zcgpp,"採購品牌
kschl1TYPEkomv-kschl,"條件型別1
kbetr1TYPEkomv-kbetr,"條件金額1
kpein1TYPEkomv-kpein,"條件定價單位1
kschl2TYPEkomv-kschl,"條件型別2
kbetr2TYPEkomv-kbetr,"條件金額2
kpein2TYPEkomv-kpein,"條件定價單位2
kschl3TYPEkomv-kschl,"條件型別3
kbetr3TYPEkomv-kbetr,"條件金額3
kpein3TYPEkomv-kpein,"條件定價單位3
kschl4TYPEkomv-kschl,"條件型別4
kbetr4TYPEkomv-kbetr,"條件金額4
kpein4TYPEkomv-kpein,"條件定價單位4
kschl5TYPEkomv-kschl,"條件型別5
kbetr5TYPEkomv-kbetr,"條件金額5
kpein5TYPEkomv-kpein,

"條件定價單位5
*aufnrTYPEekkn-aufnr,"內部訂單
*ernamTYPEeban-ernam,"建立人
*zxmbhTYPEekpo-zxmbh,"專案編號
*zkhbmTYPEekpo-zkhbm,"客戶編碼
*zcgflTYPEekpo-zcgfl,"採購分類
typeTYPEbapiret2-type,
iconTYPEicon-id,"狀態remark
TYPEstring,"訊息
numberTYPEi,"序號
ENDOFty_alv.
*----------------------------------------------------------------------*
*DATA*

*----------------------------------------------------------------------*
*全域性內表定義
DATA:gt_uploadTYPESTANDARDTABLEOFty_upload,"上傳gt_alv
TYPESTANDARDTABLEOFty_alv,"出力gt_alv2
TYPESTANDARDTABLEOFty_alv,"出力gt_fieldcat
TYPEslis_t_fieldcat_alv,"ALV控制gt_sort
TYPEslis_t_sortinfo_alv,"ALV排序

*全域性構造定義gs_fieldcat
TYPEslis_fieldcat_alv
,"ALV控制gs_layout
TYPEslis_layout_alv,"ALV佈局g_function_key
TYPEsmp_dyntxt."功能按鈕

*----------------------------------------------------------------------*
*SELECTION-SCREEN*
*----------------------------------------------------------------------*
*工具欄
SELECTION-SCREENFUNCTIONKEY1.
*資料匯入
SELECTION-SCREENBEGINOFBLOCKblk01WITHFRAMETITLETEXT-t01.
*選擇匯入檔案
PARAMETERSp_fileLIKErlgrap-filename.
SELECTION-SCREENENDOFBLOCKblk01.

*號碼選擇
SELECTION-SCREENBEGINOFBLOCKblk02WITHFRAMETITLETEXT-t02.
PARAMETERS:rb_neiRADIOBUTTONGROUPgu1,"內部給號rb_wai
RADIOBUTTONGROUPgu1."外部給號
SELECTION-SCREENENDOFBLOCKblk02.
*----------------------------------------------------------------------*
*DEFINE*
*----------------------------------------------------------------------*
*出力欄位設定
DEFINEmcr_set_fieldcat.gs_fieldcat

-tabname=&1."需要輸出的內表名gs_fieldcat
-fieldname=&2."需要輸出的內表的欄位名gs_fieldcat
-seltext_l=&3."欄位的描述-長欄位標籤gs_fieldcat
-col_pos=&4."欄位的位置
APPENDgs_fieldcatTOgt_fieldcat.
CLEARgs_fieldcat.

END-OF-DEFINITION.
*----------------------------------------------------------------------*
*INITIALIZATION*
*----------------------------------------------------------------------*
INITIALIZATION.
*工具欄新增下載模板按鈕
CLEARg_function_key.g_function_key
-icon_id=icon_export.g_function_key
-icon_text='下載模版'.g_function_key
-quickinfo='下載模版'.sscrfields
-functxt_01=g_function_key.

*----------------------------------------------------------------------*
*ATSELECTION-SCREEN*
*----------------------------------------------------------------------*
ATSELECTION-SCREEN.

*按下下載模板按鈕時
IFsy-ucomm='FC01'.
*模板下載校驗
PERFORMsub_download_templet.
*按下回車或執行按鈕時
ELSE.
*檔案必輸校驗
PERFORMsub_file_obligatory.
ENDIF.

*----------------------------------------------------------------------*
*ATSELECTION-SCREENONVALUE-REQUEST*
*----------------------------------------------------------------------*
ATSELECTION-SCREENONVALUE-REQUESTFORp_file.
*選擇檔案搜尋幫助
PERFORMsub_set_file_f4CHANGINGp_file.

*----------------------------------------------------------------------*
*START-OF-SELECTION*
*----------------------------------------------------------------------*
START-OF-SELECTION.
*批量匯入資料
PERFORMsub_upload_data.

*檢查資料
PERFORMsub_check_data.

*alv顯示
PERFORMsub_display_data.

*&---------------------------------------------------------------------*
*&FormSUB_DOWNLOAD_TEMPLET
*&---------------------------------------------------------------------*
*&模板下載
*&---------------------------------------------------------------------*
FORMsub_download_templet.

*區域性變數定義
DATA:lo_objdataTYPEwwwdatatab,"表WWWDATA的內容lo_mime
TYPEw3mime,"MIME資料容器lc_fullpath
TYPEstringVALUE'c:\',"檔案路徑lc_path
TYPEstringVALUE'c:\',"檔案路徑lc_name
TYPEstring,"檔名稱ls_destination
TYPErlgrap-filename,"檔名ls_objnam
TYPEstring,"SAPWWW閘道器物件名l_rc
TYPEsy-subrc,"返回碼ls_errtxt
TYPEstring,"錯誤訊息l_dest
TYPEsapb-sappfad."SAP存檔連結檔案路徑

*模板下載路徑名lc_name
=TEXT-001.
CALLMETHODcl_gui_frontend_services=>file_save_dialog
EXPORTINGwindow_title
='模板下載'default_extension
='xlsx'default_file_name
=lc_name
CHANGINGfilename
=lc_namepath
=lc_pathfullpath
=lc_fullpath
EXCEPTIONScntl_error
=1error_no_gui
=2not_supported_by_gui
=3invalid_default_file_name
=4
OTHERS=5.
*沒有選擇路徑
IFlc_fullpath=''.
MESSAGE'請選擇正確的路徑!'TYPE'E'.
ELSE.
*-路徑名l_dest
=lc_fullpath.

SELECTSINGLErelid
"IMPORT/EXPORT記錄中的區域objid
"SAPWWW閘道器物件名
FROMwwwdata
INTOCORRESPONDINGFIELDSOFlo_objdata
WHEREsrtf2=0
ANDrelid='MI'
ANDobjid=gc_con-objid.

IFsy-subrc<>0ORlo_objdata-objidISINITIAL.
CONCATENATE'模板檔案:'gc_con-objid
'不存在,請用TCODE:SMW0進行載入'INTOls_errtxt.
MESSAGEe001(00)WITHls_errtxt.
ENDIF.ls_destination

=l_dest.
CALLFUNCTION'DOWNLOAD_WEB_OBJECT'
EXPORTING
key=lo_objdatadestination
=ls_destination
IMPORTINGrc
=l_rc.
IFl_rc<>0.
MESSAGE'模板下載失敗'TYPE'E'.
ENDIF.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_FILE_OBLIGATORY
*&---------------------------------------------------------------------*
*檔案必輸校驗
*----------------------------------------------------------------------*
FORMsub_file_obligatory.
*檔案必輸校驗
IFp_fileISINITIAL.
MESSAGE'請選擇匯入的檔案'TYPE'E'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_SET_FILE_F4
*&---------------------------------------------------------------------*
*選擇匯入檔案的檢索幫助
*----------------------------------------------------------------------*
*-->O_FILE檔案路徑
*----------------------------------------------------------------------*
FORMsub_set_file_f4CHANGINGo_fileTYPErlgrap-filename.
*區域性變數定義
DATAl_filenameTYPErlgrap-filename."檔名
CLEARl_filename.
*選擇檔案搜尋幫助
CALLFUNCTION'WS_FILENAME_GET'
EXPORTINGdef_path
=o_file
mask=',*.xlsx,*.XLSX,*.xls,*.XLS.'
mode='0'
title=TEXT-999
IMPORTINGfilename
=l_filename
EXCEPTIONSinv_winsys
=1no_batch
=2selection_cancel
=3selection_error
=4
OTHERS=5.
*如果選擇了檔案
IFsy-subrc=0ANDl_filenameISNOTINITIAL.o_file
=l_filename.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_UPLOAD_DATA
*&---------------------------------------------------------------------*
*檔案上傳
*----------------------------------------------------------------------*
FORMsub_upload_data.
*區域性變數的定義
DATA:lt_excelTYPETABLEOFalsmex_tabline,"具有Excel資料的錶行ls_excel
TYPEalsmex_tabline,"具有Excel資料的錶行ls_upload
TYPEty_upload,"上傳構造l_begin_row
TYPEi,"起始行l_end_row
TYPEi,"終了行l_begin_col
TYPEi,"起始列l_end_col
TYPEi,"終了列l_index
TYPEi,"專案位置l_number
TYPEi."上傳檔案行數

CLEARgt_upload.
*選擇檔案後做後續處理
CHECKp_fileISNOTINITIAL.

*把檔案的資料變成內表
CALLFUNCTION'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTINGfilename
=p_filei_begin_col
=gc_line-begin_coli_begin_row
=gc_line-begin_rowi_end_col
=gc_line-end_coli_end_row
=gc_line-end_row
TABLESintern
=lt_excel
EXCEPTIONSinconsistent_parameters
=1upload_ole
=2
OTHERS=3.

*處理內表資料
CLEARls_excel.
LOOPATlt_excelINTOls_excel.l_index
=ls_excel-col+3.
ASSIGNCOMPONENTl_indexOFSTRUCTUREls_uploadTOFIELD-SYMBOL(<f>).

TRY.
MOVEls_excel-valueTO<f>.
CATCHcx_rootINTODATA(cx).ls_upload
-remark=cx->get_text().ls_upload
-icon=icon_led_red.
ENDTRY.

ATENDOFrow.ls_upload
-icon=icon_yellow_light.l_number
=l_number+1.ls_upload
-number=l_number.
APPENDls_uploadTOgt_upload.
CLEARls_upload.
ENDAT.
ENDLOOP.

*上傳資料不存在
IFgt_uploadISINITIAL.
MESSAGETEXT-m04TYPE'S'DISPLAYLIKE'E'.
LEAVELIST-PROCESSING.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_DATA
*&---------------------------------------------------------------------*
*&檢查資料
*&---------------------------------------------------------------------*
FORMsub_check_data.

DATA:ls_uploadTYPEty_upload,"上傳資料ls_alv
TYPEty_alv."預覽畫面資料

LOOPATgt_uploadINTOls_upload.
CLEARls_alv.
*檢查前的儲存處理
PERFORMsub_save_dataUSINGls_upload
CHANGINGls_alv.
*憑證日期
PERFORMsub_check_bedatUSINGls_upload-bedat
CHANGINGls_alv.
*採購訂單型別
PERFORMsub_check_bsartUSINGls_upload-bsart
CHANGINGls_alv.
*供應商編碼
PERFORMsub_check_lifnrUSINGls_upload-lifnr
CHANGINGls_alv.
*貨幣
PERFORMsub_check_waersUSINGls_upload-waers
CHANGINGls_alv.
*公司程式碼
PERFORMsub_check_bukrsUSINGls_upload-bukrs
CHANGINGls_alv.
*採購組織
PERFORMsub_check_ekorgUSINGls_upload-ekorg
CHANGINGls_alv.
*採購組
PERFORMsub_check_ekgrpUSINGls_upload-ekgrp
CHANGINGls_alv.
*付款條件
PERFORMsub_check_ztermUSINGls_upload-zterm
CHANGINGls_alv.
*採購訂單號
PERFORMsub_check_ebelnUSINGls_upload-ebeln
CHANGINGls_alv.
*採購訂單行專案
PERFORMsub_check_ebelpUSINGls_upload-ebelp
CHANGINGls_alv.
*工廠
PERFORMsub_check_werksUSINGls_upload-werks
CHANGINGls_alv.
*物料編碼
PERFORMsub_check_matnrUSINGls_upload-matnr
CHANGINGls_alv.
*數量
PERFORMsub_check_mengeUSINGls_upload-menge
CHANGINGls_alv.
*計量單位
PERFORMsub_check_meinsUSINGls_upload-meins
CHANGINGls_alv.
*單價
PERFORMsub_check_netwrUSINGls_upload-netwr
CHANGINGls_alv.
*稅碼
PERFORMsub_check_mwskzUSINGls_upload-mwskz
CHANGINGls_alv.
*交貨日期
PERFORMsub_check_eindtUSINGls_upload-eindt
CHANGINGls_alv.
*WBS元素
*PERFORMsub_check_posidUSINGls_upload-posid
*CHANGINGls_alv.
*成本中心
PERFORMsub_check_kostlUSINGls_upload-kostl
CHANGINGls_alv.
*總賬科目
PERFORMsub_check_saktoUSINGls_upload-sakto
CHANGINGls_alv.
*固定資產編號
PERFORMsub_check_anln1USINGls_upload-anln1
CHANGINGls_alv.
*內部訂單
*PERFORMsub_check_aufnrUSINGls_upload-aufnr
*CHANGINGls_alv.
CHECKls_alv-remarkISINITIAL.
*
**取得其他資料
PERFORMsub_get_zxmbhCHANGINGls_alv.

APPENDls_alvTOgt_alv.

ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_SAVE_DATA
*&---------------------------------------------------------------------*
*檢查前的儲存處理
*----------------------------------------------------------------------*
*-->IS_UPLOAD上傳資料
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_save_dataUSINGis_uploadTYPEty_upload
CHANGINGes_alvTYPEty_alv.
MOVE-CORRESPONDINGis_uploadTOes_alv.

*es_alv-icon=is_upload-icon.
*es_alv-remark=is_upload-remark.
*es_alv-number=is_upload-number.
*es_alv-bedat=is_upload-filed01.
*es_alv-bsart=is_upload-filed02.
*es_alv-lifnr=is_upload-filed03.
*es_alv-waers=is_upload-filed04.
*es_alv-bukrs=is_upload-filed05.
*es_alv-ekorg=is_upload-filed06.
*es_alv-ekgrp=is_upload-filed07.
*es_alv-zterm=is_upload-filed08.
*es_alv-ebeln=is_upload-filed09.
**es_alv-text=is_upload-filed10.
*es_alv-ebelp=is_upload-filed11.
*es_alv-werks=is_upload-filed12.
*es_alv-knttp=is_upload-filed13.
*es_alv-matnr=is_upload-filed14.
*es_alv-txz01=is_upload-filed15.
*es_alv-matkl=is_upload-filed16.
*es_alv-menge=is_upload-filed17.
*es_alv-meins=is_upload-filed18.
*es_alv-netwr=is_upload-filed19.
*es_alv-mwskz=is_upload-filed20.
*es_alv-eindt=is_upload-filed21.
**es_alv-posid=is_upload-filed22.
*es_alv-kostl=is_upload-filed23.
*es_alv-sakto=is_upload-filed24.
*es_alv-anln1=is_upload-filed25.
**es_alv-aufnr=is_upload-filed26.
****es_alv-zcgfl=is_upload-filed27.
**es_alv-ernam=sy-uname.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_BEDAT
*&---------------------------------------------------------------------*
*憑證日期
*----------------------------------------------------------------------*
*-->IV_BEDAT憑證日期
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_bedatUSINGiv_bedatTYPEstring
CHANGINGes_alvTYPEty_alv.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_bedat
TEXT-c04
CHANGINGes_alv.

CHECKes_alv-remarkISINITIAL.

*日期檢查
PERFORMsub_check_dateUSINGes_alv-bedat
TEXT-c04
CHANGINGes_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_INPUT
*&---------------------------------------------------------------------*
*必輸入檢查
*----------------------------------------------------------------------*
*-->IV_FILED專案ID
*-->IV_TEXT專案文字
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_inputUSINGiv_filedTYPEstringiv_text
TYPEc
CHANGINGes_alvTYPEty_alv.

*專案沒有輸入時
IFiv_filedISINITIAL.es_alv
-icon=icon_led_red.
MESSAGEe083(me)WITHiv_textINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_DATE
*&---------------------------------------------------------------------*
*日期檢查
*----------------------------------------------------------------------*
*-->IV_FILED專案ID
*-->IV_TEXT專案文字
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_dateUSINGiv_filedTYPEdiv_text
TYPEc
CHANGINGes_alvTYPEty_alv.

*日期檢查
CALLFUNCTION'DATE_CHECK_PLAUSIBILITY'
EXPORTING
date=iv_filed
EXCEPTIONSplausibility_check_failed
=1
OTHERS=2.

*失敗時
IFsy-subrc<>0.es_alv
-icon=icon_led_red.
MESSAGEe540(ke)WITHiv_filedINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_BSART
*&---------------------------------------------------------------------*
*採購訂單型別
*----------------------------------------------------------------------*
*-->IV_BSART採購訂單型別
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_bsartUSINGiv_bsartTYPEstring
CHANGINGes_alvTYPEty_alv.
*必輸入檢查
PERFORMsub_check_inputUSINGiv_bsart
TEXT-c05
CHANGINGes_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_LIFNR
*&---------------------------------------------------------------------*
*供應商編碼
*----------------------------------------------------------------------*
*-->IV_LIFNR供應商編碼
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_lifnrUSINGiv_lifnrTYPEstring
CHANGINGes_alvTYPEty_alv.

*區域性變數定義
DATA:lv_lifnrTYPElfa1-lifnr."供應商編碼

*必輸入檢查
PERFORMsub_check_inputUSINGiv_lifnr
TEXT-c06
CHANGINGes_alv.

CHECKes_alv-remarkISINITIAL.

*供應商帳戶
PERFORMsub_inputCHANGINGes_alv-lifnr.

*存在檢查
SELECTSINGLElifnr
INTOlv_lifnr
FROMlfa1
WHERElifnr=es_alv-lifnr.
*取得失敗時
IFsy-subrc<>0.es_alv
-icon=icon_led_red.
MESSAGEe101(06)WITHes_alv-lifnrINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_WAERS
*&---------------------------------------------------------------------*
*貨幣
*----------------------------------------------------------------------*
*-->IV_WAERS貨幣
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_waersUSINGiv_waersTYPEstring
CHANGINGes_alvTYPEty_alv.

*區域性變數定義
DATA:lv_waersTYPEekko-waers."貨幣碼

*貨幣沒有輸入時
IFiv_waersISINITIAL.es_alv
-waers=gc_con-waers.
ENDIF.

*存在檢查
SELECTSINGLEwaers
INTOlv_waers
FROMtcurc
WHEREwaers=es_alv-waers.
IFsy-subrc<>0.
*取得失敗時es_alv
-icon=icon_led_red.
MESSAGEe010(me)WITHes_alv-waersINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_BUKRS
*&---------------------------------------------------------------------*
*公司程式碼
*----------------------------------------------------------------------*
*-->IV_BUKRS公司程式碼
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_bukrsUSINGiv_bukrsTYPEstring
CHANGINGes_alvTYPEty_alv.

*區域性變數定義
DATA:lv_bukrsTYPEekko-bukrs."公司程式碼

*必輸入檢查
PERFORMsub_check_inputUSINGiv_bukrs
TEXT-c08
CHANGINGes_alv.

CHECKes_alv-remarkISINITIAL.

*存在檢查
SELECTSINGLEbukrs
INTOlv_bukrs
FROMt001
WHEREbukrs=es_alv-bukrs.
IFsy-subrc<>0.
*取得失敗時es_alv
-icon=icon_led_red.
MESSAGEe002(me)WITHes_alv-bukrsINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_EKORG
*&---------------------------------------------------------------------*
*採購組織
*----------------------------------------------------------------------*
*-->IV_EKORG採購組織
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_ekorgUSINGiv_ekorgTYPEstring
CHANGINGes_alvTYPEty_alv.

*區域性變數定義
DATA:lv_ekorgTYPEekko-ekorg."採購組織

*必輸入檢查
PERFORMsub_check_inputUSINGiv_ekorg
TEXT-c09
CHANGINGes_alv.

CHECKes_alv-remarkISINITIAL.

*存在檢查
SELECTSINGLEekorg
INTOlv_ekorg
FROMt024e
WHEREekorg=es_alv-ekorg.

*取得失敗時
IFsy-subrc<>0.es_alv
-icon=icon_led_red.
MESSAGEe015(me)WITHes_alv-ekorgINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_EKGRP
*&---------------------------------------------------------------------*
*採購組
*----------------------------------------------------------------------*
*-->IV_EKGRP採購組
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_ekgrpUSINGiv_ekgrpTYPEstring
CHANGINGes_alvTYPEty_alv.

*區域性變數定義
DATA:lv_ekgrpTYPEekko-ekgrp."採購組

*必輸入檢查
PERFORMsub_check_inputUSINGiv_ekgrp
TEXT-c10
CHANGINGes_alv.

CHECKes_alv-remarkISINITIAL.

*存在檢查
SELECTSINGLEekgrp
INTOlv_ekgrp
FROMt024
WHEREekgrp=es_alv-ekgrp.

*取得失敗時
IFsy-subrc<>0.es_alv
-icon=icon_led_red.
MESSAGEe011(me)WITHes_alv-ekgrpINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_ZTERM
*&---------------------------------------------------------------------*
*付款條件
*----------------------------------------------------------------------*
*-->IV_ZTERM付款條件
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_ztermUSINGiv_ztermTYPEstring
CHANGINGes_alvTYPEty_alv.

*區域性變數定義
DATA:lv_ztermTYPEekko-zterm."付款條件

*必輸入檢查
PERFORMsub_check_inputUSINGiv_zterm
TEXT-c11
CHANGINGes_alv.

CHECKes_alv-remarkISINITIAL.

*存在檢查
SELECTzterm
INTOlv_zterm
FROMt052
UPTO1ROWS
WHEREzterm=es_alv-zterm.
ENDSELECT.
IFsy-subrc<>0.
*取得失敗時es_alv
-icon=icon_led_red.
MESSAGEe398(jk)WITHes_alv-ztermINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_EBELN
*&---------------------------------------------------------------------*
*採購訂單號
*----------------------------------------------------------------------*
*-->IV_EBELN採購訂單號
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_ebelnUSINGiv_ebelnTYPEstring
CHANGINGes_alvTYPEty_alv.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_ebeln
TEXT-c12
CHANGINGes_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_EBELP
*&---------------------------------------------------------------------*
*採購訂單行專案
*----------------------------------------------------------------------*
*-->IV_EBELP採購訂單號
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_ebelpUSINGiv_ebelpTYPEstring
CHANGINGes_alvTYPEty_alv.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_ebelp
TEXT-c13
CHANGINGes_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_WERKS
*&---------------------------------------------------------------------*
*工廠
*----------------------------------------------------------------------*
*-->IV_WERKS工廠
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_werksUSINGiv_werksTYPEstring
CHANGINGes_alvTYPEty_alv.

*區域性變數定義
DATA:lv_werksTYPEekpo-werks."工廠

*必輸入檢查
PERFORMsub_check_inputUSINGiv_werks
TEXT-c14
CHANGINGes_alv.

CHECKes_alv-remarkISINITIAL.

*存在檢查
SELECTSINGLEwerks
FROMt001w
INTOlv_werks
WHEREwerks=es_alv-werks.

*取得失敗時
IFsy-subrc<>0.es_alv
-icon=icon_led_red.
MESSAGEe003(me)WITHes_alv-werksINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.

*工廠的許可權檢查
AUTHORITY-CHECKOBJECT'M_BANF_WRK'
ID'ACTVT'FIELD'01'
ID'WERKS'FIELDes_alv-werks.
IFsy-subrc<>0.es_alv
-icon=icon_led_red.
CONCATENATETEXT-c14es_alv-werksTEXT-c14INTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_MATNR
*&---------------------------------------------------------------------*
*物料編碼
*----------------------------------------------------------------------*
*-->IV_MATNR物料編碼
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_matnrUSINGiv_matnrTYPEstring
CHANGINGes_alvTYPEty_alv.

*區域性變數定義
DATA:lv_matnrTYPEekpo-matnr."物料編碼

**必輸入檢查
*PERFORMsub_check_inputUSINGiv_matnr
*TEXT-c16
*CHANGINGes_alv.
*
CHECKiv_matnrISNOTINITIAL.

*存在檢查
SELECTSINGLEmatnrmatkl
FROMmara
INTO(lv_matnr,es_alv-matkl)
WHEREmatnr=es_alv-matnr.

**取得失敗時
*IFsy-subrc<>0.
*es_alv-icon=icon_led_red.
*MESSAGEe706(12)WITHes_alv-matnrINTOes_alv-remark.
*APPENDes_alvTOgt_alv.
*ENDIF.

*物料描述的取得
SELECTSINGLEmaktx
FROMmakt
INTOes_alv-txz01
WHEREmatnr=es_alv-matnr
ANDspras=sy-langu.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_MENGE
*&---------------------------------------------------------------------*
*數量
*----------------------------------------------------------------------*
*-->IV_MENGE數量
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_mengeUSINGiv_mengeTYPEstring
CHANGINGes_alvTYPEty_alv.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_menge
TEXT-c19
CHANGINGes_alv.

CHECKes_alv-remarkISINITIAL.

*數值檢查
PERFORMsub_check_numberUSINGiv_menge
TEXT-c19
CHANGINGes_alv-mengees_alv
.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_NUMBER
*&---------------------------------------------------------------------*
*數值檢查
*----------------------------------------------------------------------*
*-->IS_FILED專案ID
*-->IV_TEXT專案文字
*<--ES_FILED專案ID
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_numberUSINGiv_filedTYPEstringiv_text
TYPEc
CHANGINGev_filedTYPEanyes_alv
TYPEty_alv.

DATA:lv_filed(30)TYPEc.
*數值檢查
CALLFUNCTION'CATS_NUMERIC_INPUT_CHECK'
EXPORTING
input=iv_filedinternal
=abap_on
IMPORTING
output=lv_filed
EXCEPTIONSno_numeric
=1
OTHERS=2.

*失敗時
IFsy-subrc<>0.es_alv
-icon=icon_led_red.
MESSAGEe326(ck)WITHev_filedINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ELSE.ev_filed
=lv_filed.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_MEINS
*&---------------------------------------------------------------------*
*計量單位
*----------------------------------------------------------------------*
*-->IV_MEINS計量單位
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_meinsUSINGiv_meinsTYPEstring
CHANGINGes_alvTYPEty_alv.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_meins
TEXT-c20
CHANGINGes_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_NETWR
*&---------------------------------------------------------------------*
*單價
*----------------------------------------------------------------------*
*-->IV_MENGE單價
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_netwrUSINGiv_mengeTYPEstring
CHANGINGes_alvTYPEty_alv.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_menge
TEXT-c21
CHANGINGes_alv.

CHECKes_alv-remarkISINITIAL.

*數值檢查
PERFORMsub_check_numberUSINGiv_menge
TEXT-c21
CHANGINGes_alv-netwres_alv
.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_MWSKZ
*&---------------------------------------------------------------------*
*稅碼
*----------------------------------------------------------------------*
*-->IV_MWSKZ稅碼
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_mwskzUSINGiv_mwskzTYPEstring
CHANGINGes_alvTYPEty_alv.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_mwskz
TEXT-c22
CHANGINGes_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_EINDT
*&---------------------------------------------------------------------*
*交貨日期
*----------------------------------------------------------------------*
*-->IV_EINDT憑證日期
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_eindtUSINGiv_eindtTYPEstring
CHANGINGes_alvTYPEty_alv.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_eindt
TEXT-c23
CHANGINGes_alv.

CHECKes_alv-remarkISINITIAL.

*日期檢查
PERFORMsub_check_dateUSINGes_alv-eindt
TEXT-c23
CHANGINGes_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_POSID
*&---------------------------------------------------------------------*
*WBS元素
*----------------------------------------------------------------------*
*-->IV_POSIDWBS元素
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_posidUSINGiv_posidTYPEstring
CHANGINGes_alvTYPEty_alv.

CHECKes_alv-knttp=gc_knttp-p.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_posid
TEXT-c24
CHANGINGes_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_KOSTL
*&---------------------------------------------------------------------*
*成本中心
*----------------------------------------------------------------------*
*-->IV_KOSTL成本中心
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_kostlUSINGiv_kostlTYPEstring
CHANGINGes_alvTYPEty_alv.

CHECKes_alv-knttp=gc_knttp-k.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_kostl
TEXT-c25
CHANGINGes_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_SAKTO
*&---------------------------------------------------------------------*
*總賬科目
*----------------------------------------------------------------------*
*-->IV_KOSTL總賬科目
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_saktoUSINGiv_saktoTYPEstring
CHANGINGes_alvTYPEty_alv.

IFes_alv-matnrISINITIAL.
*必輸入檢查
PERFORMsub_check_inputUSINGiv_sakto
TEXT-c26
CHANGINGes_alv.
ELSE.
*IFes_alv-posid+0(2)='YF'
*ORes_alv-posid+0(2)='YSA'.
**總賬科目替代
*PERFORMsub_replace_saktoCHANGINGes_alv.
*ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_ANLN1
*&---------------------------------------------------------------------*
*固定資產編號
*----------------------------------------------------------------------*
*-->IV_KOSTL固定資產編號
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_anln1USINGiv_anln1TYPEstring
CHANGINGes_alvTYPEty_alv.

CHECKes_alv-knttp=gc_knttp-a.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_anln1
TEXT-c27
CHANGINGes_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_AUFNR
*&---------------------------------------------------------------------*
*內部訂單
*----------------------------------------------------------------------*
*-->IV_AUFNR內部訂單
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_aufnrUSINGiv_aufnrTYPEstring
CHANGINGes_alvTYPEty_alv.

CHECKes_alv-knttp=gc_knttp-s.

*必輸入檢查
PERFORMsub_check_inputUSINGiv_aufnr
TEXT-c28
CHANGINGes_alv.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_DISPLAY_DATA
*&---------------------------------------------------------------------*
*&alv顯示
*&---------------------------------------------------------------------*
FORMsub_display_data.

*設定ALV出力欄位
PERFORMsub_set_fieldcat.

*設定ALV佈局
PERFORMsub_set_layout.

*ALV排序設定
PERFORMsub_alv_set_sort.

*ALV出力
CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'
EXPORTINGi_callback_program
=sy-repidi_callback_pf_status_set
='SUB_SET_PF_STATUS'i_callback_user_command
='SUB_USER_COMMAND'is_layout
=gs_layoutit_fieldcat
=gt_fieldcatit_sort
=gt_sort
TABLESt_outtab
=gt_alv
EXCEPTIONSprogram_error
=1
OTHERS=2.

*失敗時
IFsy-subrc<>0.
*輸出訊息
MESSAGETEXT-m03TYPE'S'DISPLAYLIKE'E'.
LEAVELIST-PROCESSING.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_SET_FIELDCAT
*&---------------------------------------------------------------------*
*&設定ALV出力欄位
*&---------------------------------------------------------------------*
FORMsub_set_fieldcat.mcr_set_fieldcat

'GT_ALV''ICON'TEXT-c0101.mcr_set_fieldcat
'GT_ALV''REMARK'TEXT-c0202.mcr_set_fieldcat
'GT_ALV''NUMBER'TEXT-c0303.mcr_set_fieldcat
'GT_ALV''BEDAT'TEXT-c0404.mcr_set_fieldcat
'GT_ALV''BSART'TEXT-c0505.mcr_set_fieldcat
'GT_ALV''LIFNR'TEXT-c0606.mcr_set_fieldcat
'GT_ALV''WAERS'TEXT-c0707.mcr_set_fieldcat
'GT_ALV''BUKRS'TEXT-c0808.mcr_set_fieldcat
'GT_ALV''EKORG'TEXT-c0909.mcr_set_fieldcat
'GT_ALV''EKGRP'TEXT-c1010.mcr_set_fieldcat
'GT_ALV''ZTERM'TEXT-c1111.mcr_set_fieldcat
'GT_ALV''EBELN'TEXT-c1212.mcr_set_fieldcat
'GT_ALV''EBELP'TEXT-c1314.mcr_set_fieldcat
'GT_ALV''WERKS'TEXT-c1415.mcr_set_fieldcat
'GT_ALV''KNTTP'TEXT-c1516.mcr_set_fieldcat
'GT_ALV''MATNR'TEXT-c1617.mcr_set_fieldcat
'GT_ALV''TXZ01'TEXT-c1718.mcr_set_fieldcat
'GT_ALV''MATKL'TEXT-c1819.mcr_set_fieldcat
'GT_ALV''MENGE'TEXT-c1920.mcr_set_fieldcat
'GT_ALV''MEINS'TEXT-c2022.mcr_set_fieldcat
'GT_ALV''NETWR'TEXT-c2123.mcr_set_fieldcat
'GT_ALV''PEINH'TEXT-c3323.mcr_set_fieldcat
'GT_ALV''BPRME'TEXT-c3423.mcr_set_fieldcat
'GT_ALV''MWSKZ'TEXT-c2224.mcr_set_fieldcat
'GT_ALV''EINDT'TEXT-c2325.mcr_set_fieldcat
'GT_ALV''LGORT'TEXT-c3525."庫存地點mcr_set_fieldcat
'GT_ALV''UEBTK'TEXT-c3625."允許未限制的過量交貨mcr_set_fieldcat
'GT_ALV''RETPO'TEXT-c5325."退貨標識mcr_set_fieldcat
'GT_ALV''EINDT'TEXT-c2325.mcr_set_fieldcat
'GT_ALV''KOSTL'TEXT-c2527.mcr_set_fieldcat
'GT_ALV''ANLN1'TEXT-c2729.mcr_set_fieldcat
'GT_ALV''SAKTO'TEXT-c2628.mcr_set_fieldcat
'GT_ALV''ZCGPP'TEXT-c3728."採購品牌mcr_set_fieldcat
'GT_ALV''KSCHL1'TEXT-c3828."條件型別1mcr_set_fieldcat
'GT_ALV''KBETR1'TEXT-c3928."條件金額1mcr_set_fieldcat
'GT_ALV''KPEIN1'TEXT-c4028."條件定價單位1mcr_set_fieldcat
'GT_ALV''KSCHL2'TEXT-c4128."條件型別2mcr_set_fieldcat
'GT_ALV''KBETR2'TEXT-c4228."條件金額2mcr_set_fieldcat
'GT_ALV''KPEIN2'TEXT-c4328."條件定價單位2mcr_set_fieldcat
'GT_ALV''KSCHL3'TEXT-c4428."條件型別3mcr_set_fieldcat
'GT_ALV''KBETR3'TEXT-c4528."條件金額3mcr_set_fieldcat
'GT_ALV''KPEIN3'TEXT-c4628."條件定價單位3mcr_set_fieldcat
'GT_ALV''KSCHL4'TEXT-c4728."條件型別4mcr_set_fieldcat
'GT_ALV''KBETR4'TEXT-c4828."條件金額4mcr_set_fieldcat
'GT_ALV''KPEIN4'TEXT-c4928."條件定價單位4mcr_set_fieldcat
'GT_ALV''KSCHL5'TEXT-c5028."條件型別5mcr_set_fieldcat
'GT_ALV''KBETR5'TEXT-c5128."條件金額5mcr_set_fieldcat
'GT_ALV''KPEIN5'TEXT-c5228."條件定價單位5
*mcr_set_fieldcat'GT_ALV''AUFNR'TEXT-c2830.
*mcr_set_fieldcat'GT_ALV''ERNAM'TEXT-c2931.
*mcr_set_fieldcat'GT_ALV''ZXMBH'TEXT-c3032.
*mcr_set_fieldcat'GT_ALV''ZKHBM'TEXT-c3133.
*mcr_set_fieldcat'GT_ALV''POSID'TEXT-c2426.
*mcr_set_fieldcat'GT_ALV''TEXT'TEXT-c3213.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_SET_LAYOUT
*&---------------------------------------------------------------------*
*&設定ALV佈局
*&---------------------------------------------------------------------*
FORMsub_set_layout.gs_layout

-zebra=abap_on.gs_layout
-colwidth_optimize=abap_on.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_SET_SORT
*&---------------------------------------------------------------------*
*ALV排序設定
*----------------------------------------------------------------------*
*-->ET_SORT排序資料
*----------------------------------------------------------------------*
FORMsub_alv_set_sort.

DATA:ls_sortTYPEslis_sortinfo_alv.

CLEARls_sort.ls_sort
-spos=3.ls_sort
-fieldname='NUMBER'."欄位名稱ls_sort
-up=abap_on."升序排列
APPENDls_sortTOgt_sort.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_SET_PF_STATUS
*&---------------------------------------------------------------------*
*&設定選單欄
*&---------------------------------------------------------------------*
*-->IT_EXTAB按鈕
*----------------------------------------------------------------------*
FORMsub_set_pf_statusUSINGit_extabTYPEslis_t_extab.
"copy程式SAPLKKBL的GUI狀態STANDARD_FULLSCREEN
SETPF-STATUS'STANDARD_ALV1'.
*標題欄
*SETTITLEBAR'T01'.

ENDFORM.
*&---------------------------------------------------------------------*
*&FORMSUB_USER_COMMAND
*&---------------------------------------------------------------------*
*&按鈕事件
*&---------------------------------------------------------------------*
*&-->IV_UCOMM按鈕
*&-->IS_SELFIELD狀態
*----------------------------------------------------------------------*
FORMsub_user_commandUSINGiv_ucommTYPEsy-ucommis_selfield
TYPEslis_selfield.

*點選確認匯入按鈕
IFiv_ucomm='IMPORT'.
*匯入前檢查
PERFORMsub_check_imp.
*匯入執行
PERFORMsub_import_data.

*ALV出力
CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'
EXPORTINGi_callback_program
=sy-repidi_callback_pf_status_set
='SUB_SET_PF_STATUS2'is_layout
=gs_layoutit_fieldcat
=gt_fieldcatit_sort
=gt_sort
TABLESt_outtab
=gt_alv2
EXCEPTIONSprogram_error
=1
OTHERS=2.

*失敗時
IFsy-subrc<>0.
*輸出訊息
MESSAGETEXT-m03TYPE'S'DISPLAYLIKE'E'.
LEAVELIST-PROCESSING.
ENDIF.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_IMP
*&---------------------------------------------------------------------*
*&匯入前檢查
*&---------------------------------------------------------------------*
FORMsub_check_imp.

READTABLEgt_alvTRANSPORTINGNOFIELDS
WITHKEYicon=icon_led_red.

*讀取成功
IFsy-subrc=0.
MESSAGE'匯入資料有錯誤,請確認'TYPE'E'.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_IMPORT_DATA
*&---------------------------------------------------------------------*
*&資料匯入處理
*&---------------------------------------------------------------------*
FORMsub_import_data.
DEFINElm_append_cond.
IF&1ISNOTINITIAL.
CLEARls_cond.ls_cond
-itm_number=ls_alv-ebelp.ls_cond
-cond_type=&1.ls_cond
-cond_value=&2.ls_cond
-cond_p_unt=&3.ls_cond
-currency=ls_alv-waers.ls_cond
-change_id='I'.
APPENDls_condTOlt_cond.
CLEARls_condx.ls_condx
-itm_number=ls_alv-ebelp.ls_condx
-itm_numberx=abap_on.ls_condx
-cond_type=abap_on.ls_condx
-cond_value=abap_on.ls_condx
-cond_p_unt=abap_on.ls_condx
-currency=abap_on.ls_condx
-change_id=abap_on.
APPENDls_condxTOlt_condx.
ENDIF.
END-OF-DEFINITION.

DATA:ls_alvTYPEty_alv,ls_alv_tmp
TYPEty_alv,ls_alv_tmp2
TYPEty_alv,ls_header
TYPEbapimepoheader,ls_headerx
TYPEbapimepoheaderx,lt_return
TYPETABLEOFbapiret2,ls_return
TYPEbapiret2,lt_item
TYPETABLEOFbapimepoitem,ls_item
TYPEbapimepoitem,lt_itemx
TYPETABLEOFbapimepoitemx,ls_itemx
TYPEbapimepoitemx,lt_eket
TYPETABLEOFbapimeposchedule,ls_eket
TYPEbapimeposchedule,lt_eketx
TYPETABLEOFbapimeposchedulx,ls_eketx
TYPEbapimeposchedulx,lt_ekkn
TYPETABLEOFbapimepoaccount,ls_ekkn
TYPEbapimepoaccount,lt_ekknx
TYPETABLEOFbapimepoaccountx,ls_ekknx
TYPEbapimepoaccountx,lt_cond
TYPETABLEOFbapimepocond,ls_cond
TYPEbapimepocond,lt_condx
TYPETABLEOFbapimepocondx,ls_condx
TYPEbapimepocondx,ls_header_o
TYPEbapimepoheader,lv_ebeln
TYPEekko-ebeln,lv_ebeln_o
TYPEekko-ebeln,lt_alv
TYPETABLEOFty_alv,lv_index
TYPEi,ls_ekpo
TYPEekpo,ls_textheader
TYPEbapimepotextheader,lt_textheader
TYPESTANDARDTABLEOFbapimepotextheader.

DATA:ls_extensioninTYPEbapiparex,ls_te_mepoitem
TYPEbapi_te_mepoitem,ls_te_mepoitemx
TYPEbapi_te_mepoitemx.

DATA:lt_extensioninLIKETABLEOFls_extensionin.

DATA:lv_te_value(960)TYPEc.

SORTgt_alvBYebelnASCENDING.

LOOPATgt_alvINTOls_alv_tmp.ls_alv

=ls_alv_tmp.

ATNEWebeln.
"--釋放資源
CLEAR:ls_header,ls_headerx
,lt_return
,lt_item
,lt_itemx
,lt_ekkn
,lt_ekknx
,lt_alv
,ls_textheader
,lt_textheader
,lt_extensionin
.

*新增抬頭資訊ls_header
-po_number=ls_alv-ebeln."採購憑證號ls_header
-doc_date=ls_alv-bedat."採購憑證日期ls_header
-doc_type=ls_alv-bsart."採購憑證型別ls_header
-vendor=ls_alv-lifnr."供應商賬戶號ls_header
-currency=ls_alv-waers."貨幣ls_header
-comp_code=ls_alv-bukrs."公司程式碼ls_header
-purch_org=ls_alv-ekorg."採購組織ls_header
-pur_group=ls_alv-ekgrp."採購組
*ls_header-created_by=ls_alv-ernam."建立人ls_header
-pmnttrms=ls_alv-zterm."付款條件

*供應商帳戶
PERFORMsub_inputCHANGINGls_header-vendor.

CLEARls_headerx.ls_headerx
-po_number=abap_on."採購憑證號ls_headerx
-item_intvl=abap_on."這個標記打X才能修改行號ls_headerx
-doc_date=abap_on."採購憑證日期ls_headerx
-doc_type=abap_on."採購憑證型別ls_headerx
-comp_code=abap_on."公司程式碼ls_headerx
-purch_org=abap_on."採購組織ls_headerx
-pur_group=abap_on."採購組ls_headerx
-vendor=abap_on."供應商賬戶號
*ls_headerx-created_by=abap_on."建立物件的建立人ls_headerx
-currency=abap_on."貨幣碼ls_headerx
-pmnttrms=abap_on."付款條件

IFrb_nei='X'.
CLEAR:ls_header-po_number,ls_headerx
-po_number.
ENDIF.

*ls_textheader-po_number=ls_header-po_number.
*ls_textheader-text_id='F02'.
*ls_textheader-text_form='*'.
**ls_textheader-text_line=ls_alv-text.
*APPENDls_textheaderTOlt_textheader.
ENDAT.

*資料儲存
APPENDls_alvTOlt_alv.

*新增行專案資訊
CLEARls_item.ls_item
-po_item=ls_alv-ebelp."採購憑證的專案編號ls_item
-plant=ls_alv-werks."工廠ls_item
-acctasscat=ls_alv-knttp."科目分配類別ls_item
-short_text=ls_alv-txz01."短文字
IFls_alv-matnrISNOTINITIAL.
CALLFUNCTION'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input=ls_alv-matnr
IMPORTING
output=ls_item-material_long
EXCEPTIONSlength_error
=1
OTHERS=2.
IFsy-subrc<>0.
*Implementsuitableerrorhandlinghere
ENDIF.

ENDIF.ls_item
-matl_group=ls_alv-matkl."物料組ls_item
-quantity=ls_alv-menge."採購訂單數量ls_item
-tax_code=ls_alv-mwskz."銷售稅程式碼ls_item
-net_price=ls_alv-netwr."BAPIs的貨幣金額(帶有9個小數位)--淨價ls_item
-price_unit=ls_alv-peinh."價格單位
*ls_item-orderpr_un=ls_alv-bprme."訂單價格單位(採購)ls_item
-po_price='1'."價格採納:1=總值,2=淨值ls_item
-stge_loc=ls_alv-lgort."庫存地點ls_item
-unlimited_dlv=ls_alv-uebtk."標識:允許未限制的過量交貨
IFls_alv-retpoISNOTINITIAL.ls_item
-ret_item=ls_alv-retpo.
ENDIF.
CALLFUNCTION'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input=ls_alv-meins
language=sy-langu
IMPORTING
output=ls_item-po_unit
EXCEPTIONSunit_not_found
=1
OTHERS=2.
IFsy-subrc<>0.
*Implementsuitableerrorhandlinghere
ENDIF.

CALLFUNCTION'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input=ls_alv-bprme
language=sy-langu
IMPORTING
output=ls_item-orderpr_un"訂單價格單位(採購)
EXCEPTIONSunit_not_found
=1
OTHERS=2.
IFsy-subrc<>0.
*Implementsuitableerrorhandlinghere
ENDIF.

APPENDls_itemTOlt_item.

"--POITEMX中的欄位
CLEARls_itemx.ls_itemx
-po_item=ls_alv-ebelp.ls_itemx
-po_itemx=abap_on.ls_itemx
-item_cat=abap_on.ls_itemx
-acctasscat=abap_on.
IFls_item-short_textISNOTINITIAL.ls_itemx
-short_text=abap_on.
ENDIF.
IFls_alv-matnrISNOTINITIAL.ls_itemx
-material_long=abap_on.
ENDIF.ls_itemx
-plant=abap_on.
IFls_alv-matklISNOTINITIAL.ls_itemx
-matl_group=abap_on.
ENDIF.ls_itemx
-po_unit=abap_on.ls_itemx
-quantity=abap_on.ls_itemx
-tax_code=abap_on.ls_itemx
-net_price=abap_on.ls_itemx
-po_price=abap_on.ls_itemx
-price_unit=abap_on."價格單位ls_itemx
-orderpr_un=abap_on."訂單價格單位(採購)
IFls_alv-retpoISNOTINITIAL.ls_itemx
-ret_item='X'.
ENDIF.ls_itemx
-stge_loc='X'.ls_itemx
-unlimited_dlv='X'.
APPENDls_itemxTOlt_itemx.

"--POSCHEDULE中的欄位
CLEARls_eket.ls_eket
-po_item=ls_alv-ebelp."主鍵ls_eket
-delivery_date=ls_alv-eindt."專案交貨日期
APPENDls_eketTOlt_eket.

"--POSCHEDULEX中的欄位
CLEARls_eketx.ls_eketx
-po_item=ls_alv-ebelp.ls_eketx
-delivery_date=abap_on.
APPENDls_eketxTOlt_eketx.

"--POACCOUNT中的欄位------------------------------------begin
"--POACCOUNT中的欄位
CLEARls_ekkn.
IFls_alv-kostlISNOTINITIAL.ls_ekkn
-costcenter=ls_alv-kostl."成本中心
ENDIF.
IFls_alv-saktoISNOTINITIAL.ls_ekkn
-gl_account=ls_alv-sakto.
ENDIF.
IFls_alv-anln1ISNOTINITIAL.ls_ekkn
-asset_no=ls_alv-anln1.
ENDIF.

"--WBS
*IFls_alv-posidISNOTINITIAL.
*ls_ekkn-wbs_element=ls_alv-posid.
*ENDIF.

"內部訂單
*IFls_alv-aufnrISNOTINITIAL.
*ls_ekkn-orderid=ls_alv-aufnr.
*ENDIF.

IFls_ekknISNOTINITIAL.ls_ekkn
-po_item=ls_alv-ebelp.ls_ekkn
-quantity=ls_item-quantity.ls_ekkn
-serial_no='01'.
APPENDls_ekknTOlt_ekkn.
ENDIF.

"--POACCOUNTX中的欄位
CLEARls_ekknx.
IFls_alv-kostlISNOTINITIAL.ls_ekknx
-costcenter=abap_on."成本中心
ENDIF.
IFls_alv-saktoISNOTINITIAL.ls_ekknx
-gl_account=abap_on."會計科目
ENDIF.
IFls_alv-anln1ISNOTINITIAL.ls_ekknx
-asset_no=abap_on."主資產號
ENDIF.
*IFls_alv-posidISNOTINITIAL.
*ls_ekknx-wbs_element=abap_on."WBS
*ENDIF.

*IFls_alv-aufnrISNOTINITIAL.
*ls_ekknx-orderid=abap_on.
*ENDIF.

IFls_ekknxISNOTINITIAL.ls_ekknx
-po_item=ls_alv-ebelp.ls_ekknx
-serial_no='01'.ls_ekknx
-quantity=abap_on.
APPENDls_ekknxTOlt_ekknx.
ENDIF.
"--POACCOUNT中的欄位------------------------------------end

"條件價格lm_append_condls_alv
-kschl1ls_alv-kbetr1ls_alv-kpein1.lm_append_condls_alv
-kschl2ls_alv-kbetr2ls_alv-kpein2.lm_append_condls_alv
-kschl3ls_alv-kbetr3ls_alv-kpein3.lm_append_condls_alv
-kschl4ls_alv-kbetr4ls_alv-kpein4.lm_append_condls_alv
-kschl5ls_alv-kbetr5ls_alv-kpein5.

"擴充套件欄位ls_te_mepoitem
-po_item=ls_alv-ebelp.ls_te_mepoitem
-zcgpp=ls_alv-zcgpp.lv_te_value
=ls_te_mepoitem.ls_extensionin
-structure='BAPI_TE_MEPOITEM'.ls_extensionin
-valuepart1=lv_te_value(240).ls_extensionin
-valuepart2=lv_te_value+240(240).ls_extensionin
-valuepart3=lv_te_value+480(240).ls_extensionin
-valuepart4=lv_te_value+720(240).
APPENDls_extensioninTOlt_extensionin.ls_te_mepoitemx

-po_item=ls_alv-ebelp.ls_te_mepoitemx
-zcgpp='X'.lv_te_value
=ls_te_mepoitemx.ls_extensionin
-structure='BAPI_TE_MEPOITEMX'.ls_extensionin
-valuepart1=lv_te_value(240).ls_extensionin
-valuepart2=lv_te_value+240(240).ls_extensionin
-valuepart3=lv_te_value+480(240).ls_extensionin
-valuepart4=lv_te_value+720(240).
APPENDls_extensioninTOlt_extensionin.

"---------------------------------------------------
"建立PO
"---------------------------------------------------
ATENDOFebeln.

CLEAR:ls_header_o,lv_ebeln.lv_ebeln_o
=ls_alv-ebeln.

CALLFUNCTION'BAPI_PO_CREATE1'
EXPORTINGpoheader
=ls_headerpoheaderx
=ls_headerx
IMPORTINGexppurchaseorder
=lv_ebelnexpheader
=ls_header_o
TABLES
return=lt_returnpoitem
=lt_itempoitemx
=lt_itemxposchedule
=lt_eketposchedulex
=lt_eketxpoaccount
=lt_ekknpoaccountx
=lt_ekknxpocond
=lt_condpocondx
=lt_condxextensionin
=lt_extensionin.

CLEARlv_index.
LOOPATlt_alvINTOls_alv_tmp2.lv_index
=lv_index+1.
*成功的時候
IFlv_ebelnISNOTINITIAL.ls_alv_tmp2
-icon=icon_led_green.
CONCATENATETEXT-c12lv_ebeln'被正確的建立'INTOls_alv_tmp2-remark.ls_alv_tmp2
-ebeln=lv_ebeln.
APPENDls_alv_tmp2TOgt_alv2.

ELSE.
*錯誤訊息
LOOPATlt_returnINTOls_return
WHERE(type='E'ORtype='A')
ANDrow=lv_index.ls_alv_tmp2
-icon=icon_led_red.ls_alv_tmp2
-remark=ls_return-message.
APPENDls_alv_tmp2TOgt_alv2.
ENDLOOP.

CALLFUNCTION'BAPI_TRANSACTION_ROLLBACK'.

ENDIF.
ENDLOOP.
ENDAT.

ENDLOOP.

READTABLEgt_alv2TRANSPORTINGNOFIELDS
WITHKEYicon=icon_led_red.

IFsy-subrc<>0.
CALLFUNCTION'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait=abap_on.

*LOOPATgt_alv2INTOls_alv.
***SELECTSINGLE*
***FROMekpo
***INTOls_ekpo
***WHEREebeln=ls_alv-ebeln
***ANDebelp=ls_alv-ebelp.
*專案編號
***IFls_alv-zxmbhISNOTINITIAL.
***ls_ekpo-zxmbh=ls_alv-zxmbh.
***ENDIF.

*客戶編碼
***IFls_alv-zkhbmISNOTINITIAL.
***ls_ekpo-zkhbm=ls_alv-zkhbm.
***ENDIF.

*採購分類
***IFls_alv-zcgflISNOTINITIAL.
***ls_ekpo-zcgfl=ls_alv-zcgfl.
***ENDIF.

***UPDATEekpoSETzxmbh=ls_ekpo-zxmbh
***zkhbm=ls_ekpo-zkhbm
***zcgfl=ls_ekpo-zcgfl
***WHEREebeln=ls_alv-ebeln
***ANDebelp=ls_alv-ebelp.
***
***IFsy-subrc=0.
***COMMITWORKANDWAIT.
***ENDIF.
*ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_INPUT
*&---------------------------------------------------------------------*
*&內外部轉換
*&---------------------------------------------------------------------*
*&<--EV_FILED專案ID
*&---------------------------------------------------------------------*
FORMsub_inputCHANGINGev_filedTYPEany.

*ALPHA轉換
CALLFUNCTION'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input=ev_filed
IMPORTING
output=ev_filed.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_SET_PF_STATUS
*&---------------------------------------------------------------------*
*&設定選單欄
*&---------------------------------------------------------------------*
*-->IT_EXTAB按鈕
*----------------------------------------------------------------------*
FORMsub_set_pf_status2USINGit_extabTYPEslis_t_extab.

DATA:ls_extabTYPEslis_extab.
"copy程式SAPLKKBL的GUI狀態STANDARD_FULLSCREENls_extab
-fcode='IMPORT'.
APPENDls_extabTOit_extab.
SETPF-STATUS'STANDARD_ALV1'EXCLUDINGit_extab.
*標題欄
SETTITLEBAR'T02'.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_REPLACE_SAKTO
*&---------------------------------------------------------------------*
*&總賬科目替代
*&---------------------------------------------------------------------*
*<--ES_ALV預覽畫面資料
*&---------------------------------------------------------------------*
FORMsub_replace_saktoCHANGINGes_alvTYPEty_alv.

***SELECTSINGLEhkont
***INTOes_alv-sakto
***FROMztfi_kmtd
***WHEREzcoobject='WBS'
***ANDzlx='YF'.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_GET_ZXMBH
*&---------------------------------------------------------------------*
*&取得其他資料
*&---------------------------------------------------------------------*
*&<--ES_ALV預覽畫面資料
*&---------------------------------------------------------------------*
FORMsub_get_zxmbhCHANGINGes_alvTYPEty_alv.

***SELECTb~pspid
***FROMprpsASa
***INNERJOINprojASb
***ONa~psphi=b~pspnr
***INTOes_alv-zxmbh
***UPTO1ROWS
***WHEREa~posid=es_alv-posid.
***ENDSELECT.
**
***IFsy-subrc=0.
***SELECTkunnr
***FROMprps
***INTOes_alv-zkhbm
***UPTO1ROWS
***WHEREposid=es_alv-zxmbh.
***ENDSELECT.
***ENDIF.
ENDFORM.