*&---------------------------------------------------------------------*
*& Program Name : ZMMF_246 *
*& Title : 調撥采購訂單創建 *
*& Module Name : MM *
*& Sub-Module : *
*& Author : CJH *
*& Create Date : 2021-08-30 *
*& Logical DB : NOTHING *
*& Program Type : FUNCTION *
*&---------------------------------------------------------------------*
*& REVISION LOG *
*& LOG# DATE AUTHOR DESCRIPTION *
*& ---- ---- ---------- ----------- *
*& 0000 2021-08-30 CJH CREATE *
************************************************************************
REPORT zmmf_246.
TABLES:ekko,ekpo.
*----------------------------------------------------------------------*
* 內表/工作區定義
*----------------------------------------------------------------------*
TYPES:BEGIN OF ty_out,
box(1) TYPE c, "勾選
znum(5) TYPE n, "序號
matnr TYPE matnr,
txz01 TYPE makt-maktx,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
zbreadth TYPE ztbc_001-zbreadth,
zlength TYPE ztbc_001-zlength,
zsjjs1 TYPE ztbc_001-zsjjs1,
inco2 TYPE ztbc_001-zbzfs1, "包裝方式
tdline TYPE /atl/kpsp_t-msgtxt, "備注
eindt TYPE sy-datum,
werks TYPE ekpo-werks,
reslo TYPE lgort_d,
lgobe1 TYPE t001l-lgobe,
lgort TYPE mseg-lgort,
lgobe2 TYPE t001l-lgobe,
matkl TYPE mara-matkl,
wgbez TYPE t023t-wgbez,
vbeln TYPE vbak-vbeln,
vbelp TYPE posnr,
ebeln TYPE ekko-ebeln,
ebelp TYPE ekpo-ebelp,
zstatus TYPE char1,
zmesg TYPE bapi_msg,
zzgg01 TYPE mara-zzgg01, "物料長文本
END OF ty_out.
DATA:gs_out TYPE ty_out,
gt_out TYPE STANDARD TABLE OF ty_out.
*ALV相關變量
DATA:gs_alv TYPE REF TO cl_gui_alv_grid, "ALV類
gs_con TYPE REF TO cl_gui_custom_container, "容器類
gt_fieldcat TYPE lvc_t_fcat, "列格式
gs_fieldcat TYPE lvc_s_fcat, "列格式-結構
gs_stable TYPE lvc_s_stbl, "光標
gs_layout TYPE lvc_s_layo, "輸出格式
gt_output TYPE STANDARD TABLE OF sflight,
ok_code TYPE sy-ucomm.
DATA: BEGIN OF itab OCCURS 0 ,
lgort LIKE t001l-lgort,
lgobe LIKE t001l-lgobe,
END OF itab.
DATA: return_tab TYPE ddshretval OCCURS 0 .
DATA:gv_flg TYPE c.
CONSTANTS:gc_con TYPE c VALUE 'X'.
*&---------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*&---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION .
PUBLIC SECTION .
METHODS handle_modify
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified et_good_cells.
" 聲明Toolbar事件方法
METHODS handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
" 聲明USER-COMMAND 事件方法
METHODS handle_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS .
DATA:gt_event_receiver TYPE REF TO lcl_event_receiver.
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION .
METHOD handle_modify.
DATA: stbl TYPE lvc_s_stbl,
ls_out TYPE ty_out,
es_good_cells TYPE lvc_s_modi.
LOOP AT et_good_cells INTO es_good_cells WHERE fieldname = 'MATNR' OR fieldname = 'ZBREADTH' OR fieldname = 'ZLENGTH' OR fieldname = 'ZSJJS1' OR
fieldname = 'RESLO' OR fieldname = 'LGORT' .
CASE es_good_cells-fieldname.
WHEN'ZBREADTH' OR 'ZLENGTH' OR 'ZSJJS1'.
READ TABLE gt_out ASSIGNING FIELD-SYMBOL(<fs_event>) INDEX es_good_cells-row_id.
DATA: lv_zbreadth TYPE string.
lv_zbreadth = <fs_event>-zbreadth.
REPLACE ALL OCCURRENCES OF ',' IN lv_zbreadth WITH ''.
CONDENSE lv_zbreadth.
<fs_event>-zbreadth = lv_zbreadth.
lv_zbreadth = <fs_event>-zlength.
REPLACE ALL OCCURRENCES OF ',' IN lv_zbreadth WITH ''.
CONDENSE lv_zbreadth.
<fs_event>-zlength = lv_zbreadth.
lv_zbreadth = <fs_event>-zsjjs1.
REPLACE ALL OCCURRENCES OF ',' IN lv_zbreadth WITH ''.
CONDENSE lv_zbreadth.
<fs_event>-zsjjs1 = lv_zbreadth.
WHEN OTHERS.
ENDCASE.
IF es_good_cells-fieldname = 'MATNR'.
READ TABLE gt_out INTO ls_out INDEX es_good_cells-row_id.
IF sy-subrc = 0.
"取物料名稱
SELECT SINGLE maktx
INTO @ls_out-txz01
FROM makt
WHERE matnr = @ls_out-matnr.
"取單位,寬度,物料組
SELECT SINGLE meins,zzkd01,matkl,zzgg01
INTO @DATA(ls_mara)
FROM mara
WHERE matnr = @ls_out-matnr.
IF sy-subrc = 0 .
ls_out-meins = ls_mara-meins.
ls_out-zbreadth = ls_mara-zzkd01.
ls_out-matkl = ls_mara-matkl.
ls_out-zzgg01 = ls_mara-zzgg01.
ENDIF.
SELECT SINGLE wgbez
INTO ls_out-wgbez
FROM t023t
WHERE matkl = ls_out-matkl.
**美的客戶
IF ls_out-lgort = '1530'.
* SELECT SINGLE zlength,zwidth
* INTO @DATA(ls_midea)
* FROM ztsd_midea
* WHERE matnr = @ls_out-matnr.
* IF sy-subrc = 0.
* ls_out-zlength = ls_midea-zlength / 1000 .
* ls_out-zbreadth = ls_midea-zwidth.
* ENDIF.
ENDIF.
ENDIF.
MODIFY gt_out FROM ls_out INDEX es_good_cells-row_id TRANSPORTING matnr txz01 meins zbreadth matkl wgbez zlength zzgg01.
ENDIF.
IF es_good_cells-fieldname = 'ZBREADTH' OR es_good_cells-fieldname = 'ZLENGTH' OR es_good_cells-fieldname = 'ZSJJS1'.
READ TABLE gt_out INTO ls_out INDEX es_good_cells-row_id.
IF sy-subrc = 0.
ls_out-menge = ls_out-zbreadth / 1000 * ls_out-zlength * ls_out-zsjjs1 .
ENDIF.
MODIFY gt_out FROM ls_out INDEX es_good_cells-row_id TRANSPORTING zbreadth zlength zsjjs1 menge.
ENDIF.
IF es_good_cells-fieldname = 'RESLO'.
READ TABLE gt_out INTO ls_out INDEX es_good_cells-row_id.
IF sy-subrc = 0.
"取發出庫位名稱
SELECT SINGLE lgobe
INTO @ls_out-lgobe1
FROM t001l
WHERE werks = @ls_out-werks AND lgort = @ls_out-reslo.
ENDIF.
MODIFY gt_out FROM ls_out INDEX es_good_cells-row_id TRANSPORTING reslo lgobe1.
ENDIF.
IF es_good_cells-fieldname = 'LGORT'.
READ TABLE gt_out INTO ls_out INDEX es_good_cells-row_id.
IF sy-subrc = 0.
"取接收庫位名稱
SELECT SINGLE lgobe
INTO @ls_out-lgobe2
FROM t001l
WHERE werks = @ls_out-werks AND lgort = @ls_out-lgort.
ENDIF.
MODIFY gt_out FROM ls_out INDEX es_good_cells-row_id TRANSPORTING lgort lgobe2.
ENDIF.
ENDLOOP.
"HANDLE_COMMAND
PERFORM frm_refresh_alv.
ENDMETHOD.
" 實現Toolbar事件方法
METHOD handle_toolbar.
DATA: ls_toolbar TYPE stb_button.
CLEAR: ls_toolbar.
ls_toolbar-butn_type = 3. " 分隔符
APPEND ls_toolbar TO e_object->mt_toolbar.
CLEAR: ls_toolbar.
ls_toolbar-function = 'ADD'. " 功能碼
ls_toolbar-icon = icon_insert_row. " 圖標名稱
ls_toolbar-quickinfo = '添加行'. " 圖標的提示信息
ls_toolbar-butn_type = 0. " 0表示正常按鈕
ls_toolbar-disabled = ''. " X表示灰色,不可用
ls_toolbar-text = '添加行'. " 按鈕上顯示的文本
APPEND ls_toolbar TO e_object->mt_toolbar.
CLEAR: ls_toolbar.
ls_toolbar-function = 'DEL'. " 功能碼
ls_toolbar-icon = icon_delete_row. " 圖標名稱
ls_toolbar-quickinfo = '添加行'. " 圖標的提示信息
ls_toolbar-butn_type = 0. " 0表示正常按鈕
ls_toolbar-disabled = ''. " X表示灰色,不可用
ls_toolbar-text = '刪除行'. " 按鈕上顯示的文本
APPEND ls_toolbar TO e_object->mt_toolbar.
CLEAR: ls_toolbar.
ls_toolbar-function = 'CREA'. " 功能碼
ls_toolbar-icon = icon_create. " 圖標名稱
ls_toolbar-quickinfo = '創建'. " 圖標的提示信息
ls_toolbar-butn_type = 0. " 0表示正常按鈕
ls_toolbar-disabled = ''. " X表示灰色,不可用
ls_toolbar-text = '創建調撥PO'. " 按鈕上顯示的文本
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar
" 實現USER-COMMAND 事件方法
METHOD handle_command.
CASE e_ucomm.
WHEN 'ADD'.
DATA(lv_line) = lines( gt_out ).
READ TABLE gt_out INTO DATA(ls_out) INDEX lv_line.
IF sy-subrc = 0.
gs_out-werks = ls_out-werks.
gs_out-reslo = ls_out-reslo.
gs_out-lgort = ls_out-lgort.
gs_out-lgobe1 = ls_out-lgobe1.
gs_out-lgobe2 = ls_out-lgobe2.
ENDIF.
gs_out-box = 'X'.
gs_out-znum = lv_line + 1.
APPEND gs_out TO gt_out.
WHEN 'DEL'.
DATA: v_row TYPE i, "行
v_col TYPE i. "列
CALL METHOD gs_alv->get_current_cell
IMPORTING
e_row = v_row
e_col = v_col.
DELETE gt_out WHERE box = 'X' .
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) WHERE znum > v_row.
<fs_out>-znum = <fs_out>-znum - 1 .
ENDLOOP.
WHEN 'CREA' .
PERFORM frm_check_select.
PERFORM frm_create_order.
ENDCASE.
PERFORM frm_refresh_alv.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& SELECTION SCREEN/選擇屏幕
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE TEXT-001.
PARAMETERS:p_werks TYPE mseg-werks OBLIGATORY, "工廠
p_reslo TYPE lgort_d,
p_lgort TYPE lgort_d,
p_rows TYPE int1.
SELECTION-SCREEN END OF BLOCK blk.
*&---------------------------------------------------------------------*
*& INITIALIZATION/初始化事件
*&---------------------------------------------------------------------*
INITIALIZATION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_reslo .
PERFORM read_werks_values.
PERFORM f4_2 .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_lgort .
PERFORM read_werks_values.
PERFORM f4_1 .
*---------------------------------------------------------------------*
* AT SELECTION-SCREEN/開始選擇屏幕前 *
*---------------------------------------------------------------------*
AT SELECTION-SCREEN.
IF sy-ucomm = 'ONLI'.
AUTHORITY-CHECK OBJECT 'M_BEST_WRK'
* ID 'ACTVT' FIELD '03'
ID 'WERKS' FIELD p_werks.
IF sy-subrc <> 0.
MESSAGE '您沒有查看該工廠的權限!' TYPE 'E'.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Start-of-selection/開始選擇屏幕 *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
"獲取數據
PERFORM frm_get_data.
*&---------------------------------------------------------------------*
*& end-of-selection/結束選擇屏幕(程序結束處理,輸出等) *
*&---------------------------------------------------------------------*
END-OF-SELECTION.
CALL SCREEN 9000. "調用屏幕9000
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&------------------------------------- --------------------------------*
*& 獲取數據
*&---------------------------------------------------------------------*
FORM frm_get_data.
DATA lv_num TYPE int1.
DO p_rows TIMES.
lv_num = lv_num + 1 .
gs_out-znum = lv_num.
gs_out-werks = p_werks.
IF p_reslo IS NOT INITIAL.
gs_out-reslo = p_reslo.
SELECT SINGLE lgobe
INTO gs_out-lgobe1
FROM t001l
WHERE werks = p_werks AND lgort = p_reslo.
ENDIF.
IF p_lgort IS NOT INITIAL.
gs_out-lgort = p_lgort.
SELECT SINGLE lgobe
INTO gs_out-lgobe2
FROM t001l
WHERE werks = p_werks AND lgort = p_lgort.
ENDIF.
gs_out-box = 'X'.
APPEND gs_out TO gt_out.
CLEAR gs_out.
ENDDO.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'STATUS_9000'.
SET TITLEBAR 'TEXT01'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module INIT OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init OUTPUT.
IF gs_alv IS INITIAL.
PERFORM frm_create_alv.
"設置布局
PERFORM frm_set_layout.
"設置字段目錄
PERFORM frm_set_fieldcat.
"ALV展示
PERFORM frm_alv_out.
ELSE.
PERFORM frm_refresh_alv.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
DATA(lv_code) = ok_code.
CLEAR ok_code.
CASE lv_code.
WHEN '&F03' OR '&F12' OR '&F15'.
LEAVE TO SCREEN 0.
WHEN '&ALL'. "全選
PERFORM frm_sel_all.
WHEN '&SAL'. "取消全選
PERFORM frm_clear_all.
WHEN '&CREATE'. "生成條碼
PERFORM frm_check_select.
PERFORM frm_create_order.
PERFORM frm_refresh_alv.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form frm_sel_all
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_sel_all.
DATA: wlt_lines TYPE slis_t_filtered_entries,
wls_line TYPE LINE OF slis_t_filtered_entries.
REFRESH wlt_lines.
CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_GET'
IMPORTING
et_filtered_entries = wlt_lines
EXCEPTIONS
no_infos = 1
program_error = 2
OTHERS = 3.
SORT wlt_lines BY table_line.
LOOP AT gt_out INTO gs_out WHERE box = ''.
READ TABLE wlt_lines INTO wls_line WITH KEY table_line = sy-tabix BINARY SEARCH.
IF sy-subrc <> 0.
gs_out-box = 'X'.
MODIFY gt_out FROM gs_out TRANSPORTING box.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_clear_all
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_clear_all.
DATA: wlt_lines TYPE slis_t_filtered_entries,
wls_line TYPE LINE OF slis_t_filtered_entries.
REFRESH wlt_lines.
CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_GET'
IMPORTING
et_filtered_entries = wlt_lines
EXCEPTIONS
no_infos = 1
program_error = 2
OTHERS = 3.
SORT wlt_lines BY table_line.
LOOP AT gt_out INTO gs_out WHERE box = 'X'.
READ TABLE wlt_lines INTO wls_line WITH KEY table_line = sy-tabix BINARY SEARCH.
IF sy-subrc <> 0.
gs_out-box = ''.
MODIFY gt_out FROM gs_out TRANSPORTING box.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form create_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_create_alv.
"創建容器
CREATE OBJECT gs_con
EXPORTING
container_name = 'GC_CON'. "customer control控件的名稱
"將ALV植入到容器中
CREATE OBJECT gs_alv
EXPORTING
i_parent = gs_con.
CREATE OBJECT gt_event_receiver.
" 注冊事件handler方法
SET HANDLER gt_event_receiver->handle_modify FOR gs_alv.
SET HANDLER gt_event_receiver->handle_toolbar FOR gs_alv.
SET HANDLER gt_event_receiver->handle_command FOR gs_alv.
CALL METHOD gs_alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter. "回車觸發事件
CALL METHOD gs_alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified. "修改完成后光標移動觸發事件
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_layout
*&---------------------------------------------------------------------*
*& 設置布局
*&---------------------------------------------------------------------*
FORM frm_set_layout .
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat
*&---------------------------------------------------------------------*
*& 設置字段目錄
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat.
DATA: lv_name TYPE lvc_s_fcat-fieldname,
lv_scrtext TYPE lvc_s_fcat-scrtext_l.
REFRESH:gt_fieldcat.
PERFORM frm_build_fieldcat USING :
'BOX' 'X' '' '' '' '' '' '勾選' ,
'ZNUM' '' '' '' '' '' '' '序號' ,
'MATNR' 'X' '' 'X' 'MARA' 'MATNR' '' '物料編碼' ,
'TXZ01' '' '' '' 'MAKT' 'MAKTX' '' '物料名稱' ,
'ZZGG01' '' '' '' 'MARA' 'ZZGG01' '' '物料長文本' ,
'MENGE' 'X' '' 'X' 'EKPO' 'MENGE' '' '數量' ,
'MEINS' '' '' '' 'EKPO' 'MEINS' '' '單位' ,
'ZBREADTH' 'X' '' 'X' 'ZTBC_001' 'ZBREADTH' '' '寬度MM' ,
'ZLENGTH' 'X' '' 'X' 'ZTBC_001' 'ZLENGTH' '' '長度M' ,
'ZSJJS1' 'X' '' 'X' 'ZTBC_001' 'ZSJJS1' '' '卷數' ,
'INCO2' 'X' '' 'X' 'ZTBC_001' 'ZBZFS1' '' '包裝方式' ,
'TDLINE' 'X' '' 'X' '/ATL/KPSP_T' 'MSGTXT' '' '備注' ,
'EINDT' 'X' '' 'X' 'EKPO' 'AEDAT' '' '交貨日期' ,
'WERKS' '' '' 'X' 'EKPO' 'WERKS' '' '工廠' ,
'RESLO' 'X' '' 'X' 'T001L' 'LGORT' '' '發出庫位' ,
'LGOBE1' '' '' 'X' 'T001L' 'LGOBE' '' '發出庫位名稱' ,
'LGORT' 'X' '' 'X' 'T001L' 'LGORT' '' '接收庫位' ,
'LGOBE2' '' '' 'X' 'T001L' 'LGOBE' '' '接收庫位名稱' ,
'MATKL' '' '' 'X' 'MARA' 'MATKL' '' '物料組' ,
'WGBEZ' '' '' 'X' 'T023T' 'WGBEZ' '' '物料組名稱' ,
'VBELN' 'X' '' 'X' 'VBAK' 'VBELN' '' '銷售訂單' ,
'VBELP' 'X' '' 'X' 'VBAP' 'POSNR' '' '銷售訂單項目' ,
'EBELN' '' '' '' '' '' '' '采購訂單' ,
'EBELP' '' '' '' '' '' '' '訂單項目' ,
'ZSTATUS' '' '' '' '' '' '' '狀態' ,
'ZMESG' '' '' '' '' '' '' '消息' .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_build_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_build_fieldcat USING pv_fieldname
pv_edit
pv_no_out
pv_no_zero
pv_ref_table
pv_ref_field
pv_f4
pv_reptext.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = pv_fieldname.
gs_fieldcat-edit = pv_edit.
gs_fieldcat-no_out = pv_no_out.
gs_fieldcat-no_zero = pv_no_zero.
gs_fieldcat-ref_table = pv_ref_table.
gs_fieldcat-ref_field = pv_ref_field.
gs_fieldcat-f4availabl = pv_f4.
gs_fieldcat-coltext = pv_reptext.
gs_fieldcat-reptext = pv_reptext.
gs_fieldcat-scrtext_l = pv_reptext.
gs_fieldcat-scrtext_m = pv_reptext.
gs_fieldcat-scrtext_s = pv_reptext.
IF pv_fieldname = 'BOX'.
gs_fieldcat-checkbox = 'X'.
gs_fieldcat-intlen = 1.
ENDIF.
IF pv_fieldname = 'INCO2' .
gs_fieldcat-edit = 'X'. "可編輯
gs_fieldcat-drdn_hndl = '1'. "下拉框句柄1
ENDIF.
APPEND gs_fieldcat TO gt_fieldcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_alv_out
*&---------------------------------------------------------------------*
*& ALV展示
*&---------------------------------------------------------------------*
FORM frm_alv_out.
DATA: lt_dropdown TYPE lvc_t_drop,
ls_dropdown TYPE lvc_s_drop.
DATA : gt_exclude TYPE ui_functions.
DATA : ls_exclude TYPE ui_func.
DATA : lv_save,
ls_variant TYPE disvariant.
lv_save = 'A'.
CONCATENATE sy-repid sy-dynnr INTO ls_variant-report.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row .
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row .
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row .
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row .
APPEND ls_exclude TO gt_exclude.
SELECT domvalue_l,
ddtext,
valpos
INTO TABLE @DATA(gt_dd07t)
FROM dd07t
WHERE domname = 'ZD_BAOZ' .
SORT gt_dd07t BY valpos .
LOOP AT gt_dd07t INTO DATA(gs_dd07t) .
* lv_num = lv_num + 1 .
CLEAR ls_dropdown .
ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = gs_dd07t-ddtext.
CONCATENATE gs_dd07t-domvalue_l gs_dd07t-ddtext INTO ls_dropdown-value SEPARATED BY ' ' .
APPEND ls_dropdown TO lt_dropdown.
ENDLOOP .
* ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = '1 皇冠包裝'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = '2 TSC紅色印刷紙管,空白紙箱'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = '3 包裝無要求'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = '4 出口空白包裝'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = '5 出口空白包裝 紅色OPP'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = '6 出口空白包裝 黃色OPP'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = '7 出口空白包裝 藍色OPP'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = '8 出口空白包裝 綠色OPP'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = '9 出口空白包裝,黑色OPP'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'. "指定下拉框句柄
* ls_dropdown-value = '10 打托盤'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '11 打成托盤,空白包裝'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '12 蒂森專用箱'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '13 定制Stokvis紙管,空白箱'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '14 獨立包裝'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '15 廣州張氏專用紙箱(美國出口)'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '16 皇冠包裝纏繞膜'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '17 皇冠紙管,空白箱'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '18 皇冠紙箱,空白紙管'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '19 皇冠紙箱,空白紙管'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '20 膠管復卷,泡泡膜包裝'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '21 空白包裝用臨時合格證'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '22 空白紙管,牛皮紙包裝'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '23 空白紙管,泡泡膜包裝'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '24 氣泡膜、空白瓦楞紙、纏繞膜'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '25 空白包裝'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '26 懸空卡板,空白包裝'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '27 巨大牌紙箱'.
* APPEND ls_dropdown TO lt_dropdown.
* ls_dropdown-handle = '1'.
* ls_dropdown-value = '28 氣泡膜+珍珠棉+纏繞膜'.
* APPEND ls_dropdown TO lt_dropdown.
CALL METHOD gs_alv->set_drop_down_table "調用alv類的下拉框方法
EXPORTING
it_drop_down = lt_dropdown.
CALL METHOD gs_alv->set_table_for_first_display
EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
is_variant = ls_variant
i_save = lv_save
* i_default = 'X'
is_layout = gs_layout
* is_print =
* it_special_groups =
it_toolbar_excluding = gt_exclude
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = gt_out
it_fieldcatalog = gt_fieldcat
* it_sort =
* it_filter =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form refresh_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_refresh_alv.
"獲取ALV變化過后的布局參數
CALL METHOD gs_alv->get_frontend_layout
IMPORTING
es_layout = gs_layout.
"重新回寫自適應寬度
gs_layout-cwidth_opt = 'X'.
CALL METHOD gs_alv->set_frontend_layout
EXPORTING
is_layout = gs_layout.
gs_stable-row = 'X'.
gs_stable-col = 'X'.
CALL METHOD gs_alv->refresh_table_display
EXPORTING
is_stable = gs_stable.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_check_select
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_check_select.
IF NOT line_exists( gt_out[ box = 'X' ] ).
MESSAGE '請至少選擇一個行項目' TYPE 'E'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_create_order
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_create_order .
DATA : lv_log TYPE c.
LOOP AT gt_out INTO DATA(gs_out3) WHERE box = 'X'.
IF gs_out3-zstatus = 'S'.
gs_out3-zstatus = 'E'.
gs_out3-zmesg = '已經創建成功,不允許重復創建'.
MODIFY gt_out FROM gs_out3.
lv_log = 'X'.
ENDIF.
ENDLOOP.
IF lv_log = 'X'.
MESSAGE '已經創建成功,不允許重復創建' TYPE 'E'.
ENDIF.
DATA: poheader TYPE bapimepoheader, "采購訂單抬頭數據
poheaderx TYPE bapimepoheaderx,
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,
potextitem LIKE TABLE OF bapimepotext WITH HEADER LINE,
lt_extensionin TYPE TABLE OF bapiparex,
ls_extensionin TYPE bapiparex,
ls_mepoitem TYPE bapi_te_mepoitem,
ls_mepoitemx TYPE bapi_te_mepoitemx.
DATA lv_vbeln TYPE bapimepoheader-po_number.
DATA lv_msg TYPE bapi_msg.
FIELD-SYMBOLS: <wa> TYPE any.
DATA: lv_inco1 TYPE string,
lv_inco2 TYPE string.
CLEAR poheader.
SELECT SINGLE bukrs INTO @DATA(lv_bukrs) FROM t001k WHERE bwkey = @p_werks.
SELECT SINGLE ekorg INTO @DATA(lv_ekorg) FROM t001w WHERE werks = @p_werks.
poheader-comp_code = lv_bukrs.
poheader-doc_type = 'ZP50'.
poheader-purch_org = lv_ekorg.
poheader-pur_group = 'H00'.
poheader-doc_date = sy-datum.
poheader-suppl_plnt = p_werks.
poheaderx-comp_code = 'X'.
poheaderx-doc_type = 'X'.
poheaderx-purch_org = 'X'.
poheaderx-pur_group = 'X'.
poheaderx-doc_date = 'X'.
poheaderx-suppl_plnt = 'X'.
LOOP AT gt_out INTO DATA(ls_out) WHERE box = 'X'.
CLEAR : poitem ,poitemx , poschedule ,poschedulex, poaccount ,poaccountx ,potextitem.
poitem-po_item = ls_out-znum.
poitemx-po_item = ls_out-znum.
poitem-short_text = ls_out-txz01.
poitemx-short_text = 'X'.
poitem-material = ls_out-matnr.
poitemx-material = 'X'.
poitem-plant = p_werks.
poitemx-plant = 'X'.
poitem-stge_loc = ls_out-lgort.
poitemx-stge_loc = 'X'.
poitem-po_unit = ls_out-meins.
poitemx-po_unit = 'X'.
IF ls_out-vbeln IS NOT INITIAL.
poitem-acctasscat = 'M'.
poitemx-acctasscat = 'X'.
ENDIF.
poitem-suppl_stloc = ls_out-reslo.
poitemx-suppl_stloc = 'X'.
* poitem-trackingno = ls_out-zbreadth.
* poitemx-trackingno = 'X'.
* poitem-preq_name = ls_out-zlength.
* poitemx-preq_name = 'X'.
* poitem-vendrbatch = ls_out-zsjjs1.
* poitemx-vendrbatch = 'X'.
poitem-incoterms1 = 'FH'.
poitemx-incoterms1 = 'X'.
* poitem-incoterms2 = ls_out-inco2.
* poitemx-incoterms2 = 'X'.
poitem-quantity = ls_out-menge.
poitemx-quantity = 'X'.
APPEND poitem.
APPEND poitemx.
poschedule-po_item = ls_out-znum.
poschedulex-po_item = ls_out-znum.
poschedule-delivery_date = ls_out-eindt.
poschedulex-delivery_date = 'X'.
poschedule-quantity = ls_out-menge.
poschedulex-quantity = 'X'.
APPEND poschedule.
APPEND poschedulex.
poaccount-po_item = ls_out-znum.
poaccountx-po_item = ls_out-znum.
poaccount-sd_doc = ls_out-vbeln.
poaccountx-sd_doc = 'X'.
poaccount-itm_number = ls_out-vbelp.
poaccountx-itm_number = 'X'.
APPEND poaccount.
APPEND poaccountx.
potextitem-po_item = ls_out-znum.
potextitem-text_line = ls_out-tdline.
APPEND potextitem.
**BAPI增強字段
ls_mepoitem-po_item = ls_out-znum.
SPLIT ls_out-inco2 AT '' INTO lv_inco1 lv_inco2.
ls_mepoitem-zpack = lv_inco1. "包裝方式
CLEAR :lv_inco1,lv_inco2.
ls_mepoitem-zvolume = ls_out-zsjjs1. "卷數
ls_mepoitem-zlength = ls_out-zlength. "長度M
ls_mepoitem-zwidth = ls_out-zbreadth. "寬度MM
ls_extensionin-structure = 'BAPI_TE_MEPOITEM'.
CALL METHOD cl_abap_container_utilities=>fill_container_c
EXPORTING
im_value = ls_mepoitem
IMPORTING
ex_container = ls_extensionin-valuepart1. "增強結構數據
APPEND ls_extensionin TO lt_extensionin.
ls_mepoitemx-po_item = ls_out-znum.
ls_mepoitemx-zpack = 'X'.
ls_mepoitemx-zvolume = 'X'.
ls_mepoitemx-zlength = 'X'.
ls_mepoitemx-zwidth = 'X'.
ls_extensionin-structure = 'BAPI_TE_MEPOITEMX'.
ls_extensionin-valuepart1 = ls_mepoitemx.
APPEND ls_extensionin TO lt_extensionin.
ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = poheader
poheaderx = poheaderx
IMPORTING
exppurchaseorder = lv_vbeln
TABLES
return = return
poitem = poitem
poitemx = poitemx
poschedule = poschedule
poschedulex = poschedulex
poaccount = poaccount
poaccountx = poaccountx
potextitem = potextitem
extensionin = lt_extensionin.
IF line_exists( return[ type = 'E' ] ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT return INTO DATA(ls_return) WHERE type = 'E' .
lv_msg = lv_msg && ls_return-message.
ENDLOOP.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>).
<fs_out>-zstatus = 'E'.
<fs_out>-zmesg = lv_msg.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
* MESSAGE lv_vbeln && '創建成功' TYPE 'S'.
LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out2>).
<fs_out2>-zstatus = 'S'.
lv_msg = '采購訂單' && lv_vbeln && '創建成功!' .
<fs_out2>-zmesg = lv_msg.
<fs_out2>-ebeln = lv_vbeln.
<fs_out2>-ebelp = <fs_out2>-znum.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form f4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f4_1 .
SELECT lgort lgobe
INTO TABLE itab
FROM t001l
WHERE werks = p_werks.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'LGORT'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_LGORT'
value_org = 'S'
callback_program = sy-repid
* callback_form = 'CB_FORM'
TABLES
value_tab = itab
return_tab = return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
READ TABLE return_tab INTO DATA(ls_ret) INDEX 1 .
p_lgort = ls_ret-fieldval.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form f4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM f4_2 .
SELECT lgort lgobe
INTO TABLE itab
FROM t001l
WHERE werks = p_werks.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'LGORT'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_RESLO'
value_org = 'S'
callback_program = sy-repid
* callback_form = 'CB_FORM'
TABLES
value_tab = itab
return_tab = return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
READ TABLE return_tab INTO DATA(ls_ret) INDEX 1 .
p_reslo = ls_ret-fieldval.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form cb_form
*&---------------------------------------------------------------------*
FORM cb_form TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr
callcontrol LIKE ddshf4ctrl.
DATA: interface LIKE LINE OF shlp-interface.
READ TABLE shlp-interface INTO interface INDEX 1.
interface-shlpfield+4(1) = '2'.
interface-valfield = 'P_RESLO'.
APPEND interface TO shlp-interface.
ENDFORM. "bo_callback_form
*&---------------------------------------------------------------------*
*& Form read_werks_values
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM read_werks_values .
DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE.
CLEAR:
dynpfields, dynpfields[].
dynpfields-fieldname = 'P_WERKS'. "填入需要讀值的字段名
APPEND dynpfields.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
translate_to_upper = 'X'
TABLES
dynpfields =
dynpfields
EXCEPTIONS
OTHERS = 9.
IF sy-subrc = 0.
READ TABLE dynpfields WITH KEY fieldname = 'P_WERKS'.
p_werks =
dynpfields-fieldvalue. "備注
ENDIF.
ENDFORM.