文章目录

  • 1.背景
  • 2.实现
    • 2.1 通过增强获取标准报表数据
    • 2.2 程序处理

1.背景

前台事务代码CO03时,进行订单的成本分析,需要开发报表实现批量操作

2.实现

2.1 通过增强获取标准报表数据

此处无隐式增强,同时通过标准方法无法获取内表数据。故通过memory id 实现。插入代码如下:

2.2 程序处理

核心代码如下:
利用函数K_KKB_KKBCS_ORDER_REPORT读取数据
标准报表的输出字段为结构KKBCS_OUT+结构KKBCS_OUT_KEY中字段的文本(比如HKTYP_TEXT)

全部代码如下:
&---------------------------------------------------------------------
*& Report ZFIR028
&---------------------------------------------------------------------
&---------------------------------------------------------------------
*& DEVELOPER < 开 发>:
*& CREATE ON <创建日期>:
*& FS NUMBER <FS 编号>:
*& FUNCTIONAL CONSULTANT<功能顾问>:
*& DESCRIPTION <FS 中业务需求概述>:
*&
&---------------------------------------------------------------------

  •          MODIFICATION LOG<程序修改日志,创建时不要填写>
    

*<版本> <日期> <开发者> <功能顾问> 任务编号 <请求号>
*VERSION DATE PROGRAMMER CORR. # IL# TRANSPORT

  • 1 YYYY/MM/DD
    *DESCRIPTION<程序逻辑修改 版本1> :

*DESCRIPTION<程序逻辑修改 版本2> :
*
&---------------------------------------------------------------------

REPORT zfir028
MESSAGE-ID zfico01
LINE-COUNT 50 "行 MIN=35
LINE-SIZE 132 "列 MIN=124
NO STANDARD PAGE HEADING.

----------------------------------------------------------------------

  • <1.1-声明 包含程序> INCLUDE PROGRAMS *
    ----------------------------------------------------------------------
    《所有全局变量、类都写在 DEFINE INCLUDE 程序中》***
    INCLUDE zfir028_define.
    《所有查询条件都写在 SEL INCLUDE 程序中》******
    INCLUDE zfir028_sel.
    《所有逻辑代码都写在 F0 INCLUDE 程序中》*******
    INCLUDE zfir028_f01.

  •         <第二部分---声明 过程:即事件>  PROCESSING                *
    

----------------------------------------------------------------------

  • <2.1-用于程序的初始化,在显示选择屏前触发,> *
  • INITIAL PROCESS BEFORE THE STANDARD SELECTION SCREEN IS CALLED *
    ----------------------------------------------------------------------
    INITIALIZATION.
    "初始化处理
    PERFORM frm_intial.
    ----------------------------------------------------------------------
  • <2.2-选择屏幕事件> *
  • EVENTS THAT OCCUR WHILE THE SELECTION SCREEN IS BING PROCESSED *
    ----------------------------------------------------------------------
  • 所有选择屏幕数据传送到程序中之后触发的事件
    AT SELECTION-SCREEN.

*选择屏幕PBO事件,在显示选择屏幕前触发
AT SELECTION-SCREEN OUTPUT.

  • 当对SELECT-OPTIONS变量有多值输入时
    *AT SELECTION-SCREEN ON END OF S_MATKL.

  • 当选择屏幕的BLOCK向程序传递值时触发{如点击执行,点击多选弹出其它窗口)
    *AT SELECTION-SCREEN ON BLOCK BL01.

  • 按指定字段按F4触发
    *AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_MATNR.

  • 按指定字段按F1触发
    *AT SELECTION-SCREEN ON HELP-REQUEST FOR S_MATKL.

  • 当选择屏幕的RADIOBUTTON GROUP向程序传递值时触发
    *AT SELECTION-SCREEN ON RADIOBUTTON GROUP RG1.

  • 触发了 FUNCTIONS BACK, EXIT, OR CANCEL
    AT SELECTION-SCREEN ON EXIT-COMMAND.

----------------------------------------------------------------------

  • <2.3-在选择屏幕被处理后触发的事件,程序默认的开始事件> *
  • EVENT OCCURS AFTER THE SELECTION SCREEN HAS BEEN PROCESSED *
    ----------------------------------------------------------------------
    START-OF-SELECTION.
    "权限检查
    PERFORM frm_authority_check.
    "输入数据合法性检查
    PERFORM frm_validate_check.
    "获取数据
    PERFORM frm_get_data.
    "处理数据
    PERFORM frm_process_data.
    "调用屏幕
    PERFORM frm_call_screen.

