SAP 资产主数据创建

文章详细描述了如何使用ZFM_SSF010函数在SAP系统中创建或更新资产主数据,涉及字段如资产类别、成本中心、数量、描述等,并处理折旧设置。函数调用了多个BAPI接口进行操作,包括资产创建、更改和事务提交/回滚。
摘要由CSDN通过智能技术生成

资产主数据创建

FUNCTION ZFM_SSF010.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(ES_HEADER) TYPE  ZFM_SSF010 OPTIONAL
*"  EXPORTING
*"     VALUE(E_SUBRC) TYPE  STRING
*"     VALUE(E_MESSAGE) TYPE  STRING
*"     VALUE(E_BUKRS) TYPE  BAPI1022_1-COMP_CODE
*"     VALUE(E_ANLN1) TYPE  BF_ANLN1
*"     VALUE(E_ANLN2) TYPE  BF_ANLN2
*"     VALUE(E_TXA50) TYPE  TXA50_MORE
*"----------------------------------------------------------------------

  DATA:
    LD_MESSAGE                 TYPE STRING,
    LS_KEY                     TYPE BAPI1022_KEY,
    LS_GENERAL_DATA            TYPE BAPI1022_FEGLG001,
    LS_GENERAL_DATA_X          TYPE BAPI1022_FEGLG001X,
    LS_INVENTORY               TYPE BAPI1022_FEGLG011,
    LS_INVENTORY_X             TYPE BAPI1022_FEGLG011X,
    LS_POSTING_INFORMATION     TYPE BAPI1022_FEGLG002,
    LS_POSTING_INFORMATION_X   TYPE BAPI1022_FEGLG002X,
    LS_TIME_DEPENDENT_DATA     TYPE BAPI1022_FEGLG003,
    LS_TIME_DEPENDENT_DATA_X   TYPE BAPI1022_FEGLG003X,
    LS_ALLOCATIONS             TYPE BAPI1022_FEGLG004,
    LS_ALLOCATIONS_X           TYPE BAPI1022_FEGLG004X,
    LS_ORIGIN                  TYPE BAPI1022_FEGLG009,
    LS_ORIGIN_X                TYPE BAPI1022_FEGLG009X,
    LS_INVEST_ACCT_ASSIGNMNT   TYPE BAPI1022_FEGLG010,
    LS_INVEST_ACCT_ASSIGNMNT_X TYPE BAPI1022_FEGLG010X,
    LS_REAL_ESTATE             TYPE BAPI1022_FEGLG007,
    LS_REAL_ESTATE_X           TYPE BAPI1022_FEGLG007X,
    LS_DEPRECIATIONAREAS       TYPE BAPI1022_DEP_AREAS, "折旧范围数据
    LS_DEPRECIATIONAREASX      TYPE BAPI1022_DEP_AREASX,
    LT_DEPRECIATIONAREAS       TYPE STANDARD TABLE OF BAPI1022_DEP_AREAS,
    LT_DEPRECIATIONAREASX      TYPE STANDARD TABLE OF BAPI1022_DEP_AREASX,
    LT_RETURN                  TYPE STANDARD TABLE OF BAPIRET2,
    LS_RETURN                  LIKE LINE OF LT_RETURN.

  DATA:CN_TRUE  TYPE C VALUE 'X'.
  DATA:LS_LOG TYPE ZSSF010_LOG.
  DATA LS_ANLU LIKE ANLU.
  CALL FUNCTION 'ENQUEUE_EZREQSSF'
    EXPORTING
      TXA50          = ES_HEADER-TXA50
    EXCEPTIONS
      FOREIGN_LOCK   = 1
      SYSTEM_FAILURE = 2
      OTHERS         = 3.
  IF SY-SUBRC <> 0.
    E_SUBRC = 'E'.
    E_MESSAGE = '请求执行中!'.
    EXIT.
  ENDIF.
  E_TXA50 = ES_HEADER-TXA50.

  IF ES_HEADER-ANLN1 IS INITIAL.
    SELECT SINGLE BUKRS ANLN1 ANLN2
      FROM ANLA
      INTO ( E_BUKRS , E_ANLN1 , E_ANLN2 )
     WHERE TXA50 = ES_HEADER-TXA50.
    IF SY-SUBRC = 0.
      E_SUBRC = 'E'.
      E_MESSAGE = ES_HEADER-TXA50 && ':资产已经存在,请勿重复创建!'.
      EXIT.
    ENDIF.
  ENDIF.

  IF SY-UNAME = 'SUP_FANWEI' AND ES_HEADER-ANLN1 IS INITIAL..
    ES_HEADER-TESTRUN = 'X'.
  ENDIF.

  MOVE-CORRESPONDING ES_HEADER TO LS_LOG.
  LS_LOG-DATUM = SY-DATUM.
  LS_LOG-UZEIT = SY-UZEIT.

