多物料查看CKM3

        

*&---------------------------------------------------------------------*
*& Report ZFIR0034
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zfir0034.

TABLES:bseg,mbew.

TYPE-POOLS:slis,truxs,icon.


TYPES: BEGIN OF t_ckm3,
         kalnr   TYPE ckmlhd-kalnr,           "成本估算编号
         meins   TYPE meins,                  "数量单位
         werks   TYPE bseg-werks,             "工厂
         gjahr   TYPE bkpf-gjahr,             "会计年度
         monat   TYPE bkpf-monat,             "期间
         matnr   TYPE bseg-matnr,             "物料
         maktx   TYPE makt-maktx,             "物料描述
         bklas   TYPE mbew-bklas,             "评估类
         bkbez   TYPE t025t-bkbez,            "评估类描述
         cost1   TYPE ck_stprs_1,             "标准价格
         cost2   TYPE ck_pvprs_1,             "实际价格
         peinh   TYPE ck_peinh_1,             "价格单位
         bgqty   TYPE kkb_ml_menge,           "期初库存数量
         bgct1   TYPE kkb_ml_ges,             "期初标准成本
         bgdif   TYPE kkb_ml_ges,             "期初差异金额
         bgct2   TYPE kkb_ml_ges,             "期初实际成本
         inqty   TYPE kkb_ml_menge,           "本期收货数量
         inct1   TYPE kkb_ml_ges,             "本期收货标准成本
         indif   TYPE kkb_ml_ges,             "本期收货差异金额
         inct2   TYPE kkb_ml_ges,             "本期收货实际成本
         sumqty  TYPE kkb_ml_menge,           "累计库存数量
         sumct1  TYPE kkb_ml_ges,             "累计库存标准成本
         sumdif  TYPE kkb_ml_ges,             "累计库存差异金额
         sumct2  TYPE kkb_ml_ges,             "累计库存实际成本
         outqty  TYPE kkb_ml_menge,           "消耗数量
         outct1  TYPE kkb_ml_ges,             "消耗标准成本
         outdif  TYPE kkb_ml_ges,             "消耗差异金额
         outct2  TYPE kkb_ml_ges,             "消耗实际成本
         prdqty  TYPE kkb_ml_menge,           "生产领用数量
         prdct1  TYPE kkb_ml_ges,             "生产领用标准成本
         prddif  TYPE kkb_ml_ges,             "生产领用差异金额
         prdct2  TYPE kkb_ml_ges,             "生产领用实际成本
         costqty TYPE kkb_ml_menge,           "成本中心领用数量
         costct1 TYPE kkb_ml_ges,             "成本中心领用标准成本
         costdif TYPE kkb_ml_ges,             "成本中心领用差异金额
         costct2 TYPE kkb_ml_ges,             "成本中心领用实际成本
         itemqty TYPE kkb_ml_menge,           "项目领用数量
         itemct1 TYPE kkb_ml_ges,             "项目领用标准成本
         itemdif TYPE kkb_ml_ges,             "项目领用差异金额
         itemct2 TYPE kkb_ml_ges,             "项目领用实际成本
         othqty  TYPE kkb_ml_menge,           "委外数量
         othct1  TYPE kkb_ml_ges,             "委外标准成本
         othdif  TYPE kkb_ml_ges,             "委外差异金额
         othct2  TYPE kkb_ml_ges,             "委外实际成本
         qitqty  TYPE kkb_ml_menge,           "其他数量
         qitct1  TYPE kkb_ml_ges,             "其他标准成本
         qitdif  TYPE kkb_ml_ges,             "其他差异金额
         qitct2  TYPE kkb_ml_ges,             "其他实际成本
         edqty   TYPE kkb_ml_menge,           "期末库存数量
         edct1   TYPE kkb_ml_ges,             "期末库存标准成本
         eddif   TYPE kkb_ml_ges,             "期末库存差异金额
         edct2   TYPE kkb_ml_ges,             "期末库存实际成本
*         OPNQTY  TYPE KKB_ML_MENGE,           "未分配数量
*         OPNCT1  TYPE KKB_ML_GES,             "未分配标准成本
         opndif  TYPE kkb_ml_ges,             "未分配差异金额
         opnct2  TYPE kkb_ml_ges,             "未分配实际成本
       END OF t_ckm3.

TYPES: BEGIN OF t_doc,
         docref    TYPE mldoc-docref,           "凭证参考
         kalnr     TYPE mldoc-kalnr,            "成本估算编号
         jahrper   TYPE mldoc-jahrper,          "过账年份/期
         runref    TYPE mldoc-runref,           "成本核算运行参考
         categ     TYPE mldoc-categ,            "分类帐类别
         ptyp      TYPE mldoc-ptyp,             "备选处理类型
         bewartgrp TYPE mldoc-bewartgrp,      "运作类型组
         quant     TYPE mldoc-quant,            "交易数量
         meins     TYPE mldoc-meins,            "交易数量单位
         stval     TYPE mldoc-stval,            "交易库存价值
         prd       TYPE mldoc-prd,              "价格差异
         budat     TYPE mldoc-budat,            "过帐日期
         belnr     TYPE mldoc-belnr,            "凭证编号
         posnr     TYPE mldoc-posnr,            "凭证项目
         awref     TYPE mldoc-awref,            "参考凭证号
         awitem    TYPE mldoc-awitem,           "参考凭证行项目
         tcode     TYPE mldoc-tcode,            "事务代码
       END OF t_doc.