----------------------------------------------------------------------

  • <2.4-最后被触发的事件> *
  • THE LAST OF THE EVENTS CALLED BY THE RUNTIME ENVIRONMENT TO OCCUR *
    ----------------------------------------------------------------------
    END-OF-SELECTION.
    "展示数据
    PERFORM frm_show_data.
    "保存数据
    PERFORM frm_save_data.
    "清空所有全局变量
    PERFORM frm_clear_global_data.

&---------------------------------------------------------------------
*& 包含 ZFIR028_F01
&---------------------------------------------------------------------
&---------------------------------------------------------------------

  •          MODIFICATION LOG<程序修改日志,创建时不要填写>
    

*<版本> <日期> <开发者> <功能顾问> 任务编号 <请求号>
*VERSION DATE PROGRAMMER CORR. # IL# TRANSPORT

  • 1 YYYY/MM/DD
    *DESCRIPTION<程序逻辑修改 版本1> :

*DESCRIPTION<程序逻辑修改 版本2> :
*
&---------------------------------------------------------------------
&---------------------------------------------------------------------
*& Form FRM_GET_DATA
&---------------------------------------------------------------------
*& 获取数据
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_get_data .
RANGES:r_status FOR bsvx-sttxt.
DATA:lt_status TYPE TABLE OF ty_status.
DATA:lv_line TYPE bsvx-sttxt.
DATA:lt_cat_lvc TYPE lvc_t_fcat.
DATA:lr_data TYPE REF TO data.
DATA:ls_varia TYPE disvariant.
DATA:lv_matnr TYPE mara-matnr.
DATA:lv_index TYPE i.
FIELD-SYMBOLS:<lfs_table> TYPE table.

CLEAR:gt_out[].

SELECT aaufnr,aobjnr,auart,gamng,gstri,gltri,
CAST( ’ ’ AS CHAR( 50 ) ) AS status
FROM aufk AS a
INNER JOIN afko AS b ON a~aufnr = b~aufnr
WHERE werks IN @s_werks
AND a~aufnr IN @s_aufnr
AND plnbez IN @s_matnr
AND auart IN @s_auart
AND gstrp IN @s_gstrp
AND gltrp IN @s_gltrp
INTO TABLE @DATA(lt_aufk).

"取符合屏幕输入条件的工单状态
"将系统状态输入条件拆分到内表中
SPLIT s_stat-low AT ‘/’ INTO TABLE lt_status.
LOOP AT lt_status INTO DATA(ls_status).
r_status[] = VALUE #( BASE r_status[] ( sign = ‘I’ option = ‘EQ’ low = ls_status-status ) ).
ENDLOOP.

LOOP AT lt_aufk INTO DATA(ls_aufk).

