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

ABAP-批導採購訂單收貨

*&---------------------------------------------------------------------*
*&ReportZMMR_035
*&---------------------------------------------------------------------*
*&Responsibility
*&---------------------------------------------------------------------*
*&ProgramName:採購訂單批量收貨
*&Datewritten:2019.12.02
*&Author'sname:AQJT_ABAP2
*&Lastupdate:2019.12.02
*&Programtitle:採購訂單批量收貨
*&ProjectName:安全集團SAP重新上線
*&Version:Ver.1.0
*&---------------------------------------------------------------------*
*&Description:(Incl.RelatedFunctionAreaandSystem)
*&---------------------------------------------------------------------*
*&ChangeHistory
*&---------------------------------------------------------------------*
*&Date|Programmer|Corr.#|Description
*&
*&
*&---------------------------------------------------------------------*
REPORTzmmr_035.

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

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

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

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

*----------------------------------------------------------------------*
*TYPES*
*----------------------------------------------------------------------*
TYPES:
*上傳用
BEGINOFty_upload,
iconTYPEstring,"狀態
remarkTYPEstring,"訊息
zeileTYPEi,"物料憑證中的專案
filed01TYPEstring,"專案01
filed02TYPEstring,"專案02
filed03TYPEstring,"專案03
filed04TYPEstring,"專案04
filed05TYPEstring,"專案05
filed06TYPEstring,"專案06
ENDOFty_upload,

*出力用
BEGINOFty_alv,
zeileTYPEi,"物料憑證中的專案
ebelnTYPEmseg-ebeln,"採購訂單號
ebelpTYPEmseg-ebelp,"採購憑證的專案編號
budatTYPEmkpf-budat,"過帳日期
mengeTYPEmseg-menge,"數量
lgortTYPEmseg-lgort,"庫位
chargTYPEmseg-charg,"批次
iconTYPEstring,"狀態
remarkTYPEstring,"訊息
ENDOFty_alv.

*----------------------------------------------------------------------*
*DATA*
*----------------------------------------------------------------------*
*全域性內表定義
DATA:gt_uploadTYPESTANDARDTABLEOFty_upload,"上傳
gt_alvTYPESTANDARDTABLEOFty_alv,"出力
gt_fieldcatTYPEslis_t_fieldcat_alv,"ALV控制

*全域性構造定義
gs_fieldcatTYPEslis_fieldcat_alv,"ALV控制
gs_layoutTYPEslis_layout_alv,"ALV佈局
g_function_keyTYPEsmp_dyntxt."功能按鈕

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

*----------------------------------------------------------------------*
*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_mimeTYPEw3mime,"MIME資料容器
lc_fullpathTYPEstringVALUE'c:\',"檔案路徑
lc_pathTYPEstringVALUE'c:\',"檔案路徑
lc_nameTYPEstring,"檔名稱
ls_destinationTYPErlgrap-filename,"檔名
ls_objnamTYPEstring,"SAPWWW閘道器物件名
l_rcTYPEsy-subrc,"返回碼
ls_errtxtTYPEstring,"錯誤訊息
l_destTYPEsapb-sappfad."SAP存檔連結檔案路徑

*模板下載路徑名
lc_name=TEXT-001.
CALLMETHODcl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title='模板下載'
default_extension='xlsx'
default_file_name=lc_name
CHANGING
filename=lc_name
path=lc_path
fullpath=lc_fullpath
EXCEPTIONS
cntl_error=1
error_no_gui=2
not_supported_by_gui=3
invalid_default_file_name=4
OTHERS=5.
*沒有選擇路徑
IFlc_fullpath=''.
MESSAGE'請選擇正確的路徑!'TYPE'E'.
ELSE.
*-路徑名
l_dest=lc_fullpath.

SELECTSINGLE
relid"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.
MESSAGEe000(00)WITHls_errtxt.
ENDIF.

ls_destination=l_dest.
CALLFUNCTION'DOWNLOAD_WEB_OBJECT'
EXPORTING
key=lo_objdata
destination=ls_destination
IMPORTING
rc=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_line
TYPEi,"物料憑證中的專案l_zeile
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.l_zeile
=0.l_line
=1.
LOOPATlt_excelINTOls_excel.
*IFls_excel-row=1.
*CONTINUE.
*ENDIF.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.
IFl_line>p_zeile.l_line
=1.l_zeile
=l_zeile+1.
ELSE.l_line
=l_line+1.
ENDIF.ls_upload
-zeile=l_zeile.ls_upload
-icon=icon_light_out.
APPENDls_uploadTOgt_upload.
CLEARls_upload.
ENDAT.
ENDLOOP.

*上傳資料不存在
IFgt_uploadISINITIAL.
MESSAGETEXT-m03TYPE'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-filed01
CHANGINGls_alv.