TYPES: BEGIN OF t_hd,
         kalnr TYPE ckmlhd-kalnr,            "成本估算编号
         werks TYPE bseg-werks,              "工厂
         matnr TYPE bseg-matnr,              "物料
         maktx TYPE makt-maktx,              "物料描述
         bklas TYPE mbew-bklas,              "评估类
         bkbez TYPE t025t-bkbez,             "评估类描述
       END OF t_hd.

TYPES:
* Struktur für Objekt-Typ (Material)
  BEGIN OF t_kalnr,
    kalnr    LIKE ckmlhd-kalnr,           "Kalnr des Material-Objekts
    obtyp    LIKE ckmlmv001-otyp,         "Objekttyp
    bwkey    LIKE ckmlhd-bwkey,           "Bewertungskreis
    matnr    LIKE ckmlhd-matnr,           "Materialnummer
    bwtar    LIKE ckmlhd-bwtar,           "Bewertungsart
    wperi    LIKE ckmlpp-poper,           "WIP-Periode
    wjahr    LIKE ckmlpp-bdatj,           "WIP-Geschäftsjahr
    wuntper  LIKE ckmlpp-untper,          "WIP-Wertgerüsttyp
    kzbws    LIKE ckmlhd-kzbws,           "KZ bew. Einzelbestand
    xobew    LIKE ckmlhd-xobew,           "KZ Lohnbearb: Subcontr.(JPN)
    sobkz    LIKE ckmlhd-sobkz,           "Sonderbestands-KZ
    vbeln    LIKE ckmlhd-vbeln,           "Kundenauftragsnummer
    posnr    LIKE ckmlhd-posnr,           "Kundenauftragsposition
    pspnr    LIKE ckmlhd-pspnr,           "PSP-Element
    lifnr    LIKE obew-lifnr,             "Kontonummer des Lieferanten
    flg_lock LIKE boole-boole,            "Kz: Objekt ist gesperrt
  END OF t_kalnr.


CONSTANTS:
  cns_a(1)    TYPE c VALUE 'A',                "常量A
  cns_ab(2)   TYPE c VALUE 'AB',               "常量AB期初
  cns_eb(2)   TYPE c VALUE 'EB',               "常量EB期末
  cns_nd(2)   TYPE c VALUE 'ND',               "常量ND未分配
  cns_pc(2)   TYPE c VALUE 'PC',               "常量PC价格变更
  cns_vn(2)   TYPE c VALUE 'VN',               "常量VN消耗
  cns_zu(2)   TYPE c VALUE 'ZU',               "常量ZU增加
  cns_vf(2)   TYPE c VALUE 'VF',               "常量VF消耗 生产
  cns_va(2)   TYPE c VALUE 'V+',               "常量V+余额
  cns_vp(2)   TYPE c VALUE 'VP',               "常量VP项目
  cns_vk(2)   TYPE c VALUE 'VK',               "常量VK成本中心
  cns_vl(2)   TYPE c VALUE 'VL',               "常量VL转包委外
  cns_vubm(4) TYPE c VALUE 'VUBM',           "常量VUBM物料转移过账
  cns_bb(2)   TYPE c VALUE 'BB',               "常量BB采购订单
  cns_ba(2)   TYPE c VALUE 'B+',               "常量B+采购
  cns_bl(2)   TYPE c VALUE 'BL',               "常量BL转包 委外
  cns_bf(2)   TYPE c VALUE 'BF',               "常量BF生产
  cns_bubm(4) TYPE c VALUE 'BUBM',           "常量BUBM物料转移过账
  cns_01(2)   TYPE c VALUE '01',               "常量01
  cns_02(2)   TYPE c VALUE '02',               "常量02
  cns_act(3)  TYPE c VALUE 'ACT',              "常量ACT成本核算结果对象
  cns_x(1)    TYPE c VALUE 'X',                "常量X
  cns_s(1)    TYPE c VALUE 'S',                "常量S
  cns_e(1)    TYPE c VALUE 'E'.                "常量e

DATA:it_hd        TYPE STANDARD TABLE OF t_hd,
     it_ckm3      TYPE STANDARD TABLE OF t_ckm3,
     it_kmlcr     TYPE STANDARD TABLE OF ckmlcr,
     it_fieldcatv TYPE STANDARD TABLE OF lvc_s_fcat.


DATA:wa_ckm3  TYPE t_ckm3.
DATA:g_per  TYPE mldoc-jahrper.


SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN:BEGIN OF BLOCK blk1 WITH FRAME  TITLE TEXT-001.
  SELECT-OPTIONS: s_werks FOR bseg-werks  OBLIGATORY.
  PARAMETERS: p_gjahr TYPE bkpf-gjahr OBLIGATORY DEFAULT sy-datum+0(4),
              p_monat TYPE bkpf-monat OBLIGATORY.
  SELECT-OPTIONS: s_matnr FOR mbew-matnr,
                  s_bklas FOR mbew-bklas.
SELECTION-SCREEN END OF BLOCK blk1.



START-OF-SELECTION.

  PERFORM frm_ini_data.
  PERFORM frm_get_data.
  PERFORM frm_edit_data.
  PERFORM frm_out_alv.

*&---------------------------------------------------------------------*
*& Form FRM_INI_DATA
*&---------------------------------------------------------------------*
*& 初期化处理
*&---------------------------------------------------------------------*
*& -->  p1        text
*&
*&---------------------------------------------------------------------*
FORM frm_ini_data .

  DATA:it_hd,
       it_ckm3,
       it_kmlcr,
       it_fieldcatv.

  CLEAR:wa_ckm3,g_per.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& 数据获取和处理
