资产批导bapi:BAPI_FIXEDASSET_OVRTAKE_CREATE

REPORT zfic015.

TABLES sscrfields .

INCLUDE zbcx_pub_constants .

INCLUDE zfic015_top.

INCLUDE zfic015_scr.

INCLUDE zfic015_forms.

*-----------------------------------------------------------------------*
*--事件处理
*-----------------------------------------------------------------------*
INITIALIZATION.
  gs_functxt-icon_id   = icon_export.
  gs_functxt-icon_text = TEXT-a01.
  sscrfields-functxt_01 = gs_functxt .

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
  PERFORM frm_get_pc_filename.

AT SELECTION-SCREEN OUTPUT.

AT SELECTION-SCREEN .
  CASE sscrfields-ucomm.
    WHEN cns_ucomm_fc01.
      PERFORM frm_download_template.
    WHEN OTHERS.
  ENDCASE.

START-OF-SELECTION.
  PERFORM frm_status_bar USING 5   TEXT-m03.  "正在检查文件...
  PERFORM frm_check_file .
  PERFORM frm_status_bar USING 15  TEXT-m04.  "正在上载数据...
  PERFORM frm_upload_data .
  PERFORM frm_status_bar USING 25  TEXT-m05.  "正在检查数据...
  PERFORM frm_check_data .
  PERFORM frm_status_bar USING 35  TEXT-m06.  "正在显示数据...
  PERFORM frm_display_data .
*&---------------------------------------------------------------------*
*& 包含               ZFIC015_TOP
*&---------------------------------------------------------------------*

TYPES:BEGIN OF gty_input,
        anln1     TYPE anla-anln1, "主资产编号
        anln2     TYPE anla-anln2, "子资产编号
        anlkl     TYPE anla-anlkl, "资产分类
        bukrs     TYPE anla-bukrs, "公司代码
        txt50     TYPE anla-txt50, "资产描述
        txa50     TYPE anla-txa50, "原资产编号
*       anlhtxt TYPE anlh-anlhtxt, "资产主号文本
        sernr     TYPE anla-sernr,  "资产规格型号
        stort     TYPE anlz-stort,  "存放地点
        werks     TYPE anlz-werks,  "工厂组织
        ord41     TYPE anla-ord41, "使用状态
        ord42     TYPE anla-ord42, "来源变动方式-增加
        ord43     TYPE anla-ord43, "来源变动方式-减少
        ord44     TYPE anla-ord44, "生产性生物资产类型
        gdlgrp    TYPE anla-gdlgrp, "经济用途
        menge     TYPE anla-menge,  " 数量
        meins     TYPE anla-meins, "单位
        aktiv     TYPE anla-aktiv, "资产本金化日期
        kostlv    TYPE anlz-kostlv, "责任成本中心
        kostl     TYPE anlz-kostl, "成本中心
        aufnr     TYPE anlz-caufn,  "内部订单
        zza01     TYPE anlu-zza01,  "技术编码
        zza02     TYPE anlu-zza02,  "保管人
        zza03     TYPE anlu-zza03,  "保修期限(年)
        zza04     TYPE anlu-zza04,  "保修号
        zza05     TYPE anlu-zza05,  "使用人
        zza06     TYPE anlu-zza06,  "备注
        zza07     TYPE anlu-zza07,  "猪只品系
        zza08     TYPE anlu-zza08,  "养殖部猪耳号
        zza09     TYPE anlu-zza09,  "性别(公母)
        zza10     TYPE anlu-zza10,  "饲料环模号
        zza11     TYPE anlu-zza11,  "质保金及期限
        zza12     TYPE anlu-zza12,  "房产证号
        zza13     TYPE anlu-zza13,  "采购凭证编号
        zza14     TYPE anlu-zza14,  "是否缴纳房产税
        afasl     TYPE anlb-afasl,  "折旧码(账面)
        odep_date TYPE anlb-afabg, "折旧开始日期(账面)
        ndjar     TYPE anlb-ndjar, "使用年限(账面)
        ndper     TYPE anlb-ndper, "使用月份(账面)
        ndabj     TYPE bf_ndabj,   "到期使用期限(期间)
        ndabp     TYPE bf_ndabp,   "到期使用年限
        afabe01   TYPE anlb-afabe, "折旧范围(01)
        anbtr01   TYPE anlc-kansw, "原值
        kaufw     TYPE bf_kaufw,    "重估减值
        anbtr01_1 TYPE anlc-knafa, "以前年度计提折旧
        anbtr01_2 TYPE anlc-nafag , "本年计提折旧
      END OF gty_input.

TYPES:BEGIN OF gty_out,
        sel        TYPE c,                  "选择
        icon       TYPE icon_d,             "状态指示灯
        msg        TYPE bapi_msg,           "消息文本
        type       TYPE c,                  "消息类型
        menge1(13) TYPE c,
        t_msg      TYPE /eacc/t_bapiret2.  "消息文本
        INCLUDE TYPE gty_input.
TYPES:  END OF gty_out.


DATA: gt_out   TYPE  TABLE OF gty_out,
      gs_out   TYPE gty_out,

      gt_input TYPE  TABLE OF gty_input,
      gs_input TYPE gty_input.

DATA gs_functxt TYPE smp_dyntxt.

DATA:gs_fieldcat TYPE lvc_s_fcat,           "FIELDCAT工作区
     gt_fieldcat TYPE lvc_t_fcat,           "FIELDCAT内表,存放输出栏位名称的列表
     gs_layout   TYPE lvc_s_layo.           "负责整个ALV的界面布局