"取系统状态和用户状态
CLEAR:lv_line,lt_status[].
CALL FUNCTION 'STATUS_TEXT_EDIT'EXPORTINGobjnr            = ls_aufk-objnr
  •   ONLY_ACTIVE      = 'X'spras            = sy-langu
    
  •   BYPASS_BUFFER    = ' '
    IMPORTING
    
  •   ANW_STAT_EXISTING       =
    
  •   E_STSMA          =line             = lv_line
    
  •   user_line        =
    
  •   STONR            =
    EXCEPTIONSobject_not_found = 1OTHERS           = 2.
    

    "筛选符合条件的系统状态
    SPLIT lv_line AT space INTO TABLE lt_status.
    LOOP AT lt_status INTO ls_status.
    IF ls_status-status IN r_status[].
    DATA(lv_ok) = ‘X’.
    EXIT.
    ENDIF.
    ENDLOOP.
    IF sy-subrc = 0.
    IF lv_ok IS INITIAL.
    DELETE lt_aufk.
    CONTINUE.
    ENDIF.
    ENDIF.
    CLEAR:lv_ok.

    ls_aufk-status = lv_line.
    MODIFY lt_aufk FROM ls_aufk.

    ENDLOOP.

    IF lt_aufk[] IS INITIAL.
    MESSAGE s001 WITH ‘找不到符合条件的数据’ DISPLAY LIKE ‘E’.
    LEAVE LIST-PROCESSING.
    ENDIF.

    SORT lt_aufk BY aufnr.

    SELECT a~aufnr,SUM( wemng ) AS wemng
    FROM afpo AS a
    INNER JOIN @lt_aufk AS b ON a~aufnr = b~aufnr
    GROUP BY a~aufnr
    INTO TABLE @DATA(lt_afpo).
    SORT lt_afpo BY aufnr.

    "调用标准函数取报表内表数据
    LOOP AT lt_aufk INTO ls_aufk.

    ls_varia-variant = ‘1SAP02’. "成本趋势 布局
    CALL FUNCTION ‘K_KKB_KKBCS_ORDER_REPORT’
    EXPORTING
    i_aufnr = ls_aufk-aufnr

  •   I_CONTAINER      =
    
  •   I_TIME_RANGE     =
    
  •   I_PIVOT          =
    
  •   I_ROLLD          =
    
  •   I_POSNR          =
    
  •   I_NINCL          =i_varia          = ls_varia
    
  •   I_WIP            =
    
  •   I_HEADER         =
    EXCEPTIONSobject_not_found = 1no_data          = 2no_authority     = 3OTHERS           = 4.
    

    AT FIRST.
    "仅仅在第一次调用取fieldcat,原因为取用标准报表字段样式固定,不需要取多次,同时生成动态内表的方法多次调用会ABAP DUMP
    IMPORT fieldcat = lt_cat_lvc[] FROM MEMORY ID ‘ZFI028_FIELDCAT’.
    CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
    it_fieldcatalog = lt_cat_lvc
    IMPORTING
    ep_table = lr_data.
    ASSIGN lr_data->* TO <lfs_table>.
    ENDAT.

    IMPORT outtab = <lfs_table> FROM MEMORY ID ‘ZFI028_TABLE’.

    "根据标准报表数据,转换成当前报表字段
    LOOP AT <lfs_table> ASSIGNING FIELD-SYMBOL(<lfs_line>).
    APPEND INITIAL LINE TO gt_out ASSIGNING FIELD-SYMBOL(<lfs_out>).
    <lfs_out>-aufnr = ls_aufk-aufnr.
    <lfs_out>-auart = ls_aufk-auart.
    ASSIGN COMPONENT ‘BEWEG_TEXT’ OF STRUCTURE <lfs_line> TO FIELD-SYMBOL(<lfs_value>).
    IF <lfs_value> IS ASSIGNED.
    <lfs_out>-zfylx = <lfs_value>. "业务类型
    UNASSIGN:<lfs_value>.
    ENDIF.

    ASSIGN COMPONENT 'WERKS' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-werks = <lfs_value>.UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'HERKU' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.SPLIT <lfs_value> AT  '/' INTO DATA(lv_value1) DATA(lv_value2).<lfs_out>-matnr = lv_value2.UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'HERKU_TEXT' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-maktx = <lfs_value>.UNASSIGN:<lfs_value>.
    ENDIF."物料组和物料组描述
    lv_matnr = <lfs_out>-matnr.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput        = lv_matnrIMPORTINGoutput       = lv_matnrEXCEPTIONSlength_error = 1OTHERS       = 2.SELECT SINGLE a~matkl,zspec,b~wgbez FROM mara AS aINNER JOIN t023t AS b ON a~matkl = b~matkl AND b~spras = @sy-languINTO @DATA(ls_mara)WHERE matnr = @lv_matnr.
    IF sy-subrc = 0.<lfs_out>-zspec = ls_mara-zspec.<lfs_out>-wgbez = ls_mara-wgbez.
    ENDIF.
    CLEAR:ls_mara.<lfs_out>-status = ls_aufk-status.  "工单状态<lfs_out>-menge = ls_aufk-gamng.  "总数量IF line_exists( lt_afpo[ aufnr = ls_aufk-aufnr ] ).<lfs_out>-menge_sh = lt_afpo[ aufnr = ls_aufk-aufnr ]-wemng."收货数量
    ENDIF.ASSIGN COMPONENT 'MEINH' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-meins = <lfs_value>.  "单位UNASSIGN:<lfs_value>.
    ENDIF.<lfs_out>-gstri = ls_aufk-gstri.
    <lfs_out>-gltri = ls_aufk-gltri.ASSIGN COMPONENT 'MATNR' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-matnr1 = <lfs_value>.  "费用编码SELECT SINGLE a~matkl,zspec,b~wgbez,c~maktx FROM mara AS aINNER JOIN t023t AS b ON a~matkl = b~matkl AND b~spras = @sy-languINNER JOIN makt AS c ON a~matnr = c~matnr AND c~spras = @sy-languINTO @DATA(ls_mara1)WHERE a~matnr = @<lfs_out>-matnr1.IF sy-subrc = 0.<lfs_out>-maktx1 = ls_mara1-maktx.<lfs_out>-wgbez1 = ls_mara1-wgbez.<lfs_out>-zspec1 = ls_mara1-zspec.ENDIF.UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'KSTAR' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-kstar = <lfs_value>.  "成本要素UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'KSTAR_TEXT' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-kstar_txt = <lfs_value>.  "成本要素描述UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'LSTAR' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-zylx = <lfs_value>.  "作业类型UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'PLANMENG_G' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-menge_jh = <lfs_value>.  "计划数量UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'PLANKOST_G' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-dmbtr_jh = <lfs_value>.  "计划金额UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'ISTMENG_G' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-menge_sj = <lfs_value>. "实际数量UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'ISTKOST_G' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-dmbtr_sj = <lfs_value>. "实际金额UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'SOLLMENG_G' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-menge_mb = <lfs_value>.  "目标数量(标准成本)UNASSIGN:<lfs_value>.
    ENDIF.ASSIGN COMPONENT 'SOLLKOST_G' OF STRUCTURE <lfs_line> TO <lfs_value>.
    IF <lfs_value> IS ASSIGNED.<lfs_out>-dmbtr_mb = <lfs_value>. "目标金额(标准成本)UNASSIGN:<lfs_value>.
    ENDIF.
    