*&---------------------------------------------------------------------*
*& -->  p1        text
*&
*&---------------------------------------------------------------------*
FORM frm_get_data .

*  对象物料数据取得
  PERFORM frm_get_objdata.

*  KMLPP&KMLCR取得期初数量和期初标准成本
  PERFORM frm_get_bgdata.

*  MLDOC取得Material Ledger Document(期间出入库数据)
  PERFORM frm_get_mldoc.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_OBJDATA
*&---------------------------------------------------------------------*
*& 对象物料数据取得
*&---------------------------------------------------------------------*
*& -->  p1        text
*&
*&---------------------------------------------------------------------*
FORM frm_get_objdata .

  SELECT a~kalnr                                "成本估算编号
         a~bwkey AS werks                       "工厂
         a~matnr                                "物料
         c~maktx                                "物料描述
         b~bklas                                "评估类
*         D~BKBEZ                               "评估类描述
    INTO TABLE it_hd
    FROM ckmlhd AS a
      INNER JOIN mbew AS b
      ON a~matnr = b~matnr
      INNER JOIN makt AS c
      ON a~matnr = c~matnr
*      INNER JOIN T025T AS D
*      ON B~MATNR = D~BKLAS
    WHERE a~bwkey IN s_werks
      AND a~matnr IN s_matnr
      AND c~spras = '1'.
*      AND C~SPRAS = SY-LANGU.

  DELETE it_hd WHERE bklas NOT IN s_bklas.

* 对象数据不存在报错
  IF it_hd[] IS INITIAL.
    MESSAGE s006(zfi01).
    LEAVE LIST-PROCESSING.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_BGDATA
*&---------------------------------------------------------------------*
*& KMLPP&KMLCR取得期初数量和期初标准成本
*&---------------------------------------------------------------------*
*& -->  p1        text
*&
*&---------------------------------------------------------------------*
FORM frm_get_bgdata .

  DATA:lit_kalnr TYPE STANDARD TABLE OF t_kalnr,
       lit_kmlpp TYPE STANDARD TABLE OF ckmlpp,
       lwa_kmlpp TYPE ckmlpp,
       lwa_kmlcr TYPE ckmlcr,
       lwa_kalnr TYPE t_kalnr,
       l_bdatj   TYPE ckmlpp-bdatj,
       l_poper   TYPE ckmlpp-poper,
       lwa_hd    TYPE t_hd.

  l_bdatj = p_gjahr.
  l_poper = p_monat.

  CONCATENATE l_bdatj l_poper INTO g_per.

  REFRESH:it_kmlcr.

  LOOP AT it_hd INTO lwa_hd.
    CLEAR:lwa_kalnr.

    lwa_kalnr-kalnr = lwa_hd-kalnr.
    lwa_kalnr-bwkey = lwa_hd-werks.
    APPEND lwa_kalnr TO lit_kalnr.
  ENDLOOP.

  SORT lit_kalnr BY kalnr ASCENDING
                    bwkey ASCENDING.

  CALL FUNCTION 'CKMS_PERIOD_READ_WITH_ITAB'
    EXPORTING
      i_refresh_buffer        = ' '
*     I_READ_ONLY_BUFFER      = ' '
*     I_USE_BUFFER            = 'X'
*     I_BUILD_SMBEW           =
      i_bdatj_1               = l_bdatj
      i_poper_1               = l_poper
*     I_BDATJ_2               =
*     I_POPER_2               =
*     I_BDATJ_3               =
*     I_POPER_3               =
*     I_BETWEEN_1_AND_2       =
      i_untper                = '000'
*     I_CALL_BY_REPORTING     = ' '
*     I_NO_CHK_PERIODS_COMPLETE       = ' '
      i_enhance_categories    = ' '
      i_pp_cr_only            = 'X'
    TABLES
      t_kalnr                 = lit_kalnr
      t_ckmlpp                = lit_kmlpp
      t_ckmlcr                = it_kmlcr
*     T_MISS_CKMLPP           =
*     T_MISS_CKMLCR           =
    EXCEPTIONS
      no_data_found           = 1
      input_data_inconsistent = 2
      buffer_inconsistent     = 3
      OTHERS                  = 4.

  IF sy-subrc <> 0.

  ENDIF.

*   获得期初

  LOOP AT lit_kmlpp INTO lwa_kmlpp.
    CLEAR:
      wa_ckm3.
    wa_ckm3-kalnr = lwa_kmlpp-kalnr.
    wa_ckm3-gjahr = lwa_kmlpp-bdatj.
    wa_ckm3-monat = lwa_kmlpp-poper+1(2).
*      wa_ckm3-meins = lwa_kmlpp-meins.
    wa_ckm3-bgqty  = lwa_kmlpp-abkumo.
    wa_ckm3-sumqty = lwa_kmlpp-abkumo.
    wa_ckm3-edqty  = lwa_kmlpp-abkumo.
    COLLECT wa_ckm3 INTO it_ckm3.
  ENDLOOP.

*   获得期初金额

  LOOP AT it_kmlcr INTO lwa_kmlcr.
    CLEAR:wa_ckm3.
    wa_ckm3-kalnr = lwa_kmlcr-kalnr.
    wa_ckm3-gjahr = lwa_kmlcr-bdatj.
    wa_ckm3-monat = lwa_kmlcr-poper+1(2).
*      wa_ckm3-meins = lwa_kmlcr-meins.
    wa_ckm3-bgct1 = lwa_kmlcr-absalk3.
    wa_ckm3-bgct2 = lwa_kmlcr-absalk3.