CONSTANTS:cns_ucomm TYPE sy-ucomm        VALUE 'ONLI',
          cns_post  TYPE sy-ucomm        VALUE 'ZPOST',
          cns_ic1   TYPE sy-ucomm        VALUE '&IC1',
          cns_icon  TYPE sy-ucomm        VALUE 'ICON'.
CONSTANTS:
*  cns_alv_gui    TYPE c  LENGTH 20     VALUE 'GUI_ALV',
*  cns_alv_comand TYPE c  LENGTH 30     VALUE 'FRM_ALV_USER_COMMAND',
*  cns_alv_status TYPE c  LENGTH 30     VALUE 'FRM_ALV_PF_STATUS',
  cns_sel   TYPE c  LENGTH 5      VALUE 'SEL',
  cns_title TYPE sy-title         VALUE 'T1001'.
*--模板信息
CONSTANTS:
  cns_mimeobj_1    TYPE w3objid            VALUE sy-repid, "SMW0上传的文件模板的名称
*  CNS_FNM_DEFAULT  TYPE STRING             VALUE '供应商主数据批导模板', "Defualt File
*  CNS_EXT_DEFAULT  TYPE STRING             VALUE '.xlsx',
  cns_z003         TYPE string             VALUE 'Z003',
  cns_z006         TYPE string             VALUE 'Z006',
  cns_cn5          TYPE string             VALUE 'CN5',
  cns_green_light  TYPE char4              VALUE '@08@', "  Green light; positive
  cns_yellow_light TYPE char4              VALUE '@09@', "#EC NEEDED "  Yellow light; neutral
  cns_red_light    TYPE char4              VALUE '@0A@',  "  Red light; negative
  cns_zh           TYPE char2              VALUE 'ZH',
  cns_en           TYPE char2              VALUE 'EN',
  cns_cny          TYPE waers              VALUE 'CNY',
  cns_nocheck      TYPE string             VALUE 'Z003/ZV03/Z006',
  cns_100          TYPE bf_bwasl           VALUE '100',
  cns_line         TYPE string             VALUE '|',
  cns_d            TYPE c                  VALUE  ',',
  cns_00           TYPE c  LENGTH 10       VALUE '00',
  cns_000          TYPE c  LENGTH 10       VALUE '000',
  cns_exa          TYPE c  LENGTH 10       VALUE 'EXA',
  cns_lnran        TYPE bf_lnran           VALUE '00001',
  cns_0            TYPE d                  VALUE '00000000',
  cns_bapi         TYPE te_struc           VALUE 'BAPI_TE_ANLU'.



DEFINE check_initial.
  IF &1 IS INITIAL OR &1 = space.
     CONCATENATE &3   &2  INTO &3 SEPARATED BY cns_line.
     &4 =  zif_bc_cons=>cns_e.
     APPEND VALUE #( id = cns_00 number = cns_000 type = zif_bc_cons=>cns_e message_v1 = &2  ) TO &5.
  ENDIF.
END-OF-DEFINITION.



DEFINE check_exists.
  CONCATENATE &2   &1 INTO &2 SEPARATED BY cns_line.
  &3 =  zif_bc_cons=>cns_e.
  APPEND VALUE #( id = cns_00 number = cns_000 type = zif_bc_cons=>cns_e message_v1 = &1  ) TO &4.
END-OF-DEFINITION.



DEFINE check_date.
  IF &1 <>  space.
    CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
      EXPORTING
        date                      = &1
      EXCEPTIONS
        plausibility_check_failed = 1.
    IF sy-subrc <> 0.
        CONCATENATE &3 &2 INTO &3 SEPARATED BY cns_line.
      &4  = zif_bc_cons=>cns_e.
    ENDIF.
  ENDIF.
END-OF-DEFINITION.


DEFINE convert_date.
  IF &1 = space.
    &2 = cns_0.
  ELSE.
    &2 = &1.
    CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
      EXPORTING
        date                      = &2
      EXCEPTIONS
        plausibility_check_failed = 1.
    IF sy-subrc <> 0.
        CONCATENATE &4  &3 INTO &4 SEPARATED BY cns_line.
      &5  = zif_bc_cons=>cns_e.
    ENDIF.
    APPEND VALUE #( id = cns_00 number = cns_000 type = zif_bc_cons=>cns_e message_v1 = &3  ) TO &6.
  ENDIF.
END-OF-DEFINITION.




DEFINE convert_number.
  REPLACE ALL OCCURRENCES OF cns_d IN &1 WITH space.
  CONDENSE &1 NO-GAPS.
  TRY .
      &2 = &1.
    CATCH cx_root INTO go_exception.
      CONCATENATE &4   &3   INTO &4 SEPARATED BY cns_line.
      &5  = zif_bc_cons=>cns_e.
      APPEND VALUE #( id = cns_00 number = cns_000 type = zif_bc_cons=>cns_e message_v1 = &3  ) TO &6.
  ENDTRY.
END-OF-DEFINITION.



DEFINE check_kunnr.
  DATA ls_kna1 TYPE kna1.
  IF &1 IS NOT INITIAL.
  CALL FUNCTION 'KNA1_READ_SINGLE'
  EXPORTING
  id_kunnr                  = &1
*   ID_CVP_BEHAVIOR           =
  IMPORTING
  es_kna1                   = ls_kna1
  EXCEPTIONS
  not_found                 = 1
  input_not_specified       = 2
  kunnr_blocked             = 3
  OTHERS                    = 4.

  IF ls_kna1 IS INITIAL AND sy-subrc <> 0  .
  CONCATENATE &2  TEXT-004 INTO &2 SEPARATED BY cns_line.
  &3  = zif_bc_cons=>cns_e.
  ENDIF.
  ENDIF.

END-OF-DEFINITION.

