固定资产批导程序(2)

*&---------------------------------------------------------------------*
*& Report ZFI002
*&---------------------------------------------------------------------*
*&
*  System      :  
*  Module      :  FI
*  Tcode       :  ZFI002
*  Program ID  :  ZFI002
*  Program     :  固定资产批量导入
*  Author      :  JTQJ
*  Date        :  2018.12.20
*  Description :  固定资产批量导入
*&
*&---------------------------------------------------------------------*
*  Modified Recorder :
*  Date         C#NO        Author                Content
*  -----------  -------    ------------------     ---------------
REPORT ZFI002.

TABLES: SSCRFIELDS.

TYPES: BEGIN OF TYP_DATA ,
         ANLKL   TYPE ANLA-ANLKL , " 资产分类
         BUKRS   TYPE ANLA-BUKRS,  " 公司代码
         ANLN1   TYPE ANLA-ANLN1 , " 资产编号
         TXT50   TYPE ANLA-TXT50,  " 描述
         TXA50   TYPE ANLA-TXA50,  " 附加描述
         ANLHTXT TYPE ANLH-ANLHTXT, " 规格型号
         SERNR   TYPE ANLA-SERNR , " 序列号
         INVNR   TYPE ANLA-INVNR,  " 存货号
         XHIST   TYPE XHIST ,      " 历史性管理
         INKEN   TYPE INKEN ,      " 库存标记
         AKTIV   TYPE ANLA-AKTIV,  " 资本化日期
         DEAKT   TYPE ANLA-DEAKT,  " 不活动日期(报废)
         MENGE   TYPE ANLA-MENGE,  " 数量
         MEINS   TYPE ANLA-MEINS,  " 单位
         KOSTL   TYPE ANLZ-KOSTL,  " 成本中心
         RAUMN   TYPE ANLZ-RAUMN,  " 房间
         KFZKZ   TYPE ANLZ-KFZKZ,  " 融资抵押
         ORD41   TYPE ANLA-ORD41,  " 评估组1
         ORD42   TYPE ANLA-ORD42,  " 评估组2
         ORD43   TYPE ANLA-ORD43,  " 评估组3
         ORD44   TYPE ANLA-ORD44,  " 评估组4
         GDLGRP  TYPE ANLA-GDLGRP, " 评估组 5
         LIFNR   TYPE ANLA-LIFNR,  " 供应商科目编号
         LIEFE   TYPE ANLA-LIEFE,  " 供应商名称
         HERST   TYPE ANLA-HERST,  " 制造商
         TYPBZ   TYPE ANLA-TYPBZ,  " 类型名
         AFABE   TYPE ANLB-AFABE,  " 实际折旧范围
         AFASL   TYPE ANLB-AFASL,  " 折旧码
         NDJAR   TYPE ANLB-NDJAR,  " 年度
         NDPER   TYPE ANLB-NDPER,  " 期间
         SCHRW   TYPE ANLB-SCHRW,  " 残值
         KANSW   TYPE ANLC-KANSW,  " 原值
         KNAFA   TYPE ANLC-KNAFA,  " 累计折旧
         KNAFA2  TYPE ANLC-KNAFA,  " 本年折旧
         WAERS   TYPE WAERS,       " 币别
       END OF TYP_DATA .

DATA: GT_DATA TYPE STANDARD TABLE OF TYP_DATA,
      GS_DATA TYPE TYP_DATA.

SELECTION-SCREEN: FUNCTION KEY 1.

FIELD-SYMBOLS: <DATA> TYPE TYP_DATA.

