SAP ABAP AA 固定资产导入程序

113 篇文章 14 订阅
64 篇文章 6 订阅

代码

*&---------------------------------------------------------------------*
*& Report ZRPT_FI_FIXEDASSETS_MAINTAIN
*&---------------------------------------------------------------------*
*& 固定资产导入并折旧
*&---------------------------------------------------------------------*
REPORT zrpt_fi_fixedassets_maintain.
*----------------------------------------------------------------------*
* TABLES
*----------------------------------------------------------------------*
TABLES: sscrfields.
*----------------------------------------------------------------------*
* Types
*----------------------------------------------------------------------*
TYPES: BEGIN OF type_out,
         posnr  TYPE posnr,      "序号
         bukrs  TYPE anla-bukrs, "公司代码
         anln1  TYPE anla-anln1, "资产号
         anlkl  TYPE anla-anlkl, "资产类
         txt50  TYPE anla-txt50, "资产描述
         sernr  TYPE anla-sernr, "序列号
         invnr  TYPE anla-invnr, "库存编号
         menge  TYPE anla-menge, "数量
         meins  TYPE anla-meins, "基本单位
         aktiv  TYPE anla-aktiv, "资产化日期
         kostl  TYPE anlz-kostl, "成本中心
         kostlv TYPE anlz-kostl, "责任成本中心
         werks  TYPE anlz-werks, "工厂
         stort  TYPE anlz-stort, "位置
         raumn  TYPE anlz-raumn, "房间
         lifnr  TYPE anla-lifnr, "供应商
         afabe  TYPE anlb-afabe, "折旧范围
         kansw  TYPE anlc-kansw, "购置价值
         knafa  TYPE anlc-knafa, "累计折旧
         nafag  TYPE anlc-nafag, "本年折旧
         ndjar  TYPE anlb-ndjar, "使用年限
         ndper  TYPE anlb-ndper, "期间
         afasl  TYPE anlb-afasl, "折旧码
         herst  TYPE anla-herst, "制造商
         txa50  TYPE anla-txa50, "描述扩展
         ord41  TYPE anla-ord41, "评审小组1
         ord42  TYPE anla-ord42, "评审小组2
         ord43  TYPE anla-ord43, "评审小组3

*         anln1  TYPE anla-anln1, "资产号
         anln2  TYPE anla-anln2, "子资产号
         icon   TYPE icon_d,    "消息类型
         msg    TYPE bapi_msg,  "消息
         sel    TYPE c,
       END OF type_out.

*定义内表
DATA: gt_tab TYPE TABLE OF type_out WITH HEADER LINE.

*ALV定义
DATA: gt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat LIKE LINE OF gt_fieldcat,
      gt_layout   TYPE TABLE OF lvc_s_layo,
      gs_layout   TYPE lvc_s_layo,
      gt_events   TYPE slis_t_event,
      gs_events   LIKE LINE OF gt_events.
*----------------------------------------------------------------------*
* Definition
*----------------------------------------------------------------------*
DEFINE init_fieldcat.
  gs_fieldcat-fieldname = &1. " 需要输出的内表的字段名
  gs_fieldcat-coltext = &2. " 列名称
  gs_fieldcat-no_zero = &3. "可编辑
  gs_fieldcat-ref_table = &4.
  gs_fieldcat-ref_field = &5.
  APPEND gs_fieldcat TO gt_fieldcat.
  CLEAR gs_fieldcat.
END-OF-DEFINITION.

*----------------------------------------------------------------------*
*                   Selection Screen
*----------------------------------------------------------------------*
SELECTION-SCREEN:FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS: p_file  LIKE rlgrap-filename.
  PARAMETERS: p_mjahr TYPE mjahr OBLIGATORY .
  PARAMETERS:
    P_SUB TYPE CHAR1 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK desc WITH FRAME TITLE blktext1.
  SELECTION-SCREEN COMMENT 1(78) txt1.