*&---------------------------------------------------------------------*
*& 包含               ZFIC015_SCR
*&---------------------------------------------------------------------*
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF BLOCK bl WITH FRAME.

  PARAMETERS p_fname TYPE string MEMORY ID f1.
SELECTION-SCREEN END OF BLOCK bl.

*&---------------------------------------------------------------------*
*& 包含               ZFIC015_FORMS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_get_pc_filename
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_pc_filename .

  DATA: lv_rc    TYPE i,                  "返回结果
        lv_title TYPE string,
        lt_file  TYPE filetable,       "返回文件路径内表
        ls_file  TYPE file_table.      "返回文件路径内表工作区

  CONSTANTS: cns_exten  TYPE string VALUE '*.xlsx,*.xls',
             cns_filter TYPE string VALUE 'Excel Files (*.xlsx)|*.xlsx|Excel Files (*.xls)|*.xls|All Files (*.*)|*.*',
             cns_intdir TYPE string VALUE 'C:\'.

  CLEAR: lv_rc, lt_file[], ls_file.

  lv_title = TEXT-m01 .

  CALL METHOD cl_gui_frontend_services=>file_open_dialog   "读取文件路径对话框
    EXPORTING
      window_title      = lv_title
      default_extension = cns_exten
      file_filter       = cns_filter
      initial_directory = cns_intdir
    CHANGING
      file_table        = lt_file
      rc                = lv_rc.

  IF lt_file[] IS NOT INITIAL.                  "返回文件路径给屏幕字段
    READ TABLE lt_file INTO ls_file INDEX 1.
    IF sy-subrc = 0.
      p_fname = ls_file-filename.
    ENDIF.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_download_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_download_template .
  DATA: lv_title     TYPE string,
        lv_file_name TYPE string,
        lv_temp_name TYPE string.

  lv_title     = TEXT-c01 .
  lv_file_name = TEXT-c02 .
  lv_temp_name = sy-repid .

  CALL METHOD zcl_bc_public_method=>mt_template_download
    EXPORTING
      iv_title     = lv_title      "提示框文本
      iv_file_name = lv_file_name  "下载后的文件名称
      iv_temp_name = lv_temp_name. "模版名称
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_check_file
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_file .
  DATA: lv_filename TYPE string,                  "文件路径
        lv_result   TYPE abap_bool.               "执行结果

* 检查文件类型
  CLEAR lv_result.

  lv_filename = p_fname.
  CALL METHOD cl_gui_frontend_services=>file_exist    "检查文件路径是否存在
    EXPORTING
      file                 = lv_filename
    RECEIVING
      result               = lv_result
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      wrong_parameter      = 3
      not_supported_by_gui = 4
      OTHERS               = 5.

  IF sy-subrc <> 0 OR lv_result = abap_false.
    MESSAGE TEXT-m02 TYPE zif_bc_cons=>cns_e   .
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_status_bar
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_5
*&      --> TEXT_M03
*&---------------------------------------------------------------------*
FORM frm_status_bar  USING    uv_percent  uv_message.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = uv_percent
      text       = uv_message.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_upload_data .

  DATA: lt_excel      TYPE TABLE OF zbcs_alsmex_tabline,
        lv_sheet_name TYPE char80.
  DATA: ls_return     TYPE zbcs_data_status .
  FIELD-SYMBOLS: <lfs_value>.

  CLEAR: gt_out[],gt_input[].


  lv_sheet_name = TEXT-002 .
* 读取数据到内表
*-----------------------------------------------------------------*
*--EXCEL 数据读取
*-----------------------------------------------------------------*

  CALL METHOD zcl_bc_tools=>mt_excel_read
    EXPORTING
      iv_flag    = abap_true
      iv_file    = p_fname
      iv_col_beg = 2
      iv_row_beg = 7
      iv_col_end = 80
      iv_row_end = 9999
      iv_sheet   = lv_sheet_name
    IMPORTING
      es_return  = ls_return
      et_inter   = lt_excel.

  IF ls_return-status = zif_bc_cons=>cns_e.         "读取EXCEL 数据失败
    MESSAGE TEXT-m01 TYPE zif_bc_cons=>cns_e.
  ELSE.
    SORT lt_excel BY row col.
                                                   "#EC CI_LOOP_INTO_HL
    LOOP AT lt_excel INTO DATA(ls_excel).
      ASSIGN COMPONENT ls_excel-col OF STRUCTURE gs_input TO <lfs_value>.
      <lfs_value> = ls_excel-value.
      AT END OF row.
        APPEND gs_input TO gt_input.
        CLEAR gs_input.
      ENDAT.
    ENDLOOP.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_check_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_data .
**成本中心检查
  WITH +data AS ( SELECT DISTINCT kostl FROM @gt_input AS lt )
  SELECT a~kostl
   FROM csks AS a
   INNER JOIN +data AS b ON b~kostl = a~kostl
   INTO TABLE @DATA(lt_csks).
  SORT lt_csks[] BY kostl.

***资产编码检查
  WITH +data  AS ( SELECT DISTINCT bukrs,anln1,anln2 FROM @gt_input AS lt )
  SELECT a~bukrs,
         a~anln1,
         a~anln2
   FROM anla AS a
   INNER JOIN +data AS b ON b~anln1 = a~anln1 AND b~anln2 = a~anln2 AND b~bukrs = a~bukrs
   INTO TABLE @DATA(lt_anla).
  SORT lt_anla[] BY bukrs anln1  anln2.