DATA: TTL_TEXT TYPE STRING .
*----------------------------------------------------------------------*
DATA: I_S_LOG TYPE BAL_S_LOG.
DATA: I_S_MSG TYPE BAL_S_MSG.
DATA: E_LOG_HANDLE TYPE BALLOGHNDL.
DATA: L_S_DISPLAY_PROFILE TYPE BAL_S_PROF.
*----------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001 .
PARAMETERS: P_FILE TYPE RLGRAP-FILENAME MEMORY ID M1.
PARAMETERS: P_RUN TYPE C AS CHECKBOX DEFAULT 'X' .
SELECTION-SCREEN END OF BLOCK B1 .
*-----------------------------------------------------------------------*
INITIALIZATION .

  SSCRFIELDS-FUNCTXT_01 = '下载模版'.
  TTL_TEXT = '固定资产导入' .
  SET TITLEBAR 'TITLE1000' WITH TTL_TEXT .

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE .
  PERFORM GET_FILE_PATH .

*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
  CASE SSCRFIELDS-UCOMM.
    WHEN 'FC01'.
      PERFORM FRM_DOWNLOAD USING '固定资产批量导入' 'ZFI002' CHANGING P_FILE.
      RETURN.
  ENDCASE.

  IF P_FILE IS INITIAL.
    MESSAGE E899(MM) WITH '路径为必输字段!' DISPLAY LIKE 'E'.
  ENDIF.


