matinal:SAP 期初资产导入BAPI


*&---------------------------------------------------------------------*
*& Form frm_call_bapi
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- <FS_DATA>
*&---------------------------------------------------------------------*
FORM frm_call_bapi  CHANGING cs_data TYPE ty_data.
  DATA: ls_bapi_te_anlu       TYPE bapi_te_anlu.
  DATA: lv_companycode         TYPE bapi1022_1-comp_code,
        ls_key                 TYPE bapi1022_key,
        ls_generaldata         TYPE bapi1022_feglg001,
        ls_generaldatax        TYPE  bapi1022_feglg001x,
        ls_postinginformation  TYPE bapi1022_feglg002,
        ls_postinginformationx TYPE bapi1022_feglg002x,
        ls_timedependentdata   TYPE  bapi1022_feglg003,
        ls_timedependentdatax  TYPE  bapi1022_feglg003x,
        ls_allocations         TYPE bapi1022_feglg004,
        ls_allocationsx        TYPE  bapi1022_feglg004x,
        ls_origin              TYPE bapi1022_feglg009,
        ls_originx             TYPE bapi1022_feglg009x,
        lt_extensionin         TYPE TABLE OF bapiparex WITH HEADER LINE,
        ls_assetcreated        TYPE bapi1022_reference,
        lt_depreciationareas   TYPE TABLE OF bapi1022_dep_areas WITH HEADER LINE,
        lt_depreciationareasx  TYPE TABLE OF bapi1022_dep_areasx WITH HEADER LINE,
        lt_cumulatedvalues     TYPE TABLE OF bapi1022_cumval WITH HEADER LINE,
        lt_postedvalues        TYPE TABLE OF bapi1022_postval WITH HEADER LINE,
        lt_transactions        TYPE TABLE OF bapi1022_trtype WITH HEADER LINE,
        lt_return              TYPE TABLE OF bapiret2,
        ls_return              TYPE bapiret2,
        lv_fisc_year           TYPE bapi1022_cumval-fisc_year,
        lv_type                TYPE char1,
        l_afblpe               TYPE t093u-afblpe,
        l_datum                TYPE t093c-datum.


  CLEAR: ls_key, ls_generaldata, ls_generaldatax, ls_timedependentdata, ls_timedependentdatax,
         ls_allocations, ls_allocationsx, lt_extensionin, lt_depreciationareas,
         lt_depreciationareasx, ls_assetcreated, ls_return, lv_fisc_year,lv_type.
  REFRESH: lt_extensionin[], lt_depreciationareas[], lt_depreciationareasx[],
           lt_cumulatedvalues[], lt_postedvalues[], lt_transactions[], lt_return[].

  SELECT SINGLE * INTO @DATA(ls_t093c)
    FROM t093c
    WHERE bukrs = @cs_data-bukrs.

  l_afblpe = ls_t093c-datum+4(2)."月度

  lv_fisc_year = ls_t093c-lgjahr.

  DATA(lv_out_anlkl) = |{ cs_data-anlkl ALPHA = OUT }|.

  IF cs_data-anln1 IS NOT INITIAL.
    ls_key-companycode = cs_data-bukrs.
    ls_key-asset       = cs_data-anln1.
    ls_key-subnumber   = cs_data-anln2.
  ENDIF.

  ls_key-companycode            = cs_data-bukrs.
  ls_generaldata-assetclass     = cs_data-anlkl.
  ls_generaldata-descript       = cs_data-txt50.
  ls_generaldata-main_descript  = cs_data-anlhtxt.
  ls_generaldata-invent_no      = cs_data-invnr.
  ls_generaldata-quantity       = cs_data-menge.
  ls_generaldata-base_uom       = cs_data-meins.

  ls_generaldatax-assetclass    = 'X'.
  ls_generaldatax-descript      = 'X'.
  ls_generaldatax-main_descript = 'X'.
  ls_generaldatax-invent_no     = 'X'.
  ls_generaldatax-quantity      = 'X'.
  ls_generaldatax-base_uom      = 'X'.

  ls_postinginformation-cap_date  = cs_data-aktiv.
  ls_postinginformationx-cap_date = 'X'.

  ls_timedependentdata-costcenter  = cs_data-zkostl.
  ls_timedependentdata-resp_cctr   = cs_data-zkostlv.
  ls_timedependentdata-room        = cs_data-raumn.
  ls_timedependentdata-plant       = cs_data-werks.
  ls_timedependentdatax-costcenter = 'X'.
  ls_timedependentdatax-resp_cctr  = 'X'.
  ls_timedependentdatax-room       = 'X'.
  ls_timedependentdatax-plant      = 'X'.
  ls_timedependentdatax-bus_area   = 'X'.

  ls_allocations-evalgroup1 = cs_data-ord41.
  ls_allocationsx-evalgroup1 = 'X'.

  CLEAR lt_depreciationareas.
  lt_depreciationareas-area             = '01'.
  lt_depreciationareas-dep_key          = cs_data-afasl01.
  lt_depreciationareas-ulife_yrs        = cs_data-ndjar01.
  lt_depreciationareas-ulife_prds       = cs_data-ndper01.
  lt_depreciationareas-odep_start_date  = cs_data-afabg01.
  lt_depreciationareas-scrapvalue       = cs_data-schrw01."资产残值
  APPEND lt_depreciationareas.

  CLEAR lt_depreciationareasx.
  lt_depreciationareasx-area            = '01'.
  lt_depreciationareasx-dep_key         = 'X'.
  lt_depreciationareasx-ulife_yrs       = 'X'.
  lt_depreciationareasx-ulife_prds      = 'X'.
  lt_depreciationareasx-odep_start_date = 'X'.
  lt_depreciationareasx-scrapvalue      = 'X'.
  APPEND lt_depreciationareasx.

  IF ls_t093c-afapl = 'CNTD' AND ( lv_out_anlkl+0(1) = 1 OR lv_out_anlkl+0(1) = 3 OR lv_out_anlkl+0(1) = 4 ).
    CLEAR lt_depreciationareas.
    lt_depreciationareas-area             = '20'.
    lt_depreciationareas-dep_key          = cs_data-afasl20.
    lt_depreciationareas-ulife_yrs        = cs_data-ndjar20.
    lt_depreciationareas-ulife_prds       = cs_data-ndper20.
    lt_depreciationareas-odep_start_date  = cs_data-afabg20.
    APPEND lt_depreciationareas.

    CLEAR lt_depreciationareasx.
    lt_depreciationareasx-area            = '20'.
    lt_depreciationareasx-dep_key         = 'X'.
    lt_depreciationareasx-ulife_yrs       = 'X'.
    lt_depreciationareasx-ulife_prds      = 'X'.
    lt_depreciationareasx-odep_start_date = 'X'.
    APPEND lt_depreciationareasx.
  ENDIF.

  IF  cs_data-zzclx = '2'     "当年
   OR cs_data-zzclx = '3' .    "在建工程

    CLEAR lt_transactions.
    lt_transactions-fisc_year         = lv_fisc_year.
    lt_transactions-area              = '01'.

    IF cs_data-zzclx = '2' .    "当年
      lt_transactions-valuedate         = ls_t093c-datum.
    ELSE.
      lt_transactions-valuedate         = '20220101'.
    ENDIF.

    CASE cs_data-zzclx.
      WHEN '2'.
        lt_transactions-assettrtyp        = '100'."<FS_DATA>-bwasl.
      WHEN '3'."在建工程默认900
        IF cs_data-aktiv >= '20220101'.
          lt_transactions-assettrtyp        = '100'.
        ELSE.
          lt_transactions-assettrtyp        = '900'.
        ENDIF.
      WHEN OTHERS.
    ENDCASE.

    lt_transactions-amount            = cs_data-kansw01."<FS_DATA>-anbtr.
    lt_transactions-current_no        = '00001'.
    APPEND lt_transactions.
    "购置值不为空 那么写入折旧