***折旧范围检查
  WITH +data  AS ( SELECT DISTINCT bukrs,afabe01 FROM @gt_input AS lt )
  SELECT a~comp_code AS bukrs,
         a~depr_area AS afabe01
  FROM faa_derp_area AS a
  INNER JOIN +data AS b ON b~bukrs = a~comp_code AND b~afabe01 = a~depr_area
  INTO TABLE @DATA(lt_faa_derp_area).

  SORT lt_faa_derp_area[] BY bukrs afabe01.

  LOOP AT gt_input ASSIGNING FIELD-SYMBOL(<lfs_input>).
    CLEAR gs_out.
    MOVE-CORRESPONDING <lfs_input> TO gs_out.
***转化大写
    TRANSLATE: gs_out-anlkl  TO UPPER CASE,
               gs_out-bukrs  TO UPPER CASE,
               gs_out-kostl  TO UPPER CASE,
               gs_out-afasl  TO UPPER CASE.
*   成本中心内部表示转换
    gs_out-anln1 = |{ gs_out-anln1 ALPHA = IN }|.
    gs_out-anln2 = |{ gs_out-anln2 ALPHA = IN }|.
    gs_out-kostl = |{ gs_out-kostl ALPHA = IN }|.
    gs_out-anlkl = |{ gs_out-anlkl ALPHA = IN }|.
**必输检查
    check_initial:gs_out-anlkl    TEXT-005  gs_out-msg  gs_out-type gs_out-t_msg,
                  gs_out-bukrs    TEXT-006  gs_out-msg  gs_out-type gs_out-t_msg,
                  gs_out-txt50    TEXT-009  gs_out-msg  gs_out-type gs_out-t_msg,
                  gs_out-menge    TEXT-008  gs_out-msg  gs_out-type gs_out-t_msg,
                  gs_out-kostl    TEXT-012  gs_out-msg  gs_out-type gs_out-t_msg,
                  gs_out-afasl    TEXT-013  gs_out-msg  gs_out-type gs_out-t_msg,
*                  gs_out-ndjar    TEXT-014  gs_out-msg  gs_out-type gs_out-t_msg,
*                  gs_out-ndper    TEXT-015  gs_out-msg  gs_out-type gs_out-t_msg,
                  gs_out-anbtr01  TEXT-016  gs_out-msg  gs_out-type gs_out-t_msg.

    IF gs_out-type IS INITIAL.
***格式检查
      convert_date    <lfs_input>-aktiv      gs_out-aktiv      TEXT-007   gs_out-msg  gs_out-type gs_out-t_msg.
      convert_date    <lfs_input>-odep_date  gs_out-odep_date  TEXT-017   gs_out-msg  gs_out-type gs_out-t_msg.

*     convert_number  <lfs_input>-menge  gs_out-menge  TEXT-008   gs_out-msg  gs_out-type gs_out-t_msg.
**成本中心是否存在
      IF gs_out-kostl IS NOT INITIAL AND NOT line_exists( lt_csks[ kostl = gs_out-kostl ] ).
        DATA(lv_kostl) = gs_out-kostl &&  TEXT-018 .
        check_exists   lv_kostl gs_out-msg  gs_out-type  gs_out-t_msg.
      ENDIF.

      IF gs_out-anln1 IS NOT INITIAL AND NOT line_exists( lt_anla[ bukrs = gs_out-bukrs anln1 = gs_out-anln1 ] ).
        DATA(lv_anln1) = gs_out-anln1 && TEXT-068.
        check_exists  lv_anln1  gs_out-msg  gs_out-type  gs_out-t_msg.
      ENDIF.

      IF gs_out-afabe01 IS NOT INITIAL AND NOT line_exists( lt_faa_derp_area[ bukrs = gs_out-bukrs afabe01 = gs_out-afabe01 ] ).
        DATA(lv_afabe01) = gs_out-afabe01  && TEXT-069.
        check_exists   lv_afabe01 gs_out-msg  gs_out-type  gs_out-t_msg.
      ENDIF.

    ENDIF.

    IF gs_out-type IS  NOT INITIAL.
      gs_out-icon  = cns_red_light.
    ENDIF.
    SHIFT gs_out-msg  LEFT DELETING LEADING cns_line.
    ##UOM_IN_MES
    WRITE gs_out-menge TO gs_out-menge1 NO-GROUPING DECIMALS 0.
    APPEND gs_out TO gt_out.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_data .
  DATA: lwa_grid_settings      TYPE lvc_s_glay.
  "ALV 输出
  PERFORM frm_set_fieldcat.
  PERFORM frm_set_layout .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = cns_alv_status     "cns_status 按钮
      i_callback_user_command  = cns_alv_comand   "捕获操作命令
      is_layout_lvc            = gs_layout            "lvc布局变量
      it_fieldcat_lvc          = gt_fieldcat          "字段目录变量
      i_grid_settings          = lwa_grid_settings
      i_save                   = zif_bc_cons=>cns_a
    TABLES
      t_outtab                 = gt_out              "alv显示的内表
    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.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form frm_set_status
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_alv_pf_status USING ut_extab TYPE slis_t_extab ##CALLED.
  SET PF-STATUS cns_alv_gui ##STAT_UNDEF."EXCLUDING ct_extab.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form frm_user_command
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_alv_user_command USING u_ucomm  TYPE sy-ucomm
                             us_selfield TYPE slis_selfield ##CALLED.

  DATA:lo_grid  TYPE REF TO cl_gui_alv_grid.
  DATA lv_answer .
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lo_grid.
  CALL METHOD lo_grid->check_changed_data.

  CASE u_ucomm .
    WHEN cns_post .
      IF   line_exists( gt_out[ sel = abap_true ] ).
        PERFORM frm_fixedasset_ovrtake_create.  "批量过账
      ELSE.
        MESSAGE TEXT-067 TYPE zif_bc_cons=>cns_s   DISPLAY LIKE zif_bc_cons=>cns_e.
      ENDIF.
    WHEN cns_ic1.  "单击
      READ TABLE gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) INDEX us_selfield-tabindex.