SELECTION-SCREEN END OF BLOCK desc.
*&---------------------------------------------------------------------*
*& Initialization
*&---------------------------------------------------------------------*
INITIALIZATION.
  DATA:
    LV_REPID TYPE SY-REPID.
  LV_REPID = SY-REPID.

  p_mjahr = sy-datum+0(4).
  sscrfields-functxt_01 = icon_export && '模版下载'.

* 获取程序执行记录
  PERFORM frm_get_rptrunif(zabap_common_program) USING '20230313'
    CHANGING blktext1 txt1 lv_repid.
*&---------------------------------------------------------------------*
*& At Selection-Screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
  IF sscrfields-ucomm = 'FC01'.
    PERFORM frm_get_model USING 'ZRPT_FI_FIXEDASSETS_MAINTAIN'.
  ELSEIF sy-ucomm <> 'FC01'  AND p_file IS INITIAL.
    MESSAGE e055(00).
  ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM frm_f4."路径搜索帮助打开

*&---------------------------------------------------------------------*
*& Start-Of-Selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
DATA:
  LV_STDATUM TYPE SY-DATUM,
  LV_STUZEIT TYPE SY-UZEIT.

  LV_STDATUM = SY-DATUM.    "程序执行日期
  LV_STUZEIT = SY-UZEIT.    "程序执行时间

  PERFORM frm_upload_data.
  PERFORM frm_getdata.
* 写入执行记录
  PERFORM frm_writerptrunrecord(zabap_common_program)
    USING '20230313' LV_STDATUM  LV_STUZEIT .
  PERFORM frm_layout.
  PERFORM frm_fieldcat.
  PERFORM frm_output.

*&---------------------------------------------------------------------*
*&      Form  FRM_GETDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_getdata .
  LOOP AT gt_tab.
    gt_Tab-anln1 = |{ gt_tab-anln1 ALPHA = IN }|.
    gt_tab-kostl = |{ gt_tab-kostl ALPHA = IN }|.
    gt_tab-kostlv = |{ gt_tab-kostlv ALPHA = IN }|.
    gt_tab-lifnr = |{ gt_tab-lifnr ALPHA = IN }|.

    IF P_SUB IS NOT INITIAL.
      SELECT SINGLE COUNT(*)
        FROM ANLA
       WHERE BUKRS = gt_Tab-BUKRS
         AND ANLN1 = GT_TAB-ANLN1.
      IF SY-SUBRC <> 0.
        gt_tab-ICON = icon_led_red.
        gt_tab-msg = '对应的主资产不存在,无法创建'.
      ENDIF.
    ENDIF.
    MODIFY gt_tab.
  ENDLOOP.

  SORT gt_tab BY posnr.

ENDFORM.                    " FRM_GETDATA
*&---------------------------------------------------------------------*
*&      Form  FRM_LAYOUT
*----------------------------------------------------------------------*
FORM frm_layout .
  gs_layout-zebra = 'X' . " 使ALV界面呈现颜色交替
  gs_layout-sel_mode = 'A' . " 选择模式,“A”在最左端有选择按钮
  gs_layout-cwidth_opt = 'X' . " 自动优化列宽
  gs_layout-detailinit = 'X' . " 是否出现细节屏幕
  gs_layout-box_fname = 'SEL' . " 选中行