START-OF-SELECTION .
  PERFORM SUB_GET_DATA .
  PERFORM SUB_CHECK_DATA .
  IF GT_DATA[] IS NOT INITIAL .
    PERFORM CREATE_ASSET_DATA .
  ELSE.
    MESSAGE '未能读取导入数据!' TYPE 'S' DISPLAY LIKE 'E' .
    LEAVE LIST-PROCESSING .
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  GET_FILE_PATH
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_FILE_PATH .

  DATA: RC         TYPE I,
        F_TABLE    TYPE FILETABLE,
        L_INITNAME TYPE STRING.

  FIELD-SYMBOLS: <F> TYPE FILE_TABLE .

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE            = '选择文件'
      DEFAULT_FILENAME        = L_INITNAME
      FILE_FILTER             = 'Excel文件(*.XLS,*.XLSX)|*.XLS;*.XLSX|全部文件 (*.*)|*.*|'
      INITIAL_DIRECTORY       = 'C:\'
      MULTISELECTION          = ' '
    CHANGING
      FILE_TABLE              = F_TABLE
      RC                      = RC
    EXCEPTIONS
      CNTL_ERROR              = 1
      FILE_OPEN_DIALOG_FAILED = 2
      ERROR_NO_GUI            = 3.

  CALL METHOD CL_GUI_CFW=>FLUSH
    EXCEPTIONS
      CNTL_ERROR        = 1
      CNTL_SYSTEM_ERROR = 2.
  CLEAR: P_FILE .
  READ TABLE F_TABLE ASSIGNING <F> INDEX 1.
  IF SY-SUBRC EQ 0.
    P_FILE = <F>-FILENAME.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SUB_GET_DATA .

  DATA: BATCH_DATA LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
  DATA: L_ROW TYPE I,
        L_COL TYPE I.

  FIELD-SYMBOLS: <F1> TYPE ANY .
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = P_FILE
      I_BEGIN_COL             = 1
      I_BEGIN_ROW             = 3
      I_END_COL               = 50
      I_END_ROW               = 9999
    TABLES
      INTERN                  = BATCH_DATA
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.
  IF SY-SUBRC <> 0.
    MESSAGE '数据读取错误' TYPE 'S' DISPLAY LIKE 'E' .
    RETURN .
  ELSE .
    CLEAR:GT_DATA[],L_ROW .
    LOOP AT BATCH_DATA .
      L_COL = BATCH_DATA-COL .
      CONDENSE BATCH_DATA-VALUE NO-GAPS.
      ASSIGN COMPONENT L_COL OF STRUCTURE GS_DATA TO <F1> .
      IF <F1> IS ASSIGNED .
        TRY .
            <F1> = BATCH_DATA-VALUE .
          CATCH CX_SY_CONVERSION_NO_NUMBER .
            MESSAGE '文件读取内容异常!' TYPE 'E' .
        ENDTRY.
      ENDIF.
      AT END OF ROW .
        APPEND GS_DATA TO GT_DATA .
        CLEAR: GS_DATA .
      ENDAT .
    ENDLOOP .
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CREATE_ASSET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREATE_ASSET_DATA .
*-----------------------------------------------------------------------*
  DATA: L_ASSET               TYPE BAPI1022_1-ASSETMAINO,
        LS_KEY                TYPE BAPI1022_KEY,
        LS_GENERALDATA        TYPE BAPI1022_FEGLG001,
        LS_GENERALDATAX       TYPE BAPI1022_FEGLG001X,
        LS_INVENTORY          TYPE BAPI1022_FEGLG011,
        LS_INVENTORYX         TYPE BAPI1022_FEGLG011X,
        LS_TIMEDEPEND         TYPE BAPI1022_FEGLG003,
        LS_TIMEDEPENDX        TYPE BAPI1022_FEGLG003X,
        LS_ALLOCATIONS        LIKE BAPI1022_FEGLG004,
        LS_ALLOCATIONSX       LIKE BAPI1022_FEGLG004X,
        LS_ORIGIN             LIKE BAPI1022_FEGLG009,
        LS_ORIGINX            LIKE BAPI1022_FEGLG009X,
        LS_POSTING            TYPE BAPI1022_FEGLG002,
        LS_POSTINGX           TYPE BAPI1022_FEGLG002X,
        LT_CUMVAL             TYPE STANDARD TABLE OF BAPI1022_CUMVAL WITH HEADER LINE,
        LT_RETURN             TYPE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE,
        LT_DEP_AREAS          TYPE STANDARD TABLE OF BAPI1022_DEP_AREAS WITH HEADER LINE,
        LT_DEP_AREASX         TYPE STANDARD TABLE OF BAPI1022_DEP_AREASX WITH HEADER LINE,
        LT_INVESTMENT_SUPPORT TYPE STANDARD TABLE OF BAPI1022_INV_SUPPORT WITH HEADER LINE,
        LT_POSTVAL            TYPE STANDARD TABLE OF BAPI1022_POSTVAL WITH HEADER LINE,
        LT_TRTYPE             TYPE STANDARD TABLE OF BAPI1022_TRTYPE WITH HEADER LINE.

  DATA: LV_STR1  TYPE CHAR50,
        LV_TXT   TYPE CHAR50,
        LV_PERC  TYPE P DECIMALS 0,
        LV_TABIX LIKE SY-TABIX,
        LV_LINES TYPE I.

  CALL FUNCTION 'BAL_GLB_MEMORY_REFRESH'.
  CALL FUNCTION 'BAL_LOG_CREATE'
    EXPORTING
      I_S_LOG                 = I_S_LOG
    IMPORTING
      E_LOG_HANDLE            = E_LOG_HANDLE
    EXCEPTIONS
      LOG_HEADER_INCONSISTENT = 1
      OTHERS                  = 2.

  CLEAR LV_LINES.
  DESCRIBE TABLE GT_DATA LINES LV_LINES.

  LOOP AT GT_DATA ASSIGNING <DATA> .
    LV_TABIX = SY-TABIX.
    CLEAR: LV_PERC, LV_STR1, LV_TXT.
    LV_PERC = LV_TABIX / LV_LINES * 100.
    LV_STR1 =  LV_PERC.
    CONDENSE LV_STR1.
    CONCATENATE '正在处理数据...,' LV_STR1 '%'
             INTO LV_TXT.

    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        PERCENTAGE = LV_PERC
        TEXT       = LV_TXT.

    LS_KEY-ASSET       = <DATA>-ANLN1 .
    LS_KEY-COMPANYCODE = <DATA>-BUKRS .