*採購訂單
PERFORMsub_check_ebelnUSINGls_upload-filed02ls_upload
-filed03
CHANGINGls_alv.

*數量
PERFORMsub_check_mengeUSINGls_upload-filed04
CHANGINGls_alv.

CHECKls_alv-remarkISINITIAL.

APPENDls_alvTOgt_alv.

ENDLOOP.

SORTgt_alvBYebelnASCENDINGebelp
ASCENDING.

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

-icon=is_upload-icon.es_alv
-remark=is_upload-remark.es_alv
-zeile=is_upload-zeile.es_alv
-budat=is_upload-filed01.es_alv
-ebeln=is_upload-filed02.es_alv
-ebelp=is_upload-filed03.es_alv
-menge=is_upload-filed04.es_alv
-lgort=is_upload-filed05.es_alv
-charg=is_upload-filed06.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_BUDAT
*&---------------------------------------------------------------------*
*過帳日期
*----------------------------------------------------------------------*
*-->IV_BUDAT過帳日期
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_bedatUSINGiv_budatTYPEstring
CHANGINGes_alvTYPEty_alv.

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

CHECKes_alv-iconISINITIAL.

*日期檢查
PERFORMsub_check_dateUSINGes_alv-budat
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_EBELN
*&---------------------------------------------------------------------*
*採購訂單檢查
*----------------------------------------------------------------------*
*-->IV_EBELN採購訂單號
*-->IV_EBELP採購憑證的專案編號
*<--ES_ALV預覽畫面資料
*----------------------------------------------------------------------*
FORMsub_check_ebelnUSINGiv_ebelnTYPEstringiv_ebelp
TYPEstring
CHANGINGes_alvTYPEty_alv.

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

CHECKes_alv-iconISINITIAL.

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

CHECKes_alv-iconISINITIAL.

*存在檢查
SELECTSINGLECOUNT(*)
FROMekpo
WHEREebeln=es_alv-ebeln
ANDebelp=es_alv-ebelp.

*取得失敗時
IFsy-subrc<>0.es_alv
-icon=icon_led_red.
MESSAGEe019(06)WITHes_alv-ebelnINTOes_alv-remark.
APPENDes_alvTOgt_alv.
ENDIF.

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

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

CHECKes_alv-remarkISINITIAL.

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

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_CHECK_NUMBER
*&---------------------------------------------------------------------*
*數值檢查
*----------------------------------------------------------------------*
*-->IV_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_DISPLAY_DATA
*&---------------------------------------------------------------------*
*&alv顯示
*&---------------------------------------------------------------------*
FORMsub_display_data.

*設定ALV出力欄位
PERFORMsub_set_fieldcat.

*設定ALV佈局
PERFORMsub_set_layout.

*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_fieldcat
TABLESt_outtab
=gt_alv
EXCEPTIONSprogram_error
=1
OTHERS=2.

*失敗時
IFsy-subrc<>0.
*輸出訊息
MESSAGETEXT-m01TYPE'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''BUDAT'TEXT-c0404.mcr_set_fieldcat
'GT_ALV''EBELN'TEXT-c0505.mcr_set_fieldcat
'GT_ALV''EBELP'TEXT-c0606.mcr_set_fieldcat
'GT_ALV''MENGE'TEXT-c0707.mcr_set_fieldcat
'GT_ALV''LGORT'TEXT-c0808.mcr_set_fieldcat
'GT_ALV''CHARG'TEXT-c0909.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_SET_LAYOUT
*&---------------------------------------------------------------------*
*&設定ALV佈局
*&---------------------------------------------------------------------*
FORMsub_set_layout.gs_layout

-zebra=abap_on.gs_layout
-colwidth_optimize=abap_on.

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

DATA:ls_extabTYPEslis_extab.

"copy程式SAPLKKBL的GUI狀態STANDARD_FULLSCREEN
SETPF-STATUS'STANDARD_ALV1'EXCLUDINGit_extab.
*標題欄
*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.is_selfield

-refresh=abap_on.
ENDIF.

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

READTABLEgt_alvTRANSPORTINGNOFIELDS
WITHKEYicon=icon_led_red.

*讀取成功
IFsy-subrc=0.
MESSAGETEXT-m02TYPE'E'.
ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_IMPORT_DATA
*&---------------------------------------------------------------------*
*&資料匯入處理
*&---------------------------------------------------------------------*
FORMsub_import_data.