***消息展示
      IF us_selfield-fieldname = cns_icon AND <fs_out>-icon IS NOT INITIAL.
        CALL FUNCTION 'FINB_BAPIRET2_DISPLAY'
          EXPORTING
            it_message = <fs_out>-t_msg.
      ENDIF.
  ENDCASE.

  us_selfield-refresh    = abap_true.
  us_selfield-col_stable = abap_true.
  us_selfield-row_stable = abap_true.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat .
  CONSTANTS: cns_space TYPE c LENGTH 5 VALUE 'SPACE' .
  DATA:ls_fieldcat TYPE lvc_s_fcat,
       lv_pos      TYPE i.

  DEFINE mcr_fieldcat_set.
    lv_pos = lv_pos + 1.
    ls_fieldcat-col_pos   = lv_pos.
    ls_fieldcat-fieldname = '&1'.
    ls_fieldcat-coltext   = &2.
    ls_fieldcat-scrtext_l = &2.
    ls_fieldcat-scrtext_m = &2.
    ls_fieldcat-scrtext_s = &2.
    ls_fieldcat-ref_table = '&3'.
    ls_fieldcat-ref_field = '&4'.
    ls_fieldcat-edit      = &5.
    ls_fieldcat-outputlen = &6.
    ls_fieldcat-key       = &7.
    ls_fieldcat-checkbox  = &8 .
    ls_fieldcat-hotspot   = &9 .
    ls_fieldcat-lzero     = space .
*   LS_FIELDCAT-JUST      = &A .
*  LS_FIELDCAT-decimals_o = 0 .
    ls_fieldcat-scrtext_l = ls_fieldcat-coltext .
    ls_fieldcat-scrtext_m = ls_fieldcat-coltext .
    ls_fieldcat-scrtext_s = ls_fieldcat-coltext .
    IF ls_fieldcat-ref_table EQ cns_space OR
       ls_fieldcat-ref_field EQ cns_space .
      CLEAR:ls_fieldcat-ref_table,ls_fieldcat-ref_field .
    ENDIF.
      ls_fieldcat-col_opt   =  zif_bc_cons=>cns_a.          "自动优化列宽
    APPEND ls_fieldcat TO gt_fieldcat .
    CLEAR ls_fieldcat.
  END-OF-DEFINITION.
  REFRESH: gt_fieldcat[] .


  mcr_fieldcat_set:
    icon              TEXT-020   space    space   space    space   space   space  space ," LED
    msg               TEXT-021   space    space   space    space   space   space  space ,"消息文本
    anln1             TEXT-022   anla     anln1   space    space   space   space  space ,"主资产编号
    anln2             TEXT-023   anln1    anln2   space    space   space   space  space ,"子资产编号
    anlkl             TEXT-024   anln1    anlkl   space    space   space   space  space ,"资产分类
    bukrs             TEXT-025   space    space   space    space   space   space  space ,"公司代码
    txt50             TEXT-026   anla     txt50   space    space   space   space  space ,"资产描述
    txa50             TEXT-027   anla     txa50   space    space   space   space  space ,"原资产编号
    sernr             TEXT-028   anla     sernr   space    space   space   space  space ,"资产规格型号
    stort             TEXT-029   space    space   space    space   space   space  space ,"存放地点
    werks             TEXT-030   space    space   space    space   space   space  space ,"工厂组织
    ord41             TEXT-032   space    space   space    space   space   space  space ,"使用状态
    ord42             TEXT-033   space    space   space    space   space   space  space ,"来源变动方式-增加
    ord43             TEXT-034   space    space   space    space   space   space  space ,"来源变动方式-减少
    ord44             TEXT-034   space    space   space    space   space   space  space ,"生产性生物资产类型
    gdlgrp            TEXT-035   space    space   space    space   space   space  space ,"经济用途
    menge             TEXT-036   space    space   space    space   space   space  space ,"数量
    meins             TEXT-037   anla     meins   space    space   space   space  space ,"单位
    aktiv             TEXT-038   anla     aktiv   space    space   space   space  space ,"资产本金化日期
    kostlv            TEXT-039   anlz     kostlv   space    space   space   space  space ,"责任成本中心
    kostl             TEXT-040   anlz     kostl   space    space   space   space  space ,"成本中心
    caufn             TEXT-041   anlz     caufn   space    space   space   space  space ,"内部订单
    zza01             TEXT-042   anlu     zza01   space    space   space   space  space ,"技术编码
    zza02             TEXT-043   anlu     zza02   space    space   space   space  space ,"保管人
    zza03             TEXT-044   anlu     zza03   space    space   space   space  space ,"保修期限
    zza04             TEXT-045   anlu     zza04   space    space   space   space  space ,"保修号
    zza05             TEXT-046   anlu     zza05   space    space   space   space  space ,"使用人
    zza06             TEXT-047   anlu     zza06   space    space   space   space  space ,"备注
    zza07             TEXT-048   anlu     zza07   space    space   space   space  space ,"猪只品系
    zza08             TEXT-049   anlu     zza08   space    space   space   space  space ,"养殖部猪耳号
    zza09             TEXT-050   anlu     zza09   space    space   space   space  space ,"性别(公母)
    zza10             TEXT-051   anlu     zza10   space    space   space   space  space ,"饲料环模号
    zza11             TEXT-052   anlu     zza11   space    space   space   space  space ,"质保金及期限
    zza12             TEXT-053   anlu     zza12   space    space   space   space  space ,"房产证号
    zza13             TEXT-054   anlu     zza13   space    space   space   space  space ,"采购凭证编号
    zza14             TEXT-055   anlu     zza14   space    space   space   space  space ,"是否缴纳房产税
    afasl             TEXT-056   anlb     afasl   space    space   space   space  space ,"折旧码(账面)
    odep_date         TEXT-057   space    space   space    space   space   space  space ,"折旧开始日期(账面)
    ndjar             TEXT-058   space    space   space    space   space   space  space ,"使用年限(账面)
    ndper             TEXT-059   space    space   space    space   space   space  space ,"使用月份(账面)
    ndabj             TEXT-060   space    space   space    space   space   space  space ,"到期使用期限(期间)
    ndabp             TEXT-061   space    space   space    space   space   space  space ,"到期使用年限
    afabe01           TEXT-062   space    space   space    space   space   space  space ,"折旧范围(01)
    anbtr01           TEXT-063   space    space   space    space   space   space  space ,"原值
    kaufw             TEXT-064   space    space   space    space   space   space  space ,"重估减值
    anbtr01_1         TEXT-065   space    space   space    space   space   space  space ,"以前年度计提折旧
    anbtr01_2         TEXT-066   space    space   space    space   space   space  space ."本年计提折旧
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_layout .
  gs_layout = VALUE #( zebra       = abap_true