*-----------------------------------------------------------------------*
    "资产分类
    PERFORM FRM_CONVERT_INPUT USING <DATA>-ANLKL CHANGING LS_GENERALDATA-ASSETCLASS.
    LS_GENERALDATA-DESCRIPT      = <DATA>-TXT50.
    LS_GENERALDATA-DESCRIPT2     = <DATA>-TXA50.
    LS_GENERALDATA-MAIN_DESCRIPT = <DATA>-ANLHTXT. " 规格型号
    LS_GENERALDATA-INVENT_NO     = <DATA>-INVNR.   " 存货号
    LS_GENERALDATA-HISTORY       = <DATA>-XHIST .  " 历史性管理(不填写)

    LS_GENERALDATAX-ASSETCLASS    = 'X' .
    LS_GENERALDATAX-DESCRIPT      = 'X' .
    LS_GENERALDATAX-DESCRIPT2     = 'X' .
    LS_GENERALDATAX-MAIN_DESCRIPT = 'X'.
    LS_GENERALDATAX-INVENT_NO     = 'X' .
    LS_GENERALDATAX-HISTORY       = 'X' .

    IF <DATA>-SERNR IS NOT INITIAL.
      LS_GENERALDATA-SERIAL_NO = <DATA>-SERNR.     " 序列号
      LS_GENERALDATAX-SERIAL_NO = 'X' .
    ENDIF.


    LS_POSTING-CAP_DATE  = <DATA>-AKTIV.
    LS_POSTINGX-CAP_DATE = 'X' .

    IF <DATA>-DEAKT IS NOT INITIAL.
      LS_POSTING-DEACT_DATE = <DATA>-DEAKT.        " 不活动日期(报废)
      LS_POSTINGX-DEACT_DATE = 'X'.
    ENDIF.
    IF <DATA>-MENGE IS NOT INITIAL.
      LS_GENERALDATA-QUANTITY = <DATA>-MENGE.      " 数量
      LS_GENERALDATAX-QUANTITY = 'X'.
    ENDIF.

    IF <DATA>-MEINS IS NOT INITIAL.
      LS_GENERALDATA-BASE_UOM = <DATA>-MEINS.      " 单位
      LS_GENERALDATAX-BASE_UOM = 'X'.
      LS_GENERALDATA-BASE_UOM_ISO = <DATA>-MEINS.
      LS_GENERALDATAX-BASE_UOM_ISO = 'X'.
    ENDIF.
*-----------------------------------------------------------------------*
    LS_INVENTORY-INCLUDE_IN_LIST = <DATA>-INKEN.   " 库存标记(不填写)
    LS_INVENTORYX-INCLUDE_IN_LIST = 'X' .
*-----------------------------------------------------------------------*

*-----------------------------------------------------------------------*
    "成本中心
    PERFORM FRM_CONVERT_INPUT USING <DATA>-KOSTL  CHANGING LS_TIMEDEPEND-COSTCENTER.
    LS_TIMEDEPEND-ROOM        = <DATA>-RAUMN.  "房间

    LS_TIMEDEPENDX-COSTCENTER = 'X' .
    LS_TIMEDEPENDX-ROOM = 'X'.


    LS_ALLOCATIONS-EVALGROUP1 = <DATA>-ORD41.      "存放地点
    LS_ALLOCATIONS-EVALGROUP2 = <DATA>-ORD42.      "存放地点
    LS_ALLOCATIONS-EVALGROUP3 = <DATA>-ORD43.      "存放地点
    LS_ALLOCATIONS-EVALGROUP4 = <DATA>-ORD44.      "存放地点
    LS_ALLOCATIONS-EVALGROUP5 = <DATA>-GDLGRP.     "存放地点

    LS_ALLOCATIONSX-EVALGROUP1 = 'X'.
    LS_ALLOCATIONSX-EVALGROUP2 = 'X'.
    LS_ALLOCATIONSX-EVALGROUP3 = 'X'.
    LS_ALLOCATIONSX-EVALGROUP4 = 'X'.
    LS_ALLOCATIONSX-EVALGROUP5 = 'X'.

    IF <DATA>-LIFNR IS NOT INITIAL.
      PERFORM FRM_CONVERT_INPUT USING <DATA>-LIFNR CHANGING LS_ORIGIN-VENDOR_NO.  "供应商科目编号
      LS_ORIGINX-VENDOR_NO  = 'X'.
    ENDIF.

    IF <DATA>-LIEFE IS NOT INITIAL.
      LS_ORIGIN-VENDOR  = <DATA>-LIEFE .    " 供应商名称
      LS_ORIGINX-VENDOR  = 'X'  .
    ENDIF.

    IF <DATA>-HERST IS NOT INITIAL.
      LS_ORIGIN-MANUFACTURER  = <DATA>-HERST ."制造商
      LS_ORIGINX-MANUFACTURER  = 'X' .
    ENDIF.

    IF <DATA>-TYPBZ IS NOT INITIAL.
      LS_ORIGIN-TYPE_NAME  = <DATA>-TYPBZ. "类型名
      LS_ORIGINX-TYPE_NAME  = 'X' .
    ENDIF.