ENDFORM.                    " FRM_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  FRM_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_fieldcat .
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ICON' '' '' '标识' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'MSG'  '' '' '消息' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ANLN1'  'ANLA' 'ANLN1' '资产号' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ANLN2'  'ANLA' 'ANLN2' '子资产号' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'POSNR'  'VBAP' 'POSNR' '序号' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'BUKRS'  'ANLA' 'BUKRS' '公司代码' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ANLKL'  'ANLA' 'ANLKL' '资产类' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'TXT50'  'ANLA' 'TXT50' '资产描述' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'SERNR'  'ANLA' 'SERNR' '序列号' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'INVNR'  'ANLA' 'INVNR' '库存编号' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'MENGE'  'ANLA' 'MENGE' '数量' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'MEINS'  'ANLA' 'MEINS' '基本单位' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'AKTIV'  'ANLA' 'AKTIV' '资产化日期' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'KOSTL'  'ANLZ' 'KOSTL' '成本中心' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'KOSTLV' 'ANLZ' 'KOSTL' '责任成本中心' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'WERKS'  'ANLZ' 'WERKS' '工厂' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'STORT'  'ANLZ' 'STORT' '位置' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'RAUMN'  'ANLZ' 'RAUMN' '房间' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'LIFNR'  'ANLA' 'LIFNR' '供应商' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'AFABE'  'ANLB' 'AFABE' '折旧范围' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'KANSW'  'ANLC' 'KANSW' '购置价值' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'KNAFA'  'ANLC' 'KNAFA' '累计折旧' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'NAFAG'  'ANLC' 'NAFAG' '本年折旧' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'NDJAR'  'ANLB' 'NDJAR' '使用年限' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'NDPER'  'ANLB' 'NDPER' '期间' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'AFASL'  'ANLB' 'AFASL' '折旧码' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'HERST'  'ANLA' 'HERST' '制造商' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'TXA50'  'ANLA' 'TXA50' '描述扩展' '' '' '' '' ''.
  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ORD41'  'ANLA' 'ORD41' '模/盘具类型' '' '' '' '' ''.
*  PERFORM frm_field_lvc TABLES gt_fieldcat USING 'ORD42'  'ANLA' 'ORD42' '标签打印' '' '' '' '' ''.
ENDFORM.                    " FRM_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  FRM_FIELD_LVC
*&---------------------------------------------------------------------*
*       设置字段目录
*----------------------------------------------------------------------*
FORM frm_field_lvc TABLES pt_fieldcat_lvc STRUCTURE lvc_s_fcat
                    USING pv_fieldname TYPE lvc_rfname
                          pv_ref_table TYPE lvc_tname
                          pv_ref_field TYPE lvc_rfname
                          pv_text TYPE string
                          pv_edit TYPE c
                          pv_nzero TYPE c
                          pv_f4 TYPE c
                          pv_no_out TYPE c
                          pv_outputlen TYPE i.

  DATA:ls_fieldcat_lvc TYPE lvc_s_fcat.

  CLEAR ls_fieldcat_lvc.
  ls_fieldcat_lvc-fieldname = pv_fieldname.
  ls_fieldcat_lvc-ref_field = pv_ref_field.
  ls_fieldcat_lvc-ref_table = pv_ref_table.
  ls_fieldcat_lvc-colddictxt = 'L'.
  ls_fieldcat_lvc-scrtext_l = pv_text.
  ls_fieldcat_lvc-edit = pv_edit.
  ls_fieldcat_lvc-no_zero = pv_nzero.
  ls_fieldcat_lvc-f4availabl = pv_f4.
  ls_fieldcat_lvc-no_out = pv_no_out.
  ls_fieldcat_lvc-outputlen = pv_outputlen.
  APPEND ls_fieldcat_lvc TO pt_fieldcat_lvc.
ENDFORM.                       "FRM_FIELD_LVC
*&---------------------------------------------------------------------*
*&      Form  FRM_OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_output .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'ALV_PF_STATUS'
      i_callback_user_command  = 'FRM_USER_COMMAD'
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat
    TABLES
      t_outtab                 = gt_tab
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
ENDFORM.                    " FRM_OUTPUT
*&---------------------------------------------------------------------*
*&      Form  alv_pf_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM alv_pf_status USING rt_extab TYPE slis_t_extab.        "#EC *
  SET PF-STATUS 'STANDARD'.
ENDFORM.                    "alv_pf_status
*&---------------------------------------------------------------------*
*&      Form  frm_user_commad
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_user_commad USING p_ucomm TYPE sy-ucomm p_rs_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN '&CRET'.
      PERFORM frm_create. "创建

    WHEN OTHERS.
  ENDCASE.