DATA:ls_alvTYPEty_alv,ls_alv_tmp
TYPEty_alv,ls_alv_tmp2
TYPEty_alv,ls_goodsmvt_header
TYPEbapi2017_gm_head_01,ls_goodsmvt_code
TYPEbapi2017_gm_code,ls_goodsmvt_headret
TYPEbapi2017_gm_head_ret,ls_goodsmvt_item
TYPEbapi2017_gm_item_create,lt_goodsmvt_item
TYPETABLEOFbapi2017_gm_item_create,lt_return
TYPETABLEOFbapiret2,ls_return
TYPEbapiret2,lv_matdoc
TYPEbapi2017_gm_head_ret-mat_doc,lt_alv
TYPETABLEOFty_alv,lv_index
TYPEi,lv_index_f
TYPEi,lv_index_t
TYPEi,ls_mcha
TYPEmcha,lv_lgort
TYPEmchb-lgort,ls_clbatch
TYPEclbatch,lt_clbatch
TYPETABLEOFclbatch,lv_charg
TYPEmseg-charg.

SORTgt_alvBYzeileASCENDINGebeln
ASCENDINGebelp
ASCENDING.lt_alv

=gt_alv.
CLEARgt_alv.

LOOPATlt_alvINTOls_alv_tmpWHEREicon=icon_light_out.ls_alv

=ls_alv_tmp.

ATNEWebeln.
"--釋放資源
CLEAR:ls_goodsmvt_header,ls_goodsmvt_code
,lt_goodsmvt_item
,lt_return
.

*新增抬頭資訊ls_goodsmvt_header
-pstng_date=ls_alv-budat.ls_goodsmvt_header
-doc_date=sy-datum.ls_goodsmvt_header
-pr_uname=sy-uname.ls_goodsmvt_code
-gm_code='01'.lv_index
=lv_index_t.
ENDAT.lv_index_t

=lv_index_t+1.

*新增行專案資訊
CLEARls_goodsmvt_item.ls_goodsmvt_item
-po_number=ls_alv-ebeln.ls_goodsmvt_item
-po_item=ls_alv-ebelp.ls_goodsmvt_item
-entry_qnt=ls_alv-menge.ls_goodsmvt_item
-stge_loc=ls_alv-lgort.ls_goodsmvt_item
-move_type='101'.ls_goodsmvt_item
-mvt_ind='B'.
IFls_alv-chargISNOTINITIAL.ls_goodsmvt_item
-batch=ls_alv-charg.
ENDIF.
APPENDls_goodsmvt_itemTOlt_goodsmvt_item.

APPENDls_alvTOgt_alv.
"---------------------------------------------------
"建立物料憑證
"---------------------------------------------------
ATENDOFebeln.

CLEAR:ls_goodsmvt_headret,lv_matdoc,lt_return[].

*呼叫BAPI
CALLFUNCTION'BAPI_GOODSMVT_CREATE'
EXPORTINGgoodsmvt_header
=ls_goodsmvt_headergoodsmvt_code
=ls_goodsmvt_code
IMPORTINGgoodsmvt_headret
=ls_goodsmvt_headretmaterialdocument
=lv_matdoc
TABLESgoodsmvt_item
=lt_goodsmvt_item
return=lt_return.

*成功的時候
IFlv_matdocISNOTINITIAL.ls_alv
-icon=icon_led_green.
CONCATENATETEXT-m04lv_matdocTEXT-m05INTOls_alv-remark.
MODIFYgt_alvFROMls_alvTRANSPORTINGiconremarkWHEREicon=icon_light_out.
CALLFUNCTION'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait=abap_on.
ELSE.
*錯誤訊息
LOOPATlt_returnINTOls_return
WHERE(type='E'ORtype='A').ls_alv
-icon=icon_led_red.ls_alv
-remark=ls_return-message.lv_index_f
=lv_index+ls_return-row.
MODIFYgt_alvINDEXlv_index_fFROMls_alvTRANSPORTINGiconremark.
ENDLOOP.ls_alv