*    IF cs_data-kansw01 IS NOT INITIAL.
    CLEAR lt_postedvalues.
    lt_postedvalues-fisc_year           = lv_fisc_year.
    lt_postedvalues-area                = '01'.
    lt_postedvalues-ord_dep             = cs_data-znafag01n .
    lt_postedvalues-rev_repl            = cs_data-kaufw01.
    APPEND lt_postedvalues.
*    ENDIF.
*        ENDIF.

    IF ls_t093c-afapl = 'CNTD' AND ( lv_out_anlkl+0(1) = 1 OR lv_out_anlkl+0(1) = 3  OR lv_out_anlkl+0(1) = 4 ).

      CLEAR lt_transactions.
      lt_transactions-fisc_year         = lv_fisc_year.
      lt_transactions-area              = '20'.
      IF cs_data-zzclx = '2' .    "当年
        lt_transactions-valuedate         = ls_t093c-datum.
      ELSE.
        lt_transactions-valuedate         = '20220101'.
      ENDIF.

      CASE cs_data-zzclx.
        WHEN '2'.
          lt_transactions-assettrtyp        = '100'."<FS_DATA>-bwasl.
        WHEN '3'."在建工程默认900
          IF cs_data-aktiv >= '20220101'.
            lt_transactions-assettrtyp        = '100'.
          ELSE.
            lt_transactions-assettrtyp        = '900'.
          ENDIF.
        WHEN OTHERS.
      ENDCASE.
      lt_transactions-amount            = cs_data-kansw20."<FS_DATA>-anbtr.
      lt_transactions-current_no        = '00001'.
      APPEND lt_transactions.
      "购置值不为空 那么写入折旧