*                       cwidth_opt = abap_true
                       sel_mode    = zif_bc_cons=>cns_d
*                       sgl_clk_hd  =  cns_pick
                       box_fname   =  cns_sel
                       ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_fixedasset_ovrtake_create
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_fixedasset_ovrtake_create .
  DATA: ls_key                  TYPE  bapi1022_key,
        ls_generaldata          LIKE  bapi1022_feglg001,
        ls_generaldatax         LIKE  bapi1022_feglg001x,
        ls_inventory            TYPE  bapi1022_feglg011,
        ls_inventoryx           TYPE  bapi1022_feglg011x,
        ls_postinginformation   LIKE  bapi1022_feglg002,
        ls_postinginformationx  LIKE  bapi1022_feglg002x,
        ls_timedependentdata    LIKE  bapi1022_feglg003,
        ls_timedependentdatax   LIKE  bapi1022_feglg003x,
        ls_allocations          LIKE  bapi1022_feglg004,
        ls_allocationsx         LIKE  bapi1022_feglg004x,
        ls_origin               LIKE  bapi1022_feglg009,
        ls_originx              LIKE  bapi1022_feglg009x,
        ls_investacctassignmnt  LIKE  bapi1022_feglg010,
        ls_investacctassignmntx LIKE  bapi1022_feglg010x,
        ls_networthvaluation    LIKE  bapi1022_feglg006,
        ls_networthvaluationx   LIKE  bapi1022_feglg006x,
        ls_assetcreated         LIKE  bapi1022_reference,
        lt_depreciationareas    LIKE TABLE OF bapi1022_dep_areas,
        lt_depreciationareasx   LIKE TABLE OF bapi1022_dep_areasx,
        lt_cumulatedvalues      LIKE TABLE OF bapi1022_cumval,
        lt_postedvalues         LIKE TABLE OF bapi1022_postval,
        lt_transactions         LIKE TABLE OF bapi1022_trtype,
        lt_proportionalvalues   LIKE TABLE OF bapi1022_propval,
        lt_extensionin          TYPE TABLE OF bapiparex,
        ls_bapi_te_anlu         TYPE bapi_te_anlu,
        lt_return               LIKE TABLE OF bapiret2.

  DATA: lv_fisc_year TYPE bapi1022_cumval-fisc_year,
        lv_during_fy TYPE c.
  DATA:lv_area       TYPE anlb-afabe."折旧范围
  DATA lv_datum      TYPE datum.
  DATA lv_flag       TYPE c.
  DATA lv_anln1      TYPE anla-anln1 .
  DATA lv_anln2      TYPE anla-anln2 .
  WITH +data AS ( SELECT DISTINCT bukrs FROM @gt_out AS lt )
  SELECT a~bukrs,
         a~datum
  FROM   t093c AS a
  INNER JOIN +data  AS b ON b~bukrs = a~bukrs
  INTO TABLE @DATA(lt_t093c).
  SORT lt_t093c[] BY bukrs.

  LOOP AT gt_out ASSIGNING FIELD-SYMBOL(<fs_out>) WHERE sel = abap_true AND icon <> cns_green_light.

    CLEAR:ls_key,
          ls_generaldata,
          ls_generaldatax,
          lv_fisc_year,
          lv_during_fy,
          ls_postinginformation,
          ls_postinginformationx,
          ls_timedependentdata,
          ls_timedependentdatax,
          ls_allocations,
          ls_allocationsx,
          ls_origin,
          ls_originx,
          ls_networthvaluation,
          ls_networthvaluationx,
          ls_assetcreated,
          ls_bapi_te_anlu,
          lv_datum,
          lv_flag,
          lv_anln1,
          lv_anln2.
    REFRESH:lt_return,
            lt_postedvalues,
            lt_cumulatedvalues,
            lt_transactions,
            lt_extensionin,
            lt_proportionalvalues,
            lt_depreciationareas,
            lt_depreciationareasx.


    CALL FUNCTION 'AISCO_CALCULATE_FIRST_DAY'
      EXPORTING
        i_bukrs     = <fs_out>-bukrs
      IMPORTING
        e_to_year   = lv_fisc_year
        e_during_fy = lv_during_fy.

    IF  <fs_out>-zza14 = TEXT-019.
      gs_out-zza14 = abap_true.
    ENDIF.

    ls_key-companycode = <fs_out>-bukrs.  "公司代码
    IF <fs_out>-anln1 IS NOT INITIAL.
      lv_flag = abap_true.
      ls_key-asset = <fs_out>-anln1.        "资产号
    ENDIF.
    IF <fs_out>-anln2 IS NOT INITIAL.
      ls_key-subnumber = <fs_out>-anln2.     "资产次级编号
    ENDIF.

    ls_generaldata-assetclass = <fs_out>-anlkl. "资产分类
    ls_generaldata-descript   = <fs_out>-txt50.  "资产描述
    ls_generaldata-descript2  = <fs_out>-txa50.  "附加资产描述
    ls_generaldata-serial_no  = <fs_out>-sernr.  "资产规格型号
