我正在从VBA调用SAP事务来自动化报告。当我使用像IW39这样的事务时,我的输出显示是一个用SAP ALV列表查看器显示的列表。导出到VBA非常有用,我可以自动执行此操作。
但有时我在某些特定情况下遇到问题:当我的命中列表只包含一行时。 SAP将ALV替换为使用VBA导出不太有用的东西。
我的问题是:当点击列表中有单行时,有没有办法将显示模式更改为“ALV-always”?
一个线索:当我启动IW39 tcode时,当我有一行时,结果显示为IW33 tcode。所以当我回到交易时,我会留在IW33查询。
答案 0 :(得分:0)
如屏幕截图所示,您说的是IW 29 (显示通知),而不是IW39,但是,它们的逻辑非常相似。
定义如何通过ALV或直接通过IW23 / IW33显示结果的开关在IW29
逻辑中是硬编码(RIQMEL20
报告)并且无法更改这很容易。
然而,在学习代码时,我发现结果在ALV中正确列出,即使对于单个条目如果在后台模式下执行tcode ,相应的程序检查也存在于源代码中点。
所以这些是我看到的可能的解决方案:
创建虚拟交易(例如ZIW29)并像这样批量执行目标报告
SUBMIT RIQMEL20 AND RETURN.
创建虚拟事务并运行目标报告将结果导出到内存
SUBMIT RIQMEL20 EXPORTING LIST TO MEMORY.
批量直接调用目标事务(IW29 / 39)并将结果导出到内存
DATA: lt_bdcdata TYPE TABLE OF bdcdata, ls_options TYPE ctu_params.
ls_options-dismode = 'N'. " This is to set the batch input mode
CALL TRANSACTION 'IW29' USING lt_bdcdata OPTIONS FROM ls_options.
IMPORT data_tab TO it_out FROM MEMORY ID 'XYZ'.
上述任何组合。
使用AS ABAP operation modes(对话框/背景),从而强制服务器将sy-binpt
变量设置为X
。
取消授权以在前台启动IW * 9交易,并仅通过SA38
启动它们。
总的来说,可以通过VBA(即没有ABAP或BASIS干预)来实现这一目标无法实现。