CALL BAPI代码
DATA: lt_alv TYPE STANDARD TABLE OF typ_alv WITH HEADER LINE, lt_alv1 TYPE STANDARD TABLE OF typ_alv, ls_alv TYPE typ_alv, lv_record_id TYPE rke_record_id. DATA: lt_inputdata TYPE STANDARD TABLE OF bapi_copa_data WITH HEADER LINE, lt_fieldlist TYPE STANDARD TABLE OF bapi_copa_field WITH HEADER LINE, lt_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE, lv_op_concern TYPE bapi0017-op_concern, lv_msg TYPE bapi_msg, lv_flag, lv_waers TYPE waers. lv_op_concern = 'DTZN'. CLEAR lv_flag. LOOP AT lt_alv INTO ls_alv. CLEAR: lt_inputdata[],lt_inputdata,lt_fieldlist[],lt_fieldlist, lt_return[],lt_return,lv_record_id,lt_alv-type,lt_alv-msg. lv_waers = ls_alv-frwae. lv_record_id = lv_record_id + 1. "记录类型 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VRGAR' ls_alv-vrgar ''. "过账日期 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'BUDAT' ls_alv-budat ''. "过账期间 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'PERIO' ls_alv-perio ''. "用户名 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'USNAM' sy-uname ''. "年度 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'GJAHR' ls_alv-perio+0(4) ''. "期间 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'PERDE' ls_alv-perio+4(3) ''. ls_alv-kndnr = |{ ls_alv-kndnr ALPHA = IN }|. "客户 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'KNDNR' ls_alv-kndnr ''. ls_alv-artnr = |{ ls_alv-artnr ALPHA = IN }|. "生产(物料) PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'ARTNR' ls_alv-artnr ''. ls_alv-kaufn = |{ ls_alv-kaufn ALPHA = IN }|. "销售订单 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'KAUFN' ls_alv-kaufn ''. ls_alv-kdpos = |{ ls_alv-kdpos ALPHA = IN }|. "销售订单项目 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'KDPOS' ls_alv-kdpos ''. "公司代码 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'BUKRS' ls_alv-bukrs ''. "工厂 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'WERKS' ls_alv-werks ''. "销售组织 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VKORG' ls_alv-vkorg ''. "分销渠道 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VTWEG' ls_alv-vtweg ''. "产品组 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'SPART' ls_alv-spart ''. "利润中心 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'PRCTR' ls_alv-prctr ''. "范围 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'KOKRS' lv_op_concern ''. "销售部门 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VKBUR' ls_alv-vkbur ''. "销售组 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VKGRP' ls_alv-vkgrp ''. "销售地区 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'BZIRK' ls_alv-bzirk ''. "国家 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'KMLAND' ls_alv-kmland ''. "地区 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'REGIO' ls_alv-regio ''. "货币码 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'FRWAE' ls_alv-frwae ''. "销售数量 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'ABSMG' ls_alv-absmg ''. ls_alv-absmg_me = |{ ls_alv-absmg_me ALPHA = IN }|. "销售单位 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'ABSMG_ME' ls_alv-absmg_me ''. "营业收入 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV010' ls_alv-vv010 lv_waers. "营业成本 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV020' ls_alv-vv020 lv_waers. "协议折扣 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV050' ls_alv-vv050 lv_waers. "促销折扣 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV060' ls_alv-vv060 lv_waers. "其他折扣 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV070' ls_alv-vv070 lv_waers. "电子部件 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV110' ls_alv-vv110 lv_waers. "屏幕部件 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV120' ls_alv-vv120 lv_waers. "供电部件 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV130' ls_alv-vv130 lv_waers. "包装材料 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV140' ls_alv-vv140 lv_waers. "五金塑胶 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV150' ls_alv-vv150 lv_waers. "线材接头 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV160' ls_alv-vv160 lv_waers. "光学部件 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV170' ls_alv-vv170 lv_waers. "其他材料 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV190' ls_alv-vv190 lv_waers. "委托加工费 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV610' ls_alv-vv610 lv_waers. "直接人工 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV810' ls_alv-vv810 lv_waers. "间接人工 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV820' ls_alv-vv820 lv_waers. "物料消耗 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV830' ls_alv-vv830 lv_waers. "租金及折旧 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV840' ls_alv-vv840 lv_waers. "其他费用 PERFORM append_data TABLES lt_inputdata[] lt_fieldlist[] USING lv_record_id 'VV850' ls_alv-vv850 lv_waers. EXPORT gv_call_copa_bapi_indicator TO MEMORY ID 'ZCOPA_UPD_BAPI'. CALL FUNCTION 'BAPI_COPAACTUALS_POSTCOSTDATA' EXPORTING operatingconcern = lv_op_concern testrun = '' TABLES inputdata = lt_inputdata[] fieldlist = lt_fieldlist[] return = lt_return[].
但是该BAPI不能返回生成的获利能力凭证,所以对FM RKE_SERVE_ACT_DOC_NUMBER做隐式增强返回,参考的获利能力分析COPA的BAPI:BAPI_COPAACTUALS_POSTCOSTDATA 通过增强返回凭证号 - 明大叔 - 博客园,具体代码如下
DATA: gv_call_copa_bapi_indicator, gv_belnr TYPE rke_belnr. DATA: BEGIN OF LW_LINE_ITEM, BELNR TYPE RKE_BELNR, END OF LW_LINE_ITEM. FIELD-SYMBOLS <FS_COPADOC> TYPE ANY. IMPORT GV_CALL_COPA_BAPI_INDICATOR FROM MEMORY ID 'ZCOPA_UPD_BAPI' . IF GV_CALL_COPA_BAPI_INDICATOR EQ 'Y'. ASSIGN LINE_ITEM_TAB TO <FS_COPADOC>. MOVE-CORRESPONDING <FS_COPADOC> TO LW_LINE_ITEM . gv_belnr = LW_LINE_ITEM-BELNR . EXPORT gv_belnr TO MEMORY ID 'ZFICO056'. ENDIF.
想双击生成的凭证直接链接到KE23N,但是F1出来的界面上并没有PID,跟踪了一下,实际上还是有的
SET PARAMETER ID 'BCO' FIELD gt_alv-belnr. SET PARAMETER ID 'GFP' FIELD gt_alv-perio+4(3). SET PARAMETER ID 'GJR' FIELD gt_alv-perio+0(4). SET PARAMETER ID 'VGA' FIELD gt_alv-vrgar. CALL TRANSACTION 'KE23N' WITH AUTHORITY-CHECK AND SKIP FIRST SCREEN.