*&---------------------------------------------------------------------*
*& Report: ZCOR11
*& Description: 成本核算报表
*& Author: 谢怀庆
*& T-CODE:ZCOR11
*&---------------------------------------------------------------------*
* Change History: *
* Ver. SR/Project Date Author Description *
* ----- ------------- ---------- ---------- -------------------------*
* V001 Create 2009/05/05 谢怀庆 Creation *
*&---------------------------------------------------------------------*
REPORT ZCOR11 MESSAGE-ID ZCO.
**-----------------------------------------------------------------------
* Global data declaration
**-----------------------------------------------------------------------
INCLUDE ZCOR11TOP.
**-----------------------------------------------------------------------
* Selection screen definition
**-----------------------------------------------------------------------
INCLUDE ZCOR11SCREEN.
**-----------------------------------------------------------------------
* sub routing
**-----------------------------------------------------------------------
INCLUDE ZCOR11F01.
INITIALIZATION.
IF SY-DATUM+4(2) = '01'.
P_PERIOD(4) = SY-DATUM(4) - 1.
P_PERIOD+4(2) = '12'.
ELSE.
P_PERIOD = SY-DATUM(6) - 1.
ENDIF.
START-OF-SELECTION.
IF SY-DATUM+4(2) = '01'.
P_PERIOD(4) = SY-DATUM(4) - 1.
P_PERIOD+4(2) = '12'.
ELSE.
P_PERIOD = SY-DATUM(6) - 1.
ENDIF.
PERFORM GET_INITIAL_DATE.
PERFORM GET_PRODUCTION_ORDER.
PERFORM GET_ORDER_DETAIL.
*END-OF-SELECTION.
* IF GT_ALV IS NOT INITIAL.
* CLEAR:GV_PERCENTAGE.
* GV_TEXT = '准备输出结果'.
* PERFORM DISPLAY_GUI_STATUS
* USING GV_PERCENTAGE
* GV_TEXT.
* REFRESH G_ALV_LISTHEADER[].
* PERFORM F_ALV_MODIFY_LISTHEADER .
* REFRESH G_ALV_FIELDCAT.
* PERFORM F_ALV_BUILD_FIELDCAT.
*
**调用ALV控件的抬头输出程序
** PERFORM F_ALV_EVENT_TOP_OF_PAGE.
* PERFORM F_ALV_BUILD_EVENTCAT.
* PERFORM F_DISPLAY_ALV.
* ELSE.
* MESSAGE S003.
* ENDIF.
*&---------------------------------------------------------------------*
*& Include ZCOR10TOP Report ZCOR10
*&
*&---------------------------------------------------------------------*
TABLES: AFPO,AFKO,AUFK,AFVC,AFRV,MAKT,MARA,KEKO,MSEG,MKPF,
AFVV,PLPO,T001W,CSKT,COEP,COVP,COSP,COSS,MBEW,JEST,TJ02T,JCDS,CKIS,CKHS,KALM,AFRU,MBEWH,RSEUMOD.
************************************************************************
* TYPE : 定义数据类型
************************************************************************
TYPE-POOLS: SLIS.
************************************************************************
*用于ALV控件双击事件
DATA: G_SELECTED_FIELD_VALUE(80).
DATA: G_TABINDEX TYPE I.
*ALV控件构造时需要的参数
DATA: G_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
G_ALV_FIELDCAT_LINE LIKE LINE OF G_ALV_FIELDCAT,
G_ALV_EVENT TYPE SLIS_T_EVENT.
*ALV控件输出的表头
DATA: G_ALV_LISTHEADER TYPE SLIS_T_LISTHEADER.
*指定ALV控件触发TOP_OF_PAGE事件时调用的子程序
DATA: G_ALV_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
VALUE 'F_ALV_EVENT_TOP_OF_PAGE'.
*指定ALV控件的显示特征
DATA : G_ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.
*TYPES: BEGIN OF TY_ALV,
* MANDT TYPE MANDT, "客户端号
* SPMON TYPE SPMON, "月份
* WERKS TYPE WERKS_D, "工厂
* AUFNR LIKE AFKO-AUFNR, "生产订单
* PLNBEZ LIKE AFKO-PLNBEZ, "产品料号
* GAMNG LIKE AFKO-GAMNG, "生产订单计划数量
* IGMNG LIKE AFKO-IGMNG, "本月累计入库数量
* PLNTY LIKE AFKO-PLNTY, "任务清单类型
* PLNNR LIKE AFKO-PLNNR, "任务清单组码
* PLNAL LIKE AFKO-PLNAL, "组计数器
* AUFLD LIKE AFKO-AUFLD, "BOM展开/工艺路线转换的日期
* WRKST LIKE MARA-WRKST, "产品名称
* MEINS TYPE MEINS, "基本计量单位
* MAKTX LIKE MAKT-MAKTX, "规格型号
*
* KOSTL LIKE MSEG-KOSTL, "成本中心
* STTXT TYPE CHAR80, "生产订单状态
*
* DM_11 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接材料(期初)
* DM_12 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接人工(期初)
* DM_13 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "制造费用(期初)
* DM_14 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "委托加工费(期初)
* DM_15 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "成本合计(期初)
*
* DM_21 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接材料(本期)
* DM_22 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接人工(本期)
* DM_23 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "制造费用(本期)
* DM_24 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "委托加工费(本期)
* DM_25 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "成本合计(本期)
*
* QTY_IN LIKE AFKO-IGMNG, "入库数量(本月入库)
* DM_31 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接材料(本月入库)
* DM_32 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接人工(本月入库)
* DM_33 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "制造费用(本月入库)
* DM_34 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "委托加工费(本月入库)
* DM_35 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "成本合计(本月入库)
*
* DM_UM TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "单位成本(标准成本)
* DM_41 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接材料(标准成本)
* DM_42 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接人工(标准成本)
* DM_43 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "制造费用(标准成本)
* DM_44 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "委托加工费(标准成本)
*
* QTY_WIP LIKE AFKO-IGMNG, "数量(在制品)
* DM_51 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接材料(在制品)
* DM_52 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接人工(在制品)
* DM_53 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "制造费用(在制品)
* DM_54 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "委托加工费(在制品)
* DM_55 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "成本合计(在制品)
*
* DM_61 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接材料(期末差异)
* DM_62 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "直接人工(期末差异)
* DM_63 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "制造费用(期末差异)
* DM_64 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "委托加工费(期末差异)
* DM_65 TYPE P DECIMALS 4, "LIKE MSEG-DMBTR, "成本合计(期末差异)
*
* REL TYPE SY-DATUM, "订单的Rel时间
* FLAG TYPE C, "selection mark
* DEL TYPE C,
*
* END OF TY_ALV,
TYPES: TY_ALV TYPE ZPPORDER_COST,
BEGIN OF TY_COMPOENT, "生产材料成本核算表
KOSTL LIKE MSEG-KOSTL, "成本中心
AUFNR LIKE AFKO-AUFNR, "生产订单
PLNBEZ LIKE AFKO-PLNBEZ, "产品料号
MATNR TYPE MATNR, "物料号 - 组件
WRKST TYPE WRKST, "品名
MAKTX TYPE MAKTX, "物料描述(短文本) - 组件
STTXT TYPE CHAR80, "生产订单状态
MEINS TYPE MEINS, "单位
QTY_USE TYPE EINME, "实际用量
QTY_PLAN TYPE EINME, "计划用量
QTY_BOM TYPE EINME, "标准用量
PRICE TYPE P DECIMALS 4, "系统单价
COST TYPE P DECIMALS 4, "实际用量金额
FLAG TYPE C,
END OF TY_COMPOENT,
BEGIN OF TY_PRO_COST, "生产工费成本核算表
KOSTL LIKE MSEG-KOSTL, "成本中心
AUFNR LIKE AFKO-AUFNR, "生产订单
PLNBEZ LIKE AFKO-PLNBEZ, "产品料号
WRKST TYPE WRKST, "品名
MAKTX TYPE MAKTX, "物料描述(短文本) - 组件
STTXT TYPE CHAR80, "生产订单状态
MEINS TYPE MEINS, "单位
S100 LIKE COEP-WTGBTR, "实际人工作业价格
S200 LIKE COEP-WTGBTR, "实际费用作业价格
J100 LIKE COEP-WTGBTR, "计划人工作业价格
J200 LIKE COEP-WTGBTR, "计划费用作业价格
SJGS LIKE COEP-MBGBTR, "实际工时
COST100 LIKE COEP-WTGBTR, "实际人工
COST200 LIKE COEP-WTGBTR, "实际制造费
COST300 LIKE COEP-WTGBTR, "实际委托加工费
FLAG TYPE C,
END OF TY_PRO_COST,
BEGIN OF TY_COEP, "相关价格表结构
AUFNR LIKE AFKO-AUFNR, "对象号
OBJNR TYPE OBJNR,
KSTAR LIKE COEP-KSTAR, "成本要素
USPOB LIKE COEP-USPOB, "源对象 (成本中心/作业类型)
WTGBTR LIKE COEP-WTGBTR, "交易货币中的总值
MBGBTR LIKE COEP-MBGBTR, "输入的总数量
END OF TY_COEP,
BEGIN OF TY_LIST,
AUFNR LIKE AFKO-AUFNR, "生产订单
MATNR TYPE MATNR, "物料号 - 组件
QTY_USE TYPE EINME, "实际用量
END OF TY_LIST,
BEGIN OF TY_AFVC,
AUFNR TYPE AUFNR, "订单号
AUFPL TYPE CO_AUFPL, "订单中工序的工艺路线号
RUECK TYPE CO_RUECK, "操作完成的确认编号
END OF TY_AFVC,
BEGIN OF TY_JCDS,
OBJNR TYPE J_OBJNR, "对象号
UDATE TYPE CDDATUM, "创建修改文档的数据
END OF TY_JCDS,
BEGIN OF TY_AUFNR,
MANDT TYPE MANDT, "客户端
AUFNR TYPE AUFNR,
OBJNR TYPE J_OBJNR,
END OF TY_AUFNR,
BEGIN OF TY_KOSTL,
AUFNR TYPE AUFNR, "订单号
* PLNTY TYPE PLNTY, "任务清单类型
* PLNNR TYPE PLNNR, "任务清单组码
KOSTL TYPE KOSTL, "成本中心
END OF TY_KOSTL,
BEGIN OF TY_DESC,
MATNR TYPE MATNR, "物料号 - 组件
WRKST TYPE WRKST, "品名
MEINS TYPE MEINS, "基本单位
MAKTX TYPE MAKTX, "物料描述(短文本) - 组件
END OF TY_DESC,
BEGIN OF TY_RESB,
AUFNR TYPE AUFNR, "订单号
RSNUM TYPE RSNUM, "预留/相关需求的编号
RSPOS TYPE RSPOS, "预留/相关需求的项目编号
MATNR TYPE MATNR, "物料号
WERKS TYPE WERKS_D,"工厂
LGORT TYPE LGORT_D,"库存地点
BDMNG TYPE BDMNG, "需求量
MEINS TYPE MEINS, "基本计量单位
END OF TY_RESB,
BEGIN OF TY_MSEG,
MANDT LIKE MSEG-MANDT, "客户端
MBLNR LIKE MSEG-MBLNR, "物料凭证编号
BUDAT LIKE MKPF-BUDAT, "凭证中的过帐日期
MJAHR LIKE MSEG-MJAHR, "物料凭证年度
ZEILE LIKE MSEG-ZEILE, "物料凭证中的项目
BWART LIKE MSEG-BWART, "移动类型(库存管理)
XAUTO LIKE MSEG-XAUTO,
MATNR LIKE MSEG-MATNR, "物料号
WERKS LIKE MSEG-WERKS, "工厂
SHKZG LIKE MSEG-SHKZG,
WAERS LIKE MSEG-WAERS,
DMBTR LIKE MSEG-DMBTR, "按本位币计的金额
MENGE LIKE MSEG-MENGE, "数量
MEINS LIKE MSEG-MEINS, "货币码
KOSTL LIKE MSEG-KOSTL,
AUFNR LIKE MSEG-AUFNR, "订单号
SAKTO LIKE MSEG-SAKTO, "总帐科目编号
DEL TYPE C,
END OF TY_MSEG,
BEGIN OF TY_JEST,
MANDT TYPE MANDT,
OBJNR TYPE OBJNR,
TXT04 LIKE TJ02T-TXT04,
END OF TY_JEST.
DATA: S_OBJNR TYPE RANGE OF J_OBJNR WITH HEADER LINE,
GV_PERCENTAGE TYPE P,
GV_TEXT TYPE STRING.
DATA: GV_START_DATE_1 TYPE SY-DATUM,
GV_END_DATE_1 TYPE SY-DATUM,
GV_START_DATE_2 TYPE SY-DATUM,
GV_END_DATE_2 TYPE SY-DATUM,
GV_GJAHR TYPE GJAHR, "截止到期初投入的年份
GV_PERIO TYPE AFWGO_MONTH, "期间 -->月份
GV_PERIO_NEW TYPE CO_PERIO. "期间
DATA: GT_ALV TYPE TABLE OF TY_ALV,
GT_AUFNR TYPE TABLE OF TY_AUFNR,
GT_JCDS TYPE TABLE OF JCDS,
GT_JCDS_TEMP TYPE TABLE OF JCDS,
GT_COMPOENT TYPE TABLE OF TY_COMPOENT,
GT_LIST TYPE TABLE OF TY_LIST WITH KEY AUFNR MATNR,
GT_RESB TYPE TABLE OF TY_RESB,
GT_DESC TYPE TABLE OF TY_DESC,
GT_MBEWH TYPE TABLE OF MBEWH,
GT_PRO_COST TYPE TABLE OF TY_PRO_COST.
*&---------------------------------------------------------------------*
*& 包括 ZCOR11SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-T01.
PARAMETERS: P_PERIOD LIKE S069-SPMON OBLIGATORY, "DEFAULT SY-DATUM(6).
P_WERKS LIKE T001W-WERKS OBLIGATORY DEFAULT '1000'."工厂
*SELECT-OPTIONS:
* P_ROW FOR RSEUMOD-TBMAXSEL .
SELECTION-SCREEN END OF BLOCK BLK1.
*选择报表类型
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-T02 .
PARAMETERS: RB_TOTAL RADIOBUTTON GROUP R1 DEFAULT 'X',
RB_M RADIOBUTTON GROUP R1 ,
RB_C RADIOBUTTON GROUP R1,
RB_CLSD RADIOBUTTON GROUP R1.
.
SELECTION-SCREEN END OF BLOCK BLK2.
*&---------------------------------------------------------------------*
*& 包括 ZCOR10F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form GET_INITIAL_DATE
*&---------------------------------------------------------------------*
* 得到要处理的关单时间范围
*----------------------------------------------------------------------*
FORM GET_INITIAL_DATE.
DATA: LV_DATE TYPE SY-DATUM.
GV_TEXT = '时间段初试使化......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
*用于计算关单的时间
GV_START_DATE_1+0(6) = P_PERIOD.
GV_START_DATE_1+6(2) = '01'.
GV_START_DATE_1 = GV_START_DATE_1 + 32.
GV_START_DATE_1+6(2) = '01'.
GV_END_DATE_1 = GV_START_DATE_1.
GV_END_DATE_1 = GV_END_DATE_1 + 32.
GV_END_DATE_1+6(2) = '01'.
GV_END_DATE_1 = GV_END_DATE_1 - 1.
*用于选取rel和teco的时间
GV_START_DATE_2+0(6) = P_PERIOD.
GV_START_DATE_2+6(2) = '01'.
GV_END_DATE_2 = GV_START_DATE_2.
GV_END_DATE_2 = GV_END_DATE_2 + 32.
GV_END_DATE_2+6(2) = '01'.
GV_END_DATE_2 = GV_END_DATE_2 - 1.
LV_DATE = GV_START_DATE_2.
* LV_DATE = LV_DATE - 1.
GV_GJAHR = LV_DATE+0(4)."截止到本期投入的年份
GV_PERIO = LV_DATE+4(2)."期间
CONCATENATE '0'
GV_PERIO
INTO GV_PERIO_NEW.
ENDFORM. " GET_INITIAL_DATE
*&---------------------------------------------------------------------*
*& Form GET_PRODUCTION_ORDER
*&---------------------------------------------------------------------*
* 选出所有相处理的订单号的对像ID列表
*----------------------------------------------------------------------*
FORM GET_PRODUCTION_ORDER .
DATA: LT_JCDS TYPE TABLE OF JCDS.
*订单状态 Tj02t
*I0002 1 Rel 已释放
*I0045 1 TECO 技术实现
*I0046 1 CLSD 已结算
** 下个月clsd的订单
* SELECT * INTO TABLE GT_JCDS
* FROM JCDS
* WHERE
* STAT = 'I0046'
* AND OBJNR LIKE 'OR%'
* AND UDATE BETWEEN GV_START_DATE_1 AND GV_END_DATE_1
* AND CHIND = 'I' "状态更改
* AND INACT <> 'X'. "指示符:状态未激活. "clsd
* GT_JCDS_TEMP = GT_JCDS. "将clsd的订单先暂存入内表中
* SORT GT_JCDS_TEMP BY OBJNR STAT.
*
** 到上个月为止已clsd的订单 - 需要排除
* SELECT * INTO TABLE LT_JCDS
* FROM JCDS
* WHERE
* STAT = 'I0046'
* AND OBJNR LIKE 'OR%'
* AND UDATE <= GV_END_DATE_2
* AND CHIND = 'I' "状态更改
* AND INACT <> 'X'. "指示符:状态未激活. "clsd
* SORT LT_JCDS BY OBJNR.
**截止到月底所有释放和技术关闭的订单
* SELECT * APPENDING TABLE GT_JCDS
* FROM JCDS AS A
* WHERE
* OBJNR LIKE 'OR%'
* AND STAT IN ('I0002','I0045')
* AND A~UDATE <= GV_END_DATE_2
* AND A~CHIND = 'I' "状态更改
* AND INACT <> 'X'. "指示符:状态未激活
*
*
* SORT GT_JCDS BY OBJNR.
* DELETE ADJACENT DUPLICATES FROM GT_JCDS COMPARING OBJNR.
* IF LT_JCDS IS NOT INITIAL.
* LOOP AT GT_JCDS INTO JCDS.
* READ TABLE LT_JCDS TRANSPORTING NO FIELDS
* WITH KEY
* OBJNR = JCDS-OBJNR
* BINARY SEARCH.
* IF SY-SUBRC = 0.
* DELETE TABLE GT_JCDS FROM JCDS. "删除本月初为止所有clsd的单
* ENDIF.
* ENDLOOP.
* ENDIF.
GV_TEXT = '确定REL,TECO,CLSD订单......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
*优化程序
* SELECT * INTO TABLE GT_JCDS
* FROM JCDS.
* LOOP AT GT_JCDS INTO JCDS.
* IF JCDS-OBJNR+0(2) <> 'OR' OR JCDS-INACT = 'X' OR JCDS-CHIND <> 'I'.
* DELETE TABLE GT_JCDS FROM JCDS.
* ELSEIF JCDS-UDATE > GV_END_DATE_1.
* DELETE TABLE GT_JCDS FROM JCDS.
* ELSEIF JCDS-STAT <> 'I0046' AND JCDS-STAT <> 'I0002' AND JCDS-STAT <> 'I0045'.
* DELETE TABLE GT_JCDS FROM JCDS.
* ENDIF.
* ENDLOOP.
* SELECT * INTO TABLE GT_JCDS
* FROM JCDS
* WHERE
* OBJNR BETWEEN 'OR000000000001' AND 'OR003999999999'
* AND STAT IN ('I0046','I0002','I0045')
* AND UDATE <= GV_END_DATE_1
* AND CHIND = 'I' "状态更改
* AND INACT <> 'X'. "指示符:状态未激活. "clsd
*优化程序
SELECT * INTO TABLE GT_JCDS
FROM JCDS
WHERE
STAT IN ('I0046','I0002','I0045')
AND OBJNR LIKE 'OR%'
AND UDATE <= GV_END_DATE_1
AND CHIND = 'I' "状态更改
AND INACT <> 'X'. "指示符:状态未激活. "clsd
SORT GT_JCDS BY OBJNR DESCENDING STAT DESCENDING.
DELETE ADJACENT DUPLICATES FROM GT_JCDS COMPARING OBJNR. "只保留最后的状态时间
*过滤掉不用处理的订单
GV_TEXT = '过滤上月已关的订单......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
LOOP AT GT_JCDS INTO JCDS.
* IF JCDS-OBJNR+0(2) <> 'OR'.
* DELETE TABLE GT_JCDS FROM JCDS. "不是生产订单号对应的对象号 -->删除
* ELSE.
IF JCDS-STAT <> 'I0046' AND JCDS-UDATE BETWEEN GV_START_DATE_1 AND GV_END_DATE_1."下个月才REL TECO的订单-->删除
DELETE TABLE GT_JCDS FROM JCDS.
ELSEIF JCDS-STAT = 'I0046' AND JCDS-UDATE <= GV_END_DATE_2. "上月已关的订单
DELETE TABLE GT_JCDS FROM JCDS.
ENDIF.
* ENDIF.
ENDLOOP.
*存放当月关了的订单
GV_TEXT = '暂存本月clsd的订单......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
GT_JCDS_TEMP = GT_JCDS. "将clsd的订单先暂存入内表中
DELETE GT_JCDS_TEMP WHERE STAT <> 'I0046' OR UDATE NOT BETWEEN GV_START_DATE_1 AND GV_END_DATE_1.
SORT GT_JCDS_TEMP BY OBJNR STAT.
IF GT_JCDS IS INITIAL.
MESSAGE I001.
EXIT.
ENDIF.
* IF SY-SUBRC = 0.
* SORT LT_JCDS BY OBJNR.
* DELETE ADJACENT DUPLICATES FROM LT_JCDS COMPARING OBJNR.
* LOOP AT LT_JCDS INTO JCDS.
* S_OBJNR-SIGN = 'I'.
* S_OBJNR-OPTION = 'EQ'.
* S_OBJNR-LOW = JCDS-OBJNR.
* APPEND S_OBJNR.
* ENDLOOP.
* ELSE.
* MESSAGE I001.
* EXIT.
* ENDIF.
ENDFORM. " GET_PRODUCTION_ORDER
*&---------------------------------------------------------------------*
*& Form GET_ORDER_DETAIL
*&---------------------------------------------------------------------*
* 依据订单对像ID得到订单主数据,依据订单号得到相关的货物移动
*----------------------------------------------------------------------*
FORM GET_ORDER_DETAIL .
DATA: LT_MSEG TYPE TABLE OF TY_MSEG,
LWA_MSEG TYPE TY_MSEG,
LT_PLPO TYPE TABLE OF PLPO,
LT_MSEG_QC TYPE TABLE OF TY_MSEG, "期初投入
LT_MSEG_BQ TYPE TABLE OF TY_MSEG, "本期投入
LT_MSEG_IN TYPE TABLE OF TY_MSEG, "相关的收货数
LT_AFRU TYPE TABLE OF AFRU,
LT_MSEG_IN_TEMP TYPE TABLE OF TY_MSEG, "相关的收货数
LT_COEP TYPE TABLE OF COEP,
LT_COEP_TOTAL TYPE TABLE OF COEP,
LT_JEST TYPE TABLE OF TY_JEST,
LT_JEST_TEMP TYPE TABLE OF TY_JEST,
LT_STPO TYPE TABLE OF STPO_API02,
LT_STKO TYPE TABLE OF STKO_API02,
LV_DATUV_BI TYPE DATUV_BI,
LV_DATUB_BI TYPE DATUB_BI,
LWA_STPO TYPE STPO_API02,
LWA_STKO TYPE STKO_API02,
LWA_AUFNR TYPE TY_AUFNR,
LWA_JEST_TEMP TYPE TY_JEST,
LT_MSEG_QC_TEMP TYPE TABLE OF TY_MSEG,
LV_COUNT TYPE I,
LV_CLSD TYPE C,
LT_KOSTL TYPE TABLE OF TY_KOSTL,
LWA_KOSTL TYPE TY_KOSTL,
LV_STANDARD TYPE C,
LV_STRING_TEMP TYPE BASMN,
LV_QTY TYPE P DECIMALS 4,
LV_QTY_COMPOENT TYPE P DECIMALS 4.
FIELD-SYMBOLS: <FS_ALV> TYPE TY_ALV,
<FS_AUFNR> TYPE TY_AUFNR.
*找出对应的订单号
GV_TEXT = '找出对应的订单号......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
SELECT MANDT
AUFNR
OBJNR
INTO TABLE GT_AUFNR
FROM AUFK
WHERE
WERKS = P_WERKS.
IF GT_AUFNR IS NOT INITIAL.
SORT GT_JCDS BY OBJNR.
LOOP AT GT_AUFNR ASSIGNING <FS_AUFNR> CASTING.
READ TABLE GT_JCDS TRANSPORTING NO FIELDS
WITH KEY
OBJNR = <FS_AUFNR>-OBJNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
DELETE TABLE GT_AUFNR FROM <FS_AUFNR>.
* <FS_AUFNR>-DEL = 'X'.
ENDIF.
ENDLOOP.
ENDIF.
* DELETE GT_AUFNR WHERE DEL = 'X'.
IF GT_AUFNR IS INITIAL.
MESSAGE I002.
EXIT.
ENDIF.
*写入数据库表 ZPPCOST_ORDER
GV_TEXT = '将要处理的订单号写入数据库表......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
DELETE FROM ZPPCOST_ORDER.
INSERT ZPPCOST_ORDER FROM TABLE GT_AUFNR.
SORT GT_AUFNR BY AUFNR.
*更新释放时间
* DATA: LT_JCDS TYPE TABLE OF TY_JCDS,
* LWA_JCDS TYPE TY_JCDS.
** cost 12 seconds
* SELECT B~OBJNR
* B~UDATE
* INTO TABLE LT_JCDS
* FROM ZPPCOST_ORDER AS A INNER JOIN JCDS AS B
* ON A~OBJNR = B~OBJNR AND B~STAT = 'I0002'
* AND INACT <> 'X'.
* SORT LT_JCDS BY OBJNR.
* cost 11 seconds
GV_TEXT = '查找订单主数据......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
* MANDT TYPE MANDT, "客户端号
SELECT A~MANDT
* SPMON TYPE SPMON, "月份
* WERKS TYPE WERKS_D, "工厂
A~AUFNR "生产订单
A~PLNBEZ "产品料号
A~GAMNG "生产订单计划数量
A~IGMNG "本月累计入库数量
A~PLNTY "任务清单类型
A~PLNNR "任务清单组码
A~PLNAL "组计数器
A~AUFLD "BOM展开/工艺路线转换的日期
B~WRKST "产品名称
B~MEINS "基本计量单位
C~MAKTX "规格型号
INTO CORRESPONDING FIELDS OF TABLE GT_ALV
FROM ZPPCOST_ORDER AS D INNER JOIN AFKO AS A
ON D~AUFNR = A~AUFNR INNER JOIN MARA AS B
ON A~PLNBEZ = B~MATNR INNER JOIN MAKT AS C
ON B~MATNR = C~MATNR AND C~SPRAS = 1.
IF GT_ALV IS INITIAL.
MESSAGE I002.
EXIT.
ENDIF.
IF RB_C = 'X'.
PERFORM GET_INDIRECT_COST. "得到间接费用报表
EXIT.
ENDIF.
* cost 7 seconds
GV_TEXT = '订单的相关货物移动......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
SELECT A~MANDT "客户端
A~MBLNR "物料凭证编号
B~BUDAT "凭证中的过帐日期
A~MJAHR "物料凭证年度
A~ZEILE "物料凭证中的项目
A~BWART
A~XAUTO
A~MATNR
A~WERKS
A~SHKZG
A~WAERS
A~DMBTR
A~MENGE
A~MEINS
A~KOSTL
A~AUFNR "订单号
A~SAKTO "总帐科目编号
INTO TABLE LT_MSEG
FROM ZPPCOST_ORDER AS D INNER JOIN MSEG AS A
ON D~AUFNR = A~AUFNR INNER JOIN MKPF AS B
ON A~MBLNR = B~MBLNR
WHERE
A~BWART IN ('101','102','122','261','262')
AND B~BUDAT <= GV_END_DATE_2.
*更新订单状态 - cost 4 seconds
GV_TEXT = '确认订单状态......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
SELECT A~MANDT
A~OBJNR
B~TXT04
INTO TABLE LT_JEST
FROM ZPPCOST_ORDER AS D INNER JOIN JEST AS A
ON D~OBJNR = A~OBJNR AND A~INACT <> 'X' INNER JOIN TJ02T AS B
ON A~STAT = B~ISTAT AND B~SPRAS = 1.
*工作中心数据 - 2 seconds
GV_TEXT = '订单对应的工作中心......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
SELECT A~AUFNR
D~KOSTL
INTO TABLE LT_KOSTL
FROM ZPPCOST_ORDER AS A INNER JOIN AFKO AS B
ON A~AUFNR = B~AUFNR INNER JOIN AFVC AS C
ON B~AUFPL = C~AUFPL AND C~APLZL = 1 INNER JOIN CRCO AS D
ON C~ARBID = D~OBJID.
* WHERE
* LOEKZ = ''
* AND VORNR = '0010'.
SORT LT_KOSTL BY AUFNR.
IF RB_M = 'X'. "订单物料消耗报表
DATA: LWA_LIST TYPE TY_LIST,
LWA_COMPOENT TYPE TY_COMPOENT.
DELETE LT_MSEG WHERE BWART <> '261' AND BWART <> '262'. "只记录消耗的物料
IF LT_MSEG IS INITIAL.
MESSAGE I004.
RETURN.
ENDIF.
*对订单 - 组件号相同的物料进行汇总计算
LOOP AT LT_MSEG INTO LWA_MSEG.
LWA_LIST-AUFNR = LWA_MSEG-AUFNR. "生产订单
LWA_LIST-MATNR = LWA_MSEG-MATNR."物料号 - 级件
IF LWA_MSEG-BWART = '262'.
LWA_LIST-QTY_USE = LWA_MSEG-MENGE * ( -1 ). "实际用量
ELSE.
LWA_LIST-QTY_USE = LWA_MSEG-MENGE. "实际用量
ENDIF.
COLLECT LWA_LIST INTO GT_LIST.
ENDLOOP.
SORT GT_ALV BY AUFNR.
SORT GT_LIST BY AUFNR MATNR.
*将物料的BOM用量放入内表
SELECT A~AUFNR "订单号
C~RSNUM "预留/相关需求的编号
C~RSPOS "预留/相关需求的项目编号
C~MATNR "物料号
C~WERKS "工厂
C~LGORT "库存地点
C~BDMNG "需求量
C~MEINS "基本计量单位
INTO TABLE GT_RESB
FROM ZPPCOST_ORDER AS A INNER JOIN AFKO AS B
ON A~AUFNR = B~AUFNR INNER JOIN RESB AS C
ON B~RSNUM = C~RSNUM AND C~XLOEK = ''.
SORT GT_RESB BY AUFNR MATNR.
*将组件的描述及品名写入内表
SELECT A~MATNR "物料号 - 组件
A~WRKST "品名
A~MEINS "基本计量单位
B~MAKTX "物料描述(短文本) - 组件
INTO TABLE GT_DESC
FROM MARA AS A INNER JOIN MAKT AS B
ON A~MATNR = B~MATNR AND B~SPRAS = 1
FOR ALL ENTRIES IN LT_MSEG
WHERE
A~MATNR = LT_MSEG-MATNR.
SORT GT_DESC BY MATNR.
*得到价格内表
SELECT * INTO TABLE GT_MBEWH
FROM MBEWH
FOR ALL ENTRIES IN LT_MSEG
WHERE
MATNR = LT_MSEG-MATNR
AND BWKEY = LT_MSEG-WERKS
AND ( ( LFGJA < GV_GJAHR ) OR ( LFGJA = GV_GJAHR AND LFMON <= GV_PERIO ) ).
SORT GT_MBEWH BY MATNR DESCENDING LFGJA DESCENDING LFMON DESCENDING.
DELETE ADJACENT DUPLICATES FROM GT_MBEWH COMPARING MATNR.
SORT GT_MBEWH BY MATNR.
LOOP AT GT_LIST INTO LWA_LIST.
*更新 成本中心 KOSTL
AT NEW AUFNR.
FREE:LT_STPO,LT_STKO.
CLEAR:LWA_STKO.
READ TABLE GT_ALV ASSIGNING <FS_ALV>
WITH KEY
AUFNR = LWA_LIST-AUFNR
BINARY SEARCH.
LWA_COMPOENT-AUFNR = LWA_LIST-AUFNR. "订单号
LWA_COMPOENT-PLNBEZ = <FS_ALV>-PLNBEZ."订单物料
READ TABLE LT_KOSTL INTO LWA_KOSTL
WITH KEY
AUFNR = LWA_LIST-AUFNR
BINARY SEARCH.
IF SY-SUBRC = 0.
LWA_COMPOENT-KOSTL = LWA_KOSTL-KOSTL. "成本中心
ENDIF.
*
* READ TABLE GT_AUFNR INTO LWA_AUFNR
* WITH KEY
* AUFNR = LWA_COMPOENT-AUFNR
* BINARY SEARCH.
*
* READ TABLE LT_JCDS INTO LWA_JCDS
* WITH KEY
* OBJNR = LWA_AUFNR-OBJNR
* BINARY SEARCH.
* IF SY-SUBRC = 0.
LV_DATUV_BI = <FS_ALV>-AUFLD. "BOM展开/工艺路线转换的日期.
LV_DATUB_BI = <FS_ALV>-AUFLD.
*BOM标准用量
CALL FUNCTION 'CSAP_MAT_BOM_READ'
EXPORTING
MATERIAL = LWA_COMPOENT-PLNBEZ
PLANT = P_WERKS
BOM_USAGE = '1'
ALTERNATIVE = '1'
VALID_FROM = LV_DATUB_BI
VALID_TO = LV_DATUB_BI
TABLES
T_STPO = LT_STPO
T_STKO = LT_STKO
EXCEPTIONS
ERROR = 1
OTHERS = 2. "CS_WHERE_USED_MAT
READ TABLE LT_STKO INTO LWA_STKO INDEX 1.
REPLACE ',' IN LWA_STKO-BASE_QUAN WITH ' ' IN CHARACTER MODE.
CONDENSE LWA_STKO-BASE_QUAN NO-GAPS.
LV_STRING_TEMP = LWA_STKO-BASE_QUAN.
* ENDIF.
*更新订单状态
CLEAR:LT_JEST_TEMP.
READ TABLE GT_AUFNR INTO LWA_AUFNR
WITH KEY
AUFNR = <FS_ALV>-AUFNR
BINARY SEARCH.
IF SY-SUBRC = 0.
LT_JEST_TEMP = LT_JEST.
DELETE LT_JEST_TEMP WHERE OBJNR <> LWA_AUFNR-OBJNR.
IF LT_JEST_TEMP IS NOT INITIAL.
LOOP AT LT_JEST_TEMP INTO LWA_JEST_TEMP.
IF SY-TABIX = 1.
LWA_COMPOENT-STTXT = LWA_JEST_TEMP-TXT04.
ELSE.
CONCATENATE LWA_COMPOENT-STTXT
','
LWA_JEST_TEMP-TXT04
INTO LWA_COMPOENT-STTXT. "订单状态
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
CONDENSE LWA_COMPOENT-STTXT.
ENDAT.
SELECT SINGLE A~WRKST B~MAKTX A~MEINS INTO (LWA_COMPOENT-WRKST,LWA_COMPOENT-WRKST,LWA_COMPOENT-MEINS )
FROM MARA AS A INNER JOIN MAKT AS B
ON A~MATNR = B~MATNR AND B~SPRAS = '1'
WHERE A~MATNR = LWA_LIST-MATNR.
LWA_COMPOENT-QTY_USE = LWA_LIST-QTY_USE."实际用量
PERFORM GET_MTL_BOM USING LWA_LIST-AUFNR
LWA_LIST-MATNR
CHANGING
LWA_COMPOENT-QTY_PLAN. "计划用量
READ TABLE LT_STPO INTO LWA_STPO
WITH KEY
COMPONENT = LWA_LIST-MATNR.
CLEAR:LWA_COMPOENT-QTY_BOM.
IF SY-SUBRC = 0.
REPLACE ',' IN LWA_STPO-COMP_QTY WITH ' ' IN CHARACTER MODE.
CONDENSE LWA_STPO-COMP_QTY NO-GAPS.
LV_QTY_COMPOENT = LWA_STPO-COMP_QTY.
LWA_COMPOENT-QTY_BOM = LV_QTY_COMPOENT / LV_STRING_TEMP.
ENDIF.
* LWA_COMPOENT-QTY_BOM = LWA_COMPOENT-QTY_PLAN. "标准用量
PERFORM GET_MTL_BASIC USING LWA_LIST-MATNR
CHANGING LWA_COMPOENT-WRKST "品名
LWA_COMPOENT-MAKTX "物料描述(短文本) - 组件
LWA_COMPOENT-MEINS. "单位
LWA_COMPOENT-MATNR = LWA_LIST-MATNR. "物料号 - 组件
PERFORM GET_PRICE USING LWA_LIST-MATNR
CHANGING LWA_COMPOENT-PRICE. "系统单价
LWA_COMPOENT-COST = LWA_COMPOENT-QTY_USE * LWA_COMPOENT-PRICE."实际用量金额
PERFORM SKIP_LEADING_ZERO CHANGING LWA_COMPOENT-AUFNR
LWA_COMPOENT-MATNR
LWA_COMPOENT-KOSTL.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
INPUT = LWA_COMPOENT-PLNBEZ "物料号
IMPORTING
OUTPUT = LWA_COMPOENT-PLNBEZ.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = LWA_COMPOENT-MEINS
IMPORTING
OUTPUT = LWA_COMPOENT-MEINS.
APPEND LWA_COMPOENT TO GT_COMPOENT.
ENDLOOP.
SORT GT_COMPOENT BY AUFNR MATNR.
EXIT.
ENDIF.
*期初投入 及收货
GV_TEXT = '订单的收入库汇总处理......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
LT_MSEG_QC = LT_MSEG.
DELETE LT_MSEG_QC WHERE BUDAT >= GV_START_DATE_2.
*本期投入 及收货
LT_MSEG_BQ = LT_MSEG.
DELETE LT_MSEG_BQ WHERE BUDAT NOT BETWEEN GV_START_DATE_2 AND GV_END_DATE_2.
*所有的对订单收货和退货的记录 101 - 102
LT_MSEG_IN = LT_MSEG.
DELETE LT_MSEG_IN WHERE BWART <> '101' AND BWART <> '102' AND BWART <> '122' AND BUDAT < GV_START_DATE_1.
*标准价格相关数据内表
GV_TEXT = '确认物料的标准价格......'.
PERFORM DISPLAY_GUI_STATUS
USING GV_PERCENTAGE
GV_TEXT.
DATA: LV_KALNR TYPE CK_KALNR1, " 产品成本核算号
LV_LOSGR TYPE LOSGR, "计划批量 - >评估基数量
LT_CKIS TYPE TABLE OF CKIS,
LT_CKIS_TOTAL TYPE TABLE OF CKIS.
TYPES: BEGIN OF TY_KALM,
MANDT TYPE MANDT, "客户端
MATNR TYPE MATNR, "物料号
KALNR TYPE CK_KALNR1, "成本估算号 - 产品成本核算
LOSGR TYPE LOSGR, "计划批量
END OF TY_KALM.
DATA: LT_KALM TYPE TABLE OF TY_KALM,
LWA_KALM TYPE TY_KALM.
SELECT DISTINCT MANDT "客户端
MATNR "物料号
KALNR "成本估算号 - 产品成本核算
LOSGR "计划批量
INTO TABLE LT_KALM
FROM KEKO "KALM
WHERE
WERKS = P_WERKS
AND BWVAR = 'Z10'.
SORT GT_ALV BY PLNBEZ.
LOOP AT LT_KALM INTO LWA_KALM.
READ TABLE GT_ALV TRANSPORTING NO FIELDS
WITH KEY
PLNBEZ = LWA_KALM-MATNR
BINARY SEARCH.
IF SY-SUBRC <> 0.
DELETE TABLE LT_KALM FROM LWA_KALM.
ENDIF.
ENDLOOP.
*把物料的标准价格运算编号
DELETE FROM ZPPCOST_MTL.
INSERT ZPPCOST_MTL FROM TABLE LT_KALM.
SORT GT_ALV BY AUFNR.
SORT LT_KALM BY MATNR.
*标准价明细表 - 27 seconds
SELECT A~MANDT
A~LEDNR
A~BZOBJ
A~KALNR "成本估算编号
A~KALKA
A~KADKY
A~TVERS
A~BWVAR
A~KKZMA
A~POSNR "单位成本核算行项目编号
A~STATP "项目状态
A~STRGP "项目控制(为内部使用)
A~TYPPS "项目类别
A~KSTAR "成本要素
A~MATNR "物料号
A~WRTFW_KPF "对象货币记帐值
A~FWAER "业务货币
A~MENGE
A~MEEHT
A~ARBID
A~KOSTL
A~SSEDD
A~STEAS
INTO CORRESPONDING FIELDS OF TABLE LT_CKIS_TOTAL
FROM ZPPCOST_MTL AS B INNER JOIN CKIS AS A
ON B~KALNR = A~KALNR. "成本估算编号
* cost 10 seconds
SELECT A~MANDT "客户端
A~KOKRS "控制范围
A~BELNR "凭证编号
A~BUZEI "过帐行
A~PERIO "期间
A~WTGBTR "交易货币中的总值
A~WOGBTR "对象货币的总值
A~MBGBTR "输入的总数量
A~OBJNR "对象号
A~GJAHR "会计年度
A~WRTTP "值类型
A~VERSN
A~KSTAR "成本要素
A~BEKNZ "借/贷标记
A~TWAER
A~OWAER
A~MEINH
A~WERKS "工厂
A~MATNR "物料号
A~BUKRS
INTO CORRESPONDING FIELDS OF TABLE LT_COEP_TOTAL
FROM ZPPCOST_ORDER AS D INNER JOIN COEP AS A
ON D~OBJNR = A~OBJNR
AND A~KOKRS = 'EVOC'
AND A~WRTTP = '04' "值类型 - 实际值
WHERE
( A~GJAHR < GV_GJAHR OR ( A~GJAHR = GV_GJAHR AND A~PERIO <= GV_PERIO_NEW ) ).
SORT GT_ALV BY AUFNR.
DATA:LV_COUNT_LINES TYPE I,
LV_LINE_MARK TYPE I.
DESCRIBE TABLE GT_ALV LINES LV_COUNT_LINES.
* LV_LINE_MARK = P_ROW-HIGH + 1.
* DELETE GT_ALV FROM LV_LINE_MARK TO LV_COUNT_LINES.
* IF P_ROW-LOW >= 2.
* LV_COUNT_LINES = P_ROW-LOW - 1.
* DELETE GT_ALV FROM 1 TO LV_COUNT_LINES.
* DESCRIBE TABLE GT_ALV LINES LV_COUNT_LINES.
* ENDIF.
GV_TEXT = LV_COUNT_LINES.
CONCATENATE '订单数为:'
GV_TEXT
INTO
GV_TEXT.
** GV_TEXT = '订单对应的工作中心......'.
* PERFORM DISPLAY_GUI_STATUS
* USING GV_PERCENTAGE
* GV_TEXT.
* DATA: LV_ANSWER TYPE STRING,
* LT_SPOPLI TYPE TABLE OF SPOPLI.
* CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
* EXPORTING
* TEXTLINE1 = GV_TEXT
* TITEL = '订单搜索结果'
* IMPORTING
* ANSWER = LV_ANSWER
* TABLES
* T_SPOPLI = LT_SPOPLI
* EXCEPTIONS
* NOT_ENOUGH_ANSWERS = 1
* TOO_MUCH_ANSWERS = 2
* TOO_MUCH_MARKS = 3.
DATA: LV_PERCT TYPE P DECIMALS 6,
LV_TEMP TYPE STRING.
LOOP AT GT_ALV ASSIGNING <FS_ALV> CASTING.
<FS_ALV>-SPMON = P_PERIOD. "月份
<FS_ALV>-WERKS = P_WERKS. "工厂
GV_TEXT = '订单处理进度%比为:'.
LV_LINE_MARK = LV_LINE_MARK + 1.
LV_PERCT = LV_LINE_MARK * 100 / LV_COUNT_LINES.
* GV_PERCENTAGE = LV_PERCT.
* CONCATENATE GV_PERCENTAGE
* '%......'
* INTO
* GV_PERCENTAGE.
LV_TEMP = LV_PERCT.
CONCATENATE GV_TEXT
LV_TEMP
INTO
GV_TEXT.
PERFORM DISPLAY_GUI_STATUS
USING LV_PERCT
GV_TEXT.
*更新 成本中心 KOSTL
READ TABLE LT_KOSTL INTO LWA_KOSTL
WITH KEY
AUFNR = <FS_ALV>-AUFNR
BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_ALV>-KOSTL = LWA_KOSTL-KOSTL. "成本中心
ENDIF.
*更新订单状态
CLEAR:LT_JEST_TEMP.
READ TABLE GT_AUFNR INTO LWA_AUFNR
WITH KEY
AUFNR = <FS_ALV>-AUFNR
BINARY SEARCH.
IF SY-SUBRC = 0.
LT_JEST_TEMP = LT_JEST.
DELETE LT_JEST_TEMP WHERE OBJNR <> LWA_AUFNR-OBJNR.
IF LT_JEST_TEMP IS NOT INITIAL.
LOOP AT LT_JEST_TEMP INTO LWA_JEST_TEMP.
IF SY-TABIX = 1.
<FS_ALV>-STTXT = LWA_JEST_TEMP-TXT04.
ELSE.
CONCATENATE <FS_ALV>-STTXT
','
LWA_JEST_TEMP-TXT04
INTO <FS_ALV>-STTXT.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
CONDENSE <FS_ALV>-STTXT.
*更新释放时间
* READ TABLE LT_JCDS INTO LWA_JCDS
* WITH KEY
* OBJNR = LWA_AUFNR-OBJNR
* BINARY SEARCH.
* IF SY-SUBRC = 0.
* <FS_ALV>-REL = LWA_JCDS-UDATE. "释放时间
* ENDIF.
<FS_ALV>-REL = <FS_ALV>-AUFLD."释放时间
*更新本月累计入库数和本用入库数
CLEAR:<FS_ALV>-IGMNG.
LT_MSEG_IN_TEMP = LT_MSEG_IN.
DELETE LT_MSEG_IN_TEMP WHERE AUFNR <> <FS_ALV>-AUFNR.
IF LT_MSEG_IN_TEMP IS NOT INITIAL.
LOOP AT LT_MSEG_IN_TEMP INTO LWA_MSEG.
IF LWA_MSEG-MATNR IS NOT INITIAL. "对订单最终的收退货
IF LWA_MSEG-BUDAT < GV_START_DATE_1.
IF LWA_MSEG-BWART = '101'.
<FS_ALV>-IGMNG = <FS_ALV>-IGMNG + LWA_MSEG-MENGE."本月累计收货
ELSE.
<FS_ALV>-IGMNG = <FS_ALV>-IGMNG - LWA_MSEG-MENGE."本月累计收货
ENDIF.
ENDIF.
IF LWA_MSEG-BUDAT BETWEEN GV_START_DATE_2 AND GV_END_DATE_2.
IF LWA_MSEG-BWART = '101'.
<FS_ALV>-QTY_IN = <FS_ALV>-QTY_IN + LWA_MSEG-MENGE. "本月入库数
ELSE.
<FS_ALV>-QTY_IN = <FS_ALV>-QTY_IN - LWA_MSEG-MENGE. "本月入库数
ENDIF.
ENDIF.
ELSE. "对订单委外产品的收退货
IF LWA_MSEG-BUDAT < GV_START_DATE_2.
IF LWA_MSEG-BWART = '101'.
<FS_ALV>-DM_14 = <FS_ALV>-DM_14 + LWA_MSEG-MENGE."本月前累计收货 - 委外
ELSE.
<FS_ALV>-DM_14 = <FS_ALV>-DM_14 - LWA_MSEG-MENGE."本月前累计收货 - 委外
ENDIF.
ENDIF.
IF LWA_MSEG-BUDAT BETWEEN GV_START_DATE_2 AND GV_END_DATE_2.
IF LWA_MSEG-BWART = '101'.
<FS_ALV>-DM_24 = <FS_ALV>-DM_24 + LWA_MSEG-MENGE. "本月入库数 - 委外
ELSE.
<FS_ALV>-DM_24 = <FS_ALV>-DM_24 - LWA_MSEG-MENGE. "本月入库数 - 委外
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
*更新标准成本价格
CLEAR:LV_KALNR,LV_LOSGR.
READ TABLE LT_KALM INTO LWA_KALM
WITH KEY
MATNR = <FS_ALV>-PLNBEZ
BINARY SEARCH.
IF SY-SUBRC = 0.
LV_KALNR = LWA_KALM-KALNR.
LV_LOSGR = LWA_KALM-LOSGR.
ENDIF.
FREE: LT_CKIS.
LT_CKIS = LT_CKIS_TOTAL.
DELETE LT_CKIS WHERE KALNR <> LV_KALNR OR SSEDD > <FS_ALV>-REL.
*
* SELECT MANDT
* LEDNR
* BZOBJ
* KALNR "成本估算编号
* KALKA
* KADKY
* TVERS
* BWVAR
* KKZMA
* POSNR "单位成本核算行项目编号
* STATP "项目状态
* STRGP "项目控制(为内部使用)
* TYPPS "项目类别
* KSTAR "成本要素
* MATNR "物料号
* WRTFW_KPF "对象货币记帐值
* FWAER "业务货币
* MENGE
* MEEHT
* ARBID
* KOSTL
* SSEDD "最迟计划完成:执行(日期
* STEAS
* INTO CORRESPONDING FIELDS OF TABLE LT_CKIS
* FROM CKIS AS A
* WHERE
* KALNR = LV_KALNR "成本估算编号
* AND WERKS = P_WERKS
* AND SSEDD <= <FS_ALV>-REL "最迟计划完成:执行(日期)
* AND NOT EXISTS
* ( SELECT MATNR FROM CKIS AS B WHERE B~KALNR = A~KALNR AND B~SSEDD > A~SSEDD ).
IF LT_CKIS IS NOT INITIAL.
LOOP AT LT_CKIS INTO CKIS.
*确认当前价格是否为要处理的标准价格
CLEAR: LV_STANDARD.
PERFORM CHECK_STAND_VALUE TABLES LT_CKIS
USING CKIS-KALNR
CKIS-SSEDD
CHANGING LV_STANDARD.
IF LV_STANDARD = 'X'.
IF CKIS-KSTAR = '0094300001'. "直接人工(标准成本)
<FS_ALV>-DM_42 = CKIS-WRTFW_KPF / LV_LOSGR.
ELSEIF CKIS-KSTAR = '0094300002'. "制造费用(标准成本)
<FS_ALV>-DM_43 = CKIS-WRTFW_KPF / LV_LOSGR.
ELSEIF CKIS-KSTAR = '6602000300'. "委托加工费(标准成本)
<FS_ALV>-DM_44 = CKIS-WRTFW_KPF / LV_LOSGR. "委托加工费(标准成本)
ELSE.
<FS_ALV>-DM_41 = <FS_ALV>-DM_41 + CKIS-WRTFW_KPF. "直接材料(标准成本) - 总和
ENDIF.
ENDIF.
ENDLOOP.
<FS_ALV>-DM_41 = <FS_ALV>-DM_41 / LV_LOSGR. "直接材料(标准成本) - 单价
<FS_ALV>-DM_UM = <FS_ALV>-DM_41 + <FS_ALV>-DM_42 + <FS_ALV>-DM_43 + <FS_ALV>-DM_44. "标准单价 - 总计
ENDIF.
*更新期初余额 --> 直接材料投入 和 委托加工费
* LT_MSEG_QC_TEMP = LT_MSEG_QC.
* DELETE LT_MSEG_QC_TEMP WHERE AUFNR <> <FS_ALV>-AUFNR. "只处理当前的订单
* LOOP AT LT_MSEG_QC_TEMP INTO LWA_MSEG.
* IF LWA_MSEG-BWART = '261'. "直接材料投入
* <FS_ALV>-DM_11 = <FS_ALV>-DM_11 + LWA_MSEG-DMBTR . "累加金额
* ELSEIF LWA_MSEG-BWART = '262'. "直接材料退回.
* <FS_ALV>-DM_11 = <FS_ALV>-DM_11 - LWA_MSEG-DMBTR .
* ELSEIF LWA_MSEG-BWART = '101' AND LWA_MSEG-MATNR IS INITIAL. "委外入库
* <FS_ALV>-DM_14 = <FS_ALV>-DM_14 + LWA_MSEG-DMBTR . "累加金额
* ELSEIF LWA_MSEG-BWART = '102' AND LWA_MSEG-MATNR IS INITIAL. "委外入库
* <FS_ALV>-DM_14 = <FS_ALV>-DM_14 - LWA_MSEG-DMBTR . "累加金额
* ELSEIF LWA_MSEG-BWART = '122' AND LWA_MSEG-MATNR IS INITIAL. "委外入库
* <FS_ALV>-DM_14 = <FS_ALV>-DM_14 - LWA_MSEG-DMBTR . "累加金额
* ENDIF.
** DM_11 LIKE MSEG-DMBTR, "直接材料(期初)
** DM_12 LIKE MSEG-DMBTR, "直接人工(期初)
** DM_13 LIKE MSEG-DMBTR, "制造费用(期初)
** DM_14 LIKE MSEG-DMBTR, "委托加工费(期初)
** DM_15 LIKE MSEG-DMBTR, "成本合计(期初)
*
* ENDLOOP.
**更新期初余额 --> 直接人工 和 制造费用
* DATA: LWA_AFVC TYPE TY_AFVC,
* LT_AFVC_TEMP TYPE TABLE OF TY_AFVC,
* LT_AFRU_TEMP TYPE TABLE OF AFRU,
* LV_QC_ISM03 LIKE AFRU-ISM01,
* LV_QC_ISM04 LIKE AFRU-ISM01,
* LV_BQ_ISM03 LIKE AFRU-ISM01,
* LV_BQ_ISM04 LIKE AFRU-ISM01.
*
* CLEAR: LT_AFVC_TEMP,LT_AFRU_TEMP,LV_QC_ISM03,LV_QC_ISM04,LV_BQ_ISM03,LV_BQ_ISM04.
* LT_AFVC_TEMP = LT_AFVC.
* DELETE LT_AFVC_TEMP WHERE AUFNR <> <FS_ALV>-AUFNR.
* LOOP AT LT_AFVC_TEMP INTO LWA_AFVC. "找确认号
* LT_AFRU_TEMP = LT_AFRU.
* DELETE LT_AFRU_TEMP WHERE RUECK <> LWA_AFVC-RUECK. "只对当前确认号处理
* LOOP AT LT_AFRU_TEMP INTO AFRU.
* IF AFRU-BUDAT < GV_START_DATE_2. "期初投入
* LV_QC_ISM03 = LV_QC_ISM03 + AFRU-ISM03. "人工费用
* LV_QC_ISM04 = LV_QC_ISM04 + AFRU-ISM04. "制造费用
* ELSEIF AFRU-BUDAT BETWEEN GV_START_DATE_2 AND GV_END_DATE_2. "本月投入
* LV_BQ_ISM03 = LV_BQ_ISM03 + AFRU-ISM03. "人工费用
* LV_BQ_ISM04 = LV_BQ_ISM04 + AFRU-ISM04. "制造费用
* ENDIF.
* ENDLOOP.
* ENDLOOP.
*期初余额
FREE:LT_COEP.
LT_COEP = LT_COEP_TOTAL.
DELETE LT_COEP WHERE OBJNR <> LWA_AUFNR-OBJNR.
* SELECT MANDT "客户端
* KOKRS "控制范围
* BELNR "凭证编号
* BUZEI "过帐行
* PERIO "期间
* WTGBTR "交易货币中的总值
* WOGBTR "对象货币的总值
* MBGBTR "输入的总数量
* OBJNR "对象号
* GJAHR "会计年度
* WRTTP "值类型
* VERSN
* KSTAR "成本要素
* BEKNZ "借/贷标记
* TWAER
* OWAER
* MEINH
* WERKS "工厂
* MATNR "物料号
* BUKRS
* INTO CORRESPONDING FIELDS OF TABLE LT_COEP
* FROM COEP AS A
* WHERE
* A~KOKRS = 'EVOC'
* AND OBJNR = LWA_AUFNR-OBJNR
* AND WRTTP = '04'
* AND ( GJAHR < GV_GJAHR OR ( GJAHR = GV_GJAHR AND PERIO <= GV_PERIO ) ).
IF LT_COEP IS NOT INITIAL.
PERFORM GET_AMOUNT_QC_BQ TABLES LT_COEP
CHANGING
<FS_ALV>-DM_11 "直接材料(期初)
<FS_ALV>-DM_12 "直接人工(期初)
<FS_ALV>-DM_13 "制造费用(期初)
<FS_ALV>-DM_14 "委托加工费(期初)
<FS_ALV>-DM_15 "成本合计(期初)
<FS_ALV>-DM_21 "直接材料(本期)
<FS_ALV>-DM_22 "直接人工(本期)
<FS_ALV>-DM_23 "制造费用(本期)
<FS_ALV>-DM_24 "委托加工费(本期)
<FS_ALV>-DM_25. "成本合计(本期)
<FS_ALV>-DM_11 = <FS_ALV>-DM_11 - ( <FS_ALV>-IGMNG - <FS_ALV>-QTY_IN ) * <FS_ALV>-DM_41. .
<FS_ALV>-DM_12 = <FS_ALV>-DM_12 - ( <FS_ALV>-IGMNG - <FS_ALV>-QTY_IN ) * <FS_ALV>-DM_42.
<FS_ALV>-DM_13 = <FS_ALV>-DM_13 - ( <FS_ALV>-IGMNG - <FS_ALV>-QTY_IN ) * <FS_ALV>-DM_43.
<FS_ALV>-DM_14 = <FS_ALV>-DM_14 - ( <FS_ALV>-IGMNG - <FS_ALV>-QTY_IN ) * <FS_ALV>-DM_44.
<FS_ALV>-DM_15 = <FS_ALV>-DM_11 + <FS_ALV>-DM_12 + <FS_ALV>-DM_13 + <FS_ALV>-DM_14.
ENDIF.
*更新本月入库成本.
<FS_ALV>-DM_31 = <FS_ALV>-QTY_IN * <FS_ALV>-DM_41. "直接材料(本月入库) .
<FS_ALV>-DM_32 = <FS_ALV>-QTY_IN * <FS_ALV>-DM_42. "直接人工(本月入库)
<FS_ALV>-DM_33 = <FS_ALV>-QTY_IN * <FS_ALV>-DM_43. "制造费用(本月入库) .
<FS_ALV>-DM_34 = <FS_ALV>-QTY_IN * <FS_ALV>-DM_44. "委托加工费(本月入库)
<FS_ALV>-DM_35 = <FS_ALV>-DM_31 + <FS_ALV>-DM_32 + <FS_ALV>-DM_33 + <FS_ALV>-DM_34. "成本合计(本月入库)
*更新在制品 -- > 没有clsd的订单
* CLEAR: LV_COUNT.
* FIND FIRST OCCURRENCE OF 'CLSD' IN <FS_ALV>-STTXT MATCH COUNT LV_COUNT.
CLEAR: LV_CLSD.
PERFORM CHECK_CLSD_ORDER USING LWA_AUFNR-OBJNR
CHANGING LV_CLSD.
IF LV_CLSD = 'X'. "更新差异值 -- > 已 clsd的订单
<FS_ALV>-DM_61 = <FS_ALV>-DM_11 + <FS_ALV>-DM_21 - <FS_ALV>-DM_31. "直接材料(在制品)
<FS_ALV>-DM_62 = <FS_ALV>-DM_12 + <FS_ALV>-DM_22 - <FS_ALV>-DM_32. "直接人工(在制品)
<FS_ALV>-DM_63 = <FS_ALV>-DM_13 + <FS_ALV>-DM_23 - <FS_ALV>-DM_33. "制造费用(在制品)
<FS_ALV>-DM_64 = <FS_ALV>-DM_14 + <FS_ALV>-DM_24 - <FS_ALV>-DM_34. "委托加工费(在制品)
<FS_ALV>-DM_65 = <FS_ALV>-DM_61 + <FS_ALV>-DM_62 + <FS_ALV>-DM_63 + <FS_ALV>-DM_64."成本合计(在制品)
ELSE. "没有clsd的订单
<FS_ALV>-QTY_WIP = <FS_ALV>-GAMNG - <FS_ALV>-IGMNG. "数量(在制品)
<FS_ALV>-DM_51 = <FS_ALV>-DM_11 + <FS_ALV>-DM_21 - <FS_ALV>-DM_31. "直接材料(在制品)
<FS_ALV>-DM_52 = <FS_ALV>-DM_12 + <FS_ALV>-DM_22 - <FS_ALV>-DM_32. "直接人工(在制品)
<FS_ALV>-DM_53 = <FS_ALV>-DM_13 + <FS_ALV>-DM_23 - <FS_ALV>-DM_33. "制造费用(在制品)
<FS_ALV>-DM_54 = <FS_ALV>-DM_14 + <FS_ALV>-DM_24 - <FS_ALV>-DM_34. "委托加工费(在制品)
<FS_ALV>-DM_55 = <FS_ALV>-DM_51 + <FS_ALV>-DM_52 + <FS_ALV>-DM_53 + <FS_ALV>-DM_54."成本合计(在制品)
ENDIF.
*skip leading zero before output
* PERFORM SKIP_LEADING_ZERO CHANGING <FS_ALV>-AUFNR
* <FS_ALV>-PLNBEZ
* <FS_ALV>-KOSTL.
ENDLOOP.
*写入数据库.
DELETE FROM ZPPORDER_COST WHERE SPMON = P_PERIOD AND WERKS = P_WERKS. "删除此月的旧数据
DELETE GT_ALV WHERE AUFNR = '001200000001'.
* LOOP AT GT_ALV ASSIGNING <FS_ALV>.
INSERT ZPPORDER_COST FROM TABLE GT_ALV ACCEPTING DUPLICATE KEYS. "加入此月的新数据
* INSERT ZPPORDER_COST FROM <FS_ALV>.
* ENDLOOP.
ENDFORM. " GET_ORDER_DETAIL
*&---------------------------------------------------------------------*
*& Form F_ALV_MODIFY_LISTHEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_ALV_MODIFY_LISTHEADER .
DATA : L_ALV_LISTHEADER_LINE LIKE LINE OF G_ALV_LISTHEADER,
LV_MSG TYPE STRING.
L_ALV_LISTHEADER_LINE-TYP = 'H'.
L_ALV_LISTHEADER_LINE-KEY = ' '.
IF RB_M = 'X'.
LV_MSG = '生产材料成本核算表'.
ELSEIF RB_TOTAL = 'X'.
LV_MSG = '成本核算表'.
ENDIF.
APPEND L_ALV_LISTHEADER_LINE TO G_ALV_LISTHEADER.
CONCATENATE '期间"'
GV_START_DATE_2+0(4)
'年'
GV_START_DATE_2+4(2)
'月 '
INTO
LV_MSG.
APPEND L_ALV_LISTHEADER_LINE TO G_ALV_LISTHEADER.
LV_MSG = '公司代码:1000'.
APPEND L_ALV_LISTHEADER_LINE TO G_ALV_LISTHEADER.
ENDFORM. " F_ALV_MODIFY_LISTHEADER
*&---------------------------------------------------------------------*
*& Form F_ALV_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_ALV_BUILD_FIELDCAT .
DATA : COL_POS TYPE I VALUE 0.
G_ALV_LAYOUT-GET_SELINFOS = 'X'.
G_ALV_LAYOUT-DETAIL_POPUP = 'X'.
G_ALV_LAYOUT-BOX_FIELDNAME = 'FLAG'.
G_ALV_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
G_ALV_LAYOUT-NO_KEYFIX = 'X'.
G_ALV_LAYOUT-ZEBRA(1) = 'X'. "隔行显示不同颜色
G_ALV_FIELDCAT_LINE-CHECKBOX = ''.
CLEAR: G_ALV_FIELDCAT_LINE-CHECKBOX.
IF RB_TOTAL = 'X'.
PERFORM F_ALV_ADD_FIELD USING 'KOSTL' '成本中心'.
PERFORM F_ALV_ADD_FIELD USING 'AUFNR' '生产订单'.
PERFORM F_ALV_ADD_FIELD USING 'PLNBEZ' '产品料号'.
PERFORM F_ALV_ADD_FIELD USING 'WRKST' '产品名称'.
PERFORM F_ALV_ADD_FIELD USING 'MAKTX' '规格型号'.
PERFORM F_ALV_ADD_FIELD USING 'STTXT' '生产订单状态'.
PERFORM F_ALV_ADD_FIELD USING 'GAMNG' '生产订单计划数量'.
PERFORM F_ALV_ADD_FIELD USING 'IGMNG' '本月累计入库数量'.
PERFORM F_ALV_ADD_FIELD USING 'DM_11' '直接材料(期初)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_12' '直接人工(期初)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_13' '制造费用(期初)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_14' '委托加工费(期初)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_15' '成本合计(期初)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_21' '直接材料(本期)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_22' '直接人工(本期)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_23' '制造费用(本期)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_24' '委托加工费(本期)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_25' '成本合计(本期)'.
PERFORM F_ALV_ADD_FIELD USING 'QTY_IN' '入库数量(本月入库)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_31' '直接材料(本月入库)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_32' '直接人工(本月入库)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_33' '制造费用(本月入库)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_34' '委托加工费(本月入库)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_35' '成本合计(本月入库)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_UM' '单位成本(标准成本)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_41' '直接材料(标准成本)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_42' '直接人工(标准成本)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_43' '制造费用(标准成本)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_44' '委托加工费(标准成本)'.
PERFORM F_ALV_ADD_FIELD USING 'QTY_WIP' '数量(在制品)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_51' '直接材料(在制品)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_52' '直接人工(在制品)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_53' '制造费用(在制品)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_54' '委托加工费(在制品)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_55' '成本合计(在制品)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_61' '直接材料(期末差异)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_62' '直接人工(期末差异)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_63' '制造费用(期末差异)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_64' '委托加工费(期末差异品)'.
PERFORM F_ALV_ADD_FIELD USING 'DM_65' '成本合计(期末差异)'.
ELSEIF RB_M = 'X'.
PERFORM F_ALV_ADD_FIELD USING 'KOSTL' '成本中心'.
PERFORM F_ALV_ADD_FIELD USING 'AUFNR' '生产订单'.
PERFORM F_ALV_ADD_FIELD USING 'PLNBEZ' '产品料号'.
PERFORM F_ALV_ADD_FIELD USING 'MATNR' '物料编号'.
PERFORM F_ALV_ADD_FIELD USING 'WRKST' '品名'.
PERFORM F_ALV_ADD_FIELD USING 'MAKTX' '物料描述'.
PERFORM F_ALV_ADD_FIELD USING 'STTXT' '生产订单状态'.
PERFORM F_ALV_ADD_FIELD USING 'MEINS' '单位'.
PERFORM F_ALV_ADD_FIELD USING 'QTY_USE' '实际用量'.
PERFORM F_ALV_ADD_FIELD USING 'QTY_PLAN ' '计划用量'.
PERFORM F_ALV_ADD_FIELD USING 'QTY_BOM' '标准用量'.
PERFORM F_ALV_ADD_FIELD USING 'PRICE' '系统单价'.
PERFORM F_ALV_ADD_FIELD USING 'COST' '实际用量金额 '.
ELSEIF RB_C = 'X'.
PERFORM F_ALV_ADD_FIELD USING 'KOSTL' '成本中心'.
PERFORM F_ALV_ADD_FIELD USING 'AUFNR' '生产订单'.
PERFORM F_ALV_ADD_FIELD USING 'PLNBEZ' '产品料号'.
PERFORM F_ALV_ADD_FIELD USING 'MATNR' '物料编号'.
PERFORM F_ALV_ADD_FIELD USING 'WRKST' '品名'.
PERFORM F_ALV_ADD_FIELD USING 'MAKTX' '物料描述'.
PERFORM F_ALV_ADD_FIELD USING 'STTXT' '生产订单状态'.
PERFORM F_ALV_ADD_FIELD USING 'MEINS' '单位'.
PERFORM F_ALV_ADD_FIELD USING 'S100' '实际人工作业价格'.
PERFORM F_ALV_ADD_FIELD USING 'S200 ' '实际费用作业价格'.
PERFORM F_ALV_ADD_FIELD USING 'J100' '计划人工作业价格'.
PERFORM F_ALV_ADD_FIELD USING 'J200' '计划费用作业价格'.
PERFORM F_ALV_ADD_FIELD USING 'SJGS' '实际工时'.
PERFORM F_ALV_ADD_FIELD USING 'COST100' '实际人工'.
PERFORM F_ALV_ADD_FIELD USING 'COST200' '实际制造费'.
PERFORM F_ALV_ADD_FIELD USING 'COST300' '实际委托加工费'.
ENDIF.
ENDFORM. " F_ALV_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form F_ALV_EVENT_TOP_OF_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_ALV_EVENT_TOP_OF_PAGE .
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = G_ALV_LISTHEADER.
ENDFORM. " F_ALV_EVENT_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form F_DISPLAY_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_DISPLAY_ALV .
DATA: LV_MSG TYPE LVC_TITLE.
IF RB_TOTAL = 'X'.
LV_MSG = '成本核算表'.
ELSEIF RB_M = 'X'.
LV_MSG = '生产材料成本核算表'.
ELSEIF RB_C = 'X'.
LV_MSG = '生产工费成本核算表'.
ENDIF.
CONCATENATE '公司代码:1000 期间'
GV_START_DATE_2+0(4)
'年'
GV_START_DATE_2+4(2)
'月 '
LV_MSG
INTO
LV_MSG.
IF RB_TOTAL = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ''
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'F_ALV_USER_COMMAND'
IS_LAYOUT = G_ALV_LAYOUT
IT_FIELDCAT = G_ALV_FIELDCAT
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET' "添加的GUI
I_SAVE = 'A'
* IT_EVENTS = G_ALV_EVENT
I_GRID_TITLE = LV_MSG "NEED MODIFY
TABLES
T_OUTTAB = GT_ALV
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ELSEIF RB_M = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ''
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'F_ALV_USER_COMMAND'
IS_LAYOUT = G_ALV_LAYOUT
IT_FIELDCAT = G_ALV_FIELDCAT
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET' "添加的GUI
I_SAVE = 'A'
* IT_EVENTS = G_ALV_EVENT
I_GRID_TITLE = LV_MSG "NEED MODIFY
TABLES
T_OUTTAB = GT_COMPOENT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ELSEIF RB_C = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ''
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'F_ALV_USER_COMMAND'
IS_LAYOUT = G_ALV_LAYOUT
IT_FIELDCAT = G_ALV_FIELDCAT
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET' "添加的GUI
I_SAVE = 'A'
* IT_EVENTS = G_ALV_EVENT
I_GRID_TITLE = LV_MSG "NEED MODIFY
TABLES
T_OUTTAB = GT_PRO_COST
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDIF.
ENDFORM. " F_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& Form F_ALV_ADD_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FIELDNAME_VALUE text
* -->REPTEXT_DDIC text
*----------------------------------------------------------------------*
FORM F_ALV_ADD_FIELD USING FIELDNAME_VALUE
REPTEXT_DDIC.
DATA : COL_POS TYPE I VALUE 0.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-EDIT = ''.
G_ALV_FIELDCAT_LINE-COL_POS = G_ALV_FIELDCAT_LINE-COL_POS + 1.
* G_ALV_FIELDCAT_LINE-REF_TABNAME = REF_TABNAME_VALUE.
* G_ALV_FIELDCAT_LINE-TABNAME = 'IT_ZPAYREQ'.
* G_ALV_FIELDCAT_LINE-REF_FIELDNAME = REF_FIELDNAME_VALUE.
G_ALV_FIELDCAT_LINE-FIELDNAME = FIELDNAME_VALUE.
* G_ALV_FIELDCAT_LINE-FIX_COLUMN = FIX_COLUMN.
* G_ALV_FIELDCAT_LINE-EDIT = EDIT.
* G_ALV_FIELDCAT_LINE-OUTPUTLEN = OUTPUTLEN_VALUE.
* G_ALV_FIELDCAT_LINE-KEY = ''.
* G_ALV_FIELDCAT_LINE-SELTEXT_S =
* G_ALV_FIELDCAT_LINE-SELTEXT_L =
* G_ALV_FIELDCAT_LINE-SELTEXT_M =
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = REPTEXT_DDIC.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ENDFORM. "F_ALV_ADD_FIELD
*&---------------------------------------------------------------------*
*& Form GET_AMOUNT_QC_BQ
*&---------------------------------------------------------------------*
* 得到期初余额相关数据 及本期投入
*----------------------------------------------------------------------*
FORM GET_AMOUNT_QC_BQ TABLES PT_COEP STRUCTURE COEP
CHANGING P_DM_11 TYPE P
P_DM_12 TYPE P
P_DM_13 TYPE P
P_DM_14 TYPE P
P_DM_15 TYPE P
P_DM_21 TYPE P
P_DM_22 TYPE P
P_DM_23 TYPE P
P_DM_24 TYPE P
P_DM_25 TYPE P .
LOOP AT PT_COEP INTO COEP.
IF COEP-GJAHR = GV_GJAHR AND COEP-PERIO = GV_PERIO_NEW. "本月投入
IF COEP-KSTAR = '6501000300' OR COEP-KSTAR = '6501000100'. "原材料及半成品的投入
P_DM_21 = P_DM_21 + COEP-WTGBTR. "直接材料(本期)
ELSEIF COEP-KSTAR = '0094300001'. "直接人工.
P_DM_22 = P_DM_22 + COEP-WTGBTR. "直接人工(本期)
ELSEIF COEP-KSTAR = '0094300002'. "制造费用
P_DM_23 = P_DM_23 + COEP-WTGBTR. "制造费用(本期)
ELSEIF COEP-KSTAR = '6602000300'. "委外加工费
P_DM_24 = P_DM_24 + COEP-WTGBTR. "委托加工费(本期)
ENDIF.
ELSE. "期初投入
IF COEP-KSTAR = '6501000300' OR COEP-KSTAR = '6501000100'. "原材料及半成品的投入
P_DM_11 = P_DM_11 + COEP-WTGBTR. "直接材料(期初)
ELSEIF COEP-KSTAR = '0094300001'. "直接人工.
P_DM_12 = P_DM_12 + COEP-WTGBTR. "直接人工(期初)
ELSEIF COEP-KSTAR = '0094300002'. "制造费用
P_DM_13 = P_DM_13 + COEP-WTGBTR. "制造费用(期初)
ELSEIF COEP-KSTAR = '6602000300'. "委外加工费
P_DM_14 = P_DM_14 + COEP-WTGBTR. "委托加工费(期初)
ENDIF.
ENDIF.
ENDLOOP.
P_DM_25 = P_DM_21 + P_DM_22 + P_DM_23 + P_DM_24."成本合计(本期)
* <FS_ALV>-DM_11 "直接材料(期初)
* <FS_ALV>-DM_12 "直接人工(期初)
* <FS_ALV>-DM_13 "制造费用(期初)
* <FS_ALV>-DM_14 "委托加工费(期初)
* <FS_ALV>-DM_15 "成本合计(期初)
* <FS_ALV>-DM_21 "直接材料(本期)
* <FS_ALV>-DM_22 "直接人工(本期)
* <FS_ALV>-DM_23 "制造费用(本期)
* <FS_ALV>-DM_24 "委托加工费(本期)
* <FS_ALV>-DM_25. "成本合计(本期)
*
ENDFORM. " GET_AMOUNT_QC
*改变ALV的TOP_OF_PAGE事件处理过程
FORM F_ALV_BUILD_EVENTCAT .
DATA : LS_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = G_ALV_EVENT.
READ TABLE G_ALV_EVENT WITH KEY NAME =
SLIS_EV_TOP_OF_PAGE
INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE G_ALV_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
APPEND LS_EVENT TO G_ALV_EVENT.
ENDIF.
ENDFORM. " F_ALV_BUILD_EVENTCAT
*& Form FUNCTION_EXECUTE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PF_UCOMM text
* -->PS_SELFIELD text
*----------------------------------------------------------------------*
FORM F_ALV_USER_COMMAND USING PF_UCOMM LIKE SY-UCOMM
PS_SELFIELD TYPE SLIS_SELFIELD.
DATA: LV_AUFNR LIKE AUFK-AUFNR.
LV_AUFNR = PS_SELFIELD-VALUE.
* G_TABINDEX = PS_SELFIELD-TABINDEX.
CASE PF_UCOMM.
WHEN '&IC1'.
IF PS_SELFIELD-FIELDNAME = 'AUFNR'.
LV_AUFNR = G_SELECTED_FIELD_VALUE.
CALL FUNCTION 'K_KKB_KKBCS_ORDER_REPORT'
EXPORTING
I_AUFNR = LV_AUFNR
EXCEPTIONS
OBJECT_NOT_FOUND = 1
NO_DATA = 2
NO_AUTHORITY = 3
OTHERS = 4.
ENDIF.
ENDCASE.
ENDFORM. "function_execute
*&---------------------------------------------------------------------*
*& Form CHECK_STAND_VALUE
*&---------------------------------------------------------------------*
* 确认当前价格是否为要处理的标准价格
*----------------------------------------------------------------------*
* -->PT_CKIS text
* -->PV_KALNR text
* -->PV_SSEDD text
* <--PV_STANDARD text
*----------------------------------------------------------------------*
FORM CHECK_STAND_VALUE TABLES PT_CKIS STRUCTURE CKIS
USING PV_KALNR TYPE CK_KALNR
PV_SSEDD TYPE SSEDD
CHANGING PV_STANDARD TYPE C.
DATA:LT_TEMP TYPE TABLE OF CKIS WITH HEADER LINE,
LWA_CKIS_TEMP TYPE CKIS.
LT_TEMP[] = PT_CKIS[].
SORT LT_TEMP BY KALNR SSEDD.
READ TABLE LT_TEMP INTO LWA_CKIS_TEMP INDEX 1.
IF LWA_CKIS_TEMP-KALNR = PV_KALNR AND LWA_CKIS_TEMP-SSEDD = PV_SSEDD.
PV_STANDARD = 'X'.
ENDIF.
ENDFORM. " CHECK_STAND_VALUE
*&---------------------------------------------------------------------*
*& Form CHECK_CLSD_ORDER
*&---------------------------------------------------------------------*
* 确认是否为clsd订单
*----------------------------------------------------------------------*
* -->PV_OBJNR text
* <--PV_CLSD text
*----------------------------------------------------------------------*
FORM CHECK_CLSD_ORDER USING PV_OBJNR
CHANGING PV_CLSD.
READ TABLE GT_JCDS_TEMP TRANSPORTING NO FIELDS
WITH KEY
OBJNR = PV_OBJNR
STAT = 'I0046'
BINARY SEARCH.
IF SY-SUBRC = 0.
PV_CLSD = 'X'.
ENDIF.
ENDFORM. " CHECK_CLSD_ORDER
*&---------------------------------------------------------------------*
*& Form GET_MTL_BOM
*&---------------------------------------------------------------------*
* 得到标准用量
*----------------------------------------------------------------------*
* -->Pv_AUFNR text
* -->Pv_MATNR text
* <--Pv_QTY_BOM text
* <--PV_MEINS text
*----------------------------------------------------------------------*
FORM GET_MTL_BOM USING PV_AUFNR TYPE AUFNR
PV_MATNR TYPE MATNR
CHANGING PV_QTY_BOM TYPE EINME .
CLEAR:PV_QTY_BOM.
DATA: LWA_RESB TYPE TY_RESB.
READ TABLE GT_RESB INTO LWA_RESB
WITH KEY
AUFNR = PV_AUFNR
MATNR = PV_MATNR
BINARY SEARCH.
IF SY-SUBRC = 0.
PV_QTY_BOM = LWA_RESB-BDMNG. "需求数
* PV_MEINS = LWA_RESB-MEINS. "单位
ENDIF.
ENDFORM. " GET_MTL_BOM
*&---------------------------------------------------------------------*
*& Form GET_MTL_BASIC
*&---------------------------------------------------------------------*
* 得到品名和物料描述
*----------------------------------------------------------------------*
* -->Pv_MATNR text
* <--PV_WRKST text
* <--PV_MAKTX text
*----------------------------------------------------------------------*
FORM GET_MTL_BASIC USING PV_MATNR TYPE MATNR
CHANGING PV_WRKST TYPE WRKST
PV_MAKTX TYPE MAKTX
PV_MEINS TYPE MEINS .
DATA: LWA_DESC TYPE TY_DESC.
CLEAR:PV_WRKST,PV_MAKTX.
READ TABLE GT_DESC INTO LWA_DESC
WITH KEY
MATNR = PV_MATNR
BINARY SEARCH.
IF SY-SUBRC = 0.
PV_WRKST = LWA_DESC-WRKST.
PV_MAKTX = LWA_DESC-MAKTX.
PV_MEINS = LWA_DESC-MEINS.
ENDIF.
ENDFORM. " GET_MTL_BASIC
*&---------------------------------------------------------------------*
*& Form GET_PRICE
*&---------------------------------------------------------------------*
* 得到指定月份的单价
*----------------------------------------------------------------------*
* -->PV_MATNR text
* <--PV_PRICE text
*----------------------------------------------------------------------*
FORM GET_PRICE USING PV_MATNR TYPE MATNR
CHANGING PV_PRICE TYPE P .
CLEAR:PV_PRICE.
READ TABLE GT_MBEWH INTO MBEWH
WITH KEY
MATNR = PV_MATNR
BINARY SEARCH.
IF SY-SUBRC = 0.
IF MBEWH-VPRSV = 'S'.
PV_PRICE = MBEWH-STPRS / MBEWH-PEINH. "标准价格
ELSEIF MBEWH-VPRSV = 'V'.
PV_PRICE = MBEWH-VERPR / MBEWH-PEINH. "移动平均价格
ENDIF.
ENDIF.
ENDFORM. " GET_PRICE
*&---------------------------------------------------------------------*
*& Form SKIP_LEADING_ZERO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--PV_AUFNR text
* <--PV_PLNBEZ text
* <--PV_KOSTL text
*----------------------------------------------------------------------*
FORM SKIP_LEADING_ZERO CHANGING PV_AUFNR TYPE AUFNR "订单号
PV_PLNBEZ TYPE MATNR "物料号
PV_KOSTL TYPE KOSTL. "成本中心
* leading zero skip
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = PV_AUFNR "订单号
IMPORTING
OUTPUT = PV_AUFNR.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
INPUT = PV_PLNBEZ "物料号
IMPORTING
OUTPUT = PV_PLNBEZ.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = PV_KOSTL "成本中心
IMPORTING
OUTPUT = PV_KOSTL.
ENDFORM. " SKIP_LEADING_ZERO
*&---------------------------------------------------------------------*
*& Form GET_INDIRECT_COST
*&---------------------------------------------------------------------*
* 得到间接费用报表
*----------------------------------------------------------------------*
FORM GET_INDIRECT_COST .
* BEGIN OF TY_COEP, "相关价格表结构
* OBJNR LIKE COEP-OBJNR, "对象号
* KSTAR LIKE COEP-KSTAR, "成本要素
* USPOB LIKE COEP-USPOB, "源对象 (成本中心/作业类型)
* WTGBTR LIKE COEP-WTGBTR, "交易货币中的总值
* MBGBTR LIKE COEP-MBGBTR, "输入的总数量
* END OF TY_COEP,
DATA: LT_COEP_PLAN TYPE TABLE OF TY_COEP,
LT_COEP_USED TYPE TABLE OF TY_COEP,
LWA_COEP TYPE TY_COEP,
LWA_PRO_COST TYPE TY_PRO_COST,
LT_JEST TYPE TABLE OF TY_JEST,
LT_TEMP_JEST TYPE TABLE OF TY_JEST,
LWA_JEST_TEMP TYPE TY_JEST,
LV_USPOB TYPE USPOB,
LWA_COEP_TEMP TYPE TY_COEP.
*更新订单状态 - cost 4 seconds
SELECT DISTINCT A~MANDT
A~OBJNR
B~TXT04
INTO TABLE LT_JEST
FROM ZPPCOST_ORDER AS D INNER JOIN JCDS AS A
ON D~OBJNR = A~OBJNR AND A~UDATE <= GV_END_DATE_2 AND A~INACT <> 'X' INNER JOIN TJ02T AS B
ON A~STAT = B~ISTAT AND B~SPRAS = 1.
SELECT A~AUFNR
A~OBJNR
B~KSTAR
B~USPOB "源对象 (成本中心/作业类型)
B~WTGBTR "交易货币中的总值
B~MBGBTR "输入的总数量
INTO TABLE LT_COEP_PLAN
FROM ZPPCOST_ORDER AS A INNER JOIN COEP AS B
ON A~OBJNR = B~OBJNR AND B~WRTTP = '04' AND B~BWSTRAT = 1 AND B~KOKRS = 'EVOC'
AND B~GJAHR = GV_GJAHR AND PERIO = GV_PERIO_NEW
WHERE
B~KSTAR IN ('6602000300','0094300001','0094300002').
SELECT A~AUFNR
A~OBJNR
B~KSTAR
B~USPOB "源对象 (成本中心/作业类型)
SUM( B~WTGBTR ) AS WTGBTR "交易货币中的总值
SUM( B~MBGBTR ) AS MBGBTR "输入的总数量
INTO TABLE LT_COEP_USED
FROM ZPPCOST_ORDER AS A INNER JOIN COEP AS B
ON A~OBJNR = B~OBJNR AND B~WRTTP = '04' AND B~KOKRS = 'EVOC'
AND B~GJAHR = GV_GJAHR AND PERIO = GV_PERIO_NEW
WHERE
B~KSTAR IN ('6602000300','0094300001','0094300002')
GROUP BY
A~AUFNR A~OBJNR B~KSTAR B~USPOB.
IF LT_COEP_USED IS INITIAL.
MESSAGE I005.
RETURN.
ELSE.
SORT GT_ALV BY AUFNR.
SORT LT_COEP_USED BY AUFNR.
LOOP AT LT_COEP_USED INTO LWA_COEP WHERE KSTAR = '0094300001'.
LT_TEMP_JEST = LT_JEST.
DELETE LT_TEMP_JEST WHERE OBJNR <> LWA_COEP-OBJNR.
LWA_PRO_COST-KOSTL = LWA_COEP-USPOB+6(10). "成本中心
LWA_PRO_COST-AUFNR = LWA_COEP-AUFNR. "生产订单
PERFORM GET_ORDER_BASIC USING LWA_COEP-AUFNR
CHANGING LWA_PRO_COST-PLNBEZ "产品料号
LWA_PRO_COST-WRKST "品名
LWA_PRO_COST-MAKTX "物料描述(短文本)
LWA_PRO_COST-MEINS. "单位
IF LT_TEMP_JEST IS NOT INITIAL.
LOOP AT LT_TEMP_JEST INTO LWA_JEST_TEMP.
IF SY-TABIX = 1.
LWA_PRO_COST-STTXT = LWA_JEST_TEMP-TXT04.
ELSE.
CONCATENATE LWA_PRO_COST-STTXT
','
LWA_JEST_TEMP-TXT04
INTO LWA_PRO_COST-STTXT. "订单状态
ENDIF.
ENDLOOP.
ENDIF.
IF LWA_COEP-MBGBTR IS NOT INITIAL.
LWA_PRO_COST-S100 = LWA_COEP-WTGBTR / LWA_COEP-MBGBTR. "实际人工作业价格
ENDIF.
LV_USPOB = LWA_COEP-USPOB.
LV_USPOB+16(3) = '200'.
READ TABLE LT_COEP_USED INTO LWA_COEP_TEMP
WITH KEY
AUFNR = LWA_COEP-AUFNR
USPOB = LV_USPOB.
IF SY-SUBRC = 0.
LWA_PRO_COST-S200 = LWA_COEP_TEMP-WTGBTR / LWA_COEP_TEMP-MBGBTR. "实际费用作业价格
ENDIF.
READ TABLE LT_COEP_PLAN INTO LWA_COEP_TEMP
WITH KEY
AUFNR = LWA_COEP-AUFNR
USPOB = LWA_COEP-USPOB.
IF SY-SUBRC = 0.
LWA_PRO_COST-J100 = LWA_COEP_TEMP-WTGBTR / LWA_COEP_TEMP-MBGBTR. "计划人工作业价格
ENDIF.
READ TABLE LT_COEP_PLAN INTO LWA_COEP_TEMP
WITH KEY
AUFNR = LWA_COEP-AUFNR
USPOB = LV_USPOB.
IF SY-SUBRC = 0.
LWA_PRO_COST-J200 = LWA_COEP_TEMP-WTGBTR / LWA_COEP_TEMP-MBGBTR. "计划费用作业价格
ENDIF.
LWA_PRO_COST-SJGS = LWA_COEP-MBGBTR. "实际工时
LWA_PRO_COST-COST100 = LWA_COEP-MBGBTR * LWA_PRO_COST-S100. "实际人工
LWA_PRO_COST-COST200 = LWA_COEP-MBGBTR * LWA_PRO_COST-S200. "实际制造费
READ TABLE LT_COEP_USED INTO LWA_COEP_TEMP
WITH KEY
AUFNR = LWA_COEP-AUFNR
KSTAR = '6602000300'.
IF SY-SUBRC = 0.
LWA_PRO_COST-COST300 = LWA_COEP_TEMP-WTGBTR. "实际委托加工费
ENDIF.
PERFORM SKIP_LEADING_ZERO CHANGING LWA_PRO_COST-AUFNR
LWA_PRO_COST-PLNBEZ
LWA_PRO_COST-KOSTL.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
INPUT = LWA_PRO_COST-MEINS
IMPORTING
OUTPUT = LWA_PRO_COST-MEINS.
APPEND LWA_PRO_COST TO GT_PRO_COST.
CLEAR:LWA_PRO_COST.
ENDLOOP.
ENDIF.
SORT GT_PRO_COST BY AUFNR KOSTL.
ENDFORM. " GET_INDIRECT_COST
*&---------------------------------------------------------------------*
*& Form GET_ORDER_BASIC
*&---------------------------------------------------------------------*
* 得到订单的基本信息
*----------------------------------------------------------------------*
* -->PV_OBJNR text
* <--PV_AUFNR text
* <--PV_PLNBEZ text
* <--PV_WRKST text
* <--PV_MAKTX text
*----------------------------------------------------------------------*
FORM GET_ORDER_BASIC USING PV_AUFNR TYPE AUFNR
CHANGING PV_PLNBEZ TYPE MATNR
PV_WRKST TYPE WRKST
PV_MAKTX TYPE MAKTX
PV_MEINS TYPE MEINS."单位.
DATA: LWA_ALV TYPE TY_ALV.
READ TABLE GT_ALV INTO LWA_ALV
WITH KEY
AUFNR = PV_AUFNR
BINARY SEARCH.
IF SY-SUBRC = 0.
PV_PLNBEZ = LWA_ALV-PLNBEZ. "订单物料
PV_WRKST = LWA_ALV-WRKST. "品名
PV_MAKTX = LWA_ALV-MAKTX. "订单物料描述
PV_MEINS = LWA_ALV-MEINS. "单位
ENDIF.
ENDFORM. " GET_ORDER_BASIC
*&---------------------------------------------------------------------*
*& Form DISPLAY_GUI_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PV_PERCENTAGE text
* -->PV_TEXT text
*----------------------------------------------------------------------*
FORM DISPLAY_GUI_STATUS USING PV_PERCENTAGE TYPE P
PV_TEXT TYPE STRING.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = PV_PERCENTAGE
TEXT = PV_TEXT.
ENDFORM. " DISPLAY_GUI_STATUS