abap - 为什么在我的报告程序中根本没有达到给定的代码块?
问题描述
我正在开发一个项目,其中选择屏幕中有两个选项。
块标题 - 搜索
- 航班信息
- 客户ID
在选择第一个单选按钮时,可以输入以下字段:
CARRID、CONNID、FLDATE(A、B、C)
它给出了第一个报告,在选择第二个单选按钮时,可以输入以下字段:
客户 ID (D)
这应该给出第二份报告。
使用第一个单选按钮可以正确输出一些行,但是使用第二个单选按钮,程序甚至没有到达该行IF rad2 = 'X'
,因此没有任何输出。
有人知道为什么这段代码没有执行吗?
代码:
TABLES : sbook.
DATA : it_final TYPE TABLE OF sbook,
wa_final LIKE LINE OF it_final,
it_rad2final TYPE TABLE OF sbook,
wa_rad2final LIKE LINE OF it_rad2final.
PARAMETERS rad1 RADIOBUTTON GROUP rad USER-COMMAND abc DEFAULT 'X'.
SELECT-OPTIONS :
a FOR sbook-carrid MODIF ID ra,
b FOR sbook-connid MODIF ID ra,
c FOR sbook-fldate MODIF ID ra.
PARAMETERS rad2 RADIOBUTTON GROUP rad.
SELECT-OPTIONS d FOR sbook-customid MODIF ID rb.
START-OF-SELECTION.
IF rad1 = 'X'.
SELECT * FROM sbook INTO TABLE it_final
WHERE carrid IN a AND connid IN b AND fldate IN c.
ELSEIF rad2 = 'X'.
SELECT * FROM sbook INTO TABLE it_rad2final WHERE customid IN d.
ENDIF.
IF rad1 = 'X'.
LOOP AT it_final INTO wa_final.
WRITE : / wa_final-fldate , wa_final-passname ,wa_final-luggweight COLOR 6.
HIDE wa_final-customid.
ENDLOOP.
ENDIF.
AT LINE-SELECTION.
CALL FUNCTION 'ZKJ_FNMODMINI' EXPORTING custid = wa_final-customid.
IF rad2 = 'X'. " <=== NO BREAK-POINT STOP, LINE NOT REACHED !
LOOP AT it_rad2final INTO wa_rad2final.
WRITE :/ wa_rad2final-connid , wa_rad2final-fldate , wa_rad2final-bookid.
ENDLOOP.
ENDIF.
解决方案
AT LINE-SELECTION语句为功能代码定义了一个事件块PICK
。触发此事件时,将执行此语句之后的所有内容(除非后面有其他事件语句或类似语句)。
您需要做的是将块的语句移动到事件块IF rad2 = 'X'
下方。START-OF-SELECTION
推荐阅读
- javascript - 在 x 轴上显示开始日期和结束日期之间的所有日期
- javascript - 使用 Angular html 和 ts 文件时如何在 select2 中绑定 [(ngModel)] 值(没有 Javascript 或 Jquery)
- reactjs - react js中是否可以有动态引用?
- c - 警告:初始化器 [-Wmissing-braces] 周围缺少大括号(在宏中)
- android - 有时 Apk 不安装最新代码而是重新安装相同的 apk 修复问题
- reactjs - 为什么在组件安装时会触发交叉点观察器?
- pycharm - PyCharm 2019.2.1 PEP8 行长度检查工作错误
- android - 如何使用 Glide 播放 gif
- javascript - 玩 Babel-jest 不编译父文件夹中的 js
- java - 如何在 Reactor Netty 中处理 io.netty.channel.ConnectTimeoutException