*     累计库存
    wa_ckm3-sumct1 = lwa_kmlcr-absalk3.
    wa_ckm3-sumct2 = lwa_kmlcr-absalk3.
*     期末库存
    wa_ckm3-edct1  = lwa_kmlcr-absalk3.
    wa_ckm3-edct2  = lwa_kmlcr-absalk3.
    COLLECT wa_ckm3 INTO it_ckm3.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_MLDOC
*&---------------------------------------------------------------------*
*& MLDOC取得Material Ledger Document(期间出入库数据)
*&---------------------------------------------------------------------*
*& -->  p1        text
*&
*&---------------------------------------------------------------------*
FORM frm_get_mldoc .

  DATA:lit_doc TYPE STANDARD TABLE OF t_doc,
       lwa_doc TYPE t_doc.

  SELECT docref                               "凭证参考
         kalnr                                "成本估算编号
         jahrper                              "过账年份/期
         runref                               "成本核算运行参考
         categ                                "分类帐类别
         ptyp                                 "备选处理类型
         bewartgrp                            "运作类型组
         quant                                "交易数量
         meins                                "交易数量单位
         stval                                "交易库存价值
         prd                                  "价格差异
         budat                                "过帐日期
         belnr                                "凭证编号
         posnr                                "凭证项目
         awref                                "参考凭证号
         awitem                               "参考凭证行项目
         tcode                                "事务代码
    FROM mldoc
    INTO TABLE lit_doc
    FOR ALL ENTRIES IN it_hd
   WHERE jahrper = g_per
     AND kalnr = it_hd-kalnr.

*  AB          期初
*  EB          期末差异 成本结算时存在
*  ND
*  PC         价格变更
*  VN VF      消耗 生产
*  VN V+  2   消耗 余额(盘点701)
*  VN V+      消耗 价格重估只有差异
*  VN V+  1   消耗 601
*  VN VP  02  消耗 项目  221
*  VN VP      消耗 项目
*  VN VK  2   消耗 成本中心 201
*  VN VK      消耗 成本中心 价格重估
*  VN VL      消耗 转包
*  VN VUBM    消耗 物料转移过账
*  ZU BB      增加 采购订单
*  ZU B+      增加 采购
*  ZU BL      增加 转包 委外105
*  ZU BF      增加 生产
*  ZU BUBM    增加 物料转移过账

  LOOP AT lit_doc INTO lwa_doc.
    CLEAR:
      wa_ckm3.
    wa_ckm3-kalnr = lwa_doc-kalnr.
    wa_ckm3-gjahr = p_gjahr.
    wa_ckm3-monat = p_monat.

*   物料帐结果数据

    IF lwa_doc-runref = cns_act.
      CASE lwa_doc-categ.

*       编辑物料帐期初库存差异

        WHEN cns_ab.
          wa_ckm3-bgdif = lwa_doc-prd.
          wa_ckm3-bgct2 = lwa_doc-prd.

*         累计库存
          wa_ckm3-sumdif = lwa_doc-prd.
          wa_ckm3-sumct2 = lwa_doc-prd.
          COLLECT wa_ckm3 INTO it_ckm3.

*       编辑物料帐期末库存差异

        WHEN cns_eb.
          wa_ckm3-eddif = lwa_doc-prd * -1.
          wa_ckm3-edct2 = lwa_doc-prd * -1.
          COLLECT wa_ckm3 INTO it_ckm3.

*       编辑物料帐当期消耗差异金额
        WHEN cns_vn.

*         期末库存
          wa_ckm3-edqty  = lwa_doc-quant.
          wa_ckm3-edct1  = lwa_doc-stval.
          wa_ckm3-edct2  = lwa_doc-stval.

          CASE lwa_doc-ptyp.
            WHEN cns_vf.                       "消耗 生产

*             消耗 生产
              wa_ckm3-prdqty = lwa_doc-quant * -1.
              wa_ckm3-prdct1 = lwa_doc-stval * -1.
              wa_ckm3-prddif = lwa_doc-prd   * -1.
              wa_ckm3-prdct2 = wa_ckm3-prdct1 + wa_ckm3-prddif.

*             消耗汇总
              wa_ckm3-outqty = lwa_doc-quant * -1.
              wa_ckm3-outct1 = lwa_doc-stval * -1.
              wa_ckm3-outdif = lwa_doc-prd   * -1.
              wa_ckm3-outct2 = wa_ckm3-outct1 + wa_ckm3-outdif.
              COLLECT wa_ckm3 INTO it_ckm3.

            WHEN cns_vk.                       "消耗 成本中心

*             消耗 成本中心
              wa_ckm3-costqty = lwa_doc-quant * -1.
              wa_ckm3-costct1 = lwa_doc-stval * -1.
              wa_ckm3-costdif = lwa_doc-prd   * -1.
              wa_ckm3-costct2 = wa_ckm3-costct1 + wa_ckm3-costdif.

*             消耗汇总
              wa_ckm3-outqty = lwa_doc-quant * -1.
              wa_ckm3-outct1 = lwa_doc-stval * -1.
              wa_ckm3-outdif = lwa_doc-prd   * -1.
              wa_ckm3-outct2 = wa_ckm3-outct1 + wa_ckm3-outdif.
              COLLECT wa_ckm3 INTO it_ckm3.

            WHEN cns_vp.                       "消耗 项目

*             消耗 项目
              wa_ckm3-itemqty = lwa_doc-quant * -1.
              wa_ckm3-itemct1 = lwa_doc-stval * -1.
              wa_ckm3-itemdif = lwa_doc-prd   * -1.
              wa_ckm3-itemct2 = wa_ckm3-itemct1 + wa_ckm3-itemdif.