*      IF cs_data-kansw20 IS NOT INITIAL.
      CLEAR lt_postedvalues.
      lt_postedvalues-fisc_year           = lv_fisc_year.
      lt_postedvalues-area                = '20'.
      lt_postedvalues-ord_dep             = cs_data-nafag20.
*          IF lt_postedvalues-ord_dep IS NOT INITIAL.
      APPEND lt_postedvalues.
*      ENDIF.
*          ENDIF.
    ENDIF.
  ELSE.
    CLEAR lt_cumulatedvalues.
    lt_cumulatedvalues-fisc_year        = lv_fisc_year.
    lt_cumulatedvalues-area             = '01'.
    lt_cumulatedvalues-acq_value        = cs_data-kansw01.
    lt_cumulatedvalues-ord_dep          = cs_data-zkanfa01.
    lt_cumulatedvalues-rev_repl         = cs_data-kaufw01.
    APPEND lt_cumulatedvalues.
    "如果购置值不为空 那么写入折旧
*    IF cs_data-kansw01 IS NOT INITIAL.
    CLEAR lt_postedvalues.
    lt_postedvalues-fisc_year           = lv_fisc_year.
    lt_postedvalues-area                = '01'.
    lt_postedvalues-ord_dep             = cs_data-znafag01n.
    APPEND lt_postedvalues.
*    ENDIF.

    IF ls_t093c-afapl = 'CNTD' AND ( lv_out_anlkl+0(1) = 1 OR lv_out_anlkl+0(1) = 3 OR lv_out_anlkl+0(1) = 4 ).

      CLEAR lt_cumulatedvalues.
      lt_cumulatedvalues-fisc_year        = lv_fisc_year.
      lt_cumulatedvalues-area             = '20'.
      lt_cumulatedvalues-acq_value        = cs_data-kansw20.
      lt_cumulatedvalues-ord_dep          = cs_data-kanfa20.
      APPEND lt_cumulatedvalues.
      "购置值为空 那么写入折旧
*      IF cs_data-kansw20 IS NOT INITIAL.
*      CLEAR lt_postedvalues.
*      lt_postedvalues-fisc_year           = lv_fisc_year.
*      lt_postedvalues-area                = '20'.
*      lt_postedvalues-ord_dep             = cs_data-nafag20.
*      APPEND lt_postedvalues.
*      ENDIF.
    ENDIF.
  ENDIF.

*&& 唯一标识 占用此字段
  ls_origin-type_name          = |{ cs_data-data_source }{ cs_data-anln1 }|.
  ls_origin-vendor_no          =  cs_data-lifnr .
  ls_origin-manufacturer       =  cs_data-herst.

  ls_originx-type_name         = 'X'.
  ls_originx-vendor_no         = 'X'.
  ls_originx-manufacturer      = 'X'.

  CALL FUNCTION 'BAPI_FIXEDASSET_OVRTAKE_CREATE'
    EXPORTING
      key                 = ls_key
      generaldata         = ls_generaldata
      generaldatax        = ls_generaldatax
      postinginformation  = ls_postinginformation
      postinginformationx = ls_postinginformationx
      timedependentdata   = ls_timedependentdata
      timedependentdatax  = ls_timedependentdatax
      allocations         = ls_allocations
      allocationsx        = ls_allocationsx
      origin              = ls_origin
      originx             = ls_originx
*     testrun             = p_moni
    IMPORTING
      assetcreated        = ls_assetcreated
    TABLES
      depreciationareas   = lt_depreciationareas
      depreciationareasx  = lt_depreciationareasx
      cumulatedvalues     = lt_cumulatedvalues
      postedvalues        = lt_postedvalues
      transactions        = lt_transactions
      extensionin         = lt_extensionin
      return              = lt_return.

  LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'
                                      OR type = 'X'.
    IF ls_return-id = 'AC' AND ls_return-number = '526'.
      ls_return-message = '使用状态填写错误!'.
    ENDIF.
    CONCATENATE cs_data-message ls_return-message INTO cs_data-message.
  ENDLOOP.
  IF sy-subrc <> 0.

    IF cs_data-anln1 IS  INITIAL.
      cs_data-anln1 = ls_assetcreated-asset.
      cs_data-anln2 = ls_assetcreated-subnumber.
    ENDIF.
    cs_data-message = |资产卡片{ ls_assetcreated-asset }创建成功!|.
    cs_data-type   = 'S'.
    cs_data-anln1_n = ls_assetcreated-asset.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    CONCATENATE '资产卡片创建失败:' ls_return-message INTO cs_data-message.
    cs_data-type = 'E'.
  ENDIF.
ENDFORM.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值