*-----------------------------------------------------------------------*
    LT_DEP_AREAS-AREA = <DATA>-AFABE .  "实际折旧范围
    LT_DEP_AREASX-AREA = <DATA>-AFABE .
    IF <DATA>-AFASL IS NOT INITIAL.
      LT_DEP_AREAS-DEP_KEY = <DATA>-AFASL .  "折旧码
      LT_DEP_AREASX-DEP_KEY = 'X' .
    ENDIF.
    IF <DATA>-SCHRW IS NOT INITIAL.
      LT_DEP_AREAS-SCRAPVALUE = <DATA>-SCHRW.  "残值
      LT_DEP_AREASX-SCRAPVALUE = 'X'.
    ENDIF.
    IF <DATA>-NDJAR IS NOT INITIAL.
      LT_DEP_AREAS-ULIFE_YRS = <DATA>-NDJAR .  "使用期年
      LT_DEP_AREASX-ULIFE_YRS = 'X'.
    ENDIF.
    IF <DATA>-NDPER IS NOT INITIAL.
      LT_DEP_AREAS-ULIFE_PRDS = <DATA>-NDPER .  "期间
      LT_DEP_AREASX-ULIFE_PRDS = 'X' .
    ENDIF.
    APPEND LT_DEP_AREAS.
    APPEND LT_DEP_AREASX.

    CLEAR: LT_CUMVAL.
    IF <DATA>-AKTIV+0(4) < '2019'."SY-DATUM+0(4).
      LT_CUMVAL-FISC_YEAR = '2019'."SY-DATUM+0(4) - 1  .
      LT_CUMVAL-AREA = <DATA>-AFABE .
      LT_CUMVAL-ACQ_VALUE = <DATA>-KANSW.
      LT_CUMVAL-ORD_DEP = <DATA>-KNAFA .
      LT_CUMVAL-CURRENCY = <DATA>-WAERS .
      LT_CUMVAL-CURRENCY_ISO = <DATA>-WAERS.
      APPEND LT_CUMVAL .

    ELSE.
      LT_TRTYPE-FISC_YEAR = '2019'."SY-DATUM+0(4) .
      LT_TRTYPE-CURRENT_NO = SY-TABIX .
      LT_TRTYPE-AREA = <DATA>-AFABE .
      LT_TRTYPE-VALUEDATE = <DATA>-AKTIV.
      LT_TRTYPE-ASSETTRTYP = '100'.
      LT_TRTYPE-AMOUNT = <DATA>-KANSW.
      LT_TRTYPE-CURRENCY = <DATA>-WAERS .
      LT_TRTYPE-CURRENCY_ISO = <DATA>-WAERS.
      APPEND LT_TRTYPE .
    ENDIF.

    IF <DATA>-KNAFA2 <> 0.
      LT_POSTVAL-FISC_YEAR = '2019'."SY-DATUM+0(4)
      LT_POSTVAL-AREA = <DATA>-AFABE .
