在产品成本差异表

22 篇文章 0 订阅
16 篇文章 3 订阅

&---------------------------------------------------------------------
*& Report ZCO013
&---------------------------------------------------------------------
*&
&---------------------------------------------------------------------
REPORT zco013.
TABLES:aufk,afpo,mara.
TYPES: BEGIN OF ty_tab,
werks TYPE werks,
matnr TYPE matnr,
maktx TYPE maktx,
aufnr TYPE aufnr,
matnr1 TYPE matnr,
maktx1 TYPE maktx,
prd TYPE mldoc-prd,
prd1 TYPE mldoc-prd,
prd2 TYPE mldoc-prd,
waers TYPE waers,
quant TYPE mldoc-quant,
quant1 TYPE mldoc-quant,
quant2 TYPE mldoc-quant,
meins TYPE meins,
jahrper TYPE mldoc-jahrper,
END OF ty_tab.
DATA:gw_tab TYPE ty_tab,
gt_tab TYPE TABLE OF ty_tab.

DATA: gw_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat.
PARAMETERS: bukrs TYPE aufk-bukrs OBLIGATORY VALUE CHECK MEMORY ID buk.

SELECTION-SCREEN SKIP.

  • Further selection fields
    SELECT-OPTIONS: s_werks FOR aufk-werks. "value check memory id WRK.
    SELECT-OPTIONS: s_matnr FOR afpo-matnr MATCHCODE OBJECT mat1t.
    *SELECT-OPTIONS: matart FOR mara-mtart MATCHCODE OBJECT mat1t.
    *SELECT-OPTIONS: kundauf FOR aufk-kdauf.
    *SELECT-OPTIONS: kundpos FOR aufk-kdpos.
    *SELECT-OPTIONS: pspel FOR afpo-projn.
    SELECT-OPTIONS: s_aufnr FOR aufk-aufnr MEMORY ID anr.
    *SELECT-OPTIONS: auf_art FOR aufk-auart.
    *SELECT-OPTIONS: bwer_art FOR afpo-bwtar.

*Selection section ‘Parameter(periode, fiscal year)’
SELECTION-SCREEN BEGIN OF BLOCK param WITH FRAME TITLE TEXT-fr1.
PARAMETERS: period TYPE co_perio OBLIGATORY MEMORY ID popr.
PARAMETERS: gjahr LIKE lko74-gjahr OBLIGATORY MEMORY ID bdtj.
SELECTION-SCREEN END OF BLOCK param.

