SAP Query里写自定义ABAP代码

22 篇文章 3 订阅

SAP Query里写自定义ABAP代码
主要有2种方式:
1.SQ02里输入对应的信息集增加代码,详细使用可参考下列URL:
http://www.erpfixers.com/blog/2016/9/12/using-abap-coding-in-sap-standard-query
https://blogs.sap.com/2015/11/20/building-an-sap-query-with-abap-code/
http://www.baidusap.com/abap/query/922
比如需要修改最终内表里的某个字段,步骤如下:
1>SQ02编写代码

在这里插入图片描述

选择结束(在清单后)即为数据ALV已经赋值,还未输出
,相当于end-of-selection

在这里插入图片描述
Query里的显示内表统一为%G00[],通过指针指向该内表

 在这里插入图片描述 

各个字段均通过指针修改,本例实现取物料主数据描述长文本替换到内表的规格字段,具体代码如下:
field-symbols: type table.
field-symbols: <g00_wa> type any.
field-symbols: <fs_matnr> type mara-matnr.
field-symbols: <fs_ltext> type zwlltext-ltext.
data:lv_str type string.
data:lv_tdname type thead-tdname,
lv_object type thead-tdobject value ‘MATERIAL’,
lv_id type thead-tdid value ‘GRUN’,
lv_langu type thead-tdspras value ‘1’,
lt_tline like tline occurs 0 with header line.
data:lv_text type string.
lv_str = ‘%G00[]’.
assign (lv_str) to .
"物料长文本
loop at assigning <g00_wa>.
clear:lt_tline[],lv_text.
assign component ‘MAST-MATNR’ of structure <g00_wa>
to <fs_matnr>.
if <fs_matnr> is assigned.
lv_tdname = <fs_matnr>.
call function ‘READ_TEXT’
exporting
client = sy-mandt
id = lv_id
language = lv_langu
name = lv_tdname
object = lv_object
ARCHIVE_HANDLE = 0
LOCAL_CAT = ’ ’
IMPORTING
HEADER =
tables
lines = lt_tline
exceptions
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
others = 8
.
assign component ‘ZWLLTEXT-LTEXT’ of structure <g00_wa>
to <fs_ltext>.
if <fs_ltext> is assigned.
loop at lt_tline.
concatenate lv_text lt_tline-tdline into lv_text.
endloop.
<fs_ltext> = lv_text.
endif.
endif.
endloop.
2>生成代码

在这里插入图片描述 

3>执行SQ01查看效果

在这里插入图片描述
2.在下列函数中使用隐式增强,并且加上TCODE限制,对内表dtab[]进行处理

在这里插入图片描述

 在这里插入图片描述

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 SAP 采购订单过账的 ABAP 代码实现: 1. 首先需要定义一些变量,并且获取采购订单的相关信息。 ``` DATA: ls_header TYPE bapi_po_header, lt_poitem TYPE TABLE OF bapi_po_item, ls_poitem TYPE bapi_po_item, lt_account TYPE TABLE OF bapi_po_account, ls_account TYPE bapi_po_account. ls_header-po_number = '采购订单号'. ls_header-doc_date = sy-datum. ls_header-posting_date = sy-datum. ls_header-username = sy-uname. CALL FUNCTION 'BAPI_PO_GETDETAIL' EXPORTING purchaseorder = ls_header-po_number IMPORTING po_header = ls_header po_items = lt_poitem. LOOP AT lt_poitem INTO ls_poitem. ls_poitem-po_number = ls_header-po_number. ls_poitem-doc_date = sy-datum. ls_poitem-posting_date = sy-datum. CALL FUNCTION 'BAPI_PO_GETACCOUNT' EXPORTING purchaseorder = ls_header-po_number po_item = ls_poitem-po_item TABLES po_account = lt_account. LOOP AT lt_account INTO ls_account. ls_account-po_number = ls_header-po_number. ls_account-po_item = ls_poitem-po_item. ls_account-doc_date = sy-datum. ls_account-posting_date = sy-datum. ENDLOOP. ENDLOOP. ``` 2. 之后需要调用 `BAPI_PO_CHANGE` 函数进行采购订单的过账。 ``` CALL FUNCTION 'BAPI_PO_CHANGE' EXPORTING purchaseorder = ls_header-po_number headerdata = ls_header TABLES return = lt_return poitem = lt_poitem poaccount = lt_account. ``` 3. 最后需要判断过账是否成功。 ``` IF lt_return[] IS INITIAL. COMMIT WORK. WRITE: / '采购订单 ', ls_header-po_number, ' 过账成功。'. ELSE. ROLLBACK WORK. WRITE: / '采购订单 ', ls_header-po_number, ' 过账失败。'. ENDIF. ``` 以上就是 SAP 采购订单过账的 ABAP 代码实现。需要注意的是,实现过程中需要根据实际情况进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值