*             消耗汇总
              wa_ckm3-outqty = lwa_doc-quant * -1.
              wa_ckm3-outct1 = lwa_doc-stval * -1.
              wa_ckm3-outdif = lwa_doc-prd   * -1.
              wa_ckm3-outct2 = wa_ckm3-outct1 + wa_ckm3-outdif.
              COLLECT wa_ckm3 INTO it_ckm3.

            WHEN cns_vl.                       "消耗 委外

*             消耗 委外
              wa_ckm3-othqty = lwa_doc-quant * -1.
              wa_ckm3-othct1 = lwa_doc-stval * -1.
              wa_ckm3-othdif = lwa_doc-prd   * -1.
              wa_ckm3-othct2 = wa_ckm3-othct1 + wa_ckm3-othct2.

*             消耗汇总
              wa_ckm3-outqty = lwa_doc-quant * -1.
              wa_ckm3-outct1 = lwa_doc-stval * -1.
              wa_ckm3-outdif = lwa_doc-prd   * -1.
              wa_ckm3-outct2 = wa_ckm3-outct1 + wa_ckm3-outdif.
              COLLECT wa_ckm3 INTO it_ckm3.
            WHEN OTHERS.                      "消耗 其他盘点701 601 物料转移过账等

*             消耗 委外
              wa_ckm3-qitqty = lwa_doc-quant * -1.
              wa_ckm3-qitct1 = lwa_doc-stval * -1.
              wa_ckm3-qitdif = lwa_doc-prd   * -1.
              wa_ckm3-qitct2 = wa_ckm3-qitct1 + wa_ckm3-qitdif.

*             消耗汇总
              wa_ckm3-outqty = lwa_doc-quant * -1.
              wa_ckm3-outct1 = lwa_doc-stval * -1.
              wa_ckm3-outdif = lwa_doc-prd   * -1.
              wa_ckm3-outct2 = wa_ckm3-outct1 + wa_ckm3-outdif.
              COLLECT wa_ckm3 INTO it_ckm3.
          ENDCASE.

        WHEN cns_zu.                            "收货

*         收货
          wa_ckm3-inqty = lwa_doc-quant.
          wa_ckm3-inct1 = lwa_doc-stval.
          wa_ckm3-indif = lwa_doc-prd.
          wa_ckm3-inct2 = wa_ckm3-inct1 + wa_ckm3-indif.

*         累计库存
          wa_ckm3-sumqty = lwa_doc-quant.
          wa_ckm3-sumct1 = lwa_doc-stval.
          wa_ckm3-sumdif = lwa_doc-prd.
          wa_ckm3-sumct2 = wa_ckm3-sumct1 + wa_ckm3-sumdif.
          COLLECT wa_ckm3 INTO it_ckm3.
        WHEN OTHERS.

*         ND未分配的场合

*         累计库存
          IF lwa_doc-categ = cns_nd.
            wa_ckm3-sumdif = lwa_doc-prd.
            wa_ckm3-sumct2 = lwa_doc-prd.
            wa_ckm3-opndif = lwa_doc-prd.
            wa_ckm3-opnct2 = wa_ckm3-opndif.
            COLLECT wa_ckm3 INTO it_ckm3.
          ENDIF.
      ENDCASE.

      CONTINUE.

    ENDIF.

    CHECK lwa_doc-runref <> cns_act.

    CASE lwa_doc-categ.
      WHEN cns_vn.
*       期末库存
        wa_ckm3-edqty  = lwa_doc-quant.
        wa_ckm3-edct1  = lwa_doc-stval.
        wa_ckm3-edct2  = lwa_doc-stval.

        CASE lwa_doc-ptyp.

          WHEN cns_vf.                       "消耗 生产

*           消耗 生产
            wa_ckm3-prdqty = lwa_doc-quant * -1.
            wa_ckm3-prdct1 = lwa_doc-stval * -1.
            wa_ckm3-prddif = lwa_doc-prd   * -1.
            wa_ckm3-prdct2 = wa_ckm3-prdct1 + wa_ckm3-prddif.

*           消耗汇总
            wa_ckm3-outqty = lwa_doc-quant * -1.
            wa_ckm3-outct1 = lwa_doc-stval * -1.
            wa_ckm3-outdif = lwa_doc-prd   * -1.
            wa_ckm3-outct2 = wa_ckm3-outct1 + wa_ckm3-outdif.
            COLLECT wa_ckm3 INTO it_ckm3.

          WHEN cns_vk.                       "消耗 成本中心

*           消耗 成本中心
            wa_ckm3-costqty = lwa_doc-quant * -1.
            wa_ckm3-costct1 = lwa_doc-stval * -1.
            wa_ckm3-costdif = lwa_doc-prd   * -1.
            wa_ckm3-costct2 = wa_ckm3-costct1 + wa_ckm3-costdif.

*           消耗汇总
            wa_ckm3-outqty = lwa_doc-quant * -1.
            wa_ckm3-outct1 = lwa_doc-stval * -1.
            wa_ckm3-outdif = lwa_doc-prd   * -1.
            wa_ckm3-outct2 = wa_ckm3-outct1 + wa_ckm3-outdif.
            COLLECT wa_ckm3 INTO it_ckm3.

          WHEN cns_vp.                       "消耗 项目