*    IF LINES( LT_POSTVAL[] ) = 0.
*      LT_POSTVAL-REV_REPL = <DATA>-KANSW .
*    ENDIF.
      LT_POSTVAL-ORD_DEP = <DATA>-KNAFA2 .
      LT_POSTVAL-CURRENCY = <DATA>-WAERS .
      LT_POSTVAL-CURRENCY_ISO = <DATA>-WAERS .
      APPEND LT_POSTVAL .
    ENDIF.

    REFRESH LT_INVESTMENT_SUPPORT[].
    CLEAR LT_INVESTMENT_SUPPORT.
    LT_INVESTMENT_SUPPORT-CHANGE_IND = 'U'.
    APPEND LT_INVESTMENT_SUPPORT.

*    AT END OF INVNR .
    CALL FUNCTION 'BAPI_FIXEDASSET_OVRTAKE_CREATE'
      EXPORTING
        KEY                 = LS_KEY
        TESTRUN             = P_RUN
        ORIGIN              = LS_ORIGIN
        ORIGINX             = LS_ORIGINX
        GENERALDATA         = LS_GENERALDATA
        GENERALDATAX        = LS_GENERALDATAX
        INVENTORY           = LS_INVENTORY
        INVENTORYX          = LS_INVENTORYX
        POSTINGINFORMATION  = LS_POSTING
        POSTINGINFORMATIONX = LS_POSTINGX
        TIMEDEPENDENTDATA   = LS_TIMEDEPEND
        TIMEDEPENDENTDATAX  = LS_TIMEDEPENDX
        ALLOCATIONS         = LS_ALLOCATIONS
        ALLOCATIONSX        = LS_ALLOCATIONSX
      IMPORTING
        ASSET               = L_ASSET
      TABLES
        DEPRECIATIONAREAS   = LT_DEP_AREAS
        DEPRECIATIONAREASX  = LT_DEP_AREASX
        INVESTMENT_SUPPORT  = LT_INVESTMENT_SUPPORT
        CUMULATEDVALUES     = LT_CUMVAL[]
        POSTEDVALUES        = LT_POSTVAL[]
        TRANSACTIONS        = LT_TRTYPE[]
        RETURN              = LT_RETURN[].
    READ TABLE LT_RETURN WITH KEY TYPE = 'E'.
    IF SY-SUBRC = 0 .
      LOOP AT LT_RETURN.

        I_S_MSG-MSGTY = LT_RETURN-TYPE.
        I_S_MSG-MSGID = LT_RETURN-ID.
        I_S_MSG-MSGNO = LT_RETURN-NUMBER.

        I_S_MSG-MSGV1 = LT_RETURN-MESSAGE_V1.
        I_S_MSG-MSGV2 = LT_RETURN-MESSAGE_V2.
        I_S_MSG-MSGV3 = LT_RETURN-MESSAGE_V3.
        I_S_MSG-MSGV4 = LT_RETURN-MESSAGE_V4.
        CALL FUNCTION 'BAL_LOG_MSG_ADD'
          EXPORTING
            I_LOG_HANDLE = E_LOG_HANDLE
            I_S_MSG      = I_S_MSG.

      ENDLOOP.
      CALL FUNCTION 'BAL_DSP_PROFILE_POPUP_GET'
        IMPORTING
          E_S_DISPLAY_PROFILE = L_S_DISPLAY_PROFILE
        EXCEPTIONS
          OTHERS              = 1.

      L_S_DISPLAY_PROFILE-USE_GRID          = 'X'.
      L_S_DISPLAY_PROFILE-DISVARIANT-REPORT = SY-REPID.
      L_S_DISPLAY_PROFILE-DISVARIANT-HANDLE = 'LOG'.

      CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
        EXPORTING
          I_S_DISPLAY_PROFILE = L_S_DISPLAY_PROFILE
        EXCEPTIONS
          OTHERS              = 1.
      STOP .
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.
      IF P_RUN = 'X'.
        MESSAGE '数据测试导入成功运行' TYPE 'S'.
      ELSE .
        MESSAGE  '数据导入成功!!!' TYPE 'S'.

        LOOP AT LT_RETURN.
          I_S_MSG-MSGTY = LT_RETURN-TYPE.
          I_S_MSG-MSGID = LT_RETURN-ID.
          I_S_MSG-MSGNO = LT_RETURN-NUMBER.

          I_S_MSG-MSGV1 = LT_RETURN-MESSAGE_V1.
          I_S_MSG-MSGV2 = LT_RETURN-MESSAGE_V2.
          I_S_MSG-MSGV3 = LT_RETURN-MESSAGE_V3.
          I_S_MSG-MSGV4 = LT_RETURN-MESSAGE_V4.
          CALL FUNCTION 'BAL_LOG_MSG_ADD'
            EXPORTING
              I_LOG_HANDLE = E_LOG_HANDLE
              I_S_MSG      = I_S_MSG.
        ENDLOOP.
      ENDIF.
    ENDIF.
    CLEAR:LS_KEY ,
    LS_GENERALDATA,
    LS_GENERALDATA,
    LS_INVENTORY  ,
    LS_INVENTORYX ,
    LS_TIMEDEPEND ,
    LS_TIMEDEPENDX,
    LS_POSTING ,
    LS_POSTINGX ,
    LT_POSTVAL,LT_POSTVAL[],
    LT_CUMVAL,LT_CUMVAL[],
    LT_RETURN,LT_RETURN[] ,
    LT_DEP_AREAS,LT_DEP_AREAS[],
    LT_DEP_AREASX,LT_DEP_AREASX[],
    LT_POSTVAL,LT_POSTVAL[],
    LT_TRTYPE,LT_TRTYPE[] .
