*&---------------------------------------------------------------------*
*& 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
*& ---- ---- ---------- ----------- *
*& 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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」