BOM物料主数据展开
- 实现功能:在项目中,根据开发文档的需求,展示BOM数据,但是部分字段在BOM界面中没有,所以需要通过增强来实现,在不方便用增强的时候我我们可以选择自己开发一个BOM程序。
- 实现效果如下:
- 代码如下:
*&---------------------------------------------------------------------*
*& Report ZDEMO_BOM
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zdemo_bom.
*******************************
*数据类型定义
*******************************
*&-----------------------------------------------------------------*
*& 包含 ZMMR_812_TOP
*&-----------------------------------------------------------------*
TYPE-POOLS: slis,icon.
TYPES: BEGIN OF ty_data,
clr TYPE char4, "可以控制行颜色
objic TYPE cs_objicon.
INCLUDE STRUCTURE stpox.
TYPES END OF ty_data.
*&-----------------------------------------------------------------
*
*内表、工作区、变量、常量、指针定义
*
*&-----------------------------------------------------------------
DATA: gt_data TYPE STANDARD TABLE OF ty_data,
gs_data TYPE ty_data.
DATA: gt_stb TYPE STANDARD TABLE OF stpox,
gs_stb TYPE stpox.
DATA: gs_layout TYPE lvc_s_layo.
DATA: gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat.
TYPES:t_emeng TYPE char20.
*******************************
*屏幕处理
*******************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_matnr TYPE rc29l-matnr,
p_werks TYPE rc29l-werks,
p_stlal TYPE rc29l-stlal,
p_capid TYPE rc29l-capid.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
PARAMETERS:p_datum TYPE sy-datum DEFAULT sy-datum,
p_emeng TYPE t_emeng.
SELECTION-SCREEN END OF BLOCK b2.
*******************************
*主程序入口
*******************************
*&--------------------------------------------------------------
**初始化处理
*&--------------------------------------------------------------
INITIALIZATION.
*&--------------------------------------------------------------
**选择屏幕控制
*&--------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
*&-------------------------------------------------------------*
*& 参数输入检查
*&-------------------------------------------------------------*
AT SELECTION-SCREEN.
*&-------------------------------------------------------------
**程序开始处理
*&-------------------------------------------------------------
START-OF-SELECTION.
********************************
*获取数据
********************************
PERFORM get_data.
*********************************
**处理数据
*********************************
PERFORM pro_data.
********************************
*显示数据
********************************
* ALV显示
PERFORM frm_set_alv. "设置ALV属性
PERFORM frm_dis_alv. "调用ALV
END-OF-SELECTION.
*******************************
*FORM子程序
*******************************
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* 获取数据
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data.
DATA lv_emeng TYPE emeng.
lv_emeng = p_emeng.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
capid = p_capid
datuv = p_datum
emeng = lv_emeng
mehrs = 'X'
mtnrv = p_matnr
stlal = p_stlal
werks = p_werks
TABLES
stb = gt_stb
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form pro_DATA
*&---------------------------------------------------------------------*
* 数据处理
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM pro_data.
LOOP AT gt_stb INTO gs_stb.
MOVE-CORRESPONDING gs_stb TO gs_data.
gs_data-clr = 'C710'.
gs_data-objic = '@AP@'."物料清单
" gs_data-objic = '@A6@'.”物料
APPEND gs_data TO gt_data.
ENDLOOP.
IF gt_data IS INITIAL.
MESSAGE '未查询到符合条件的数据!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " PRO_DATA
*&---------------------------------------------------------------------*
*& Form FRM_SET_ALV
*&---------------------------------------------------------------------*
* alv设置
*---------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_alv.
DATA: l_colpos TYPE lvc_s_fcat-col_pos VALUE 0.
*&---------------------------------------------------------------------*
*& 定义宏
*&---------------------------------------------------------------------*
DEFINE macro_fill_fcat.
CLEAR gs_fieldcat.
&1 = &1 + 1.
gs_fieldcat-col_pos = &1.
gs_fieldcat-fieldname = &2.
gs_fieldcat-coltext = &3.
CASE &2.
WHEN 'OBJIC'.
gs_fieldcat-fix_column = 'X' .
gs_fieldcat-icon = 'X' .
ENDCASE.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat.
CLEAR gt_fieldcat.
macro_fill_fcat: l_colpos 'STUFE' '级别' ,
l_colpos 'OBJIC' '对象' ,
l_colpos 'POSNR' '项目编号' ,
l_colpos 'IDNRK' '对象标识' ,
l_colpos 'OJTXP' '对象描述' ,
l_colpos 'MMEIN' '组件单位' ,
l_colpos 'MNGLG' '组件数量(CUP)' ,
l_colpos 'MNGKO' '组件数量' ,
l_colpos 'ANNAM' '创建者' ,
l_colpos 'ANDAT' '创建日期' .
CLEAR gs_layout.
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
gs_layout-info_fname = 'CLR'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DIS_ALV
*&---------------------------------------------------------------------*
* alv输出
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_dis_alv .
DATA: lv_grid TYPE lvc_s_glay.
lv_grid-edt_cll_cb = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_grid_settings = lv_grid
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
i_callback_html_top_of_page = 'F_TOP_OF_PAGE'
TABLES
t_outtab = gt_data.
ENDFORM. " FRM_ALV
FORM f_top_of_page USING p_cl_dd TYPE REF TO cl_dd_document.
DATA: m_p TYPE i,
m_buffer TYPE string.
m_buffer = '<html><STRONG>物料 <-- 11 1</STRONG></html></br>' .
CALL METHOD p_cl_dd->html_insert
EXPORTING
contents = m_buffer
CHANGING
position = m_p.
m_buffer = '<STRONG>描述 1 </STRONG></br>'.
CALL METHOD p_cl_dd->html_insert
EXPORTING
contents = m_buffer
CHANGING
position = m_p.
m_buffer = '<STRONG>基本数量 <-- (ST )1 </STRONG></br>'.
CALL METHOD p_cl_dd->html_insert
EXPORTING
contents = m_buffer
CHANGING
position = m_p.
m_buffer = '<STRONG>需求数量 <-- (ST ) 1 </STRONG></br>'.
CALL METHOD p_cl_dd->html_insert
EXPORTING
contents = m_buffer
CHANGING
position = m_p.
ENDFORM.
- 其他的取数逻辑自行添加即可。