*           消耗 项目
            wa_ckm3-itemqty = lwa_doc-quant * -1.
            wa_ckm3-itemct1 = lwa_doc-stval * -1.
            wa_ckm3-itemdif = lwa_doc-prd   * -1.
            wa_ckm3-itemct2 = wa_ckm3-itemct1 + wa_ckm3-itemdif.

*           消耗汇总
            wa_ckm3-outqty = lwa_doc-quant * -1.
            wa_ckm3-outct1 = lwa_doc-stval * -1.
            wa_ckm3-outdif = lwa_doc-prd   * -1.
            wa_ckm3-outct2 = wa_ckm3-outct1 + wa_ckm3-outdif.
            COLLECT wa_ckm3 INTO it_ckm3.

          WHEN cns_vl.                       "消耗 委外

*           消耗 委外
            wa_ckm3-othqty = lwa_doc-quant * -1.
            wa_ckm3-othct1 = lwa_doc-stval * -1.
            wa_ckm3-othdif = lwa_doc-prd   * -1.
            wa_ckm3-othct2 = wa_ckm3-othct1 + wa_ckm3-othct2.

*           消耗汇总
            wa_ckm3-outqty = lwa_doc-quant * -1.
            wa_ckm3-outct1 = lwa_doc-stval * -1.
            wa_ckm3-outdif = lwa_doc-prd   * -1.
            wa_ckm3-outct2 = wa_ckm3-outct1 + wa_ckm3-outdif.
            COLLECT wa_ckm3 INTO it_ckm3.

          WHEN OTHERS.                         "消耗 其他盘点701 601 物料转移过账等

*           消耗 委外
            wa_ckm3-qitqty = lwa_doc-quant * -1.
            wa_ckm3-qitct1 = lwa_doc-stval * -1.
            wa_ckm3-qitdif = lwa_doc-prd   * -1.
            wa_ckm3-qitct2 = wa_ckm3-qitct1 + wa_ckm3-qitdif.

*           消耗汇总
            wa_ckm3-outqty = lwa_doc-quant * -1.
            wa_ckm3-outct1 = lwa_doc-stval * -1.
            wa_ckm3-outdif = lwa_doc-prd   * -1.
            wa_ckm3-outct2 = wa_ckm3-outct1 + wa_ckm3-outdif.
            COLLECT wa_ckm3 INTO it_ckm3.
        ENDCASE.

      WHEN cns_zu.                            "收货
*       期末库存
        wa_ckm3-edqty  = lwa_doc-quant.
        wa_ckm3-edct1  = lwa_doc-stval.
        wa_ckm3-edct2  = lwa_doc-stval.

*       收货
        wa_ckm3-inqty = lwa_doc-quant.
        wa_ckm3-inct1 = lwa_doc-stval.
        wa_ckm3-indif = lwa_doc-prd.
        wa_ckm3-inct2 = wa_ckm3-inct1 + wa_ckm3-indif.

*       累计库存
        wa_ckm3-sumqty = lwa_doc-quant.
        wa_ckm3-sumct1 = lwa_doc-stval.
        wa_ckm3-sumdif = lwa_doc-prd.
        wa_ckm3-sumct2 = wa_ckm3-sumct1 + wa_ckm3-sumdif.
        COLLECT wa_ckm3 INTO it_ckm3.
      WHEN OTHERS.

*       PC价格重估的场合

*       累计库存
        IF lwa_doc-categ = cns_pc.
          wa_ckm3-sumct1 = lwa_doc-stval.
          wa_ckm3-sumdif = lwa_doc-prd.
          wa_ckm3-sumct2 = wa_ckm3-sumct1 + wa_ckm3-sumdif.       "收货
*         期末库存
          wa_ckm3-edct1  = lwa_doc-stval.
          wa_ckm3-edct2  = lwa_doc-stval.
          COLLECT wa_ckm3 INTO it_ckm3.
        ENDIF.
    ENDCASE.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_EDIT_DATA
*&---------------------------------------------------------------------*
*& 数据编辑处理
*&---------------------------------------------------------------------*
*& -->  p1        text
*&
*&---------------------------------------------------------------------*
FORM frm_edit_data .

  DATA:
    lit_t025t TYPE STANDARD TABLE OF t025t,
    lwa_t025t TYPE t025t,
    lwa_hd    TYPE t_hd,
    lwa_kmlcr TYPE ckmlcr,
    lit_ckm3  TYPE STANDARD TABLE OF t_ckm3.

  SORT it_hd BY kalnr ASCENDING.

  SELECT *
    FROM t025t
    INTO TABLE lit_t025t
   WHERE spras = '1'.

  SORT lit_t025t BY bklas ASCENDING.
  SORT it_kmlcr BY kalnr ASCENDING.

  lit_ckm3[] = it_ckm3[].

  REFRESH:it_ckm3.

  LOOP AT lit_ckm3 INTO wa_ckm3.
*   取得物料名称
    CLEAR:lwa_hd.
    READ TABLE it_hd INTO lwa_hd
      WITH KEY kalnr = wa_ckm3-kalnr BINARY SEARCH.

*   取得评估类名称
    CLEAR:lwa_t025t.
    READ TABLE lit_t025t INTO lwa_t025t
      WITH KEY bklas = lwa_hd-bklas BINARY SEARCH.

