资产主数据创建
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.