* ASSETSUPNO
  IF ES_HEADER-ANLUE IS NOT INITIAL.
    LS_ALLOCATIONS-ASSETSUPNO = ES_HEADER-ANLUE.
    LS_ALLOCATIONS_X-ASSETSUPNO = CN_TRUE.
  ENDIF.

  LS_KEY-COMPANYCODE = ES_HEADER-BUKRS.
*  LS_KEY-SUBNUMBER = ES_HEADER-ANLN2.
* Asset class
  IF ES_HEADER-ANLKL IS NOT INITIAL.
    LS_GENERAL_DATA-ASSETCLASS = ES_HEADER-ANLKL.
    LS_GENERAL_DATA_X-ASSETCLASS = CN_TRUE.
  ENDIF.



***** Required fields - General Mills *****
* Asset Description
  IF ES_HEADER-TXT50 IS NOT INITIAL.
    LS_GENERAL_DATA-DESCRIPT = ES_HEADER-TXT50.
    LS_GENERAL_DATA_X-DESCRIPT = CN_TRUE.
  ENDIF.


* Cost center
  IF ES_HEADER-KOSTL IS NOT INITIAL.
    LS_TIME_DEPENDENT_DATA-COSTCENTER = ES_HEADER-KOSTL.
    LS_TIME_DEPENDENT_DATA_X-COSTCENTER = CN_TRUE.
  ENDIF.

* QUANTITY
  IF ES_HEADER-MENGE IS NOT INITIAL.
    LS_GENERAL_DATA-QUANTITY = ES_HEADER-MENGE.
    LS_GENERAL_DATA_X-QUANTITY  = CN_TRUE.
  ENDIF.


* BASE_UOM
  IF ES_HEADER-MEINS IS NOT INITIAL.
    LS_GENERAL_DATA-BASE_UOM = ES_HEADER-MEINS.
    LS_GENERAL_DATA_X-BASE_UOM  = CN_TRUE.
  ENDIF.

* Asset Description 2
  IF ES_HEADER-TXA50 IS NOT INITIAL.
    LS_GENERAL_DATA-DESCRIPT2 = ES_HEADER-TXA50.
    LS_GENERAL_DATA_X-DESCRIPT2 = CN_TRUE.
  ENDIF.


* Serial number
  IF ES_HEADER-SERNR IS NOT INITIAL.
    LS_GENERAL_DATA-SERIAL_NO = ES_HEADER-SERNR.
    LS_GENERAL_DATA_X-SERIAL_NO = CN_TRUE.
  ENDIF.


* Asset is managed historically
  LS_GENERAL_DATA-HISTORY = CN_TRUE.
  LS_GENERAL_DATA_X-HISTORY = CN_TRUE.

* Inventory number
  IF ES_HEADER-INVNR IS NOT INITIAL.
    LS_GENERAL_DATA-INVENT_NO = ES_HEADER-INVNR.
    LS_GENERAL_DATA_X-INVENT_NO = CN_TRUE.
  ENDIF.


