原文链接:https://blog.csdn.net/beyondeminem/article/details/120676965
对固定资产做了屏幕曾强
然后写了个RFC来带实现往增强字段写入数据。代码如下:
DATA: companycode LIKE bapi1022_1-comp_code,
asset LIKE bapi1022_1-assetmaino,
subnumber LIKE bapi1022_1-assetsubno.
DATA :generaldata LIKE bapi1022_feglg001,
generaldatax LIKE bapi1022_feglg001x,
timedependentdata LIKE bapi1022_feglg003,
timedependentdatax LIKE bapi1022_feglg003x,
return LIKE bapiret2,
allocations LIKE bapi1022_feglg004,
allocationsx LIKE bapi1022_feglg004x.
DATA : lt_extensionin TYPE STANDARD TABLE OF bapiparex,
ls_extensionin TYPE bapiparex.
DATA: ls_anlu TYPE bapi_te_anlu.
CLEAR: companycode,asset ,subnumber,generaldata,generaldatax,
timedependentdata,timedependentdatax,return.
IF i_zanla-sernr IS NOT INITIAL.
generaldata-serial_no = i_zanla-sernr.
generaldatax-serial_no = 'X'.
ENDIF.
IF i_zanla-invnr IS NOT INITIAL.
generaldata-invent_no = i_zanla-invnr.
generaldatax-invent_no = 'X'.
ENDIF.
IF i_zanla-sernr IS NOT INITIAL.
generaldata-serial_no = i_zanla-sernr .
generaldatax-serial_no = 'X'.
ENDIF.
IF i_zanla-kostl IS NOT INITIAL.
timedependentdata-costcenter = i_zanla-kostl.
timedependentdata-bus_area = i_zanla-gsber.
timedependentdatax-bus_area = 'X'.
timedependentdatax-costcenter = 'X'.
timedependentdatax-from_date = 'X'.
timedependentdata-from_date = sy-datum.
ENDIF.
IF i_zanla-ord41 IS NOT INITIAL.
allocations-evalgroup1 = i_zanla-ord41.
allocationsx-evalgroup1 = 'X'.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_zanla-bukrs
IMPORTING
output = i_zanla-bukrs.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_zanla-anln2
IMPORTING
output = i_zanla-anln2.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_zanla-anln1
IMPORTING
output = i_zanla-anln1.
"增强字段传值
CLEAR ls_anlu.
ls_anlu-comp_code = i_zanla-bukrs . "公司
ls_anlu-ASSETMAINO = i_zanla-ANLN1 .
" ls_anlu-ASSETSUBNO = i_zanla-ANLN2.
ls_anlu-ZEMPLOYEE_ID = i_zanla-ZEMPLOYEE_ID .
ls_anlu-ZMAC_ID = i_zanla-ZMAC_ID .
ls_anlu-ZDISCK_ID = i_zanla-ZDISCK_ID .
"ls_anlu-zasset_status = '在用'. "资产状态
ls_extensionin-structure = 'BAPI_TE_ANLU'.
ls_extensionin-valuepart1 = ls_anlu.
APPEND ls_extensionin TO lt_extensionin.
CALL FUNCTION 'BAPI_FIXEDASSET_CHANGE'
EXPORTING
companycode = i_zanla-bukrs
asset = i_zanla-anln1
subnumber = i_zanla-anln2
* GROUPASSET =
generaldata = generaldata
generaldatax = generaldatax
* INVENTORY =
* INVENTORYX =
* POSTINGINFORMATION =
* POSTINGINFORMATIONX =
timedependentdata = timedependentdata
timedependentdatax = timedependentdatax
allocations = allocations
allocationsx = allocationsx
* ORIGIN =
* ORIGINX =
* INVESTACCTASSIGNMNT =
* INVESTACCTASSIGNMNTX =
* NETWORTHVALUATION =
* NETWORTHVALUATIONX =
* REALESTATE =
* REALESTATEX =
* INSURANCE =
* INSURANCEX =
* LEASING =
* LEASINGX =
IMPORTING
return = return
TABLES
* DEPRECIATIONAREAS =
* DEPRECIATIONAREASX =
* INVESTMENT_SUPPORT =
extensionin = lt_extensionin.
IF return-type = 'E'.
MESSAGE ID return-id TYPE return-type NUMBER return-number
WITH return-message_v1 return-message_v2 return-message_v3
return-message_v4 INTO out_message-message.
out_message-msgtyp = 'E'.
ELSE.
out_message-msgtyp = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
* IMPORTING
* RETURN =
.
MESSAGE ID return-id TYPE return-type NUMBER return-number
WITH return-message_v1 return-message_v2 return-message_v3
return-message_v4 INTO out_message-message.
ENDIF.
APPEND out_message TO t_message.
我用上面这段代码发现修改不了增强字段里的内容 后来debug跟踪才发现。原来需要修改一处用户增强出入口才可以。
EXIT_SAPL1022_001 ZXAISU05
添加代码如下:
另外关于固定资产 BAPI 的用法,以下代码做个参考
固定资产调拨
BAPI:BAPI_FIXEDASSET_CHANGE
以下代码供参考:
"BAPI导入参数
DATA: LV_COMPANYCODE LIKE BAPI1022_1-COMP_CODE, "公司代码
LV_ASSET LIKE BAPI1022_1-ASSETMAINO, "主资产号
LV_SUBNUMBER LIKE BAPI1022_1-ASSETSUBNO, "资产次级编号
LV_GROUPASSET LIKE BAPI1022_MISC-XANLGR, "标识:资产是集团公司资产
LS_GENERALDATA LIKE BAPI1022_FEGLG001, "逻辑字段组 001 - 通用数据
LS_GENERALDATAX LIKE BAPI1022_FEGLG001X,
LS_INVENTORY LIKE BAPI1022_FEGLG011,
LS_INVENTORYX LIKE BAPI1022_FEGLG011X,
LS_POSTINGINFORMATION LIKE BAPI1022_FEGLG002,
LS_POSTINGINFORMATIONX LIKE BAPI1022_FEGLG002X,
LS_TIMEDEPENDENTDATA LIKE BAPI1022_FEGLG003, "逻辑字段组003 - 时间相关的数据
LS_TIMEDEPENDENTDATAX LIKE BAPI1022_FEGLG003X,
LS_ALLOCATIONS LIKE BAPI1022_FEGLG004, "逻辑字段组004 - 分配
LS_ALLOCATIONSX LIKE BAPI1022_FEGLG004X,
LS_ORIGIN LIKE BAPI1022_FEGLG009, "逻辑字段组009 - 原件
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_REALESTATE LIKE BAPI1022_FEGLG007,
LS_REALESTATEX LIKE BAPI1022_FEGLG007X,
LS_INSURANCE LIKE BAPI1022_FEGLG008,
LS_INSURANCEX LIKE BAPI1022_FEGLG008X,
LS_LEASING LIKE BAPI1022_FEGLG005,
LS_LEASINGX LIKE BAPI1022_FEGLG005X,
LS_GLO_TIME_DEP LIKE BAPI1022_GLO_TIME_DEP. "Globalization fields: Date interval of time-dependent data
"BAPI导出参数
DATA: LS_RETURN LIKE BAPIRET2. "返回参数
"BAPI表参数
DATA: LT_DEPRECIATIONAREAS LIKE STANDARD TABLE OF BAPI1022_DEP_AREAS,
LT_DEPRECIATIONAREASX LIKE STANDARD TABLE OF BAPI1022_DEP_AREASX,
LT_INVESTMENT_SUPPORT LIKE STANDARD TABLE OF BAPI1022_INV_SUPPORT,
LT_EXTENSIONIN LIKE STANDARD TABLE OF BAPIPAREX.
DATA: LS_DEPRECIATIONAREAS LIKE BAPI1022_DEP_AREAS,
LS_DEPRECIATIONAREASX LIKE BAPI1022_DEP_AREASX,
LS_INVESTMENT_SUPPORT LIKE BAPI1022_INV_SUPPORT,
LS_EXTENSIONIN LIKE BAPIPAREX.
DATA: LS_ANLU TYPE BAPI_TE_ANLU.
DATA: LT_DATA TYPE TABLE OF TY_ALV.
DATA: LS_DATA TYPE TY_ALV.
LT_DATA[] = GT_ALV[].
DELETE LT_DATA WHERE SEL NE 'X'.
DELETE LT_DATA WHERE ICON NE ''. "状态灯不为空说明校验不通过
LOOP AT LT_DATA ASSIGNING FIELD-SYMBOL(<LW_DATA>).
"清空BAPI参数
CLEAR:LV_COMPANYCODE,LV_ASSET,LV_SUBNUMBER,LV_GROUPASSET,
LS_GENERALDATA,LS_GENERALDATAX,LS_INVENTORY,LS_INVENTORYX,LS_POSTINGINFORMATION, LS_POSTINGINFORMATIONX,
LS_TIMEDEPENDENTDATA,LS_TIMEDEPENDENTDATAX,LS_ALLOCATIONS,LS_ALLOCATIONSX,LS_ORIGIN,LS_ORIGINX,
LS_INVESTACCTASSIGNMNT,LS_INVESTACCTASSIGNMNTX,LS_NETWORTHVALUATION,LS_NETWORTHVALUATIONX,LS_REALESTATE,LS_REALESTATEX,
LS_INSURANCE,LS_INSURANCEX,LS_LEASING,LS_LEASINGX,LS_GLO_TIME_DEP.
CLEAR:LS_RETURN.
CLEAR:LS_DEPRECIATIONAREAS,LS_DEPRECIATIONAREASX,LS_INVESTMENT_SUPPORT,LS_EXTENSIONIN.
FREE:LT_DEPRECIATIONAREAS,LT_DEPRECIATIONAREASX,LT_INVESTMENT_SUPPORT,LT_EXTENSIONIN.
<LW_DATA>-ANLN1 = |{ <LW_DATA>-ANLN1 ALPHA = IN }|.
<LW_DATA>-KOSTL = |{ <LW_DATA>-KOSTL ALPHA = IN }|.
<LW_DATA>-KOSTLV = |{ <LW_DATA>-KOSTLV ALPHA = IN }|.
* Company code
LV_COMPANYCODE = <LW_DATA>-BUKRS.
LV_ASSET = <LW_DATA>-ANLN1.
IF <LW_DATA>-ZCHG_ANLZ EQ 'X'.
* Cost center
LS_TIMEDEPENDENTDATA-COSTCENTER = <LW_DATA>-KOSTL.
LS_TIMEDEPENDENTDATAX-COSTCENTER = 'X'.
* Cost center responsible for asset
LS_TIMEDEPENDENTDATA-RESP_CCTR = <LW_DATA>-KOSTLV.
LS_TIMEDEPENDENTDATAX-RESP_CCTR = 'X'.
"有效期起始日期
LS_TIMEDEPENDENTDATA-FROM_DATE = <LW_DATA>-ADATU."有效期起始日期
LS_TIMEDEPENDENTDATAX-FROM_DATE = 'X'.
"资产停用
LS_TIMEDEPENDENTDATA-SHUTDOWN = <LW_DATA>-XSTIL."资产停用
LS_TIMEDEPENDENTDATAX-SHUTDOWN = 'X'.
ENDIF.
IF <LW_DATA>-ZCHG_ANLU EQ 'X'.
CLEAR LS_ANLU.
LS_ANLU-COMP_CODE = <LW_DATA>-BUKRS.
LS_ANLU-ASSETMAINO = <LW_DATA>-ANLN1.
LS_ANLU-ZSTATUS = <LW_DATA>-ZSTATUS. "资产状态
LS_EXTENSIONIN-STRUCTURE = 'BAPI_TE_ANLU'.
LS_EXTENSIONIN-VALUEPART1 = LS_ANLU.
APPEND LS_EXTENSIONIN TO LT_EXTENSIONIN.
ENDIF.
IF <LW_DATA>-ZCHG_ANLH EQ 'X'.
LS_GENERALDATA-MAIN_DESCRIPT = <LW_DATA>-ANLHTXT. "资产主号说明
LS_GENERALDATAX-MAIN_DESCRIPT = 'X'.
ENDIF.
CALL FUNCTION 'BAPI_FIXEDASSET_CHANGE'
EXPORTING
COMPANYCODE = LV_COMPANYCODE
ASSET = LV_ASSET
SUBNUMBER = LV_SUBNUMBER
GROUPASSET = LV_GROUPASSET
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 = LS_REALESTATE
REALESTATEX = LS_REALESTATEX
INSURANCE = LS_INSURANCE
INSURANCEX = LS_INSURANCEX
LEASING = LS_LEASING
LEASINGX = LS_LEASINGX
GLO_TIME_DEP = LS_GLO_TIME_DEP
IMPORTING
RETURN = LS_RETURN
TABLES
DEPRECIATIONAREAS = LT_DEPRECIATIONAREAS
DEPRECIATIONAREASX = LT_DEPRECIATIONAREASX
INVESTMENT_SUPPORT = LT_INVESTMENT_SUPPORT
EXTENSIONIN = LT_EXTENSIONIN.
IF SY-SUBRC EQ 0.
IF LS_RETURN-TYPE EQ 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = LS_RETURN-ID
MSGNR = LS_RETURN-NUMBER
MSGV1 = LS_RETURN-MESSAGE_V1
MSGV2 = LS_RETURN-MESSAGE_V2
MSGV3 = LS_RETURN-MESSAGE_V3
MSGV4 = LS_RETURN-MESSAGE_V4
IMPORTING
MESSAGE_TEXT_OUTPUT = <LW_DATA>-MESSAGE.
<LW_DATA>-ICON = ICON_GREEN_LIGHT.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = LS_RETURN-ID
MSGNR = LS_RETURN-NUMBER
MSGV1 = LS_RETURN-MESSAGE_V1
MSGV2 = LS_RETURN-MESSAGE_V2
MSGV3 = LS_RETURN-MESSAGE_V3
MSGV4 = LS_RETURN-MESSAGE_V4
IMPORTING
MESSAGE_TEXT_OUTPUT = <LW_DATA>-MESSAGE.
<LW_DATA>-ICON = ICON_RED_LIGHT.
ENDIF.
ELSE.
<LW_DATA>-ICON = ICON_RED_LIGHT.
<LW_DATA>-MESSAGE = '调拨失败,未传入数据'.
ENDIF.
ENDLOOP.