START-OF-SELECTION.
PERFORM frm_getdata.
PERFORM frm_fieldcat.
PERFORM frm_display_alv.
FORM frm_getdata.
DATA:zjahrper TYPE jahrper.
zjahrper+0(4) = gjahr.
zjahrper+4(3) = period.
SELECT a~bwkey AS werks,akalnr,amatnr AS matnr1,caufnr,bmeins,bprd,bwaers,bposart,bjahrper,d~plnbez AS matnr
INTO TABLE @DATA(gt_ckmlhd)
FROM ckmlhd AS a
INNER JOIN mldoc AS b ON a~kalnr = b~kalnr
INNER JOIN coas AS c ON b~process = c~procnr
INNER JOIN afko AS d ON c~aufnr = d~aufnr
INNER JOIN mlwiphd AS e ON d~aufnr = e~aufnr
WHERE a~bwkey IN @s_werks AND c~aufnr IN @s_aufnr AND b~jahrper <= @zjahrper
AND d~plnbez IN @s_matnr AND b~xabr = ‘X’ AND b~posart IN (‘WB’,‘WI’,‘WR’) AND e~gjahr = @gjahr AND e~perio = @period.
DATA:gw_ckmlhd1 LIKE LINE OF gt_ckmlhd,
gt_ckmlhd1 LIKE TABLE OF gw_ckmlhd1.
DATA:zxsettle TYPE mlrunlist-xsettle.
DATA:zmlast TYPE ckmlhd-mlast…
gt_ckmlhd1[] = gt_ckmlhd[].
REFRESH:gt_tab.
LOOP AT gt_ckmlhd INTO DATA(gw_ckmlhd).
CLEAR:gw_tab,zxsettle,zmlast.
gw_tab-werks = gw_ckmlhd-werks.
gw_tab-matnr = gw_ckmlhd-matnr.
gw_tab-aufnr = gw_ckmlhd-aufnr.
gw_tab-matnr1 = gw_ckmlhd-matnr1.
gw_tab-waers = gw_ckmlhd-waers.
gw_tab-meins = gw_ckmlhd-meins.
" 结算期间
READ TABLE gt_ckmlhd1 INTO gw_ckmlhd1 WITH KEY werks = gw_ckmlhd-werks aufnr = gw_ckmlhd-aufnr matnr1 = gw_ckmlhd-matnr1 posart = ‘WI’.
IF sy-subrc = 0.
gw_tab-jahrper = gw_ckmlhd1-jahrper.
ENDIF.
IF gw_ckmlhd-jahrper = zjahrper.

  IF gw_ckmlhd-posart = 'WB' OR gw_ckmlhd-posart = 'WR'.
    gw_tab-prd = gw_ckmlhd-prd * -1.
    gw_tab-prd1 = gw_ckmlhd-prd * -1.
    READ TABLE gt_tab INTO DATA(gw_tab1) WITH KEY werks = gw_ckmlhd-werks aufnr = gw_ckmlhd-aufnr matnr1 = gw_ckmlhd-matnr1.
    IF sy-subrc = 0.
      IF gw_tab1-quant1 IS INITIAL.
        SELECT SUM( quant ) INTO ( @gw_tab-quant ) FROM mldoc WHERE aufnr = @gw_ckmlhd-aufnr AND kalnr = @gw_ckmlhd-kalnr  AND awtyp = 'MKPF'.
        SELECT SUM( quant ) INTO ( @gw_tab-quant1 ) FROM mldoc WHERE aufnr = @gw_ckmlhd-aufnr AND kalnr = @gw_ckmlhd-kalnr AND jahrper = @zjahrper AND awtyp = 'MKPF'.
      ENDIF.
    ELSE.
      SELECT SUM( quant ) INTO ( @gw_tab-quant ) FROM mldoc WHERE aufnr = @gw_ckmlhd-aufnr AND kalnr = @gw_ckmlhd-kalnr  AND awtyp = 'MKPF'.
      SELECT SUM( quant ) INTO ( @gw_tab-quant1 ) FROM mldoc WHERE aufnr = @gw_ckmlhd-aufnr AND kalnr = @gw_ckmlhd-kalnr AND jahrper = @zjahrper AND awtyp = 'MKPF'.
    ENDIF.
  ELSEIF gw_ckmlhd-posart = 'WI'.
    gw_tab-prd2 = gw_ckmlhd-prd * -1 .
  ENDIF.
ELSEIF gw_ckmlhd-jahrper < zjahrper.
  IF gw_ckmlhd-posart = 'WB' OR gw_ckmlhd-posart = 'WR'.
    gw_tab-prd = gw_ckmlhd-prd * -1.
    READ TABLE gt_tab INTO DATA(gw_tab2) WITH KEY werks = gw_ckmlhd-werks aufnr = gw_ckmlhd-aufnr matnr1 = gw_ckmlhd-matnr1.
    IF sy-subrc = 0.
      IF gw_tab2-quant IS INITIAL.
        SELECT SUM( quant ) INTO ( @gw_tab-quant ) FROM mldoc WHERE aufnr = @gw_ckmlhd-aufnr AND kalnr = @gw_ckmlhd-kalnr  AND awtyp = 'MKPF'.
      ENDIF.
    ELSE.
      SELECT SUM( quant ) INTO ( @gw_tab-quant ) FROM mldoc WHERE aufnr = @gw_ckmlhd-aufnr AND kalnr = @gw_ckmlhd-kalnr  AND awtyp = 'MKPF'.
    ENDIF.
  ELSEIF gw_ckmlhd-posart = 'WI'.
    gw_tab-prd2 = gw_ckmlhd-prd * -1.
  ENDIF.
ENDIF.

SELECT SINGLE mlast INTO @zmlast FROM ckmlhd WHERE kalnr = @gw_ckmlhd-kalnr.
SELECT SINGLE xsettle INTO (@zxsettle) FROM mlrunlist WHERE kalnr = @gw_ckmlhd-kalnr AND jahrper = @zjahrper .
IF zxsettle = '' AND zmlast = '2' .
  CLEAR:gw_tab.
  CONTINUE.