* ALV刷新
  PERFORM frm_refresh.

ENDFORM.                    "frm_user_commad
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_refresh .
  DATA: gcl_grid TYPE REF TO cl_gui_alv_grid.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = gcl_grid.
  gs_layout-no_toolbar = 'X' . "隐藏工具栏
  CALL METHOD gcl_grid->set_frontend_layout
    EXPORTING
      is_layout = gs_layout. " 自动优化列宽

  CALL METHOD gcl_grid->check_changed_data.
  CALL METHOD gcl_grid->refresh_table_display.
ENDFORM.                    "frm_refresh
*&---------------------------------------------------------------------*
*& Form FRM_F4
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_f4 .
  CALL FUNCTION 'WS_FILENAME_GET'             "Get file name
    EXPORTING
      mask             = ',*.* ,*.*.' "',*.xls,*.xlsx.'
      mode             = '0'
      title            = TEXT-h10
    IMPORTING
      filename         = p_file
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_create .
  DATA: 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,
        ls_depreciationareas   TYPE bapi1022_dep_areas,
        ls_depreciationareasx  TYPE bapi1022_dep_areasx,
        lt_depreciationareas   TYPE TABLE OF bapi1022_dep_areas,
        lt_depreciationareasx  TYPE TABLE OF bapi1022_dep_areasx,
        ls_cumulatedvalues     TYPE bapi1022_cumval,
        lt_cumulatedvalues     TYPE TABLE OF bapi1022_cumval,
        ls_postedvalues        TYPE bapi1022_postval,
        lt_postedvalues        TYPE TABLE OF bapi1022_postval,
        ls_extensionin         TYPE bapiparex,
        lt_extensionin         TYPE  TABLE OF bapiparex,
        ls_return              TYPE bapiret2,
        lt_return              TYPE TABLE OF bapiret2,
        lt_transactions        TYPE TABLE OF bapi1022_trtype,
        ls_transactions        TYPE bapi1022_trtype.
  FIELD-SYMBOLS: <ls_tab> TYPE type_out.

  DATA:
    LV_XSUB TYPE CHAR1,
    lv_ann1 TYPE bapi1022_1-assetmaino,  "固定资产编号
    lv_area TYPE bf_afabe_d.  "折旧范围

  IF P_SUB IS NOT INITIAL.
    LV_XSUB = 'X'.
  ENDIF.
  lv_area = '01'.  "
  LOOP AT gt_tab ASSIGNING <ls_tab> WHERE ICON <> icon_led_red.
    AT NEW posnr.
      CLEAR ls_key.
      ls_key-companycode = <ls_tab>-bukrs.
      ls_key-asset       = <ls_tab>-anln1.
*--   常规
      CLEAR: ls_generaldata, ls_generaldatax.
      ls_generaldata-assetclass  = <ls_tab>-anlkl.    "资产分类
      ls_generaldata-descript    = <ls_tab>-txt50.    "资产描述
      ls_generaldata-descript2   = <ls_tab>-txa50.    "附加资产描述
      ls_generaldata-serial_no   = <ls_tab>-sernr.    "序列号
      ls_generaldata-invent_no   = <ls_tab>-invnr.    "库存编号
      ls_generaldata-quantity    = <ls_tab>-menge.    "数量
      ls_generaldata-base_uom    = <ls_tab>-meins.    "单位
      ls_generaldatax-assetclass = 'X'.
      ls_generaldatax-descript   = 'X'.
      ls_generaldatax-descript2  = 'X'.
      ls_generaldatax-serial_no  = 'X'.
      ls_generaldatax-invent_no  = 'X'.
      ls_generaldatax-quantity   = 'X'.
      ls_generaldatax-base_uom   = 'X'.

      CLEAR: ls_postinginformation, ls_postinginformationx .
      ls_postinginformation-cap_date   = <ls_tab>-aktiv.    "资产化日期
      ls_postinginformationx-cap_date  = 'X'.

