CK11N和CK24_滚算成本和发布成本

6 篇文章 1 订阅
CK11N和CK24_滚算成本和发布成本
一、功能介绍
  1. 先使用CK11N进行成本滚算

    在这里插入图片描述

  2. 再使用CK24发布成本

    在这里插入图片描述

二、程序代码
  1. 程序代码:

    *&---------------------------------------------------------------------*
    *& Report ZCOR001
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    REPORT zcor001.
    
    TYPES: BEGIN OF ty_data ,
             werks     TYPE marc-werks,        "工厂
             matnr     TYPE mara-matnr,        "物料
             maktx     TYPE makt-maktx,        "物料描述
             mtart     TYPE mara-mtart,        "物料类型
             mtbez     TYPE t134t-mtbez,       "物料类型描述
             knumh     TYPE a017-knumh,        "条件记录号
             zcgjg(15) TYPE p DECIMALS 2,      "最新采购价格  KONP-KBETR/KONP-KPEIN
             kschl     TYPE a017-kschl,        "条件类型
             datab     TYPE a017-datab,        "采购价有效从
             datbi     TYPE a017-datbi,        "采购价有效至
             lifnr     TYPE a017-lifnr,        "供应商
             gstrp     TYPE afko-gstrp,        "生产订单开始日期
             zbzj(15)  TYPE p DECIMALS 2,      "标准价 : MBEW-STPRS/MBEW-PEINH
             lplpr     TYPE mbew-lplpr,        "当前计划价格
             pdatl     TYPE mbew-pdatl,        "当前会计年
             pprdl     TYPE mbew-pprdl,        "当前会计期间
             aufnr     TYPE afko-aufnr,        "生产订单
             "添加消息字段,用于记录成本估算的  BY HAND YLX 20230213 BEGIN OF
             flag1     TYPE char1,
             msage     TYPE char50,
             "添加消息字段,用于记录成本估算的  BY HAND YLX 20230213 END OF
           END OF ty_data .
    
    
    *最新采购价格
    TYPES :BEGIN OF ty_a017,
             matnr     TYPE a017-matnr,       "物料
             kbetr     TYPE konp-kbetr,       "最新采购价格 分子
             kpein     TYPE konp-kpein,       "最新采购价格 分母
             zcgjg(15) TYPE p DECIMALS 2,     "最新采购价格:KONP-KBETR/KONP-KPEIN
             kschl     TYPE a017-kschl,       "条件类型
             datab     TYPE a017-datab,       "采购价有效从
             datbi     TYPE a017-datbi,       "采购价有效至
             lifnr     TYPE a017-lifnr,       "供应商
           END OF ty_a017 .
    
    *物料类型描述
    TYPES : BEGIN OF ty_t134t,
              mtart TYPE t134t-mtart,
              mtbez TYPE t134t-mtbez,
            END OF ty_t134t.
    
    *标准价
    TYPES: BEGIN OF ty_mbew,
             matnr    TYPE mbew-matnr,
             bwkey    TYPE mbew-bwkey,
             stprs    TYPE mbew-stprs,        "标准价分子
             peinh    TYPE mbew-peinh,        "标准价分母
             zbzj(15) TYPE p DECIMALS 2,      "标准价 : MBEW-STPRS/MBEW-PEINH
             lplpr    TYPE mbew-lplpr,        "当前计划价格
             pdatl    TYPE mbew-pdatl,        "当前会计年
             pprdl    TYPE mbew-pprdl,        "当前会计期间
           END OF ty_mbew.
    
    *生产订单日期
    TYPES: BEGIN OF ty_afko,
             plnbez TYPE afko-plnbez,
             gstrp  TYPE afko-gstrp,
             aufnr  TYPE afko-aufnr,
           END OF ty_afko .
    
    DATA: gt_data  TYPE TABLE OF ty_data,
          gt_a017  TYPE TABLE OF ty_a017,
          gt_t134t TYPE TABLE OF ty_t134t,
          gt_mbew  TYPE TABLE OF ty_mbew,
          gt_afko  TYPE TABLE OF ty_afko,
          gs_data  TYPE ty_data,
          gs_a017  TYPE ty_a017,
          gs_t134t TYPE ty_t134t,
          gs_mbew  TYPE ty_mbew,
          gs_afko  TYPE  ty_afko
          .
    
    DATA : gv_year  TYPE faglflext-ryear,
           gv_month TYPE bkpf-monat,
           gv_date  LIKE sy-datum.
    
    *ALV控制
    DATA: gt_fieldcat TYPE TABLE OF lvc_s_fcat,    " ALV 控制: 字段目录
          gs_fieldcat TYPE lvc_s_fcat,             " ALV 控制: 字段目录
          gs_layout   TYPE lvc_s_layo.             " ALV 控制: 字段目录
    
    
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001 .
    PARAMETERS:
      p_werks TYPE marc-werks OBLIGATORY,                  "工厂
      p_date  TYPE afko-gstrp OBLIGATORY,                  "日期
      g_parts TYPE c RADIOBUTTON GROUP grp1 DEFAULT 'X',   "零件
      g_comp  TYPE c RADIOBUTTON GROUP grp1                "整车
      .
    PARAMETERS :p_a TYPE c AS CHECKBOX.
    SELECTION-SCREEN END OF BLOCK  b1 .
    
    
    
    
    START-OF-SELECTION.
      PERFORM frm_get_date .
      IF g_parts IS NOT INITIAL .
        PERFORM frm_parts_get_data .
        PERFORM frm_parts_edit_data .
    
      ELSEIF g_comp IS NOT INITIAL .
        PERFORM frm_comp_get_data  .
        PERFORM frm_comp_edit_data .
      ENDIF.
      IF p_a = 'X'.
        PERFORM frm_bapi.
      ENDIF.
      PERFORM frm_show_data .
    
    END-OF-SELECTION.
    
    
    *&---------------------------------------------------------------------*
    *& Form FRM_GET_DATE
    *&---------------------------------------------------------------------*
    *& 初始化起止日期
    *&---------------------------------------------------------------------*
    FORM frm_get_date.
      gv_year = p_date+0(4).
      gv_month = ( p_date+4(2) + 1 ) MOD 12 .
      CONCATENATE gv_year gv_month '01' INTO gv_date .
    
      CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
        EXPORTING
          i_date = gv_date
        IMPORTING
          e_date = gv_date.
    ENDFORM .
    
    *&---------------------------------------------------------------------*
    *& Form FRM_GET_PARTS_DATA
    *&---------------------------------------------------------------------*
    *& 获取零件的相关数据
    *&---------------------------------------------------------------------*
    FORM frm_parts_get_data .
      CLEAR : gt_a017,gt_t134t ,gt_mbew,gt_data .
      SELECT marc~werks,
             mara~matnr,
             makt~maktx,
             mara~mtart
        INTO CORRESPONDING FIELDS OF TABLE @gt_data
        FROM marc
          INNER JOIN mara ON mara~matnr = marc~matnr
          LEFT JOIN makt ON makt~matnr = marc~matnr
        WHERE marc~werks = @p_werks
          AND mara~mtart IN ('Z001','Z002', 'Z006' ,'Z010')
          AND makt~spras = @sy-langu
      .
    
      IF gt_data IS NOT INITIAL .
    
    *  读取物料类型描述
        SELECT t134t~mtart,
               t134t~mtbez
          INTO TABLE @gt_t134t
          FROM t134t
            FOR ALL ENTRIES IN @gt_data
          WHERE mtart = @gt_data-mtart
            AND spras = @sy-langu
        .
    
        "按优先级获取 gt_a017 的数据
        PERFORM frm_get_a017_data.
    
        "读取 MBEW 中的数据
        SELECT
               mbew~matnr,
               mbew~stprs,
               mbew~peinh,
               mbew~lplpr,
               mbew~pdatl,
               mbew~pprdl
          INTO CORRESPONDING FIELDS OF TABLE @gt_mbew
          FROM mbew
            FOR ALL ENTRIES IN @gt_data
          WHERE bwkey = @gt_data-werks
           AND matnr = @gt_data-matnr
        .
      ENDIF.
    ENDFORM.
    
    
    *&---------------------------------------------------------------------*
    *& Form FRM_EDIT_PART_DATA
    *&---------------------------------------------------------------------*
    *& 零件:编辑获取到的数据
    *&---------------------------------------------------------------------*
    FORM frm_parts_edit_data .
    
      "维护最新采购价格
      IF  gt_a017 IS NOT INITIAL .
        LOOP AT  gt_a017 ASSIGNING FIELD-SYMBOL(<ls_a017>) .
          IF <ls_a017>-kpein <> 0 .
            <ls_a017>-zcgjg = <ls_a017>-kbetr / <ls_a017>-kpein.
          ENDIF.
        ENDLOOP.
    
        "取 最小的 最新采购价格
        SORT gt_a017 BY matnr zcgjg .
        DELETE ADJACENT DUPLICATES FROM gt_a017 COMPARING matnr.
      ENDIF.
    
    
    
      "维护 GT_DATA 内的数据
      IF  gt_data IS INITIAL .
        EXIT.
      ELSE.
        SORT gt_t134t BY mtart .
        SORT gt_a017  BY matnr .
        SORT gt_mbew  BY matnr.
    
        LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<ls_data>).
          "读取内表 GT_A017
          IF gt_a017 IS NOT INITIAL .
            READ TABLE gt_a017 INTO gs_a017 WITH  KEY matnr = <ls_data>-matnr BINARY SEARCH  .
            IF sy-subrc = 0.
              <ls_data>-zcgjg =  gs_a017-zcgjg   .
              <ls_data>-kschl =  gs_a017-kschl   .
              <ls_data>-datab =  gs_a017-datab   .
              <ls_data>-datbi =  gs_a017-datbi   .
              <ls_data>-lifnr =  gs_a017-lifnr   .
            ENDIF.
            "若最新采购订单为 0 则删除该条数据
            IF  <ls_data>-zcgjg = 0.
              DELETE gt_data WHERE matnr =  <ls_data>-matnr .
              CONTINUE.
            ENDIF.
    
          ENDIF.
    
          "读取内表 GT_MBEW
          IF gt_mbew IS NOT INITIAL .
            READ TABLE gt_mbew INTO gs_mbew WITH KEY matnr = <ls_data>-matnr BINARY SEARCH .
            IF sy-subrc = 0 .
              IF gs_mbew-peinh  <> 0.
                <ls_data>-zbzj =    gs_mbew-stprs / gs_mbew-peinh .
              ENDIF.
              <ls_data>-lplpr  =    gs_mbew-lplpr.
              <ls_data>-pdatl  =    gs_mbew-pdatl.
              <ls_data>-pprdl  =    gs_mbew-pprdl.
            ENDIF.
            "判断最新采购价格时候等于标准价
            IF <ls_data>-zcgjg = <ls_data>-zbzj.
              DELETE gt_data WHERE matnr =  <ls_data>-matnr .
              CONTINUE.
            ENDIF.
    
          ENDIF.
    
          "读取内表 GT_T134T
          IF gt_t134t IS NOT INITIAL .
            READ TABLE gt_t134t INTO gs_t134t WITH KEY mtart = <ls_data>-mtart BINARY SEARCH .
            IF sy-subrc = 0 .
              <ls_data>-mtbez = gs_t134t-mtbez .
            ENDIF.
          ENDIF.
    
        ENDLOOP.
      ENDIF.
    ENDFORM.
    
    
    
    *&---------------------------------------------------------------------*
    *& Form FRM_GET_A017_DATA
    *&---------------------------------------------------------------------*
    *&  按 指定的优先级 读取最新采购价格相关数据
    *&---------------------------------------------------------------------*
    FORM frm_get_a017_data .
    
      "读取 a017 的数据
      SELECT
             a017~matnr,
             konp~kbetr,
             konp~kpein,
             a017~kschl,
             a017~datab,
             a017~datbi,
             a017~lifnr
        INTO CORRESPONDING FIELDS OF TABLE @gt_a017
        FROM a017
          LEFT JOIN konp ON konp~knumh = a017~knumh
          FOR ALL ENTRIES IN @gt_data
        WHERE a017~datab <= @p_date
          AND a017~datbi >= @p_date
          AND a017~werks  = @gt_data-werks
          AND       matnr = @gt_data-matnr
      .
    
      "读取 a901 的数据
      IF gt_a017 IS INITIAL .
        SELECT
               a901~matnr,
               konp~kbetr,
               konp~kpein,
               a901~kschl,
               a901~datab,
               a901~datbi,
               a901~lifnr
        INTO CORRESPONDING FIELDS OF TABLE @gt_a017
        FROM a901
          LEFT JOIN konp ON konp~knumh = a901~knumh
          FOR ALL ENTRIES IN @gt_data
        WHERE a901~datab <= @p_date
          AND a901~datbi >= @p_date
          AND a901~werks  = @gt_data-werks
          AND       matnr = @gt_data-matnr
        .
    
        "读取 a903 的数据
        IF gt_a017 IS INITIAL .
    
          SELECT
                  a903~matnr,
                  konp~kbetr,
                  konp~kpein,
                  a903~kschl,
                  a903~datab,
                  a903~datbi,
                  a903~lifnr
          INTO CORRESPONDING FIELDS OF TABLE @gt_a017
          FROM a903
            LEFT JOIN konp ON konp~knumh = a903~knumh
            FOR ALL ENTRIES IN @gt_data
          WHERE a903~datab <= @p_date
            AND a903~datbi >= @p_date
            AND a903~werks  = @gt_data-werks
            AND       matnr = @gt_data-matnr
          .
    
        ELSEIF gt_a017 IS INITIAL .
          MESSAGE '未获取到 最新采购价格 等相关数据!' TYPE 'E'.
        ENDIF.
    
      ENDIF.
    
    ENDFORM.
    
    
    *&---------------------------------------------------------------------*
    *& Form FRM_GET_PARTS_DATA
    *&---------------------------------------------------------------------*
    *& 获取 整车 的相关数据
    *&---------------------------------------------------------------------*
    FORM frm_comp_get_data .
      CLEAR: gt_data ,gt_mbew,gt_t134t .
      "获取基础数据
      SELECT
             marc~werks,
             marc~matnr,
             mara~mtart,
             makt~maktx
        INTO CORRESPONDING FIELDS OF TABLE @gt_data
        FROM marc
          INNER JOIN mara ON mara~matnr = marc~matnr
          LEFT  JOIN makt ON makt~matnr  = marc~matnr
        WHERE mara~mtart IN ( 'Z003' , 'Z004' )
          AND marc~werks = @p_werks
          AND makt~spras = @sy-langu
      .
    
      IF gt_data IS NOT INITIAL .
    
        "读取生产订单日期
        SELECT
              afko~plnbez,
              afko~gstrp,
              afko~aufnr
          INTO CORRESPONDING FIELDS OF TABLE @gt_afko
          FROM afko
            INNER JOIN aufk ON aufk~aufnr = afko~aufnr
            FOR ALL ENTRIES IN @gt_data
          WHERE aufk~werks  = @gt_data-werks
            AND afko~gstrp >= @p_date
            AND afko~gstrp <= @gv_date
            AND      plnbez = @gt_data-matnr
        .
    
        SORT gt_afko BY plnbez gstrp aufnr .
        DELETE ADJACENT DUPLICATES FROM gt_afko COMPARING plnbez.
    
    
        "读取物料类型描述
        SELECT
        t134t~mtart,
        t134t~mtbez
        INTO CORRESPONDING FIELDS OF TABLE @gt_t134t
        FROM t134t
          FOR ALL ENTRIES IN @gt_data
        WHERE spras = @sy-langu
          AND mtart = @gt_data-mtart
        .
    
        "读取 MBEW 中的数据
        SELECT
               mbew~matnr,
               mbew~stprs,
               mbew~peinh,
               mbew~lplpr,
               mbew~pdatl,
               mbew~pprdl
        FROM mbew
        INTO CORRESPONDING FIELDS OF TABLE @gt_mbew
          FOR ALL ENTRIES IN @gt_data
        WHERE bwkey = @gt_data-werks
          AND matnr = @gt_data-matnr
        .
      ENDIF.
    ENDFORM .
    
    
    *&---------------------------------------------------------------------*
    *& Form FRM_EDIT_PART_DATA
    *&---------------------------------------------------------------------*
    *& 整车:编辑获取到的数据
    *&---------------------------------------------------------------------*
    
    FORM frm_comp_edit_data .
    
      IF  gt_data IS INITIAL .
        EXIT.
      ELSE.
        SORT gt_afko  BY plnbez .
        SORT gt_t134t BY mtart.
        SORT gt_mbew  BY matnr.
    
        LOOP AT  gt_data ASSIGNING FIELD-SYMBOL(<ls_data>) .
          "读取内表 GT_AFKO
          IF  gt_afko IS NOT INITIAL .
            READ TABLE gt_afko INTO gs_afko WITH  KEY plnbez = <ls_data>-matnr BINARY SEARCH .
            IF  sy-subrc = 0 .
              <ls_data>-gstrp = gs_afko-gstrp.
              <ls_data>-aufnr = gs_afko-aufnr.
            ENDIF.
          ENDIF.
    
          "读取内表 GT_T134T
          IF gt_t134t IS NOT INITIAL .
            READ TABLE gt_t134t INTO gs_t134t WITH KEY mtart = <ls_data>-mtart BINARY SEARCH.
            IF sy-subrc = 0.
              <ls_data>-mtbez = gs_t134t-mtbez.
            ENDIF.
          ENDIF.
    
          "读取内表 GT_MBEW
          IF gt_mbew IS NOT INITIAL .
            READ TABLE gt_mbew INTO gs_mbew WITH KEY matnr = <ls_data>-matnr BINARY SEARCH.
            IF sy-subrc = 0.
              IF gs_mbew-peinh <> 0 .
                <ls_data>-zbzj =    gs_mbew-stprs / gs_mbew-peinh.
              ENDIF.
              <ls_data>-lplpr  =    gs_mbew-lplpr.
              <ls_data>-pdatl  =    gs_mbew-pdatl.
              <ls_data>-pprdl  =    gs_mbew-pprdl.
            ENDIF.
          ENDIF.
        ENDLOOP.
    
    *    DELETE gt_data WHERE gstrp IS INITIAL .
        DELETE gt_data WHERE gstrp < p_date OR gstrp > gv_date .
      ENDIF.
    
    
    ENDFORM .
    
    *&---------------------------------------------------------------------*
    *& Form FRM_SET_LAYOUT
    *&---------------------------------------------------------------------*
    *& ALV 样式
    *&---------------------------------------------------------------------*
    FORM frm_set_layout.
      CLEAR gs_layout.
      gs_layout-zebra       = 'X'.       " 斑马线
      gs_layout-cwidth_opt  = 'X'.       " 自动调整ALVL列宽
      gs_layout-no_rowmark = 'X'.        " ALV 控制: 禁用行选择
    ENDFORM.
    
    *&---------------------------------------------------------------------*
    *& Form FRM_SHOW_DATA
    *&---------------------------------------------------------------------*
    *& ALV 展示
    *&---------------------------------------------------------------------*
    FORM frm_show_data  .
      IF gt_data IS INITIAL.
        MESSAGE '无数据!' TYPE 'E'.
        EXIT .
      ELSE.
        PERFORM frm_set_layout.
        IF g_parts = 'X'.
          PERFORM frm_parts_set_fields.
        ELSEIF g_comp = 'X'.
          PERFORM frm_comp_set_fields .
        ENDIF.
    
    
    *&---alv 显示函数
        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
          EXPORTING
            i_callback_program = sy-repid            " 当前程序
            is_layout_lvc      = gs_layout           " 界面格式
            it_fieldcat_lvc    = gt_fieldcat         " 字段属性
            "i_grid_title       = title               "ALV 标题
          TABLES
            t_outtab           = gt_data
          EXCEPTIONS
            program_error      = 1
            OTHERS             = 2.
        IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.
      ENDIF.
    ENDFORM.
    
    FORM frm_parts_set_fields .
      REFRESH gt_fieldcat.
      PERFORM frm_set_fieldcat USING :
             'WERKS'   TEXT-t01 ''  ''  '',
             'MATNR'   TEXT-t02 ''  ''  '',
             'MAKTX'   TEXT-t03 ''  ''  '',
             'MTART'   TEXT-t04 ''  ''  '',
             'MTBEZ'   TEXT-t05 ''  ''  '',
             'ZCGJG'   TEXT-t06 ''  ''  '',
             'KSCHL'   TEXT-t07 ''  ''  '',
             'DATAB'   TEXT-t08 ''  ''  '',
             'DATBI'   TEXT-t09 ''  ''  '',
             'LIFNR'   TEXT-t10 ''  ''  '',
             'ZBZJ'    TEXT-t12 ''  ''  '',
             'LPLPR'   TEXT-t13 ''  ''  '',
             'PDATL'   TEXT-t14 ''  ''  '',
             'PPRDL'   TEXT-t15 ''  ''  ''.
      IF p_a = 'X'.
        PERFORM frm_set_fieldcat USING :
            'MSAGE'   TEXT-t17 ''  ''  ''.
      ENDIF.
    
    ENDFORM.
    
    
    FORM frm_comp_set_fields .
      REFRESH gt_fieldcat.
      PERFORM frm_set_fieldcat USING :
            'WERKS'   TEXT-t01 ''  ''  '',
            'MATNR'   TEXT-t02 ''  ''  '',
            'MAKTX'   TEXT-t03 ''  ''  '',
            'MTART'   TEXT-t04 ''  ''  '',
            'MTBEZ'   TEXT-t05 ''  ''  '',
            'AUFNR'   TEXT-t16 ''  ''  '',
            'GSTRP'   TEXT-t11 ''  ''  '',
            'ZBZJ'    TEXT-t12 ''  ''  '',
            'LPLPR'   TEXT-t13 ''  ''  '',
            'PDATL'   TEXT-t14 ''  ''  '',
            'PPRDL'   TEXT-t15 ''  ''  ''.
      IF p_a = 'X'.
        PERFORM frm_set_fieldcat USING :
            'MSAGE'   TEXT-t17 ''  ''  ''.
      ENDIF.
      .
    ENDFORM.
    
    FORM frm_set_fieldcat USING
          pv_fname   "字段名
          pv_text    "列名称
          pv_table   "参考表
          pv_field   "参考字段
          pv_qfield  "参考的单位列
          .
      CLEAR gs_fieldcat.
      gs_fieldcat-fieldname  = pv_fname.
      gs_fieldcat-scrtext_l  = pv_text.
      gs_fieldcat-scrtext_m  = pv_text.
      gs_fieldcat-scrtext_s  = pv_text.
      gs_fieldcat-ref_table  = pv_table.
      gs_fieldcat-ref_field  = pv_field.
      gs_fieldcat-qfieldname = pv_qfield.
      APPEND gs_fieldcat TO gt_fieldcat.
    ENDFORM.
    
    *------------------------------append by hand ylx 20230209 新增CK_F_MATERIAL_CALC跑CK11N begin of-----------------------------------------*
    *&---------------------------------------------------------------------*
    *& Form FRM_BDC
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM frm_bapi  .
      DATA:lkeko LIKE keko OCCURS 0 WITH HEADER LINE.
      DATA:lkeph LIKE keph OCCURS 0 WITH HEADER LINE.
    
      DATA: it_matnr TYPE STANDARD TABLE OF bapimaterial,
            is_matnr TYPE bapimaterial,
            it_plant TYPE STANDARD TABLE OF bapiplant,
            is_plant TYPE bapiplant,
            it_bukrs TYPE STANDARD TABLE OF bapicompanycode,
            is_bukrs TYPE bapicompanycode.
      DATA:it_out_list_vo TYPE STANDARD TABLE OF bapimarkingoutlist WITH HEADER LINE,
           it_return_vo   TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
           it_out_list_fr TYPE STANDARD TABLE OF bapireleasingoutlist WITH HEADER LINE,
           it_return_fr   TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
           f_valuation    TYPE bapivaluation.
    
      DATA lv_year TYPE bapireleasing-posting_year.
      DATA lv_period TYPE  bapireleasing-posting_period.
    
      lv_year = sy-datum+0(4).
      lv_period = sy-datum+4(2).
    
    
      LOOP AT gt_data INTO gs_data WHERE zcgjg <> 0 AND zbzj = 0 AND datbi >= sy-datum.
        "CK11N成本滚算
        CALL FUNCTION 'CK_F_MATERIAL_CALC'
          EXPORTING
            klvar          = 'PPC1'
            matnr          = gs_data-matnr
            werks          = gs_data-werks
            losgr          = '1.0'
            tvers          = '01'
            kadat          = sy-datum
            bidat          = '99991231'
            aldat          = sy-datum
            bwdat          = sy-datum
            s_dunkel       = 'X'
            s_update       = 'S'
    *       s_no_commit    = ' '
    *       s_repetitive   = ' '
    *       s_sngl_lock    = 'X'
    *       u_kalsm        = ' '
          IMPORTING
            f_keko_exp     = lkeko
          TABLES
            t_keph_exp     = lkeph
          EXCEPTIONS
            wrong_call     = 1
            keph_not_found = 2
            locked         = 3
            OTHERS         = 4.
    
        IF lkeko-kalnr IS NOT INITIAL.
          gs_data-msage = '成本估算成功!'.
          gs_data-flag1 = 'X'.
        ELSE.
          gs_data-msage = '成本估算失败!'.
          gs_data-flag1 = ''.
        ENDIF.
        MODIFY gt_data  FROM gs_data.
        CLEAR: gs_data,lkeko,lkeph,lkeko[],lkeph[].
      ENDLOOP.
      "BAPI_COSTESTIMATE_RELEASING
    
      LOOP AT gt_data INTO gs_data WHERE flag1 = 'X'  AND zcgjg <> 0 AND zbzj = 0 AND datbi >= sy-datum.
        is_matnr-sign = 'I'.
        is_matnr-option = 'EQ'.
        is_matnr-low = gs_data-matnr.
        APPEND is_matnr TO it_matnr.
        is_plant-sign = 'I'.
        is_plant-option = 'EQ'.
        is_plant-low = gs_data-werks.
        APPEND is_plant TO it_plant.
        is_bukrs-sign = 'I'.
        is_bukrs-option = 'EQ'.
        is_bukrs-low = '1000'.
        APPEND is_bukrs TO it_bukrs.
        f_valuation-legal = 'X'.
        "CK24标识
        CALL FUNCTION 'BAPI_COSTESTIMATE_MARKING'
          EXPORTING
            posting_year   = lv_year
            posting_period = lv_period
            valuation_view = f_valuation
          TABLES
            return         = it_return_vo
            out_list       = it_out_list_vo
            in_material    = it_matnr
            in_plant       = it_plant
            in_comp_code   = it_bukrs.
        READ TABLE it_return_vo INTO DATA(is_return_vo) WITH KEY type = 'E'.
        IF sy-subrc = 0.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          gs_data-msage = gs_data-msage && ',成本发布失败:'.
          LOOP AT it_return_vo INTO  is_return_vo  WHERE type = 'E'.
            gs_data-msage = gs_data-msage && is_return_vo-message && ','.
          ENDLOOP.
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
          gs_data-msage = gs_data-msage && ',成本发布成功:'.
          CALL FUNCTION 'BAPI_COSTESTIMATE_RELEASING'
            EXPORTING
              posting_year   = lv_year
              posting_period = lv_period
            TABLES
              return         = it_return_fr
              out_list       = it_out_list_fr
              in_material    = it_matnr
              in_plant       = it_plant
              in_comp_code   = it_bukrs.
          READ TABLE it_return_fr INTO DATA(is_return_fr) WITH KEY type = 'E'.
          IF sy-subrc <> 0.
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait = 'X'.
            READ TABLE it_return_fr INTO is_return_fr  INDEX 1.
            IF sy-subrc = 0.
              gs_data-msage = gs_data-msage && is_return_fr-message_v1.
            ENDIF.
          ELSE.
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
            LOOP AT it_return_fr INTO  is_return_fr  WHERE type = 'E'.
              gs_data-msage = gs_data-msage && is_return_vo-message && ','.
            ENDLOOP.
          ENDIF.
        ENDIF.
        MODIFY gt_data  FROM gs_data.
        CLEAR: gs_data,it_out_list_vo,it_return_vo,it_return_fr,it_out_list_fr,f_valuation,is_matnr,it_matnr,it_bukrs,is_bukrs,is_plant,it_plant.
      ENDLOOP.
    
    
    ENDFORM.                    "BDC_DYNPRO
    
    *------------------------------append by hand ylx 20230209 新增CK_F_MATERIAL_CALC跑CK11N end-----------------------------------------*
    
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值