SAP CKM3在途成本取值

CKM3按物料查询,查不到在途的成本信息,需要输入交货单号和行号查询

因为按物料查询,按物料+BWKEY ,VBELN =空,POSNR=空取CKMLHD表的KALNR成本估算号

按交货单号+行号取CKMLHD表的KALNR成本估算号

两者成本估算号不一样

101227110

101539586

两者可以通过PROCESS和PKALNR关联

* 在途发货数量和初级评估金额取值

 SELECT a~matnr,a~kalnr,
         a~vbeln,a~posnr,
         a~bwkey,
         b~jahrper,
    SUM( b~quant ) AS quant,
    SUM( b~stval ) AS stval
      FROM ckmlhd AS a
      INNER JOIN mldoc AS b
      ON a~kalnr = b~kalnr
     INTO TABLE @DATA(lt_fh)
      WHERE b~budat IN @rt_budat
      AND a~matnr IN @s_matnr
      AND a~bwkey IN @rt_bwkey
      AND a~sobkz = 'T'
      AND a~vbeln IN @s_vbeln
      AND a~posnr IN @s_posnr
      AND b~jahrper IN @rt_jah
      AND b~glvor = 'RMWL'
      AND b~posart = 'UP'
      AND b~categ = 'VN'
     GROUP BY a~matnr,a~kalnr,a~vbeln,a~posnr,a~bwkey,b~jahrper.

* 发货价格差异

SELECT a~matnr,a~kalnr,
         a~vbeln,a~posnr,
         a~bwkey,
         b~jahrper,
    SUM( b~prd ) AS prd,
    SUM( b~kdm ) AS kdm
      FROM ckmlhd AS a
      INNER JOIN mldoc AS b
      ON a~kalnr = b~kalnr
     INTO TABLE @DATA(lt_fh_jgcy)
      WHERE "b~budat IN @rt_budat
          a~matnr IN @s_matnr
      AND a~bwkey IN @rt_bwkey
      AND a~sobkz = 'T'
      AND a~vbeln IN @s_vbeln
      AND a~posnr IN @s_posnr
      AND b~jahrper IN @rt_jah
      AND b~categ = 'VN'
     GROUP BY a~matnr,a~kalnr,a~vbeln,a~posnr,a~bwkey,b~jahrper.


 * 收货数量和初级评估金额

 SELECT a~matnr,a~kalnr,
         a~vbeln,a~posnr,
         a~bwkey,
         b~jahrper,
    SUM( b~quant ) AS quant,
    SUM( b~stval ) AS stval
      FROM ckmlhd AS a
      INNER JOIN mldoc AS b
      ON a~kalnr = b~kalnr
     INTO TABLE @DATA(lt_sh)
      WHERE b~budat IN @rt_budat
      AND a~matnr IN @s_matnr
      AND a~bwkey IN @rt_bwkey
     AND a~vbeln IN @s_vbeln
      AND a~posnr IN @s_posnr
      AND a~sobkz = 'T'
      AND b~jahrper IN @rt_jah
      AND b~glvor = 'RMWL'
      AND b~posart = 'UP'
      AND b~categ = 'ZU'
     GROUP BY a~matnr,a~kalnr,a~vbeln,a~posnr,a~bwkey,b~jahrper.

* 收货价格差异

SELECT a~matnr,a~kalnr,
         a~vbeln,a~posnr,
             a~bwkey,
         b~jahrper,
    SUM( b~prd ) AS prd,
    SUM( b~kdm ) AS kdm
      FROM ckmlhd AS a
      INNER JOIN mldoc AS b
      ON a~kalnr = b~kalnr
     INTO TABLE @DATA(lt_sh_jgcy)
      WHERE
    "  b~budat IN @rt_budat
          a~matnr IN @s_matnr
      AND a~bwkey IN @rt_bwkey
      AND a~vbeln IN @s_vbeln
      AND a~posnr IN @s_posnr
      AND a~sobkz = 'T'
      AND b~jahrper IN @rt_jah
      AND b~categ = 'ZU'
     GROUP BY a~matnr,a~kalnr,a~vbeln,a~posnr,a~bwkey,b~jahrper.

* 在途的未分配价格差异和汇率差异:我这边的业务相对简单,取CATEG=ND的就可以了