*PRICE_JHCB 计划成本单价 =计划金额/计划数量
IF <lfs_out>-menge_jh <> 0.
<lfs_out>-price_jhcb = <lfs_out>-dmbtr_jh / <lfs_out>-menge_jh.
ENDIF.

*PRICE_SJCB 实际成本单价
IF <lfs_out>-menge_sj <> 0.
<lfs_out>-price_sjcb = <lfs_out>-dmbtr_sj / <lfs_out>-menge_sj.
ENDIF.
*PRICE_MBCB 目标成本单价
IF <lfs_out>-menge_mb <> 0.
<lfs_out>-price_sjcb = <lfs_out>-dmbtr_mb / <lfs_out>-menge_mb.
ENDIF.

*MENGE_CY 计划与实际数量差异
<lfs_out>-menge_cy = <lfs_out>-menge_jh - <lfs_out>-menge_sj.

*RATE_CY 计划与实际数量差异%
IF <lfs_out>-menge_sj <> 0.
<lfs_out>-rate_cy = <lfs_out>-menge_cy / <lfs_out>-menge_sj * 100.
ENDIF.

*DMBTR_CY 计划与实际金额差异
<lfs_out>-dmbtr_cy = <lfs_out>-dmbtr_jh - <lfs_out>-dmbtr_sj.

*DMBTR_RATE_CY 计划与实际金额差异%
IF <lfs_out>-dmbtr_sj <> 0.
<lfs_out>-dmbtr_rate_cy = <lfs_out>-dmbtr_cy / <lfs_out>-dmbtr_sj * 100…
ENDIF.

*MENGE1_CY 目标与实际数量差异
<lfs_out>-menge1_cy = <lfs_out>-menge_mb - <lfs_out>-menge_sj.

*RATE1_CY 目标与实际数量差异%
IF <lfs_out>-menge_sj <> 0.
<lfs_out>-rate1_cy = <lfs_out>-menge1_cy / <lfs_out>-menge_sj * 100…
ENDIF.

*DMBTR1_CY 目标与实际金额差异
<lfs_out>-dmbtr1_cy = <lfs_out>-dmbtr_mb - <lfs_out>-dmbtr_sj.

*DMBTR1_RATE_CY 目标与实际金额差异%
IF <lfs_out>-dmbtr_sj <> 0.
<lfs_out>-dmbtr1_rate_cy = <lfs_out>-dmbtr1_cy / <lfs_out>-dmbtr_sj * 100…
ENDIF.

ENDLOOP.FREE MEMORY ID 'ZFI028_FIELDCAT'.
FREE MEMORY ID 'ZFI028_TABLE'.
IF <lfs_table> IS ASSIGNED.CLEAR:<lfs_table>.
ENDIF.

ENDLOOP.

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_PROCESS_DATA
&---------------------------------------------------------------------
*& 处理数据
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_process_data .

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_AUTHORITY_CHECK
&---------------------------------------------------------------------
*& 权限检查
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_authority_check .

ENDFORM.
&---------------------------------------------------------------------
*& FORM FRM_VALIDATE_CHECK
&---------------------------------------------------------------------
*& 数据合法性检查
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_validate_check .

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_SHOW_DATA
&---------------------------------------------------------------------
*& 展示数据
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_show_data .

gs_layout-zebra = ‘X’ .
gs_layout-cwidth_opt = ‘X’.
CLEAR gt_fieldcat[].