-icon=icon_led_red.ls_alv
-remark=TEXT-m06.
MODIFYgt_alvFROMls_alvTRANSPORTINGiconremarkWHEREicon=icon_light_out.
CALLFUNCTION'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
*CLEARlv_index.
*LOOPATlt_alvINTOls_alv_tmp2.
*lv_index=lv_index+1.
**成功的時候
*IFlv_matdocISNOTINITIAL.
*
*IFls_alv_tmp2-grdateISNOTINITIAL
*ORls_alv_tmp2-vendorISNOTINITIAL
*ORls_alv_tmp2-zwzppISNOTINITIAL
*ORls_alv_tmp2-zbcISNOTINITIAL.
*CLEAR:ls_mcha,
*lt_clbatch,
*lt_return.
*
**修改批次特性
*ls_mcha-matnr=ls_alv_tmp2-matnr.
*ls_mcha-werks=ls_alv_tmp2-werks.
*ls_mcha-charg=ls_alv_tmp2-charg.
*ls_mcha-lifnr=ls_alv_tmp2-vendor.
*ls_mcha-lwedt=ls_alv_tmp2-grdate.
*lv_lgort=ls_alv_tmp2-lgort.
*
**收貨日期
*IFls_alv-grdateISNOTINITIAL.
*CLEARls_clbatch.
*ls_clbatch-atnam='ZMM_GRDATE'.
*ls_clbatch-atwtb=ls_alv-grdate.
*APPENDls_clbatchTOlt_clbatch.
*ENDIF.
*
**供應商
*IFls_alv-vendorISNOTINITIAL.
*CLEARls_clbatch.
*ls_clbatch-atnam='ZMM_VENDOR'.
*ls_clbatch-atwtb=ls_alv-vendor.
*APPENDls_clbatchTOlt_clbatch.
*ENDIF.
*
**品牌
*IFls_alv-zwzppISNOTINITIAL.
*CLEARls_clbatch.
*ls_clbatch-atnam='ZMM_ZWZPP'.
*ls_clbatch-atwtb=ls_alv-zwzpp.
*APPENDls_clbatchTOlt_clbatch.
*ENDIF.
*
**版次
*IFls_alv-zbcISNOTINITIAL.
*CLEARls_clbatch.
*ls_clbatch-atnam='ZMM_ZBC'.
*ls_clbatch-atwtb=ls_alv-zbc.
*APPENDls_clbatchTOlt_clbatch.
*ENDIF.
*
*CALLFUNCTION'VB_CREATE_BATCH'
*EXPORTING
*ymcha=ls_mcha
*new_lgort=lv_lgort
*kzcla='1'
*xkcfc='X'
*TABLES
*char_of_batch=lt_clbatch
*return=lt_return
*EXCEPTIONS
*no_material=1
*no_batch=2
*no_plant=3
*material_not_found=4
*plant_not_found=5
*lock_on_material=6
*lock_on_plant=7
*lock_on_batch=8
*lock_system_error=9
*no_authority=10
*batch_not_exist=11
*no_class=12
*error_in_classification=13
*error_in_valuation_change=14
*error_in_status_change=15
*region_of_origin_not_found=16
*country_of_origin_not_found=17
*OTHERS=18.
*
**成功時
*IFsy-subrc=0.
*ls_alv_tmp2-icon=icon_led_green.
*CONCATENATETEXT-c20lv_matdoc'被正確的建立'INTOls_alv_tmp2-remark.
*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.
*
*IFsy-subrc<>0.
**錯誤訊息
*LOOPATlt_returnINTOls_return
*WHERE(type='E'ORtype='A')
*ANDrow=0.
*ls_alv_tmp2-icon=icon_led_red.
*ls_alv_tmp2-remark=ls_return-message.
*APPENDls_alv_tmp2TOgt_alv2.
*ENDLOOP.
*ENDIF.
*
*CALLFUNCTION'BAPI_TRANSACTION_ROLLBACK'.
*ENDIF.
*ELSE.
*ls_alv_tmp2-icon=icon_led_green.
*CONCATENATETEXT-c20lv_matdoc'被正確的建立'INTOls_alv_tmp2-remark.
*APPENDls_alv_tmp2TOgt_alv2.
*ENDIF.
*
*CALLFUNCTION'BAPI_TRANSACTION_COMMIT'
*EXPORTING
*wait=abap_on.
*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.
*
*IFsy-subrc<>0.
**錯誤訊息
*LOOPATlt_returnINTOls_return
*WHERE(type='E'ORtype='A')
*ANDrow=0.
*ls_alv_tmp2-icon=icon_led_red.
*ls_alv_tmp2-remark=ls_return-message.
*APPENDls_alv_tmp2TOgt_alv2.
*ENDLOOP.
*ENDIF.
*
*CALLFUNCTION'BAPI_TRANSACTION_ROLLBACK'.
*ENDIF.
*ENDLOOP.
ENDAT.
ENDLOOP.

IFsy-subrc<>0.
MESSAGETEXT-m04TYPE'E'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&FormSUB_SET_PF_STATUS2
*&---------------------------------------------------------------------*
*&設定選單欄
*&---------------------------------------------------------------------*
*-->IT_EXTAB按鈕
*----------------------------------------------------------------------*
*FORMsub_set_pf_status2USINGit_extabTYPEslis_t_extab.
*
*DATA:ls_extabTYPEslis_extab.
*"copy程式SAPLKKBL的GUI狀態STANDARD_FULLSCREEN
*ls_extab-fcode='IMPORT'.
*APPENDls_extabTOit_extab.
*SETPF-STATUS'STANDARD'EXCLUDINGit_extab.
**標題欄
*SETTITLEBAR'T02'.
*ENDFORM.