*   取得
    CLEAR:lwa_kmlcr.

    READ TABLE it_kmlcr INTO lwa_kmlcr
      WITH KEY kalnr = wa_ckm3-kalnr BINARY SEARCH.
    wa_ckm3-cost1 = lwa_kmlcr-stprs.          "标准价格
    wa_ckm3-cost2 = lwa_kmlcr-pvprs.          "实际价格
    wa_ckm3-peinh = lwa_kmlcr-peinh.          "价格单位
    wa_ckm3-werks = lwa_hd-werks.
    wa_ckm3-matnr = lwa_hd-matnr.

    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        input  = wa_ckm3-matnr
      IMPORTING
        output = wa_ckm3-matnr.

    wa_ckm3-maktx = lwa_hd-maktx.
    wa_ckm3-bklas = lwa_hd-bklas.
    wa_ckm3-bkbez = lwa_t025t-bkbez.
    APPEND wa_ckm3 TO it_ckm3.
  ENDLOOP.

  SORT it_ckm3 BY matnr ASCENDING.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_OUT_ALV
*&---------------------------------------------------------------------*
*& ALV显示
*&---------------------------------------------------------------------*
*& -->  p1        text
*&
*&---------------------------------------------------------------------*
FORM frm_out_alv .
  DATA: ls_layout TYPE lvc_s_layo,
        l_pfst    TYPE  slis_formname,
        l_uscmd   TYPE   slis_formname.
* 设置ALV field

  REFRESH:it_fieldcatv.

  PERFORM frm_set_dyn_field USING:
*          TEXT-H02 TEXT-D02 ' ' ' ' '45',     "数量单位
          'WERKS'   '工厂' ' ' ' ' '4',      "工厂
          'GJAHR'   '会计年度' ' ' ' ' '6',      "会计年度
          'MONAT'   '期间' ' ' ' ' '4',      "期间
          'MATNR'   '物料' ' ' 'X' '10',     "物料
          'MAKTX'   '物料描述' ' ' ' ' '6',      "物料描述
          'BKLAS'   '评估类' ' ' ' ' '25',     "评估类
          'BKBEZ'   '评估类描述' ' ' ' ' '16',     "评估类描述
          'COST1'   '标准价格' ' ' ' ' '18',     "标准价格
          'COST2'   '实际价格' ' ' ' ' '18',     "实际价格
          'PEINH'   '价格单位' ' ' ' ' '18',     "价格单位
          'BGQTY'   '期初库存数量' ' ' ' ' '18',     "期初库存数量
          'BGCT1'   '期初标准成本' ' ' ' ' '18',     "期初标准成本
          'BGDIF'   '期初差异金额' ' ' ' ' '18',     "期初差异金额
          'BGCT2'   '期初实际成本' ' ' ' ' '18',     "期初实际成本
          'INQTY'   '本期收货数量' ' ' ' ' '18',     "本期收货数量
          'INCT1'   '本期收货标准成本' ' ' ' ' '18',     "本期收货标准成本
          'INDIF'   '本期收货差异金额' ' ' ' ' '18',     "本期收货差异金额
          'INCT2'   '本期收货实际成本' ' ' ' ' '18',     "本期收货实际成本
          'SUMQTY'  '累计库存数量' ' ' ' ' '18',     "累计库存数量
          'SUMCT1'  '累计库存标准成本' ' ' ' ' '18',     "累计库存标准成本
          'SUMDIF'  '累计库存差异金额' ' ' ' ' '18',     "累计库存差异金额
          'SUMCT2'  '累计库存实际成本' ' ' ' ' '18',     "累计库存实际成本
          'OUTQTY'  '消耗数量' ' ' ' ' '18',     "消耗数量
          'OUTCT1'  '消耗标准成本' ' ' ' ' '18',     "消耗标准成本
          'OUTDIF'  '消耗差异金额' ' ' ' ' '18',     "消耗差异金额
          'OUTCT2'  '消耗实际成本' ' ' ' ' '18',     "消耗实际成本
          'PRDQTY'  '生产领用数量' ' ' ' ' '18',     "生产领用数量
          'PRDCT'   '生产领用标准成本' ' ' ' ' '18',     "生产领用标准成本
          'PRDDIF'  '生产领用差异金额' ' ' ' ' '18',     "生产领用差异金额
          'PRDCT2'  '生产领用实际成本' ' ' ' ' '18',     "生产领用实际成本
          'COSTQTY' '成本中心领用数量' ' ' ' ' '18',     "成本中心领用数量
          'COSTCT1' '成本中心领用标准成本' ' ' ' ' '18',     "成本中心领用标准成本
          'COSTDIF' '成本中心领用差异金额' ' ' ' ' '18',     "成本中心领用差异金额
          'COSTCT2' '成本中心领用实际成本' ' ' ' ' '18',     "成本中心领用实际成本
          'ITEMQTY' '项目领用数量' ' ' ' ' '18',     "项目领用数量
          'ITEMCT1' '项目领用标准成本' ' ' ' ' '18',     "项目领用标准成本
          'ITEMDIF' '项目领用差异金额' ' ' ' ' '18',     "项目领用差异金额
          'ITEMCT2' '项目领用实际成本' ' ' ' ' '18',     "项目领用实际成本
          'OTHQTY'  '委外数量' ' ' ' ' '18',     "委外数量
          'OTHCT1'  '委外标准成本' ' ' ' ' '18',     "委外标准成本
          'OTHDIF'  '委外差异金额' ' ' ' ' '18',     "委外差异金额
          'OTHCT2'  '委外实际成本' ' ' ' ' '18',     "委外实际成本
          'EDQTY'   '期末库存数量' ' ' ' ' '18',     "其他数量
          'EDCT1'   '期末库存标准成本' ' ' ' ' '18',     "其他标准成本
          'EDDIF'   '期末库存差异金额' ' ' ' ' '18',     "其他差异金额
          'EDCT2'   '期末库存实际成本' ' ' ' ' '18',     "其他实际成本
          'QITQTY'  '其他数量' ' ' ' ' '18',     "期末库存数量
          'QITCT1'  '其他标准成本' ' ' ' ' '18',     "期末库存标准成本
          'QITDIF'  '其他差异金额' ' ' ' ' '18',     "期末库存差异金额
          'QITCT2'  '其他实际成本' ' ' ' ' '18',     "期末库存实际成本
          'OPNDIF'  '未分配差异金额' ' ' ' ' '18',     "未分配差异金额
          'OPNCT2'  '未分配实际成本' ' ' ' ' '18',     "未分配实际成本
          'KALNR'   '成本估算编号'  'X' ' ' '6'.      "成本估算编号
  ls_layout-zebra        = 'X'.               "颜色间隔
  ls_layout-cwidth_opt   = 'X'.              "自动调整宽度
  ls_layout-detailinit   = 'X'.
  l_pfst  = 'SET_PF_STATUS' .
  l_uscmd = 'USER_COMMAND' .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-cprog
      is_layout_lvc            = ls_layout
      i_callback_pf_status_set = l_pfst
      i_callback_user_command  = l_uscmd
      it_fieldcat_lvc          = it_fieldcatv
      i_save                   = cns_a
    TABLES
      t_outtab                 = it_ckm3
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE cns_s NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE cns_e.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_DYN_FIELD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  P_NAME         字段名
*& -->  P_TEXT         字段描述
*& -->  P_ICON         ICON
*& -->  P_HOT          HOT
*& -->  P_LEN          len
*&---------------------------------------------------------------------*
FORM frm_set_dyn_field  USING    p_name TYPE string
                                 p_text TYPE string
                                 p_icon TYPE any
                                 p_hot  TYPE any
                                 p_len  TYPE any.

  DATA:lwa_fieldcatv TYPE lvc_s_fcat.

  READ TABLE it_fieldcatv TRANSPORTING NO FIELDS WITH KEY fieldname = p_name.
  CHECK sy-subrc NE 0.

  CLEAR:lwa_fieldcatv.
  lwa_fieldcatv-fieldname = p_name .