* Inventory indicator
  LS_INVENTORY-INCLUDE_IN_LIST = CN_TRUE.
  LS_INVENTORY_X-INCLUDE_IN_LIST = CN_TRUE.

* Inventory number
  IF ES_HEADER-INVNR IS NOT INITIAL.
    LS_GENERAL_DATA-INVENT_NO = ES_HEADER-INVNR.
    LS_GENERAL_DATA_X-INVENT_NO = CN_TRUE.
  ENDIF.

*折旧
  IF ES_HEADER-NDJAR IS NOT INITIAL.
    LS_DEPRECIATIONAREAS-AREA       = '01'.
    LS_DEPRECIATIONAREASX-AREA       = '01'.
    LS_DEPRECIATIONAREAS-DEP_KEY    = 'ZB01'.
    LS_DEPRECIATIONAREASX-DEP_KEY    = 'X' .
    LS_DEPRECIATIONAREAS-ULIFE_YRS  = ES_HEADER-NDJAR ."计划使用年
    LS_DEPRECIATIONAREASX-ULIFE_YRS  = 'X' .

    IF ES_HEADER-NDPER IS NOT INITIAL.
      LS_DEPRECIATIONAREAS-ULIFE_PRDS = ES_HEADER-NDPER ."计划使用月
      LS_DEPRECIATIONAREASX-ULIFE_PRDS = 'X' .
    ENDIF.

    APPEND  LS_DEPRECIATIONAREAS TO  LT_DEPRECIATIONAREAS.
    APPEND  LS_DEPRECIATIONAREASX TO  LT_DEPRECIATIONAREASX.
  ENDIF.

  IF ES_HEADER-ANLN1 IS INITIAL.
    "增强字段
    LS_ANLU-ZTYSJ      = ES_HEADER-ZTYSJ.  "增强字段
    LS_ANLU-ZJXSL      = ES_HEADER-ZJXSL.  "增强字段
    LS_ANLU-ZXXSL      = ES_HEADER-ZXXSL.  "增强字段


    CALL FUNCTION 'ZBAPI_FIXEDASSET_CREATE1'
      EXPORTING
        KEY                = LS_KEY
*       REFERENCE          =
*       CREATESUBNUMBER    =
*       POSTCAP            =
*       CREATEGROUPASSET   =
        TESTRUN            = ES_HEADER-TESTRUN
        GENERALDATA        = LS_GENERAL_DATA
        GENERALDATAX       = LS_GENERAL_DATA_X
        INVENTORY          = LS_INVENTORY
        INVENTORYX         = LS_INVENTORY_X
*       POSTINGINFORMATION =
*       POSTINGINFORMATIONX        =
        TIMEDEPENDENTDATA  = LS_TIME_DEPENDENT_DATA
        TIMEDEPENDENTDATAX = LS_TIME_DEPENDENT_DATA_X
        ALLOCATIONS        = LS_ALLOCATIONS
        ALLOCATIONSX       = LS_ALLOCATIONS_X
        LI_ANLU            = LS_ANLU
*       ORIGIN             =
*       ORIGINX            =
*       INVESTACCTASSIGNMNT        =
*       INVESTACCTASSIGNMNTX       =
*       NETWORTHVALUATION  =
*       NETWORTHVALUATIONX =
*       REALESTATE         =
*       REALESTATEX        =
*       INSURANCE          =
*       INSURANCEX         =
*       LEASING            =
*       LEASINGX           =
      IMPORTING
        COMPANYCODE        = E_BUKRS
        ASSET              = E_ANLN1
        SUBNUMBER          = E_ANLN2
*       ASSETCREATED       =
        RETURN             = LS_RETURN
      TABLES
        DEPRECIATIONAREAS  = LT_DEPRECIATIONAREAS
        DEPRECIATIONAREASX = LT_DEPRECIATIONAREASX