*    ENDAT .

  ENDLOOP.

  CHECK P_RUN NE 'X' .

  CALL FUNCTION 'BAL_DSP_PROFILE_POPUP_GET'
    IMPORTING
      E_S_DISPLAY_PROFILE = L_S_DISPLAY_PROFILE
    EXCEPTIONS
      OTHERS              = 1.

  L_S_DISPLAY_PROFILE-USE_GRID          = 'X'.
  L_S_DISPLAY_PROFILE-DISVARIANT-REPORT = SY-REPID.
  L_S_DISPLAY_PROFILE-DISVARIANT-HANDLE = 'LOG'.

  CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
    EXPORTING
      I_S_DISPLAY_PROFILE = L_S_DISPLAY_PROFILE
    EXCEPTIONS
      OTHERS              = 1.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  SUB_CHECK_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SUB_CHECK_DATA .
  DATA: LT_DATA TYPE STANDARD TABLE OF TYP_DATA,
        LS_DATA TYPE TYP_DATA.
  DATA: L_LINE TYPE I,
        L_ROW  TYPE STRING.
  DATA:LV_ANLN1 TYPE ANLA-ANLN1.

*  DESCRIBE TABLE gt_data LINES l_line .

  LT_DATA = GT_DATA .
  SORT LT_DATA BY BUKRS  .
  DELETE ADJACENT DUPLICATES FROM LT_DATA COMPARING BUKRS .
  DESCRIBE TABLE LT_DATA LINES L_LINE .
  IF L_LINE > 1 .
    MESSAGE '一次只能导入一个公司数据!' TYPE 'S' DISPLAY LIKE 'E' .
    LEAVE LIST-PROCESSING .
  ENDIF.

  CLEAR: LT_DATA,L_ROW.
  LOOP AT GT_DATA INTO GS_DATA .
    ADD 1 TO L_ROW .