SELECT a~matnr,a~kalnr,
         a~vbeln,a~posnr,
         a~bwkey,
         b~jahrper,
         SUM( b~prd ) AS prd,
         SUM( b~kdm ) AS kdm
       FROM ckmlhd AS a
       INNER JOIN mldoc AS b
       ON a~kalnr = b~kalnr
      INTO TABLE @DATA(lt_nd)
       WHERE a~matnr IN @s_matnr
       AND a~bwkey IN @rt_bwkey
       AND a~vbeln IN @s_vbeln
       AND a~posnr IN @s_posnr
       AND a~sobkz = 'T'
       AND b~jahrper IN @rt_jah
       AND b~categ = 'ND'
      GROUP BY a~matnr,a~kalnr,a~vbeln,a~posnr,a~bwkey,b~jahrper.

*  初级评估期初金额

取MLDOC表的CATEG=AB,JAHRPER = 当前期间的 STVAL

+ MLDOC_EXTRACT表,JAHRPER < 当前期间的STVAL

 SELECT  a~matnr,a~kalnr,
          a~vbeln,a~posnr,
          a~bwkey,
          b~jahrper,
          SUM( stval ) AS stval,
          SUM( prd ) AS prd,
          SUM( kdm ) AS kdm
      INTO TABLE @DATA(lt_cjpg)
      FROM ckmlhd AS a
      INNER JOIN mldoc AS b
      ON a~kalnr = b~kalnr
     WHERE a~matnr IN @s_matnr
       AND a~bwkey IN @rt_bwkey
       AND a~vbeln IN @s_vbeln
       AND a~posnr IN @s_posnr
       AND a~sobkz = 'T'
       AND b~jahrper IN @rt_jah
       AND b~categ = 'AB'
    GROUP BY a~matnr,a~kalnr,a~vbeln,a~posnr,a~bwkey,b~jahrper.

  LOOP AT lt_cjpg INTO DATA(ls_cjpg).
    MOVE-CORRESPONDING ls_cjpg TO ls_out.
    ls_out-gjahr = ls_cjpg-jahrper+0(4).
    ls_out-poper = ls_cjpg-jahrper+4(3).
    ls_out-cjpg_jgcy = ls_cjpg-prd.
    ls_out-cjpg_hlcy = ls_cjpg-kdm.

    SELECT  SUM( stval )
        FROM ckmlhd AS a
        INNER JOIN mldoc_extract AS b
        ON a~kalnr = b~kalnr
      WHERE a~matnr = @ls_cjpg-matnr
      AND a~bwkey = @ls_cjpg-bwkey
      AND a~kalnr = @ls_cjpg-kalnr
      AND a~sobkz = 'T'
      AND b~jahrper < @ls_cjpg-jahrper
      INTO @DATA(lv_stval).

    ls_out-cjpg_qc = lv_stval + ls_cjpg-stval.
    COLLECT ls_out INTO gt_out.
    CLEAR: ls_cjpg,lv_stval.
  ENDLOOP.

* 实际值=初级评估金额+价格差异+汇率差异+未分配

LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>).

    READ TABLE lt_ebew TRANSPORTING NO FIELDS WITH KEY vbeln = <fs_out>-vbeln
                                                       posnr = <fs_out>-posnr
                                                BINARY SEARCH.
    IF sy-subrc NE 0.
      DELETE gt_out.
      CONTINUE.
    ENDIF.

    IF <fs_out>-unassign_kdm IS INITIAL AND <fs_out>-unassign_prd IS INITIAL.
      <fs_out>-fh_sjz = <fs_out>-fh_stval + <fs_out>-fh_prd + <fs_out>-fh_kdm.   "实际值=初级评估金额+价格差异+汇率差异
      <fs_out>-sh_sjz = <fs_out>-sh_stval + <fs_out>-sh_prd + <fs_out>-sh_kdm.
    ELSE.
      <fs_out>-fh_sjz = <fs_out>-fh_stval + <fs_out>-fh_prd + <fs_out>-fh_kdm.
      <fs_out>-sh_sjz = <fs_out>-sh_stval + <fs_out>-sh_prd + <fs_out>-sh_kdm + <fs_out>-unassign_kdm + <fs_out>-unassign_prd.
    ENDIF.

  ENDLOOP.

  结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值