最近在优化一个别人做的报表,该报表是一个记录从销售到交货装运的全过程报表,需要读取销售订单、转储单、交货单、装运单上的相关信息,报表开发完毕传输到测试系统中会出现timeout。
后来通过se30 abap运行时间分析,找到了问题的源头,在程序中有一处需要读取交货凭证和收货凭证代码如下:
LOOP AT lt_tkdc.”装运单内表(业务限制一张装运单上面只有一张交货单)
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lt_tkdc-vbeln_dc ”装运单上的交货单号
IMPORTING
output = lt_tkdc-vbeln_dc.
SELECT SINGLE mblnr INTO lt_tkdc-mblnr_dc FROM mkpf WHERE xblnr = lt_tkdc-vbeln_dc AND blart = 'WL'. "发货
SELECT SINGLE mblnr INTO lt_tkdc-mblnr FROM mkpf WHERE xblnr = lt_tkdc-vbeln_dc AND blart = 'WE'. "收货
MODIFY lt_tkdc TRANSPORTING mblnr_dc mblnr.
CLEAR lt_tkdc.
ENDLOOP.
这段代码中通过select single去读取mkpf,查询条件为xblnr和blart,这两个字段并非mkpf的主键和索引(mkpf的主键是物料凭证号和会计年度;mkpf系统自带了一个索引BUD&#