*    IF GS_DATA-INVNR = SPACE .
    IF GS_DATA-ANLN1 IS INITIAL.
      L_ROW = L_ROW + 2 .
      MESSAGE S001(00) WITH '第' L_ROW '行资产编号不能为空!' DISPLAY LIKE 'E' .
      LEAVE LIST-PROCESSING .
    ELSE.
      CLEAR LV_ANLN1.
      SELECT SINGLE ANLN1 INTO LV_ANLN1 FROM ANLA WHERE ANLN1 = GS_DATA-ANLN1.
      IF LV_ANLN1 IS NOT INITIAL.
        L_ROW = L_ROW + 2 .
        MESSAGE S001(00) WITH '第' L_ROW '行资产编号在系统中已经存在!' DISPLAY LIKE 'E' .
        LEAVE LIST-PROCESSING .
      ENDIF.
    ENDIF.
    READ TABLE LT_DATA INTO LS_DATA WITH KEY ANLN1 = GS_DATA-ANLN1 .
    IF SY-SUBRC = 0 .
      L_ROW = L_ROW + 2 .
      MESSAGE S001(00) WITH '第' L_ROW '行资产编号为重复项!' DISPLAY LIKE 'E' .
      LEAVE LIST-PROCESSING .
    ELSE .
      APPEND GS_DATA TO LT_DATA .
    ENDIF.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CONVERT_INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_<DATA>_ANLKL  text
*      <--P_S_GENERALDATA_ASSETCLASS  text
*----------------------------------------------------------------------*
FORM FRM_CONVERT_INPUT USING P_DATA
                        CHANGING P_CONVERT.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = P_DATA
    IMPORTING
      OUTPUT = P_CONVERT.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0247   text
*      -->P_0248   text
*      <--P_P_FILE  text
*----------------------------------------------------------------------*
FORM FRM_DOWNLOAD USING IN_TEXT TYPE STRING
                          IN_NAME TYPE WWWDATA-OBJID
                 CHANGING OT_FULLPATH TYPE RLGRAP-FILENAME.

  DATA: LV_FNAME    TYPE STRING,                 " 文件名
        LV_UPLOAD   TYPE STRING,                 " 文件名 + 路径
        LV_FILENAME TYPE STRING,                 " 文件名
        LV_PATH     TYPE STRING VALUE 'C:\',     " 路径
        LS_OBJDATA  LIKE WWWDATATAB,             "获取模版信息
        LV_RC       LIKE SY-SUBRC.


  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    EXPORTING
      DEFAULT_EXTENSION    = 'XLS'
      DEFAULT_FILE_NAME    = IN_TEXT
    CHANGING
      FILENAME             = LV_FILENAME
      PATH                 = LV_PATH
      FULLPATH             = LV_UPLOAD
    EXCEPTIONS
      CNTL_ERROR           = 1
      ERROR_NO_GUI         = 2
      NOT_SUPPORTED_BY_GUI = 3
      OTHERS               = 4.
  IF SY-SUBRC = 0.
    OT_FULLPATH = LV_UPLOAD.
  ELSE.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  SELECT SINGLE RELID
                OBJID
  INTO CORRESPONDING FIELDS OF LS_OBJDATA
  FROM WWWDATA
  WHERE SRTF2 = 0
    AND RELID = 'MI'
    AND OBJID = IN_NAME.

  IF SY-SUBRC NE 0 OR LS_OBJDATA-OBJID EQ SPACE.
    MESSAGE I000(PS) WITH '没有找到模版' IN_NAME  DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

* 下载模板到路径下
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      KEY         = LS_OBJDATA
      DESTINATION = OT_FULLPATH
    IMPORTING
      RC          = LV_RC.
  IF LV_RC NE 0.
    MESSAGE I000(PS) WITH '模板文件' IN_NAME '下载失败!' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

ENDFORM.


*Selection texts
*----------------------------------------------------------
* P_FILE         文件名
* P_RUN         测试运行


*Messages
*----------------------------------------------------------
*
* Message class: Hard coded
*   未能读取导入数据!
*
* Message class: MM
*899   & & & &
*
* Message class: PS
*000   & & & &

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值