PERFORM frm_generate_field_catalogu.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-repid
i_bypassing_buffer = ‘X’
i_save = ‘A’
is_layout_lvc = gs_layout

  • i_callback_pf_status_set = 'FRM_SET_PF'
    
  • i_callback_user_command  = 'FRM_USER_COM'
    it_fieldcat_lvc    = gt_fieldcat[]
    i_default          = 'X'
    

    TABLES
    t_outtab = gt_out[]
    EXCEPTIONS
    program_error = 1.
    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.
&---------------------------------------------------------------------
*& Form FRM_SAVE_DATA
&---------------------------------------------------------------------
*& 保存数据
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_save_data .

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_CLEAR_GLOBAL_DATA
&---------------------------------------------------------------------
*& 清空所有全局变量
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_clear_global_data .

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_CALL_SCREEN
&---------------------------------------------------------------------
*& 调用屏幕
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_call_screen .

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_INTIAL
&---------------------------------------------------------------------
*& 初始化处理
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_intial .

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_GENERATE_FIELD_CATALOGU
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM frm_generate_field_catalogu.

PERFORM frm_get_fieldcat TABLES gt_fieldcat USING ‘ZSFI028’.

LOOP AT gt_fieldcat ASSIGNING FIELD-SYMBOL(<lfs_fieldcat>).

IF <lfs_fieldcat>-fieldname = 'MAKTX'.<lfs_fieldcat>-coltext = '产品描述'.
ENDIF.IF <lfs_fieldcat>-fieldname = 'MENGE'.<lfs_fieldcat>-coltext = '总数量'.
ENDIF.IF <lfs_fieldcat>-fieldname = 'MENGE_SH'.<lfs_fieldcat>-coltext = '已交货数量'.
ENDIF.IF <lfs_fieldcat>-fieldname = 'MATNR1'.<lfs_fieldcat>-coltext = '费用编码'.
ENDIF.IF <lfs_fieldcat>-fieldname = 'MAKTX1'.<lfs_fieldcat>-coltext = '费用描述'.
ENDIF.

ENDLOOP.

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_GET_FIELDCAT
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM frm_get_fieldcat TABLES ft_fieldcat_out USING fu_name.
    DATA:lt_fieldcat TYPE slis_t_fieldcat_alv.
    DATA:ls_fieldcat_out TYPE lvc_s_fcat.

CALL FUNCTION ‘REUSE_ALV_FIELDCATALOG_MERGE’
EXPORTING

  • I_PROGRAM_NAME         =
    
  • I_INTERNAL_TABNAME     =
    i_structure_name       = fu_name
    
  • I_CLIENT_NEVER_DISPLAY = 'X'
    
  • I_INCLNAME             =
    
  • I_BYPASSING_BUFFER     =
    
  • I_BUFFER_ACTIVE        =
    

    CHANGING
    ct_fieldcat = lt_fieldcat[]
    EXCEPTIONS
    inconsistent_interface = 1
    program_error = 2
    OTHERS = 3.
    IF sy-subrc <> 0.

  • Implement suitable error handling here
    ENDIF.

    LOOP AT lt_fieldcat[] INTO DATA(ls_fieldcat).
    MOVE-CORRESPONDING ls_fieldcat TO ls_fieldcat_out.
    ls_fieldcat_out-coltext = ls_fieldcat-seltext_l.
    ls_fieldcat_out-ref_field = ls_fieldcat-fieldname.
    ls_fieldcat_out-ref_table = ls_fieldcat-ref_tabname.
    APPEND ls_fieldcat_out TO ft_fieldcat_out.
    ENDLOOP.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_alv_field
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM frm_alv_field USING my_fieldcat TYPE lvc_t_fcat
    VALUE(p_reftable)
    VALUE(p_tabname)
    VALUE(p_reffield)
    VALUE(p_fieldname)
    VALUE(p_stext)
    VALUE(p_ltext)
    VALUE(p_zero)
    VALUE(p_outlenid)
    VALUE(p_outlen)
    VALUE(p_pos)
    VALUE(p_chk)
    VALUE(p_edit)
    VALUE(p_fixed).

gs_fieldcat-col_pos = p_pos.
gs_fieldcat-ref_table = p_reftable.
gs_fieldcat-tabname = p_tabname.
gs_fieldcat-ref_field = p_reffield.
gs_fieldcat-fieldname = p_fieldname.
gs_fieldcat-seltext = p_stext.
gs_fieldcat-seltext = p_ltext.
gs_fieldcat-seltext = p_ltext.
gs_fieldcat-reptext = p_stext.
gs_fieldcat-no_zero = p_zero .
gs_fieldcat-checkbox = p_chk.
gs_fieldcat-edit = p_edit.
gs_fieldcat-fix_column = p_fixed.
IF p_outlenid = ‘X’ .
gs_fieldcat-outputlen = p_outlen.
ENDIF.
APPEND gs_fieldcat TO my_fieldcat.
CLEAR gs_fieldcat.
ENDFORM. " frm_alv_field_COLUMN

