*&---------------------------------------------------------------------*
*& Report ZFIR092
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2018-10-09
*& Program Type : Report
*& Description : 工单差异分析明细表
*&---------------------------------------------------------------------*
REPORT ZFIR092.
*&---------------------------------------------------------------------*
*& 包含 ZFIR092_TOP
*&---------------------------------------------------------------------*
TABLES:BKPF,MSEG,AUFK,T001W,COSS.
TYPE-POOLS:SLIS.
"定义ALV输出所需变量
DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
TYPES: BEGIN OF GTS_DATA,
VLFAG TYPE C, "标记字段
WERKS TYPE AUFK-WERKS, "工厂
AUFNR TYPE AUFK-AUFNR, "订单编号
AUART TYPE AUFK-AUART, "订单类型
CAKTX TYPE MAKT-MAKTX, "产品名称
GAMNG TYPE AFKO-GAMNG, "批量
KSTAR TYPE COSP-KSTAR, "成本要素
TXT20 TYPE SKAT-TXT20, "成本要素名称
MATNR TYPE COKEY-MATNR, "物料代码
WAKTX TYPE MAKT-MAKTX , "料物描述
KOSTL TYPE CSKT-KOSTL , "成本中心
MCTXT TYPE CSKT-MCTXT , "成本中心名称
MEINH TYPE COSP-MEINH , "单位
PLNBEZ TYPE AFPO-MATNR, "产品编码
PSMNG TYPE AFPO-PSMNG , "总数量
UMREZ TYPE AFPO-UMREZ , "分子
UMREN TYPE AFPO-UMREN , "分母
MEGJH TYPE COSP-MEG001, "计划数量
MEGSJ TYPE COSP-MEG001, "实际数量
MEGMB TYPE COSP-MEG001, "目标数量
WOGJH TYPE COSP-WOG001, "计划成本
WOGSJ TYPE COSP-WOG001, "实际成本
WOGMB TYPE COSP-WOG001, "目标成本
MSLJH TYPE COSP-MEG001, "数量差异-实际与计划:
WCBJH TYPE COSP-WOG001, "成本差异-实际与计划:
MSLMB TYPE COSP-MEG001, "数量差异-实际与目标:
WCBMB TYPE COSP-WOG001, "成本差异-实际与目标:
OBJNR TYPE AUFK-OBJNR, "对象号
UDATE TYPE JCDS-UDATE, "日期
UTIME TYPE JCDS-UTIME, "时间
INACT TYPE JCDS-INACT, "状态未激活
END OF GTS_DATA.
DATA: GT_DATA TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GS_DATA TYPE GTS_DATA .
TYPES: BEGIN OF GTS_COSP,
OBJNR TYPE COSP-OBJNR , "对象号
GJAHR TYPE COSP-GJAHR , "财年
WRTTP TYPE COSP-WRTTP , "值类型
WERKS TYPE COKEY-WERKS, "工厂
MATNR TYPE COKEY-MATNR, "物料代码
KSTAR TYPE COSP-KSTAR , "取成本要素
HRKFT TYPE COSP-HRKFT , "CO次级码
MEINH TYPE COSP-MEINH , "单位
WOG001 TYPE COSP-WOG001, "成本
WOG002 TYPE COSP-WOG002, "成本
WOG003 TYPE COSP-WOG003, "成本
WOG004 TYPE COSP-WOG004, "成本
WOG005 TYPE COSP-WOG005, "成本
WOG006 TYPE COSP-WOG006, "成本
WOG007 TYPE COSP-WOG007, "成本
WOG008 TYPE COSP-WOG008, "成本
WOG009 TYPE COSP-WOG009, "成本
WOG010 TYPE COSP-WOG010, "成本
WOG011 TYPE COSP-WOG011, "成本
WOG012 TYPE COSP-WOG012, "成本
WOG013 TYPE COSP-WOG013, "成本
WOG014 TYPE COSP-WOG014, "成本
WOG015 TYPE COSP-WOG015, "成本
WOG016 TYPE COSP-WOG016, "成本
MEG001 TYPE COSP-MEG001, "数量
MEG002 TYPE COSP-MEG002, "数量
MEG003 TYPE COSP-MEG003, "数量
MEG004 TYPE COSP-MEG004, "数量
MEG005 TYPE COSP-MEG005, "数量
MEG006 TYPE COSP-MEG006, "数量
MEG007 TYPE COSP-MEG007, "数量
MEG008 TYPE COSP-MEG008, "数量
MEG009 TYPE COSP-MEG009, "数量
MEG010 TYPE COSP-MEG010, "数量
MEG011 TYPE COSP-MEG011, "数量
MEG012 TYPE COSP-MEG012, "数量
MEG013 TYPE COSP-MEG013, "数量
MEG014 TYPE COSP-MEG014, "数量
MEG015 TYPE COSP-MEG015, "数量
MEG016 TYPE COSP-MEG016, "数量
MSLHZ TYPE COSP-MEG001, "数量汇总
WCBHZ TYPE COSP-WOG001, "成本汇总
MEGJH TYPE COSP-MEG001, "计划数量
MEGSJ TYPE COSP-MEG001, "实际数量
MEGMB TYPE COSP-MEG001, "目标数量
WOGJH TYPE COSP-WOG001, "计划成本
WOGSJ TYPE COSP-WOG001, "实际成本
WOGMB TYPE COSP-WOG001, "目标成本
MSLJH TYPE COSP-MEG001, "数量差异-实际与计划:
WCBJH TYPE COSP-WOG001, "成本差异-实际与计划:
MSLMB TYPE COSP-MEG001, "数量差异-实际与目标:
WCBMB TYPE COSP-WOG001, "成本差异-实际与目标:
END OF GTS_COSP.
DATA: GT_COSP TYPE TABLE OF GTS_COSP WITH HEADER LINE.
DATA: GT_COSP_C TYPE TABLE OF GTS_COSP WITH HEADER LINE.
TYPES: BEGIN OF GTS_COSS,
OBJNR TYPE COSS-OBJNR , "对象号
GJAHR TYPE COSS-GJAHR , "财年
WRTTP TYPE COSS-WRTTP , "值类型
WERKS TYPE COKEY-WERKS, "工厂
KSTAR TYPE COSS-KSTAR , "取成本要素
KOSTL TYPE CSKT-KOSTL , "成本中心
PAROB TYPE COSS-PAROB , "合作伙伴对象
HRKFT TYPE COSS-HRKFT , "CO次级码
MEINH TYPE COSS-MEINH , "单位
WOG001 TYPE COSS-WOG001, "成本
WOG002 TYPE COSS-WOG002, "成本
WOG003 TYPE COSS-WOG003, "成本
WOG004 TYPE COSS-WOG004, "成本
WOG005 TYPE COSS-WOG005, "成本
WOG006 TYPE COSS-WOG006, "成本
WOG007 TYPE COSS-WOG007, "成本
WOG008 TYPE COSS-WOG008, "成本
WOG009 TYPE COSS-WOG009, "成本
WOG010 TYPE COSS-WOG010, "成本
WOG011 TYPE COSS-WOG011, "成本
WOG012 TYPE COSS-WOG012, "成本
WOG013 TYPE COSS-WOG013, "成本
WOG014 TYPE COSS-WOG014, "成本
WOG015 TYPE COSS-WOG015, "成本
WOG016 TYPE COSS-WOG016, "成本
MEG001 TYPE COSS-MEG001, "数量
MEG002 TYPE COSS-MEG002, "数量
MEG003 TYPE COSS-MEG003, "数量
MEG004 TYPE COSS-MEG004, "数量
MEG005 TYPE COSS-MEG005, "数量
MEG006 TYPE COSS-MEG006, "数量
MEG007 TYPE COSS-MEG007, "数量
MEG008 TYPE COSS-MEG008, "数量
MEG009 TYPE COSS-MEG009, "数量
MEG010 TYPE COSS-MEG010, "数量
MEG011 TYPE COSS-MEG011, "数量
MEG012 TYPE COSS-MEG012, "数量
MEG013 TYPE COSS-MEG013, "数量
MEG014 TYPE COSS-MEG014, "数量
MEG015 TYPE COSS-MEG015, "数量
MEG016 TYPE COSS-MEG016, "数量
MSLHZ TYPE COSS-MEG001, "数量汇总
WCBHZ TYPE COSS-WOG001, "成本汇总
MEGJH TYPE COSS-MEG001, "计划数量
MEGSJ TYPE COSS-MEG001, "实际数量
MEGMB TYPE COSS-MEG001, "目标数量
WOGJH TYPE COSS-WOG001, "计划成本
WOGSJ TYPE COSS-WOG001, "实际成本
WOGMB TYPE COSS-WOG001, "目标成本
MSLJH TYPE COSS-MEG001, "数量差异-实际与计划:
WCBJH TYPE COSS-WOG001, "成本差异-实际与计划:
MSLMB TYPE COSS-MEG001, "数量差异-实际与目标:
WCBMB TYPE COSS-WOG001, "成本差异-实际与目标:
END OF GTS_COSS.
DATA: GT_COSS TYPE TABLE OF GTS_COSS WITH HEADER LINE.
DATA: GT_COSS_C TYPE TABLE OF GTS_COSS WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS: P_WERKS LIKE T001W-WERKS MODIF ID M1 OBLIGATORY , "工厂
P_GJAHR LIKE BKPF-GJAHR MODIF ID M1 OBLIGATORY , "会计年度
P_MONAT LIKE BKPF-MONAT MODIF ID M1 OBLIGATORY . "期间
SELECT-OPTIONS: S_MATNR FOR MSEG-MATNR MODIF ID C1, "物料
S_AUFNR FOR AUFK-AUFNR MODIF ID C1. "订单
SELECTION-SCREEN END OF BLOCK B1.
*&---------------------------------------------------------------------*
*& 包含 ZFIR092_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_EXCLUDE_OPTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_EXCLUDE_OPTION .
** Define the object to be passed to the RESTRICTION parameter
*DATA RESTRICT TYPE SSCR_RESTRICT.
*
** Auxiliary objects for filling RESTRICT
*DATA : OPTLIST TYPE SSCR_OPT_LIST,
* ASS TYPE SSCR_ASS.
*
** 限制MATNR参数只能使用‘EQ’ 和‘BT’.
* OPTLIST-NAME = 'OBJECTKEY1'.
* OPTLIST-OPTIONS-EQ = 'X'.
* OPTLIST-OPTIONS-BT = 'X'.
* APPEND OPTLIST TO RESTRICT-OPT_LIST_TAB.
*
* ASS-KIND = 'S'.
* ASS-NAME = 'S_MONAT'.
* ASS-SG_MAIN = 'I'.
* ASS-SG_ADDY = SPACE.
* ASS-OP_MAIN = 'OBJECTKEY1'.
* APPEND ASS TO RESTRICT-ASS_TAB.
*
* CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
* EXPORTING
* RESTRICTION = RESTRICT
* EXCEPTIONS
* TOO_LATE = 1
* REPEATED = 2
* SELOPT_WITHOUT_OPTIONS = 3
* SELOPT_WITHOUT_SIGNS = 4
* INVALID_SIGN = 5
* EMPTY_OPTION_LIST = 6
* INVALID_KIND = 7
* REPEATED_KIND_A = 8
* OTHERS = 9
* .
*
* 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 SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
ID 'WERKS' FIELD P_WERKS.
IF SY-SUBRC <> 0.
MESSAGE '您没有工厂:'&& P_WERKS && ' 的权限!' TYPE 'E' .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
FIELD-SYMBOLS <FS> .
DATA: G_FIELD(40).
DATA: LV_MONAT TYPE BKPF-MONAT .
DATA: LV_NUM TYPE BKPF-MONAT .
DATA: LV_BUDAL TYPE BUDAT.
DATA: LV_BUDAH TYPE BUDAT.
LV_BUDAL = P_GJAHR && P_MONAT && '01' .
LV_BUDAH = P_GJAHR && P_MONAT && '01' .
*取所选期间的最后一天
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = LV_BUDAH
IMPORTING
E_DATE = LV_BUDAH
.
*1, 取订单相关信息:
CLEAR:GT_DATA[].
SELECT
AUFK~WERKS
AUFK~AUFNR
AUFK~AUART
AUFK~OBJNR
JCDS~UDATE
JCDS~UTIME
JCDS~INACT
AFPO~MATNR AS PLNBEZ
AFPO~PSMNG
AFPO~UMREZ
AFPO~UMREN
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
FROM AUFK
INNER JOIN JCDS ON AUFK~OBJNR = JCDS~OBJNR
INNER JOIN AFPO ON AUFK~AUFNR = AFPO~AUFNR
WHERE AUFK~WERKS = P_WERKS
AND AUFK~AUFNR IN S_AUFNR
AND JCDS~UDATE >= LV_BUDAL
AND JCDS~UDATE <= LV_BUDAH
* AND JCDS~INACT = ''
AND AFPO~MATNR IN S_MATNR
AND JCDS~STAT IN ( 'I0012','I0045','I0046' )
.
SORT GT_DATA[] DESCENDING BY AUFNR UDATE UTIME DESCENDING.
DELETE ADJACENT DUPLICATES FROM GT_DATA[] COMPARING AUFNR.
DELETE GT_DATA[] WHERE INACT IS NOT INITIAL .
IF GT_DATA[] IS NOT INITIAL.
*A,取物料代码及其计划、实际、目标等数据,逻辑如下:
*分类帐(COSP-LEDNR)=0、
*对象号(COSP-OBJNR)=对象号(AUFK-OBJNR)、
*财年(COSP-GJAHR)= 屏幕会计年度、
*值类型(COSP-WRTTP)= 01、04、05
*版本(COSP-VERSN)=0、
*借贷标识(COSP-BEKNZ)=D、C;
CLEAR GT_COSP[] .
SELECT COSP~KSTAR
COSP~WRTTP
COSP~GJAHR
COSP~OBJNR
COSP~HRKFT
COSP~MEINH
COSP~WOG001
COSP~WOG002
COSP~WOG003
COSP~WOG004
COSP~WOG005
COSP~WOG006
COSP~WOG007
COSP~WOG008
COSP~WOG009
COSP~WOG010
COSP~WOG011
COSP~WOG012
COSP~WOG013
COSP~WOG014
COSP~WOG015
COSP~WOG016
COSP~MEG001
COSP~MEG002
COSP~MEG003
COSP~MEG004
COSP~MEG005
COSP~MEG006
COSP~MEG007
COSP~MEG008
COSP~MEG009
COSP~MEG010
COSP~MEG011
COSP~MEG012
COSP~MEG013
COSP~MEG014
COSP~MEG015
COSP~MEG016
COKEY~MATNR
COKEY~WERKS
INTO CORRESPONDING FIELDS OF TABLE GT_COSP[]
FROM COSP
LEFT JOIN COKEY ON COSP~HRKFT = COKEY~HRKFT
FOR ALL ENTRIES IN GT_DATA[]
WHERE COSP~OBJNR = GT_DATA-OBJNR
* AND COKEY~WERKS = GT_DATA-WERKS
AND COSP~LEDNR = '00'
AND COSP~GJAHR <= P_GJAHR
AND COSP~WRTTP IN ( '01','04','05' )
AND COSP~VERSN = '000'
AND COSP~BEKNZ IN ( 'S','H' )
.
CLEAR GT_COSP_C[] .
* GT_COSP_C[] = GT_COSP[] .
LOOP AT GT_COSP.
COLLECT GT_COSP INTO GT_COSP_C.
ENDLOOP .
SORT GT_COSP[] BY OBJNR WERKS MATNR KSTAR WRTTP .
DELETE ADJACENT DUPLICATES FROM GT_COSP[] COMPARING OBJNR WERKS MATNR KSTAR.
SORT GT_COSP_C[] BY OBJNR WERKS MATNR KSTAR WRTTP.
LOOP AT GT_COSP.
LOOP AT GT_COSP_C WHERE OBJNR = GT_COSP-OBJNR
AND WERKS = GT_COSP-WERKS
AND MATNR = GT_COSP-MATNR
AND KSTAR = GT_COSP-KSTAR .
IF GT_COSP_C-GJAHR < P_GJAHR.
LV_MONAT = 16 .
ELSE .
IF P_MONAT >= 12.
LV_MONAT = 16 .
ELSE .
LV_MONAT = P_MONAT .
ENDIF.
ENDIF.
LV_NUM = '01' .
WHILE LV_NUM <= LV_MONAT.
G_FIELD = 'GT_COSP_C-MEG0' && LV_NUM .
ASSIGN (G_FIELD) TO <FS>.
IF <FS> IS ASSIGNED.
GT_COSP_C-MSLHZ = GT_COSP_C-MSLHZ + <FS>.
ENDIF.
UNASSIGN <FS>.
G_FIELD = 'GT_COSP_C-WOG0' && LV_NUM .
ASSIGN (G_FIELD) TO <FS>.
IF <FS> IS ASSIGNED.
GT_COSP_C-WCBHZ = GT_COSP_C-WCBHZ + <FS>.
ENDIF.
UNASSIGN <FS>.
LV_NUM = LV_NUM + 1.
ENDWHILE.
IF GT_COSP_C-WRTTP = '01'.
GT_COSP-MEGJH = GT_COSP_C-MSLHZ .
GT_COSP-WOGJH = GT_COSP_C-WCBHZ .
ELSEIF GT_COSP_C-WRTTP = '04'.
GT_COSP-MEGSJ = GT_COSP_C-MSLHZ .
GT_COSP-WOGSJ = GT_COSP_C-WCBHZ .
ELSEIF GT_COSP_C-WRTTP = '05'.
GT_COSP-MEGMB = GT_COSP_C-MSLHZ .
GT_COSP-WOGMB = GT_COSP_C-WCBHZ .
ENDIF.
CLEAR GT_COSP_C .
ENDLOOP.
GT_COSP-MSLJH = GT_COSP-MEGSJ - GT_COSP-MEGJH .
GT_COSP-WCBJH = GT_COSP-WOGSJ - GT_COSP-WOGJH .
GT_COSP-MSLMB = GT_COSP-MEGSJ - GT_COSP-MEGMB .
GT_COSP-WCBMB = GT_COSP-WOGSJ - GT_COSP-WOGMB .
MODIFY GT_COSP .
CLEAR GT_COSP .
ENDLOOP.
*B,取成本中心及其计划、实际、目标等数据
DATA: GR_KSTAR TYPE RANGE OF KSTAR,
GW_KSTAR LIKE LINE OF GR_KSTAR.
CLEAR GR_KSTAR[].
GW_KSTAR-SIGN = 'I'.
GW_KSTAR-OPTION = 'BT'.
GW_KSTAR-LOW = '0000900001'.
GW_KSTAR-HIGH = '0000900009'.
APPEND GW_KSTAR TO GR_KSTAR[].
CLEAR GW_KSTAR.
CLEAR GT_COSS[] .
SELECT COSS~OBJNR
COSS~GJAHR
COSS~WRTTP
COSS~KSTAR
COSS~PAROB
COSS~HRKFT
COSS~MEINH
COSS~WOG001
COSS~WOG002
COSS~WOG003
COSS~WOG004
COSS~WOG005
COSS~WOG006
COSS~WOG007
COSS~WOG008
COSS~WOG009
COSS~WOG010
COSS~WOG011
COSS~WOG012
COSS~WOG013
COSS~WOG014
COSS~WOG015
COSS~WOG016
COSS~MEG001
COSS~MEG002
COSS~MEG003
COSS~MEG004
COSS~MEG005
COSS~MEG006
COSS~MEG007
COSS~MEG008
COSS~MEG009
COSS~MEG010
COSS~MEG011
COSS~MEG012
COSS~MEG013
COSS~MEG014
COSS~MEG015
COSS~MEG016
INTO CORRESPONDING FIELDS OF TABLE GT_COSS[]
FROM COSS
FOR ALL ENTRIES IN GT_DATA[]
WHERE COSS~OBJNR = GT_DATA-OBJNR
AND COSS~LEDNR = '00'
AND COSS~GJAHR <= P_GJAHR
AND COSS~WRTTP IN ( '01','04','05' )
AND COSS~VERSN = '000'
AND COSS~BEKNZ IN ( 'S','H' )
AND COSS~KSTAR IN GR_KSTAR
.
CLEAR GT_COSS_C[] .
LOOP AT GT_COSS.
CLEAR GT_DATA .
READ TABLE GT_DATA WITH KEY OBJNR = GT_COSS-OBJNR .
GT_COSS-WERKS = GT_DATA-WERKS .
GT_COSS-KOSTL = GT_COSS-PAROB+6(10) .
COLLECT GT_COSS INTO GT_COSS_C[].
MODIFY GT_COSS .
CLEAR GT_COSS .
ENDLOOP.
* GT_COSS_C[] = GT_COSS[] .
SORT GT_COSS[] BY OBJNR GJAHR WERKS KSTAR KOSTL .
DELETE ADJACENT DUPLICATES FROM GT_COSS[] COMPARING OBJNR GJAHR WERKS KSTAR KOSTL.
SORT GT_COSS_C[] BY OBJNR GJAHR WERKS KSTAR KOSTL WRTTP.
LOOP AT GT_COSS.
LOOP AT GT_COSS_C WHERE OBJNR = GT_COSS-OBJNR
AND WERKS = GT_COSS-WERKS
AND GJAHR = GT_COSS-GJAHR
AND KSTAR = GT_COSS-KSTAR
AND KOSTL = GT_COSS-KOSTL .
IF GT_COSS_C-GJAHR < P_GJAHR.
LV_MONAT = 16 .
ELSE .
IF P_MONAT >= 12.
LV_MONAT = 16 .
ELSE .
LV_MONAT = P_MONAT .
ENDIF.
ENDIF.
LV_NUM = '01' .
WHILE LV_NUM <= LV_MONAT.
G_FIELD = 'GT_COSS_C-MEG0' && LV_NUM .
ASSIGN (G_FIELD) TO <FS>.
IF <FS> IS ASSIGNED.
GT_COSS_C-MSLHZ = GT_COSS_C-MSLHZ + <FS>.
ENDIF.
UNASSIGN <FS>.
G_FIELD = 'GT_COSS_C-WOG0' && LV_NUM .
ASSIGN (G_FIELD) TO <FS>.
IF <FS> IS ASSIGNED.
GT_COSS_C-WCBHZ = GT_COSS_C-WCBHZ + <FS>.
ENDIF.
UNASSIGN <FS>.
LV_NUM = LV_NUM + 1.
ENDWHILE.
IF GT_COSS_C-WRTTP = '01'.
GT_COSS-MEGJH = GT_COSS_C-MSLHZ .
GT_COSS-WOGJH = GT_COSS_C-WCBHZ .
ELSEIF GT_COSS_C-WRTTP = '04'.
GT_COSS-MEGSJ = GT_COSS_C-MSLHZ .
GT_COSS-WOGSJ = GT_COSS_C-WCBHZ .
ELSEIF GT_COSS_C-WRTTP = '05'.
GT_COSS-MEGMB = GT_COSS_C-MSLHZ .
GT_COSS-WOGMB = GT_COSS_C-WCBHZ .
ENDIF.
CLEAR GT_COSS_C .
ENDLOOP.
GT_COSS-MSLJH = GT_COSS-MEGSJ - GT_COSS-MEGJH .
GT_COSS-WCBJH = GT_COSS-WOGSJ - GT_COSS-WOGJH .
GT_COSS-MSLMB = GT_COSS-MEGSJ - GT_COSS-MEGMB .
GT_COSS-WCBMB = GT_COSS-WOGSJ - GT_COSS-WOGMB .
MODIFY GT_COSS .
CLEAR GT_COSS .
ENDLOOP.
LOOP AT GT_DATA WHERE VLFAG IS INITIAL.
IF GT_DATA-UMREN IS INITIAL .
GT_DATA-UMREN = 1 .
ENDIF.
IF GT_DATA-UMREZ IS INITIAL .
GT_DATA-UMREZ = 1 .
ENDIF.
*再根据订单取表AFPO的产品编码(AFPO-MATNR)、总数量(PSMNG)、分子(UMREZ)、分母(UMREN),批量等于总数量 乘以 分母 除以 分子
IF GT_DATA-UMREZ <> 0.
GT_DATA-GAMNG = GT_DATA-PSMNG * GT_DATA-UMREN / GT_DATA-UMREZ .
ENDIF.
SELECT SINGLE MAKTX INTO GT_DATA-CAKTX FROM MAKT
WHERE MATNR = GT_DATA-PLNBEZ
AND SPRAS = 1
.
GS_DATA = GT_DATA .
LOOP AT GT_COSP WHERE OBJNR = GT_DATA-OBJNR .
GS_DATA-KSTAR = GT_COSP-KSTAR .
GS_DATA-MATNR = GT_COSP-MATNR .
GS_DATA-MEINH = GT_COSP-MEINH .
GS_DATA-MEGJH = GT_COSP-MEGJH .
GS_DATA-WOGJH = GT_COSP-WOGJH .
GS_DATA-MEGSJ = GT_COSP-MEGSJ .
GS_DATA-WOGSJ = GT_COSP-WOGSJ .
GS_DATA-MEGMB = GT_COSP-MEGMB .
GS_DATA-WOGMB = GT_COSP-WOGMB .
GS_DATA-MSLJH = GT_COSP-MSLJH .
GS_DATA-WCBJH = GT_COSP-WCBJH .
GS_DATA-MSLMB = GT_COSP-MSLMB .
GS_DATA-WCBMB = GT_COSP-WCBMB .
SELECT SINGLE TXT20 INTO GS_DATA-TXT20 FROM SKAT
WHERE SAKNR = GS_DATA-KSTAR
AND KTOPL = 'CP11'
AND SPRAS = 1
.
SELECT SINGLE MAKTX INTO GS_DATA-WAKTX FROM MAKT
WHERE MATNR = GS_DATA-MATNR
AND SPRAS = 1
.
GS_DATA-VLFAG = 'X' .
APPEND GS_DATA TO GT_DATA[].
CLEAR GT_COSP .
ENDLOOP.
GS_DATA = GT_DATA .
LOOP AT GT_COSS WHERE OBJNR = GT_DATA-OBJNR .
GS_DATA-KSTAR = GT_COSS-KSTAR .
GS_DATA-KOSTL = GT_COSS-KOSTL .
GS_DATA-MEINH = GT_COSS-MEINH .
GS_DATA-MEGJH = GT_COSS-MEGJH .
GS_DATA-WOGJH = GT_COSS-WOGJH .
GS_DATA-MEGSJ = GT_COSS-MEGSJ .
GS_DATA-WOGSJ = GT_COSS-WOGSJ .
GS_DATA-MEGMB = GT_COSS-MEGMB .
GS_DATA-WOGMB = GT_COSS-WOGMB .
GS_DATA-MSLJH = GT_COSS-MSLJH .
GS_DATA-WCBJH = GT_COSS-WCBJH .
GS_DATA-MSLMB = GT_COSS-MSLMB .
GS_DATA-WCBMB = GT_COSS-WCBMB .
SELECT SINGLE TXT20 INTO GS_DATA-TXT20 FROM SKAT
WHERE SAKNR = GS_DATA-KSTAR
AND KTOPL = 'CP11'
AND SPRAS = 1
.
SELECT SINGLE MCTXT INTO GS_DATA-MCTXT FROM CSKT
WHERE KOSTL = GS_DATA-KOSTL
AND SPRAS = 1
.
GS_DATA-VLFAG = 'X' .
APPEND GS_DATA TO GT_DATA[].
CLEAR GT_COSS .
ENDLOOP.
CLEAR GT_DATA .
CLEAR GS_DATA .
ENDLOOP.
DELETE GT_DATA[] WHERE VLFAG IS INITIAL .
ELSE .
MESSAGE 'NO_DATA!'TYPE'S'DISPLAY LIKE 'E'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
CLEAR S_LAYOUT.
S_LAYOUT-ZEBRA = 'X'.
S_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
* s_layout-box_fieldname = 'BOX'.
PERFORM FRM_FILL_FIELD .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = GT_FIELDCAT
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
* i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
TABLES
T_OUTTAB = GT_DATA[].
ENDFORM.
FORM FRM_FILL_FIELD .
DATA: WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DEFINE FILL_FIELD.
wa_fieldcat-fieldname = &1.
wa_fieldcat-seltext_l = &2.
IF wa_fieldcat-fieldname = 'MSLJH' or wa_fieldcat-fieldname = 'WCBJH'.
wa_fieldcat-EMPHASIZE = 'C600'. "设置字段的颜色
ENDIF.
IF wa_fieldcat-fieldname = 'MSLMB' or wa_fieldcat-fieldname = 'WCBMB'.
wa_fieldcat-EMPHASIZE = 'C710'. "设置字段的颜色
ENDIF.
IF wa_fieldcat-fieldname = 'PLNBEZ' OR wa_fieldcat-fieldname = 'MATNR' .
wa_fieldcat-ref_tabname = 'MARA'.
wa_fieldcat-ref_fieldname = 'MATNR'.
ENDIF.
IF wa_fieldcat-fieldname = 'CAKTX' OR wa_fieldcat-fieldname = 'WAKTX' .
wa_fieldcat-ref_tabname = 'MAKT'.
wa_fieldcat-ref_fieldname = 'MAKTX'.
ENDIF.
IF wa_fieldcat-fieldname = 'AUFNR' .
wa_fieldcat-ref_tabname = 'AUFK'.
wa_fieldcat-ref_fieldname = 'AUFNR'.
ENDIF.
APPEND wa_fieldcat TO gt_fieldcat.
CLEAR wa_fieldcat.
END-OF-DEFINITION.
FILL_FIELD :
'WERKS' '工厂',
'AUFNR' '订单编号',
'AUART' '订单类型',
'PLNBEZ' '产品编码',
'CAKTX' '产品名称',
'GAMNG' '批量',
'KSTAR' '成本要素',
'TXT20' '成本要素名称',
'MATNR' '物料代码',
'WAKTX' '料物描述',
'KOSTL' '成本中心',
'MCTXT' '成本中心名称',
'MEINH' '单位',
'MEGJH' '计划数量',
'MEGSJ' '实际数量',
'MEGMB' '目标数量',
'WOGJH' '计划成本',
'WOGSJ' '实际成本',
'WOGMB' '目标成本',
'MSLJH' '数量差异-实际与计划:',
'WCBJH' '成本差异-实际与计划:',
'MSLMB' '数量差异-实际与目标:',
'WCBMB' '成本差异-实际与目标:'.
ENDFORM.
FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.
FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
IS_SELFIELD TYPE SLIS_SELFIELD.
DATA: REF TYPE REF TO CL_GUI_ALV_GRID.
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
RANGES: L_WERKS FOR T001W-WERKS.
RANGES: L_MATNR FOR MARA-MATNR.
DATA:L_BUKRS TYPE T001K-BUKRS.
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF.
CALL METHOD REF->CHECK_CHANGED_DATA.
CASE I_UCOMM.
WHEN 'DEL_DJ'.
ENDCASE.
CALL METHOD REF->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
ENDFORM.
INITIALIZATION .
PERFORM FRM_EXCLUDE_OPTION.
AT SELECTION-SCREEN.
PERFORM SCREEN_SETTING.
START-OF-SELECTION.
PERFORM FOM_GETDATA .
PERFORM FRM_DISPLAY.
该报告详细展示了工单在不同成本要素和成本中心下的计划、实际及目标数量与成本的差异,通过对比分析,帮助企业识别订单执行过程中的效率与成本偏差。
6413

被折叠的 条评论
为什么被折叠?