*--   与时间相关
      CLEAR: ls_timedependentdata, ls_timedependentdatax.
      ls_timedependentdata-costcenter  = <ls_tab>-kostl.    "成本中心
      ls_timedependentdata-resp_cctr   = <ls_tab>-kostlv.   "成本中心对资产负责
      ls_timedependentdata-plant       = <ls_tab>-werks.    "工厂
      ls_timedependentdata-location    = <ls_tab>-stort.    "位置
      ls_timedependentdata-room        = <ls_tab>-raumn.    "房间
      ls_timedependentdatax-costcenter = 'X'.
      ls_timedependentdatax-resp_cctr  = 'X'.
      ls_timedependentdatax-plant      = 'X'.
      ls_timedependentdatax-location   = 'X'.
      ls_timedependentdatax-room       = 'X'.

*--   分配
      CLEAR:ls_allocations,ls_allocationsx.
      ls_allocations-evalgroup1  = <ls_tab>-ord41.        "评估组1
      ls_allocations-evalgroup2  = <ls_tab>-ord42.        "评估组2
      ls_allocations-evalgroup3  = <ls_tab>-ord43.        "评估组3
      ls_allocationsx-evalgroup1 = 'X'.
      ls_allocationsx-evalgroup2 = 'X'.
      ls_allocationsx-evalgroup3 = 'X'.

*--   源
      CLEAR: ls_origin,  ls_originx.
      ls_origin-vendor_no     = <ls_tab>-lifnr.     "供应商
      ls_origin-manufacturer  = <ls_tab>-herst.     "制造商
      IF ls_origin-vendor_no IS NOT INITIAL.
        ls_originx-vendor_no   = 'X'.
      ENDIF.
      IF ls_origin-manufacturer IS NOT INITIAL.
        ls_originx-manufacturer = 'X'.
      ENDIF.
    ENDAT.

*-  折旧范围
    CLEAR: ls_depreciationareas, ls_depreciationareasx.
    ls_depreciationareas-area       = <ls_tab>-afabe.    "折旧范围
    ls_depreciationareas-ulife_yrs  = <ls_tab>-ndjar.    "使用年限
    ls_depreciationareas-ulife_prds = <ls_tab>-ndper.    "期间
    ls_depreciationareas-dep_key    = <ls_tab>-afasl.    "折旧码
    APPEND ls_depreciationareas TO lt_depreciationareas.

    ls_depreciationareasx-area       = <ls_tab>-afabe.
    ls_depreciationareasx-ulife_yrs  = 'X'.
    ls_depreciationareasx-ulife_prds = 'X'.
    ls_depreciationareasx-dep_key    = 'X'.
    APPEND ls_depreciationareasx TO lt_depreciationareasx.

*    CLEAR: ls_depreciationareas, ls_depreciationareasx.
*    ls_depreciationareas-area       = '30'.
*    ls_depreciationareas-ulife_yrs  = <ls_tab>-ndjar.
*    ls_depreciationareas-ulife_prds = <ls_tab>-ndper.
*    ls_depreciationareas-dep_key    = <ls_tab>-afasl.
*    APPEND ls_depreciationareas TO lt_depreciationareas.
*
*    ls_depreciationareasx-area       = '30'.
*    ls_depreciationareasx-ulife_yrs  = 'X'.
*    ls_depreciationareasx-ulife_prds = 'X'.
*    ls_depreciationareasx-dep_key    = 'X'.
*    APPEND ls_depreciationareasx TO lt_depreciationareasx.

    IF p_mjahr <> sy-datum+0(4).  "往年资产
*--   增加累计折旧
      CLEAR ls_cumulatedvalues.
*      ls_cumulatedvalues-fisc_year = p_mjahr.        “20230624 DEL 报错往年年度不可用
      ls_cumulatedvalues-fisc_year = sy-datum+0(4).     "20230624 ADD 会计年度换成当年