&---------------------------------------------------------------------
*& 包含 ZFIR028_DEFINE
&---------------------------------------------------------------------
&---------------------------------------------------------------------

  •          MODIFICATION LOG<程序修改日志,创建时不要填写>
    

*<版本> <日期> <开发者> <功能顾问> 任务编号 <请求号>
*VERSION DATE PROGRAMMER CORR. # IL# TRANSPORT

  • 1 YYYY/MM/DD
    *DESCRIPTION<程序逻辑修改 版本1> :

*DESCRIPTION<程序逻辑修改 版本2> :
*
&---------------------------------------------------------------------


  •        <第一部分---声明程序变量和类>  DECLARATION                 *
    

----------------------------------------------------------------------

  • <1.1-声明常数> CONSTANTS DECLARATION *
    ----------------------------------------------------------------------
    TYPE-POOLS:slis,icon.
    ----------------------------------------------------------------------
  • <1.2-声明用户自定义数据类型> LOCAL DATA TYPES IN PROGRAM *
    ----------------------------------------------------------------------
    TYPES:BEGIN OF ty_status,
    status TYPE char20,
    END OF ty_status.
    ----------------------------------------------------------------------
  • <1.3-声明内表、工作区> GLOBAL INTERNAL TABLES 、WORK AREA DECLARATION *
    ----------------------------------------------------------------------
    DATA:gt_fieldcat TYPE lvc_t_fcat,
    gs_fieldcat LIKE LINE OF gt_fieldcat,
    gs_layout TYPE lvc_s_layo.

DATA:gt_out TYPE TABLE OF zsfi028.

----------------------------------------------------------------------

  • <1.4-声明全局变量> GLOBAL VARIANTS DECLARATION *
    ----------------------------------------------------------------------

----------------------------------------------------------------------

  • <1.5-声明字段符号> FIELD-SYMBOLS DECLARATION *
    ----------------------------------------------------------------------

----------------------------------------------------------------------

  • <1.6-声明控件 OO对象> ALV TABLECONTRL *
    ----------------------------------------------------------------------
    DATA:
    gcl_alvgrid TYPE REF TO cl_gui_alv_grid,
    gcl_container TYPE REF TO cl_gui_container,
    gcl_splitter TYPE REF TO cl_gui_splitter_container.

----------------------------------------------------------------------

  • <1.7-类定义> *
    ----------------------------------------------------------------------
    &---------------------------------------------------------------------
    *& LCL_CLASS1 *
    &---------------------------------------------------------------------
    *& 类功能说明
    &---------------------------------------------------------------------

----------------------------------------------------------------------

  • <1.8-类实现> *
    ----------------------------------------------------------------------

&---------------------------------------------------------------------
*& 包含 ZFIR028_SEL
&---------------------------------------------------------------------
&---------------------------------------------------------------------

  •          MODIFICATION LOG<程序修改日志,创建时不要填写>
    

*<版本> <日期> <开发者> <功能顾问> 任务编号 <请求号>
*VERSION DATE PROGRAMMER CORR. # IL# TRANSPORT

  • 1 YYYY/MM/DD
    *DESCRIPTION<程序逻辑修改 版本1> :

*DESCRIPTION<程序逻辑修改 版本2> :
*
&---------------------------------------------------------------------
----------------------------------------------------------------------

  • <1-声明表工作区> TABLE_WORK_AREAS DECLARATION*
    ----------------------------------------------------------------------
    TABLES:aufk,caufvd,afko.

*----------------------------------------------------------------------
** <2-声明选择屏幕> SELECTION SCREEN *
----------------------------------------------------------------------

"<定义选择屏幕的编号和标题文字>
SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:s_werks FOR aufk-werks OBLIGATORY,
s_aufnr FOR aufk-aufnr OBLIGATORY,
s_matnr FOR afko-plnbez,
s_auart FOR aufk-auart,
s_gstrp FOR afko-gstrp,
s_gltrp FOR afko-gltrp,
s_stat FOR caufvd-ktext NO INTERVALS NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK bl01.