*  LWA_FIELDCATV-REPTEXT   = P_TEXT.
  lwa_fieldcatv-scrtext_l = p_text.
  lwa_fieldcatv-scrtext_m = p_text.
  lwa_fieldcatv-scrtext_s = p_text.
*  LWA_FIELDCATV-ICON      = P_ICON.
*  LWA_FIELDCATV-HOTSPOT   = P_HOT.
*  LWA_FIELDCATV-OUTPUTLEN = P_LEN.

* 物料编号设置为热键
  IF p_name = 'MATNR'.
    lwa_fieldcatv-hotspot = cns_x.
    lwa_fieldcatv-inttype = 'C'.
    lwa_fieldcatv-intlen  = '40'.
  ENDIF.
  APPEND lwa_fieldcatv TO it_fieldcatv.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form set_pf_status
*&---------------------------------------------------------------------*
*& STATUS_SET
*&---------------------------------------------------------------------*
*& -->  rt_extab
*&---------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD_FULLSCREEN' EXCLUDING rt_extab .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
*& USER_COMMAND
*&---------------------------------------------------------------------*
*& -->  rt_extab
*&---------------------------------------------------------------------*
FORM user_command  USING r_ucomm LIKE sy-ucomm
                                   rs_selfield TYPE slis_selfield.

  DATA:lit_bdc  TYPE STANDARD TABLE OF bdcdata,
       lwa_bdc  TYPE bdcdata,
       l_opt    TYPE ctu_params,
       lwa_ckm3 TYPE t_ckm3.

* 点击物料编号,执行CKM3跳转

  IF r_ucomm = '&IC1' AND rs_selfield-fieldname = 'MATNR'.

    CLEAR:lwa_ckm3.

    READ TABLE it_ckm3 INTO lwa_ckm3 INDEX rs_selfield-tabindex .
    IF lwa_ckm3-matnr IS NOT INITIAL AND
       lwa_ckm3-werks IS NOT INITIAL AND
       lwa_ckm3-gjahr IS NOT INITIAL AND
       lwa_ckm3-monat IS NOT INITIAL.

      REFRESH:lit_bdc.
      CLEAR:lwa_bdc.

      lwa_bdc-program = 'SAPLCKM8H'.
      lwa_bdc-dynpro  = '0055'.
      lwa_bdc-dynbegin = cns_x.
      lwa_bdc-fnam = 'MLKEY-POPER'.
      lwa_bdc-fval = lwa_ckm3-monat.
      APPEND lwa_bdc TO lit_bdc.

      l_opt-dismode = 'E'.
      l_opt-defsize = 'X'.
      SET PARAMETER ID 'MAT'  FIELD lwa_ckm3-matnr.
      SET PARAMETER ID 'WRK'  FIELD lwa_ckm3-werks.
      SET PARAMETER ID 'BDTJ' FIELD lwa_ckm3-gjahr.
      SET PARAMETER ID 'POPR' FIELD lwa_ckm3-monat.

*      CALL TRANSACTION 'CKM3' USING lit_bdc
*        AND SKIP FIRST SCREEN.
      TRY.
          CALL TRANSACTION 'CKM3' WITH AUTHORITY-CHECK
                                  USING lit_bdc OPTIONS FROM l_opt.
        CATCH cx_sy_authorization_error ##NO_HANDLER.
      ENDTRY.
    ENDIF.
  ELSE.
    rs_selfield-refresh = 'X'.
  ENDIF.

ENDFORM.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值