*    ls_generaldata-invent_no  = <fs_out>-invnr.  "库存号
    ls_generaldata-quantity   = <fs_out>-menge. "数量
    ls_generaldata-base_uom   = <fs_out>-meins.  "基本计量单位
*   ls_generaldata-main_descript = pw_itab-anlhtxt. "资产主号说明
    ls_generaldatax-assetclass  = abap_true.          "
    ls_generaldatax-descript    = abap_true.
    ls_generaldatax-descript2   = abap_true.
    ls_generaldatax-serial_no   = abap_true.
*    ls_generaldatax-invent_no   = abap_true.
    ls_generaldatax-quantity    = abap_true.
*    ls_generaldatax-main_descript = abap_true.
    ls_generaldatax-base_uom    = abap_true.

*  l_inventory-note = pw_itab-invzu."补充库存说明
*  l_inventoryx-note  = 'X'.

    ls_postinginformation-cap_date = <fs_out>-aktiv.  "资产资本化日期
    ls_postinginformationx-cap_date = abap_true.
*  l_postinginformation-initial_acq = pw_itab-zugdt.  "首次购置日期
*  l_postinginformationx-initial_acq = 'X'.
* 时间相关信息
    ls_timedependentdata-costcenter  = <fs_out>-kostl.  "成本中心
    ls_timedependentdata-resp_cctr   = <fs_out>-kostlv. "责任成本中心
* 内部订单
    ls_timedependentdata-intern_ord  = <fs_out>-aufnr.  "内订单号
    ls_timedependentdata-location    = <fs_out>-stort.  "资产地点
    ls_timedependentdata-plant       = <fs_out>-werks.  "工厂
    ls_timedependentdatax-costcenter = abap_true.
    ls_timedependentdatax-resp_cctr  = abap_true.
    ls_timedependentdatax-intern_ord = abap_true.
    ls_timedependentdatax-location   = abap_true.
    ls_timedependentdatax-plant      = abap_true.

**资产状态,来源变动方式
    ls_allocations-evalgroup1  =  <fs_out>-ord41."资产状态
    ls_allocations-evalgroup2  =  <fs_out>-ord42."来源变动方式-增加
    ls_allocations-evalgroup3  =  <fs_out>-ord43."来源变动方式-减少
    ls_allocations-evalgroup4  =  <fs_out>-ord44."生产性生物资产类型
    ls_allocations-evalgroup5  =  <fs_out>-gdlgrp."经济用途
    ls_allocationsx-evalgroup1 =  abap_true.
    ls_allocationsx-evalgroup2 =  abap_true.
    ls_allocationsx-evalgroup3 =  abap_true.
    ls_allocationsx-evalgroup4 =  abap_true.
    ls_allocationsx-evalgroup5 =  abap_true.

**账面折旧
    APPEND VALUE #(  area            = <fs_out>-afabe01
                     dep_key         = <fs_out>-afasl
                     ulife_yrs       = <fs_out>-ndjar
                     ulife_prds      = <fs_out>-ndper
                     odep_start_date = <fs_out>-odep_date )
                      TO lt_depreciationareas.

    APPEND VALUE #( area             = <fs_out>-afabe01
                    dep_key          = abap_true
                    ulife_yrs        = abap_true
                    ulife_prds       = abap_true
                    odep_start_date  = abap_true )
                   TO lt_depreciationareasx.


***本年正常折旧
    APPEND VALUE #( fisc_year  =  lv_fisc_year
                   area        = <fs_out>-afabe01
                   ord_dep     = <fs_out>-anbtr01_2
*                     rev_repl    = <fs_out>-kaufw
*                     unp_dep     = <fs_out>-anbtr01_2 "本年计提折旧
                   currency    = cns_cny )
                 TO lt_postedvalues.
**"往年折旧
    IF <fs_out>-aktiv(4) <>  lv_fisc_year.
      APPEND VALUE #( fisc_year = lv_fisc_year
                      area      = <fs_out>-afabe01    "以前年度累计折旧
                      acq_value = <fs_out>-anbtr01    "原值
                      ord_dep   = <fs_out>-anbtr01_1  "以前年度折旧
                      rev_repl  = <fs_out>-kaufw      "以前年度重置价值的累计重估
*                      unp_dep   = <fs_out>-anbtr01_2  "以前计提折旧
          ) TO lt_cumulatedvalues.

    ELSE.

      READ TABLE lt_t093c INTO DATA(ls_t093c) WITH  KEY  bukrs = <fs_out>-bukrs BINARY SEARCH.
      IF sy-subrc = 0 .
        lv_datum = ls_t093c-datum.
      ENDIF.
      APPEND VALUE #( fisc_year  =  lv_fisc_year
                      current_no =  cns_lnran
                      area       = <fs_out>-afabe01
                      assettrtyp = cns_100
                      valuedate  =  lv_datum
                      amount     = <fs_out>-anbtr01
                      currency   = cns_cny )
                    TO lt_transactions.
    ENDIF.