*       INVESTMENT_SUPPORT =
*       EXTENSIONIN        =
      .
  ELSE.
    CALL FUNCTION 'BAPI_FIXEDASSET_CHANGE'
      EXPORTING
        COMPANYCODE        = ES_HEADER-BUKRS
        ASSET              = ES_HEADER-ANLN1
        SUBNUMBER          = ES_HEADER-ANLN2
*       REFERENCE          =
*       CREATESUBNUMBER    =
*       POSTCAP            =
*       CREATEGROUPASSET   =
*       TESTRUN            =
        GENERALDATA        = LS_GENERAL_DATA
        GENERALDATAX       = LS_GENERAL_DATA_X
        INVENTORY          = LS_INVENTORY
        INVENTORYX         = LS_INVENTORY_X
*       POSTINGINFORMATION =
*       POSTINGINFORMATIONX        =
        TIMEDEPENDENTDATA  = LS_TIME_DEPENDENT_DATA
        TIMEDEPENDENTDATAX = LS_TIME_DEPENDENT_DATA_X
        ALLOCATIONS        = LS_ALLOCATIONS
        ALLOCATIONSX       = LS_ALLOCATIONS_X
*       ORIGIN             =
*       ORIGINX            =
*       INVESTACCTASSIGNMNT        =
*       INVESTACCTASSIGNMNTX       =
*       NETWORTHVALUATION  =
*       NETWORTHVALUATIONX =
*       REALESTATE         =
*       REALESTATEX        =
*       INSURANCE          =
*       INSURANCEX         =
*       LEASING            =
*       LEASINGX           =
      IMPORTING
        RETURN             = LS_RETURN
* TABLES
*       DEPRECIATIONAREAS  =
*       DEPRECIATIONAREASX =
*       INVESTMENT_SUPPORT =
*       EXTENSIONIN        =
      .
  ENDIF.
  APPEND LS_RETURN TO LT_RETURN.
  LOOP AT LT_RETURN TRANSPORTING NO FIELDS
      WHERE TYPE = 'E' OR TYPE = 'A'.
    EXIT.
  ENDLOOP.
  IF SY-SUBRC <> 0.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.
  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ENDIF.

*-  返回
  LOOP AT LT_RETURN TRANSPORTING NO FIELDS
      WHERE TYPE = 'E' OR TYPE = 'A'.
    EXIT.
  ENDLOOP.
  IF SY-SUBRC = 0.
    E_SUBRC = 'E'.
    LS_LOG-E_SUBRC = E_SUBRC.
  ELSE.
    E_SUBRC = 'S'.
    LS_LOG-E_SUBRC = E_SUBRC.
    LS_LOG-E_BUKRS = E_BUKRS.
    LS_LOG-E_ANLN1 = E_ANLN1.
    LS_LOG-E_ANLN2 = E_ANLN2.
  ENDIF.

  LOOP AT LT_RETURN INTO LS_RETURN.
    CONCATENATE LS_RETURN-TYPE LS_RETURN-MESSAGE
        INTO LD_MESSAGE SEPARATED BY SPACE.
    CONCATENATE E_MESSAGE LD_MESSAGE INTO E_MESSAGE SEPARATED BY '.'.
  ENDLOOP.
  SHIFT E_MESSAGE.
  IF E_MESSAGE IS NOT INITIAL.
    CONCATENATE E_SUBRC E_MESSAGE INTO E_MESSAGE SEPARATED BY ':'.
  ELSE.
    E_MESSAGE = E_SUBRC.
  ENDIF.
  LS_LOG-E_MESSAGE = E_MESSAGE.
  MODIFY ZSSF010_LOG FROM LS_LOG.
  IF SY-SUBRC = 0.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'.
  ENDIF.

  CALL FUNCTION 'DEQUEUE_EZREQSSF'
    EXPORTING
      TXA50 = ES_HEADER-TXA50.

ENDFUNCTION.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值