*      ls_cumulatedvalues-fisc_year = sy-datum+0(4) - 1.
      ls_cumulatedvalues-area      = <ls_tab>-afabe.  "折旧范围
      ls_cumulatedvalues-acq_value = <ls_tab>-kansw.  "购置价值
      ls_cumulatedvalues-ord_dep   = <ls_tab>-knafa.  "累计折旧
      APPEND ls_cumulatedvalues TO lt_cumulatedvalues.

*      CLEAR ls_cumulatedvalues.
*      ls_cumulatedvalues-fisc_year = p_mjahr .
**      ls_cumulatedvalues-fisc_year = sy-datum+0(4) - 1.
*      ls_cumulatedvalues-area      = '30'.
*      ls_cumulatedvalues-acq_value = <ls_tab>-kansw.
*      ls_cumulatedvalues-ord_dep   = <ls_tab>-knafa.
*      APPEND ls_cumulatedvalues TO lt_cumulatedvalues.
    ELSE.    "本年资产
*--   增加购置价值
      CLEAR:ls_transactions.
      ls_transactions-fisc_year = p_mjahr.
      ls_transactions-area = <ls_tab>-afabe.      "折旧范围
      ls_transactions-current_no = '1'.
      ls_transactions-amount = <ls_tab>-kansw.    "购置价值
      ls_transactions-assettrtyp = '100'.
      ls_transactions-valuedate = <ls_tab>-aktiv. "资产化日期
      ls_transactions-currency = 'CNY'.
      APPEND ls_transactions TO lt_transactions.
    ENDIF.
*-  增加正常折旧
    CLEAR ls_postedvalues.
*    ls_postedvalues-fisc_year = p_mjahr.       “20230624 DEL 报错往年年度不可用
    ls_postedvalues-fisc_year = sy-datum+0(4).    "20230624 ADD 会计年度换成当年
    ls_postedvalues-area      = <ls_tab>-afabe.  "折旧范围
    ls_postedvalues-ord_dep   = <ls_tab>-nafag.  "本年折旧
    APPEND ls_postedvalues TO lt_postedvalues.