***增强字段
    ls_bapi_te_anlu-zza01 = <fs_out>-zza01.
    ls_bapi_te_anlu-zza02 = <fs_out>-zza02.
    ls_bapi_te_anlu-zza03 = <fs_out>-zza03 .
    ls_bapi_te_anlu-zza04 = <fs_out>-zza04 .
    ls_bapi_te_anlu-zza05 = <fs_out>-zza05 .
    ls_bapi_te_anlu-zza06 = <fs_out>-zza06 .
    ls_bapi_te_anlu-zza07 = <fs_out>-zza07 .
    ls_bapi_te_anlu-zza08 = <fs_out>-zza08 .
    ls_bapi_te_anlu-zza09 = <fs_out>-zza09 .
    ls_bapi_te_anlu-zza10 = <fs_out>-zza10 .
    ls_bapi_te_anlu-zza11 = <fs_out>-zza11 .
    ls_bapi_te_anlu-zza12 = <fs_out>-zza12 .
    ls_bapi_te_anlu-zza13 = <fs_out>-zza13 .
    ls_bapi_te_anlu-zza14 = <fs_out>-zza14 .

    APPEND VALUE #( structure  = cns_bapi
                    valuepart1 = ls_bapi_te_anlu )
                TO lt_extensionin.


    CALL FUNCTION 'BAPI_FIXEDASSET_OVRTAKE_CREATE'
      EXPORTING
        key                  = ls_key
*       REFERENCE            =
        createsubnumber      = lv_flag
*       creategroupasset     = 'X'
*       testrun              = p_testrun
        generaldata          = ls_generaldata
        generaldatax         = ls_generaldatax
        inventory            = ls_inventory
        inventoryx           = ls_inventoryx
        postinginformation   = ls_postinginformation
        postinginformationx  = ls_postinginformationx
        timedependentdata    = ls_timedependentdata
        timedependentdatax   = ls_timedependentdatax
        allocations          = ls_allocations
        allocationsx         = ls_allocationsx
        origin               = ls_origin
        originx              = ls_originx
        investacctassignmnt  = ls_investacctassignmnt
        investacctassignmntx = ls_investacctassignmntx
        networthvaluation    = ls_networthvaluation
        networthvaluationx   = ls_networthvaluationx
*       REALESTATE           =
*       REALESTATEX          =
*       INSURANCE            =
*       INSURANCEX           =
*       LEASING              =
*       LEASINGX             =
      IMPORTING
*       COMPANYCODE          =
        asset                = lv_anln1
        subnumber            = lv_anln2
        assetcreated         = ls_assetcreated
      TABLES
        depreciationareas    = lt_depreciationareas
        depreciationareasx   = lt_depreciationareasx
*       INVESTMENT_SUPPORT   =
        extensionin          = lt_extensionin
        cumulatedvalues      = lt_cumulatedvalues
        postedvalues         = lt_postedvalues
        transactions         = lt_transactions
        proportionalvalues   = lt_proportionalvalues
        return               = lt_return.
*       POSTINGHEADERS       =

    <fs_out>-t_msg = lt_return.
    LOOP AT lt_return INTO DATA(ls_return) WHERE type CA cns_exa. "#EC CI_NESTED
      CONCATENATE <fs_out>-msg ls_return-message INTO <fs_out>-msg SEPARATED BY cns_line.
    ENDLOOP.

    IF sy-subrc = 0 .
      SHIFT <fs_out>-msg LEFT DELETING LEADING cns_line.
      <fs_out>-icon = cns_red_light.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ELSE.
      READ TABLE lt_return INTO ls_return WITH  KEY type = zif_bc_cons=>cns_s.
      <fs_out>-msg   = ls_return-message.
      <fs_out>-anln1 = lv_anln1.
      <fs_out>-anln2 = lv_anln2.
      <fs_out>-icon = cns_green_light.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = abap_true.
    ENDIF.

  ENDLOOP.
ENDFORM.

001 必填
002 导入模板
003 格式错误
005 资产分类必填
006 公司代码必填
007 资产资本化日期格式错误
008 数量必填
009 资产描述必填
010 基本计量单位必填
011 资产资本化日期必填
012 成本中心必填
013 折旧码(账面)必填
014 使用年限(账面)必填
015 使用月份(账面)必填
016 原值必填
017 折旧开始日期(账面)格式错误
018 成本中心在系统中不存在,请检查
019 是
020 LED
021 消息文本
022 主资产编号
023 子资产编号
024 资产分类
025 公司代码
026 资产描述
027 原资产编号
028 资产规格型号
029 存放地点
030 工厂组织
032 使用状态
033 来源变动方式-增加
034 来源变动方式-减少
035 经济用途
036 数量
037 单位
038 资产本金化日期
039 责任成本中心
040 成本中心
041 内部订单
042 技术编码
043 保管人
044 保修期限(年)
045 保修号
046 使用人
047 备注
048 猪只品系
049 养殖部猪耳号
050 性别(公母)
051 饲料环模号
052 质保金及期限
053 房产证号
054 采购凭证编号
055 是否缴纳房产税
056 折旧码(账面)
057 折旧开始日期(账面)
058 使用年限(账面)
059 使用月份(账面)
060 到期使用期限(期间)
061 到期使用年限
062 折旧范围(01)
063 原值
064 重估减值
065 以前年度计提折旧
066 本年计提折旧
067 至少选择一行数据
068 资产编号在系统中不存在
069 折旧范围在系统中不存在
A01 模板下载
C01 选择存储路径.
C02 资产批导模板
C03 ZFIC015
M01 数据文件读取失败.
M02 请先检查数据后再导入.
M03 正在检查文件…
M04 正在上载数据…
M05 正在检查数据…
M06 正在显示数据…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值