ALV结构如下:
Table: ZSFI028
Description: 生产成本明细表-ALV结构
Row Field name Position Key Data element Domain Datatype Length Lowercase Domain text
1 AUART 1 AUFART AUFART CHAR 4 订单类型
2 AUFNR 2 AUFNR AUFNR CHAR 12 订单编号
3 ZFYLX 3 ZE_ZFYLX TEXT30 CHAR 30 X 费用类型
4 WERKS 4 WERKS_D WERKS CHAR 4 工厂
5 MATNR 5 ZE_MATNR TEXT60 CHAR 60 X 产品编码
6 MAKTX 6 MAKTX TEXT40 CHAR 40 X 物料描述
7 WGBEZ 7 WGBEZ TEXT20 CHAR 20 X 物料组描述
8 ZSPEC 8 ZE_ZSPEC ZD_ZSPEC CHAR 120 规格型号
9 STATUS 9 ZE_SYSTEM_STATUS TEXT100 CHAR 100 X 工单的系统状态
10 MENGE 10 MENGE_D MENG13 QUAN 13 数量
11 MENGE_SH 11 MENGE_D MENG13 QUAN 13 数量
12 MEINS 12 MEINS MEINS UNIT 3 X 基本计量单位
13 GSTRI 13 CO_GSTRI DATUM DATS 8 实际开始日期
14 GLTRI 14 CO_GLTRI DATUM DATS 8 实际结束日期
15 MATNR1 15 MATNR MATNR CHAR 40 物料编号
16 MAKTX1 16 MAKTX TEXT40 CHAR 40 X 物料描述
17 WGBEZ1 17 WGBEZ TEXT20 CHAR 20 X 物料组描述
18 ZSPEC1 18 ZE_ZSPEC ZD_ZSPEC CHAR 120 规格型号
19 KSTAR 19 KSTAR KSTAR CHAR 10 成本要素
20 KSTAR_TXT 20 ZE_KSTAR_TXT TEXT80 CHAR 80 X 成本要素描述
21 ZYLX 21 ZE_ZYLX TXT20 CHAR 20 X 作业类型
22 MENGE_JH 22 ZE_MENGE_JH MENGE QUAN 13 计划数量
23 DMBTR_JH 23 ZE_DMBTR_JH AFLE13D2O16N_TO_23D2O30N CURR 23 计划金额
24 MENGE_SJ 24 ZE_MENGE_SJ MENGE QUAN 13 实际数量
25 DMBTR_SJ 25 ZE_DMBTR_SJ AFLE13D2O16N_TO_23D2O30N CURR 23 实际金额
26 MENGE_MB 26 ZE_MENGE_MB MENGE QUAN 13 目标数量(标准成本)
27 DMBTR_MB 27 ZE_DMBTR_MB AFLE13D2O16N_TO_23D2O30N CURR 23 目标金额(标准成本)
28 PRICE_JHCB 28 ZE_PRICE_JHCB AFLE13D2O16N_TO_23D2O30N CURR 23 计划成本单价
29 PRICE_SJCB 29 ZE_PRICE_SJCB AFLE13D2O16N_TO_23D2O30N CURR 23 实际成本单价
30 PRICE_MBCB 30 ZE_PRICE_MBCB AFLE13D2O16N_TO_23D2O30N CURR 23 目标成本单价
31 MENGE_CY 31 ZE_MENGE_CY MENGE QUAN 13 计划与实际数量差异
32 RATE_CY 32 ZE_RATE_CY KKB_PROZABW DEC 15 计划与实际数量差异%
33 DMBTR_CY 33 ZE_DMBTR_CY AFLE13D2O16N_TO_23D2O30N CURR 23 计划与实际金额差异
34 DMBTR_RATE_CY 34 ZE_RATE1_CY1 KKB_PROZABW DEC 15 计划与实际金额差异%
35 MENGE1_CY 35 ZE_MENGE1_CY MENGE QUAN 13 目标与实际数量差异
36 RATE1_CY 36 ZE_RATE2_CY KKB_PROZABW DEC 15 目标与实际数量差异%
37 DMBTR1_CY 37 ZE_DMBTR1_CY AFLE13D2O16N_TO_23D2O30N CURR 23 目标与实际金额差异
38 DMBTR1_RATE_CY 38 ZE_DMBTR1_RATE_CY KKB_PROZABW DEC 15 目标与实际金额差异%
.

