1

我正在从 VBA 调用 SAP 事务以自动生成报告。当我使用 IW39 之类的事务时,我的输出显示是使用 SAP ALV 列表查看器显示的列表。导出到 VBA 非常有用,我有一个自动执行的功能。

ALV 显示器

但有时我在某些特定情况下会遇到问题:当我的命中列表仅包含一行时。SAP 将 ALV 替换为对使用 VBA 导出不是很有用的东西。

非 ALV 显示

我的问题是:当命中列表中有单行时,有没有办法将显示模式更改为“ALV-always”?

一条线索:当我启动 IW39 tcode 并且只有一行时,结果显示为 IW33 tcode。所以当我回到事务时,我会留在 IW33 查询中。

4

1 回答 1

1

正如您的屏幕截图所示,您谈论的是 IW 29(显示通知),而不是 IW39,但是,它们的逻辑非常相似。
该开关定义了如何显示结果 - 通过 ALV 或直接通过 IW23/IW33 -在逻辑(即报告)中进行了硬编码,并且不能那么容易地更改。IW29RIQMEL20

但是,在学习代码的过程中,我发现结果是正确列出的,在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操作模式(对话框/背景),从而强制服务器将sy-binpt变量设置为X.

  • 撤销授权以在前台启动 IW*9 事务并仅通过 启动它们SA38

总的来说,可以得出结论,通过 VBA(即没有 ABAP 或 BASIS 干预)实现这一目标是无法实现的。

于 2016-10-28T17:17:15.713 回答