*&-----------------------------------------------------------------------------*
* Program Type: Report
* Program Name:ZPSR002
* Program Transaction Code:ZPS001
* Application area:PS
*&-----------------------------------------------------------------------------*
* Author's name: Date written:2015/07/27
* Description:BOM主数据创建维护
*&-----------------------------------------------------------------------------*
* Change History:
* Version(s) Date Description Author Change Request
* -----------------------------------------------------------------------------*
*
*
*
*
*&-----------------------------------------------------------------------------*
REPORT ZPSR002 MESSAGE-ID ZWMT.
*----------------------------------------------------------------------*
*Tables
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
*Type_pools
*----------------------------------------------------------------------*
TYPE-POOLS:slis.
TYPES:BEGIN OF ty_out,
checkbox TYPE c,"复选框
werks TYPE werks_d,"工厂
matnr TYPE ztswi3d-matnr,"物料
drawnno TYPE ztbomhead-drawnno,"3D数模号
maktx TYPE ztswi3d-maktx1,"物料描述
isok(2) TYPE c,"是否具备创建BOM条件
statu TYPE ztbomhead-statu,"状态
statx TYPE ztbomhead-statx,"状态描述
END OF ty_out.
TYPES:BEGIN OF ty_item,
hdrawnno TYPE ztbomitem-hdrawnno,"上级模型号
hmatnr TYPE ztswi3d-matnr,"上级物料
hmaktx TYPE ztswi3d-maktx1,"物料描述
postp TYPE postp,"行项目类别
matnr TYPE ztswi3d-matnr,"物料
drawnno TYPE ztbomitem-drawnno,"3D数模号
maktx TYPE ztswi3d-maktx1,"物料描述
statu TYPE ztswi3d-statu,"状态
menge TYPE ztbomitem-menge,"数量,
romei TYPE ztbomitem-romei,"单位
tabix TYPE i,"记录行号
END OF ty_item.
*----------------------------------------------------------------------*
*Internal Tables
*----------------------------------------------------------------------*
DATA:gs_out TYPE ty_out,
gt_out TYPE STANDARD TABLE OF ty_out.
DATA:gs_bomhead TYPE ztbomhead,
gt_bomhead TYPE STANDARD TABLE OF ztbomhead.
DATA:gs_swi3d TYPE ztswi3d,
gt_swi3d TYPE STANDARD TABLE OF ztswi3d.
DATA:gs_bomitem TYPE ztbomitem,
gt_bomitem TYPE STANDARD TABLE OF ztbomitem.
DATA:gs_item TYPE ty_item,
gt_item TYPE STANDARD TABLE OF ty_item.
DATA gt_item_ls TYPE STANDARD TABLE OF ty_item."临时存放信息
*----------------------------------------------------------------------*
*Global variable
*----------------------------------------------------------------------*
* 显示抬头信息alv
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
it_events TYPE slis_t_event WITH HEADER LINE,
gs_layout TYPE slis_layout_alv,
it_sort TYPE slis_t_sortinfo_alv,
it_print TYPE slis_print_alv,
g_grid TYPE REF TO cl_gui_alv_grid.
* 显示BOM ITEM信息alv
DATA: GS_DIALOGBOX TYPE REF TO CL_GUI_DIALOGBOX_CONTAINER,
GO_SPLITTER_CONTAINER TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
GO_TOOLBAR TYPE REF TO CL_GUI_TOOLBAR.
DATA GR_ALVGRID TYPE REF TO CL_GUI_ALV_GRID.
DATA gs_toolbar TYPE LINE OF TTB_BUTTON.
DATA GT_FIELDCAT1 TYPE LVC_T_FCAT.
DATA GS_LAYOUT1 TYPE LVC_S_LAYO.
DATA :E_HYPE TYPE LVC_S_HYPE,
TS_HYPE TYPE LVC_T_HYPE.
*----------------------------------------------------------------------*
*Macro
*----------------------------------------------------------------------*
DEFINE add_field.
wa_fieldcat-fieldname = &1.
wa_fieldcat-reptext_ddic = &2.
wa_fieldcat-key = &3.
wa_fieldcat-edit = &4.
wa_fieldcat-checkbox = &5.
wa_fieldcat-do_sum = &6.
wa_fieldcat-decimals_out = &7.
wa_fieldcat-emphasize = &8.
wa_fieldcat-no_zero = &9.
append wa_fieldcat to it_fieldcat.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* Selection screen
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01.
SELECTION-SCREEN END OF BLOCK B1 .
*----------------------------------------------------------------------*
* At selection-screen
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
*----------------------------------------------------------------------*
* Start-of-selection
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM frm_get_data.
PERFORM frm_process_data.
PERFORM frm_output_data.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
CLEAR:gt_out,
gt_bomhead,
gt_bomitem,
gt_swi3d,
gt_item.
SELECT * FROM ztbomhead INTO TABLE gt_bomhead WHERE statu <> '3'.
SELECT * FROM ztbomitem INTO TABLE gt_bomitem.
SELECT * FROM ztswi3d INTO TABLE gt_swi3d.
SORT gt_bomhead BY drawnno.
SORT gt_bomitem BY hdrawnno.
SORT gt_swi3d BY drawnno.
*IF GT_BSIS[] IS INITIAL.
* MESSAGE '没有找到数据,请重新输入查询条件' TYPE 'S' DISPLAY LIKE 'E'.
* STOP.
* ENDIF.
ENDFORM. "FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_process_data .
DATA flg_ok TYPE boolean.
LOOP AT gt_bomhead INTO gs_bomhead.
CLEAR: gs_out,
gs_swi3d.
flg_ok = 'X'.
READ TABLE gt_swi3d INTO gs_swi3d WITH KEY drawnno = gs_bomhead-drawnno BINARY SEARCH.
* 判断抬头物料业务视图是否创建成功
IF gs_swi3d-statu <> '3'.
flg_ok = ''.
ENDIF.
* 判断行项目物料业务视图是否创建成功
LOOP AT gt_bomitem INTO gs_bomitem WHERE hdrawnno = gs_bomhead-drawnno.
CLEAR gs_swi3d.
READ TABLE gt_swi3d INTO gs_swi3d WITH KEY drawnno = gs_bomitem-drawnno BINARY SEARCH.
IF gs_swi3d-statu <> '3'.
flg_ok = ''.
EXIT.
ENDIF.
ENDLOOP.
IF flg_ok = 'X'.
gs_out-isok = '是'.
ELSE.
gs_out-isok = '否'.
ENDIF.
gs_out-matnr = gs_swi3d-matnr.
gs_out-maktx = gs_swi3d-maktx1.
gs_out-drawnno = gs_bomhead-drawnno.
gs_out-statu = gs_bomhead-statu.
gs_out-statx = gs_bomhead-statx.
APPEND gs_out to gt_out.
ENDLOOP.
* 行项目信息
LOOP AT gt_bomitem INTO gs_bomitem.
CLEAR: gs_item,
gs_swi3d.
READ TABLE gt_swi3d INTO gs_swi3d WITH KEY drawnno = gs_bomitem-drawnno BINARY SEARCH.
gs_item-matnr = gs_swi3d-matnr.
gs_item-hdrawnno = gs_bomitem-hdrawnno.
gs_item-drawnno = gs_bomitem-drawnno.
gs_item-maktx = gs_swi3d-maktx1.
gs_item-statu = gs_swi3d-statu.
gs_item-menge = gs_bomitem-menge.
gs_item-romei = gs_bomitem-romei.
* 上级物料信息
CLEAR gs_swi3d.
READ TABLE gt_swi3d INTO gs_swi3d WITH KEY drawnno = gs_bomitem-hdrawnno BINARY SEARCH.
gs_item-hmatnr = gs_swi3d-matnr.
gs_item-hmaktx = gs_swi3d-maktx1.
APPEND gs_item to gt_item.
ENDLOOP.
ENDFORM. "FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_output_data .
PERFORM frm_set_fieldcat.
PERFORM frm_set_layout.
PERFORM frm_set_events.
PERFORM frm_set_sort.
PERFORM frm_call_alv_list.
ENDFORM. "FRM_OUTPUT_DATA
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_fieldcat .
add_field 'CHECKBOX' text-001 'X' ' ' ' ' ' ' ' ' ' ' ' '.
add_field 'WERKS' text-002 'X' ' ' ' ' ' ' ' ' ' ' ' '.
add_field 'MATNR' text-003 '' ' ' ' ' ' ' ' ' ' ' ' '.
add_field 'DRAWNNO' text-004 '' ' ' ' ' ' ' ' ' ' ' ' '.
add_field 'MAKTX' text-005 '' ' ' ' ' ' ' ' ' ' ' ' '.
add_field 'ISOK' text-006 '' ' ' ' ' ' ' ' ' ' ' ' '.
add_field 'STATU' text-007 '' ' ' ' ' ' ' ' ' ' ' ' '.
add_field 'STATX' text-008 '' ' ' ' ' ' ' ' ' ' ' ' '.
ENDFORM. "FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_layout .
CLEAR gs_layout.
gs_layout-colwidth_optimize = 'X'.
ENDFORM. "FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& Form FRM_SET_EVENTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_events .
CLEAR it_events.
it_events-name = slis_ev_user_command.
it_events-form = 'FRM_USER_COMMAND'.
APPEND it_events.
CLEAR it_events.
it_events-name = slis_ev_pf_status_set.
it_events-form = 'FRM_PF_STATUS_SET'.
APPEND it_events.
* it_events-name = slis_ev_top_of_page.
* it_events-form = 'FRM_TOP_OF_PAGE'.
* APPEND it_events.
ENDFORM. "FRM_SET_EVENTS
*&---------------------------------------------------------------------*
*& Form FRM_CALL_ALV_LIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_call_alv_list .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
it_fieldcat = it_fieldcat
is_layout = gs_layout
it_events = it_events[]
it_sort = it_sort[]
i_save = 'A'
TABLES
t_outtab = gt_out
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "FRM_CALL_ALV_LIST
*&---------------------------------------------------------------------*
*& Form frm_pf_status_set
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->I_EXTAB text
*----------------------------------------------------------------------*
FORM frm_pf_status_set USING i_extab TYPE slis_t_extab.
SET PF-STATUS 'ZPSR002' EXCLUDING i_extab.
ENDFORM. "FRM_PF_STATUS_SET
*&---------------------------------------------------------------------*
*& Form frm_top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form frm_top_of_page.
endform. " FRM_TOP_OF_PAGE "FRM_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form FRM_SET_SORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_sort .
ENDFORM. "FRM_SET_SORT
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(R_UCOMM) text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM frm_user_command USING value(r_ucomm) LIKE sy-ucomm
CHANGING rs_selfield TYPE slis_selfield.
DATA: lv_answer TYPE c,
lv_question(200) TYPE c.
DATA:es_row_id TYPE lvc_s_row,
es_col_id TYPE lvc_s_col,
es_row_no TYPE lvc_s_roid.
DATA ref1 TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref1.
* 刷新数据
CALL METHOD ref1->check_changed_data.
rs_selfield-refresh = 'X'.
" 获取选中行
CALL METHOD ref1->get_current_cell
IMPORTING
es_row_id = es_row_id
es_col_id = es_col_id
es_row_no = es_row_no.
CASE r_ucomm.
WHEN 'DETAIL'.
CLEAR gs_out.
READ TABLE gt_out INTO gs_out WITH KEY checkbox = 'X'.
PERFORM frm_show_detail."显示BOM详细信息
WHEN 'CREATE'.
PERFORM frm_bom_create."创建BOM
WHEN OTHERS.
ENDCASE.
ENDFORM. "FRM_USER_COMMAND
*==========================class 定义事件=============================
CLASS LCL_EVENT_HANDLER DEFINITION.
PUBLIC SECTION.
METHODS:
* 关闭dialogbox
ON_CLOSE
FOR EVENT CLOSE OF CL_GUI_DIALOGBOX_CONTAINER
IMPORTING SENDER,
* 设置工具栏
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING
e_object,
* 用户命令响应
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING
e_ucomm.
ENDCLASS.
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
*----------------------------------------------------------------------
* Handles the Close event of the dialogbox. The colse event is
* triggered when the close button in the top right corner of the
* dialogbox is pushed. Closes the dialog box
*----------------------------------------------------------------------
METHOD ON_CLOSE.
IF NOT SENDER IS INITIAL.
CALL METHOD SENDER->FREE
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
* Error handling
ENDIF.
FREE GS_DIALOGBOX.
CLEAR GS_DIALOGBOX.
ENDIF.
ENDMETHOD.
* method toolbar handler
METHOD handle_toolbar.
PERFORM set_toolbar CHANGING e_object.
ENDMETHOD. "handle_toolbar
METHOD handle_user_command.
* Handle own functions defined in the toolbar
CASE e_ucomm.
WHEN 'OK'.
GR_ALVGRID->CHECK_CHANGED_DATA( ).
LOOP AT gt_item_ls INTO gs_item.
modify gt_item from gs_item INDEX gs_item-tabix.
ENDLOOP.
CALL METHOD GS_DIALOGBOX->FREE.
FREE GS_DIALOGBOX.
CLEAR GS_DIALOGBOX.
ENDCASE.
ENDMETHOD.
ENDCLASS.
FORM set_toolbar
CHANGING prf_object TYPE REF TO cl_alv_event_toolbar_set.
CLEAR prf_object->mt_toolbar.
CLEAR gs_toolbar.
MOVE 'OK' TO gs_toolbar-function.
MOVE ICON_OKAY TO gs_toolbar-icon.
MOVE 'OK' TO gs_toolbar-quickinfo.
MOVE ' ' TO gs_toolbar-disabled.
MOVE text-016 TO gs_toolbar-text.
APPEND gs_toolbar to prf_object->mt_toolbar .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DETAIL
*&---------------------------------------------------------------------*
* 显示行项目
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SHOW_DETAIL .
DATA GO_EVENT_HANDLER TYPE REF TO LCL_EVENT_HANDLER.
CLEAR gt_item_ls.
* IF gs_out is INITIAL.
* MESSAGE S002 DISPLAY LIKE 'E'.
* RETURN.
* ENDIF.
LOOP AT gt_item INTO gs_item WHERE hdrawnno = gs_out-drawnno.
gs_item-tabix = sy-tabix.
APPEND gs_item to gt_item_ls.
ENDLOOP.
IF GS_DIALOGBOX IS INITIAL.
* 创建 dialogbox 对象
CREATE OBJECT GS_DIALOGBOX
EXPORTING
PARENT = CL_GUI_CONTAINER=>SCREEN0
WIDTH = 900
HEIGHT = 300
STYLE = CL_GUI_CONTROL=>WS_SYSMENU
* REPID = SY-REPID
* DYNNR = SY-DYNNR
* LIFETIME = LIFETIME_DEFAULT
TOP = 80
LEFT = 50
CAPTION = 'BOM行项目'
** NO_AUTODEF_PROGID_DYNNR =
** METRIC = 0
** NAME =
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
EVENT_ALREADY_REGISTERED = 6
ERROR_REGIST_EVENT = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* 创建alv对象
CREATE OBJECT GR_ALVGRID
EXPORTING
I_PARENT = GS_DIALOGBOX
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CLEAR:GT_FIELDCAT1.
PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT1.
PERFORM PREPARE_LAYOUT CHANGING GS_LAYOUT1.
CALL METHOD GR_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT1
IT_HYPERLINK = TS_HYPE
CHANGING
IT_OUTTAB = gt_item_ls
IT_FIELDCATALOG = GT_FIELDCAT1
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CREATE OBJECT GO_EVENT_HANDLER.
* 注册事件
SET HANDLER GO_EVENT_HANDLER->handle_user_command FOR GR_ALVGRID.
SET HANDLER GO_EVENT_HANDLER->handle_toolbar FOR GR_ALVGRID.
SET HANDLER GO_EVENT_HANDLER->on_close FOR GS_DIALOGBOX.
CALL METHOD GR_ALVGRID->set_toolbar_interactive.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
* 设置输出属性
*----------------------------------------------------------------------*
* <--P_GT_FIELDCAT text
*----------------------------------------------------------------------*
FORM PREPARE_FIELD_CATALOG CHANGING PT_FIELDCAT TYPE LVC_T_FCAT.
* 行项目类别
DATA LS_FCAT TYPE LVC_S_FCAT .
LS_FCAT-FIELDNAME = 'HMATNR' .
LS_FCAT-EDIT = 'X'.
LS_FCAT-OUTPUTLEN = '10' .
LS_FCAT-REF_TABLE = 'T418'.
LS_FCAT-REF_FIELD = 'POSTP'.
LS_FCAT-COLTEXT = text-017.
LS_FCAT-SELTEXT = text-017 .
APPEND LS_FCAT TO PT_FIELDCAT .
CLEAR LS_FCAT .
LS_FCAT-FIELDNAME = 'HMAKTX' .
LS_FCAT-EDIT = 'X'.
LS_FCAT-OUTPUTLEN = '10' .
LS_FCAT-REF_TABLE = 'T418'.
LS_FCAT-REF_FIELD = 'POSTP'.
LS_FCAT-COLTEXT = text-005.
LS_FCAT-SELTEXT = text-005 .
APPEND LS_FCAT TO PT_FIELDCAT .
CLEAR LS_FCAT .
LS_FCAT-FIELDNAME = 'POSTP' .
LS_FCAT-EDIT = 'X'.
LS_FCAT-OUTPUTLEN = '10' .
LS_FCAT-REF_TABLE = 'T418'.
LS_FCAT-REF_FIELD = 'POSTP'.
LS_FCAT-COLTEXT = text-009.
LS_FCAT-SELTEXT = text-009 .
APPEND LS_FCAT TO PT_FIELDCAT .
CLEAR LS_FCAT .
* 物料
LS_FCAT-FIELDNAME = 'MATNR' .
LS_FCAT-INTTYPE = 'C' .
LS_FCAT-OUTPUTLEN = '10' .
LS_FCAT-COLTEXT = text-010 .
LS_FCAT-SELTEXT = text-010 .
APPEND LS_FCAT TO PT_FIELDCAT .
CLEAR LS_FCAT .
* 工程图号
LS_FCAT-FIELDNAME = 'DRAWNNO' .
LS_FCAT-INTTYPE = 'C' .
LS_FCAT-OUTPUTLEN = '10' .
LS_FCAT-COLTEXT = text-011 .
LS_FCAT-SELTEXT = text-011 .
APPEND LS_FCAT TO PT_FIELDCAT .
CLEAR LS_FCAT .
* 物料描述
LS_FCAT-FIELDNAME = 'MAKTX' .
LS_FCAT-INTTYPE = 'C' .
LS_FCAT-OUTPUTLEN = '10' .
LS_FCAT-COLTEXT = text-012 .
LS_FCAT-SELTEXT = text-012 .
APPEND LS_FCAT TO PT_FIELDCAT .
CLEAR LS_FCAT .
* 状态
LS_FCAT-FIELDNAME = 'STATU' .
LS_FCAT-INTTYPE = 'C' .
LS_FCAT-OUTPUTLEN = '10' .
LS_FCAT-COLTEXT = text-013 .
LS_FCAT-SELTEXT = text-013 .
APPEND LS_FCAT TO PT_FIELDCAT .
CLEAR LS_FCAT .
* 数量
LS_FCAT-FIELDNAME = 'MENGE' .
LS_FCAT-INTTYPE = 'C' .
LS_FCAT-OUTPUTLEN = '10' .
LS_FCAT-COLTEXT = text-014 .
LS_FCAT-SELTEXT = text-014 .
APPEND LS_FCAT TO PT_FIELDCAT .
CLEAR LS_FCAT .
* 单位
LS_FCAT-FIELDNAME = 'ROMEI' .
LS_FCAT-INTTYPE = 'C' .
LS_FCAT-OUTPUTLEN = '10' .
LS_FCAT-COLTEXT = text-015 .
LS_FCAT-SELTEXT = text-015 .
APPEND LS_FCAT TO PT_FIELDCAT .
CLEAR LS_FCAT .
ENDFORM. " PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& Form PREPARE_LAYOUT
*&---------------------------------------------------------------------*
* 设置layout
*----------------------------------------------------------------------*
* <--P_GS_LAYOUT text
*----------------------------------------------------------------------*
FORM PREPARE_LAYOUT CHANGING PS_LAYOUT TYPE LVC_S_LAYO.
PS_LAYOUT-ZEBRA = 'X' .
* PS_LAYOUT-GRID_TITLE = 'BOM 行项目信息' .
PS_LAYOUT-SMALLTITLE = 'X' .
* PS_LAYOUT-NO_TOOLBAR = 'X'.
ENDFORM. " PREPARE_LAYOUT
*&---------------------------------------------------------------------*
*& Form FRM_BOM_CREATE
*&---------------------------------------------------------------------*
* 创建BOM
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_BOM_CREATE .
DATA LV_VALID_FROM type CSAP_MBOM-DATUV.
DATA LV_WARNING TYPE CAPIFLAG-FLWARNING.
DATA LV_ECNNO TYPE AENNR."ecn number
* 读取BOM信息的参数
DATA: ls_stpo_r TYPE STPO_API02,
lt_stpo_r TYPE STANDARD TABLE OF STPO_API02,
ls_stpu_r TYPE STPU_API01,
lt_stpu_r TYPE STANDARD TABLE OF STPU_API01.
* 创建BOM信息的参数
DATA:lv_stko_s TYPE STKO_API01,
lv_stko1_s TYPE STKO_API02,
ls_stpo_s TYPE STPO_API03,
lt_stpo_s TYPE STANDARD TABLE OF STPO_API03,
ls_stpu_s TYPE STPU_API01,
lt_stpu_s TYPE STANDARD TABLE OF STPU_API01.
LOOP AT gt_out INTO gs_out where checkbox = 'X'.
CLEAR:lt_stpo_r,
lt_stpu_r.
IF gs_out-isok = '否'.
MESSAGE S021 DISPLAY LIKE 'E'.
return.
ENDIF.
CLEAR:lv_valid_from,
lv_warning.
* 读取BOM 信息
CALL FUNCTION 'CSAP_MAT_BOM_READ'
EXPORTING
MATERIAL = gs_out-matnr
PLANT = gs_out-werks
BOM_USAGE = '5'
IMPORTING
FL_WARNING = lv_warning
TABLES
T_STPO = lt_stpo_r
T_STPU = lt_stpu_r
EXCEPTIONS
ERROR = 1
OTHERS = 2 .
* BOM 不存在
IF sy-subrc <> 0.
ELSE."BOM已经存在
PERFORM frm_create_ecn USING gs_out lv_ecnno."创建ECN
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_ECN
*&---------------------------------------------------------------------*
* 创建ECN
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CREATE_ECN USING s_out TYPE ty_out
ecnno TYPE aennr.
ENDFORM.