ENDIF.
COLLECT gw_tab INTO gt_tab.

ENDLOOP.
" 删除结算期间为以前的数据
DELETE gt_tab WHERE jahrper < zjahrper AND jahrper NE ‘’.
SORT gt_tab BY werks matnr aufnr.
LOOP AT gt_tab INTO gw_tab.
SELECT SINGLE maktx INTO gw_tab-maktx FROM makt WHERE matnr = gw_tab-matnr.
SELECT SINGLE maktx INTO gw_tab-maktx1 FROM makt WHERE matnr = gw_tab-matnr1.
gw_tab-quant = gw_tab-quant * -1.
gw_tab-quant1 = gw_tab-quant1 * -1.
IF gw_tab-jahrper = zjahrper.
gw_tab-quant2 = gw_tab-quant.
ENDIF.
MODIFY gt_tab FROM gw_tab.

ENDLOOP.

ENDFORM.

FORM frm_fieldcat.
DEFINE fcatadd.
CLEAR gw_fieldcat.
gw_fieldcat-fieldname = &1.
gw_fieldcat-tabname = &2.
gw_fieldcat-scrtext_l = &3.
gw_fieldcat-scrtext_m = &3.
gw_fieldcat-scrtext_s = &3.
gw_fieldcat-outputlen = &4.
gw_fieldcat-ref_field = &5.
gw_fieldcat-ref_table = &6.
gw_fieldcat-intlen = ‘40’.
gw_fieldcat-just = ‘L’.
gw_fieldcat-no_zero = &7.

APPEND gw_fieldcat TO gt_fieldcat.

end-of-definition.
fcatadd ‘WERKS’ ‘GT_TAB’ ‘工厂’ ‘5’ ‘’ ‘’ ‘’.
fcatadd ‘MATNR’ ‘GT_TAB’ ‘物料代码’ ‘10’ ‘’ ‘’ ‘’.
fcatadd ‘MAKTX’ ‘GT_TAB’ ‘物料描述’ ‘15’ ‘’ ‘’ ‘’.
fcatadd ‘AUFNR’ ‘GT_TAB’ ‘生产订单号’ ‘10’ ‘’ ‘’ ‘’.
fcatadd ‘MATNR1’ ‘GT_TAB’ ‘组件物料号’ ‘10’ ‘’ ‘’ ‘’.
fcatadd ‘MAKTX1’ ‘GT_TAB’ ‘组件物料描述’ ‘15’ ‘’ ‘’ ‘’.
fcatadd ‘PRD’ ‘GT_TAB’ ‘WIP差异合计’ ‘10’ ‘’ ‘’ ‘’.
fcatadd ‘PRD1’ ‘GT_TAB’ ‘当期WIP差异’ ‘10’ ‘’ ‘’ ‘’.
fcatadd ‘PRD2’ ‘GT_TAB’ ‘结算WIP’ ‘10’ ‘’ ‘’ ‘’.
fcatadd ‘WAERS’ ‘GT_TAB’ ‘币别’ ‘3’ ‘’ ‘’ ‘’.
fcatadd ‘QUANT’ ‘GT_TAB’ ‘WIP数量合计’ ‘10’ ‘’ ‘’ ‘’.
fcatadd ‘QUANT1’ ‘GT_TAB’ ‘当期WIP数量’ ‘10’ ‘’ ‘’ ‘’.
fcatadd ‘QUANT2’ ‘GT_TAB’ ‘结算WIP数量’ ‘10’ ‘’ ‘’ ‘’.
fcatadd ‘MEINS’ ‘GT_TAB’ ‘单位’ ‘3’ ‘’ ‘’ ‘’.

  • fcatadd ‘JAHRPER’ ‘GT_TAB’ ‘结算期间’ ‘7’ ‘’ ‘’ ‘’.
    ENDFORM.

FORM frm_display_alv .
DATA:ls_layout TYPE lvc_s_layo.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-repid

  • i_callback_pf_status_set = 'F_SET_STATUS'
    is_layout_lvc      = ls_layout
    it_fieldcat_lvc    = gt_fieldcat
    i_save             = 'A'
    
    TABLES
    t_outtab = gt_tab
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.
    ENDFORM.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值