SAP FICO工单成本分析报表
一、报表逻辑









二、报表界面


三、报表代码
*&---------------------------------------------------------------------*
*& 程序名: ZRPFI_035
*& 创建者(公司)/日期:
*& 程序描述:
*& 工单成本分析报表
*&---------------------------------------------------------------------*
*& 版本/修改者(公司)/日期//修改描述
*&
*&---------------------------------------------------------------------*
REPORT zrpfi_035.
TABLES: afpo,ztmm_mara,ztmm_marc,caufv,afko,zspp_000.
TYPES: BEGIN OF ty_alv,
aufnr TYPE afpo-aufnr, "工单号码
matnr TYPE afpo-matnr, "物料编码
maktx TYPE makt-maktx, "物料描述
zzxmbm TYPE ztmm_marc-zzxmbm, "项目编码
psmng TYPE afpo-psmng, "已订购量
wemng TYPE afpo-wemng, "完成数量
zwemng TYPE afpo-wemng, "短缺量
zzt(4) TYPE c, "工单状态
dauat TYPE afpo-dauat, "工单类型
erdat TYPE caufv-erdat, "创建日期
ftrmi TYPE afko-ftrmi, "发放日期
ltext TYPE cskt-ltext, "部门名称
kostl TYPE cskt-kostl, "部门编码
dwerk TYPE afpo-dwerk, "工厂
idat2 TYPE caufv-idat2, "加工单结清日期
* ZTXT TYPE STRING, "长文本
matkl TYPE mara-matkl, "物料组
zzkhjx TYPE ztmm_marc-zzkhjx, "客户机型
prctr TYPE aufk-prctr, "利润中心
objnr TYPE aufk-objnr, "对象编号
amein TYPE afpo-amein, "工单计量单位
waers TYPE aufk-waers, "工单币别
jh_clcb TYPE cosp-wog001, "计划-材料成本
jh_zjrg TYPE coss-wog001, "计划-直接人工
jh_zzfy TYPE coss-wog001, "计划-制造费用
jh_mjfy TYPE coss-wog001, "计划-模具费用
jh_zcb TYPE coss-wog001, "计划-总成本
mb_clcb TYPE coss-wog001, "目标-材料成本
mb_zjrg TYPE coss-wog001, "目标-直接人工
mb_zzfy TYPE coss-wog001, "目标-制造费用
mb_mjfy TYPE coss-wog001, "目标-模具费用
mb_zcb TYPE coss-wog001, "目标-总成本
sj_clcb TYPE cosp-wog001, "实际-材料成本
sj_zjrg TYPE coss-wog001, "实际-直接人工
sj_zzfy TYPE coss-wog001, "实际-制造费用
sj_mjfy TYPE coss-wog001, "实际-模具费用
sj_zcb TYPE coss-wog001, "实际-总成本
cy_jhsj TYPE coss-wog001, "计划/实际差异
cy_mbsj TYPE coss-wog001, "目标/实际差异
cy_jhsjb TYPE coss-wog001, "计划/实际差异%
cy_mbsjb TYPE coss-wog001, "目标/实际差异%
datab TYPE a900-datab, "定价起始日期
kbetr TYPE konp-kbetr, "定价价格
kpein TYPE konp-kpein, "定价价格单位
konwa TYPE konp-konwa, "定价币别
kmein TYPE konp-kmein, "定价计量单位
hl TYPE bapi1093_0-exch_rate, "加工单结清日期汇率
bwaers TYPE t001-waers, "20240110
END OF ty_alv.
DATA: gt_alv TYPE TABLE OF ty_alv,
gs_alv TYPE ty_alv.
DATA:BEGIN OF gt_itab OCCURS 0 .
INCLUDE TYPE ty_alv .
DATA:
routing_no TYPE co_aufpl,
flg TYPE c,
END OF gt_itab .
TYPES: BEGIN OF ty_anr ,
aufnr TYPE aufnr,
matnr TYPE matnr,
kstar TYPE kkbcs_out-kstar,
sollkost_g TYPE kkbcs_out-sollkost_g,
END OF ty_anr .
DATA gt_anr TYPE TABLE OF ty_anr .
DATA: gt_fcat TYPE lvc_t_fcat,
gs_fcat TYPE lvc_s_fcat,
gs_layo TYPE lvc_s_layo.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_dwerk FOR afpo-dwerk NO-EXTENSION
NO INTERVALS MEMORY ID wrk, "OBLIGATORY
s_aufnr FOR afpo-aufnr,
s_matnr FOR afpo-matnr,
s_zzxmbm FOR ztmm_marc-zzxmbm,
s_ltext FOR zspp_000-ltext,"cskt-ltext,
s_idat2 FOR caufv-idat2,
s_erdat FOR caufv-erdat,
s_ftrmi FOR afko-ftrmi,
s_dauat FOR zspp_000-dauat." afpo-dauat.
* s_zzt FOR bapi_order_header1-CO_STTXT,
PARAMETERS: zzt TYPE char10 AS LISTBOX VISIBLE LENGTH 15 USER-COMMAND chgzt .
PARAMETERS zflag AS CHECKBOX DEFAULT '' USER-COMMAND chk.
SELECTION-SCREEN END OF BLOCK b1.
INITIALIZATION.
DATA itab_list TYPE vrm_values.
itab_list = VALUE #(
( key = 'CRTD' text = '已创建' )
( key = 'REL' text = '已审批' )
( key = 'CNF' text = '已确认' )
( key = 'PCNF' text = '部分确认' )
( key = 'DLV' text = '交货' )
( key = 'PDLV' text = '部分交货' )
( key = '删除' text = '' )
( key = '标记' text = '' )
( key = '锁定' text = '' )
( key = 'TECO' text = '技术性完成' )
( key = '结算' text = '' )
( key = 'GMPS' text = '' )
).
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'ZZT'
values = itab_list.
REFRESH itab_list.
DATA: lv_begdat TYPE datum,
lv_enddat TYPE datum.
DATA: BEGIN OF date,
j(4),
m(2),
t(2),
END OF date.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = sy-datum
IMPORTING
last_day_of_month = lv_enddat
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.
date = lv_enddat.
date-t = '01'.
lv_begdat = date .
INSERT VALUE #( sign = 'I' option = 'BT' low = lv_begdat high = lv_enddat )
INTO TABLE s_idat2.
IF sy-tcode = 'ZFIR017'.
CLEAR s_idat2[] .
ENDIF.
AT SELECTION-SCREEN OUTPUT.
IF zflag = 'X' .
zzt = '' .
ENDIF.
LOOP AT SCREEN.
IF screen-name EQ 'S_DWERK-LOW'.
screen-required = '2'.
MODIFY SCREEN .
ENDIF.
ENDLOOP.
AT SELECTION-SCREEN .
"权限检查
DATA: lv_message TYPE string.
SELECT werks FROM t001w WHERE werks IN @s_dwerk INTO TABLE @DATA(lt_t001w).
LOOP AT lt_t001w INTO DATA(ls_t001w).
AUTHORITY-CHECK OBJECT 'W_BETR_USR'
ID 'WERKS' FIELD ls_t001w-werks.
&nb