SAP 生产成本明细报表相关推荐

  1. SAP Report painter报表绘制器

    这里所指的Report Painter是SAP ECC产品中的一个报表开发工具,中文名为报表绘制器.经常与Report Painter一同提出的Report Writer是其前身,原应用于SAP R/ ...

  2. SAP QM MB56 报表没有结果之分析与对策

    SAP QM MB56 报表没有结果之分析与对策 我们知道SAP的标注报表可以用于查询Batch Genealogy(即Batch Where-used List),通过它可以查询某个原料的批次被用于 ...

  3. 「SAP技术」SAP MM MB5M报表不显示特殊库存数据

    SAP MM MB5M报表不显示特殊库存数据 比如如下物料号F000005451有特殊库存O库存, 该物料批次的有效期, MB5M,输入该物料号执行查询, 查询结果里,不显示O库存,只显示Normal ...

  4. 「SAP技术」SAP MM ME2N报表能按‘order acknowledgement‘查询采购订单

    「SAP技术」SAP MM ME2N报表能按'order acknowledgement'查询采购订单 执行事务代码ME2N, 点击'Dynamic Selections'按钮 ,进入如下界面, 找到 ...

  5. SAP MM MB5L 报表里的差异金额如何调整?

    SAP MM MB5L 报表里的差异金额如何调整? 5月3号,收到财务顾问提出的一个问题,说是MB5L报表里有差异. 如下查询条件, 报表结果里显示有差异, 经查,导致这个差异的原因之一是,一些物料批 ...

  6. SAP MM ME1M报表结果真的不科学?

    SAP MM ME1M报表结果真的不科学? 深入研究后发现,不是SAP ME1M报表不科学,而是笔者对于SAP系统的认识有盲点. 经查,ME1M报表是可以显示PIR里维护的最新价格的.如下方式: 勾选 ...

  7. SAP MM ME1M报表结果不科学?

    SAP MM ME1M报表结果不科学? 做过SAP MM顾问的都知道,报表ME1M可以查询物料的info record列表,即是说可以以列表的形式批量显示多个物料的采购价格主数据. 但是这个报表有个不 ...

  8. SAP MM ME1M 报表的Layout之调整

    SAP MM ME1M 报表的Layout之调整 之所周知,SAP的很多报表都可以是ALV的格式输出,这个格式对于业务而言,界面友好,方便业务人员按照自己的需求去调整报表输出结果,也方便业务人员将输出 ...

  9. SAP MM 采购报表中Delivery Date的显示

    SAP MM 采购报表中Delivery Date的显示 经反复研究与测试,得知ME2L/ME2N/ME2M等报表是无法很友好的显示Delivery Date. 以ME2L为例, Scope of l ...

  10. 8 SAP QUERY定制报表操作手册 SQVI-推荐

    8 SAP QUERY定制报表操作手册 SQVI-推荐 SAP Query报表定制个功能方便用户按照自己的个人化要求来生成ALV报表.系统通过数据来源,设置表结构和执行三个层面来完成报表输出. SQV ...

最新文章

  1. shiro配置参考(一)
  2. 安卓开发30:AsyncTask的用法
  3. 2021-01-26 粒子群优化算法(PSO)以及Matlab实现
  4. cf600 E. Lomsat gelral
  5. python安装lxml,在windows环境下
  6. 太阳光是平行光吗_“彩虹的形成是因为光的色散和光沿直线传播是一回事吗?”...
  7. win2008无法用计算机名共享,Windows Server 2008 R2中文件共享
  8. 在python中可以使用for作为变量名对吗_python能用一个变量的值作为另一个变量的变量名吗?...
  9. java vert.x_使用Vert.x将JavaScript引入Java企业
  10. set get java_JAVA中关于set()和get()方法的理解及使用
  11. server取出多个最小值 sql_SQL汇总查询及分组查询
  12. 微软 exFAT 技术将进入 Linux 内核
  13. 配置服务器文件,服务器配置文件
  14. JAVA-SWING:生成透明JTable的改进1
  15. Vijos 1303
  16. 201421410019 杨光裕 实验一
  17. js脚本实现自由复制百度文库文字
  18. Qualomm openwrt SDK编译
  19. 概率论与数理统计学习笔记(3)——Pearson相关系数与Spearman相关系数
  20. c语言求成绩标准差,C语言中求和、计算平均值、方差和标准差的实例

热门文章

  1. 基于SpringBoot+Vue的宠物商场管理系统
  2. 5G中大规模MIMO系统通信的若干分析
  3. 生物信息学分析 | 物种间的同源基因的批量注释
  4. 初级的数据分析师,主要需要做哪些工作?
  5. 如何免费注册申请到【苹果开发者账号】
  6. ue4 计算向量夹角
  7. 拉钩网爬取所有python职位信息
  8. 嵌入式linux机械臂,一款基于ARM嵌入式的机械臂的设计与实现
  9. 西安交大计算机专业考研复试,2018西安交通大学计算机考研复试分数线_计算机考研分数线...
  10. 计算机培训学校可行性报告,在线考试系统可行性分析报告