*-  启用平行评估或者需要合并就用30
*   CLEAR ls_postedvalues.
*   ls_postedvalues-fisc_year = p_mjahr.
*   ls_postedvalues-area      = '30'.
*   ls_postedvalues-ord_dep   = <ls_tab>-nafag.
*   APPEND ls_postedvalues TO lt_postedvalues.

    AT END OF posnr.
      CLEAR gt_tab.
      CALL FUNCTION 'BAPI_FIXEDASSET_OVRTAKE_CREATE'
        EXPORTING
          key                 = ls_key
          CREATESUBNUMBER     = LV_XSUB
          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
        IMPORTING
          asset               = lv_ann1
          subnumber           = gt_tab-anln2
        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 CA 'EXA'.
        IF ls_return-message IS INITIAL.
          MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
              WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4
              INTO ls_return-message.
        ENDIF.
        gt_tab-msg = gt_tab-msg && ls_return-message && ','.
      ENDLOOP.
      IF sy-subrc = 0 OR lv_ann1 IS INITIAL.
        gt_tab-icon = icon_led_red.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ELSE.
        gt_tab-icon = icon_led_green.
        gt_tab-msg = '固定资产创建成功!'.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
      ENDIF.
     gt_tab-anln1 = lv_ann1.
      MODIFY gt_tab TRANSPORTING anln1 anln2 icon msg WHERE posnr = <ls_tab>-posnr AND ICON <> icon_led_red.
      CLEAR:ls_key,
            ls_generaldata,
            ls_generaldatax,
            ls_postinginformation,
            ls_postinginformationx,
            ls_timedependentdata,
            ls_timedependentdatax,
            ls_allocations,
            ls_allocationsx,
            ls_origin,
            ls_originx,
            ls_depreciationareas,
            ls_depreciationareasx,
            ls_cumulatedvalues,
            ls_postedvalues,
            ls_extensionin,
            ls_return.
      CLEAR: gt_tab, lt_depreciationareas, lt_depreciationareasx,lt_transactions,
             lt_cumulatedvalues, lt_postedvalues,lt_extensionin, lt_return.
    ENDAT.
  ENDLOOP.
  UNASSIGN <ls_tab>.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_MODEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_get_model  USING    p_objid TYPE wwwdata-objid.
  DATA: ls_objdata     LIKE wwwdatatab,
        lv_destination LIKE rlgrap-filename,
        lv_rc          LIKE sy-subrc,
        lv_errtxt      TYPE string,
        lv_fullpath    TYPE string,
        lv_extension   TYPE string,
        lv_fname       LIKE rlgrap-filename,
        ls_formkey     LIKE  wwwdatatab.

  lv_extension = p_objid.
  PERFORM get_file_name USING '.xls'
                              'Excel|*.xls;'
                     CHANGING lv_fullpath.
  IF lv_fullpath = space.
    MESSAGE '请选择下载文件名' TYPE 'E'.
  ELSE.
    CONCATENATE lv_fullpath '' INTO lv_fname.
    SELECT SINGLE relid objid
      FROM wwwdata
      INTO CORRESPONDING FIELDS OF ls_objdata
      WHERE relid = 'MI'
        AND objid = p_objid .

    IF sy-subrc NE 0 OR ls_objdata-objid = space.
      MESSAGE e001(00) WITH '文件不存在!'.
    ELSE.
      CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
        EXPORTING
          key         = ls_objdata
          destination = lv_fname
        IMPORTING
          rc          = lv_rc
        CHANGING
          temp        = lv_fname.
      IF lv_rc NE 0.
        MESSAGE e001(00) WITH '文件下载失败!'.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GET_FILE_NAME
*&---------------------------------------------------------------------*
*       获取要下载的文件名字
*----------------------------------------------------------------------*
FORM get_file_name  USING p_extension
                         p_file_filter
                CHANGING p_fullpath.
  DATA: lv_filename TYPE string VALUE '固定资产导入模板',
        lv_path     TYPE string,
        lv_fullpath TYPE string,
        lv_titile   TYPE string,
        lv_init_dir TYPE string.

  CLEAR p_fullpath.
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = '保存至'
      default_extension    = 'xlsx'
      default_file_name    = lv_filename
      file_filter          = 'Excel Files (*.xlsx)'
    CHANGING
      filename             = lv_filename
      path                 = lv_path
      fullpath             = lv_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  p_fullpath = lv_fullpath.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
  DATA: lt_intern TYPE STANDARD TABLE OF kcde_intern_struc,
        ls_excel  LIKE LINE OF lt_intern.
  FIELD-SYMBOLS: <field> TYPE any.

  REFRESH lt_intern.

  CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
    EXPORTING
      filename    = p_file  "dataset
      i_begin_col = 1
      i_begin_row = 3
      i_end_col   = 26
      i_end_row   = 65535
    TABLES
      intern      = lt_intern.


  LOOP AT lt_intern INTO ls_excel.
    ASSIGN COMPONENT ls_excel-col OF STRUCTURE gt_tab TO <field>.
    <field> = ls_excel-value.

    AT END OF row.
      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
        EXPORTING
          input          = gt_tab-meins
        IMPORTING
          output         = gt_tab-meins
        EXCEPTIONS
          unit_not_found = 1
          OTHERS         = 2.

      APPEND gt_tab.
      CLEAR gt_tab.
    ENDAT.
  ENDLOOP.

  LOOP AT gt_tab.
    gt_tab-knafa  = gt_tab-knafa * -1.
    gt_tab-nafag  = gt_tab-nafag * -1.
    MODIFY gt_tab.
  ENDLOOP.
ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值