首页 > 解决方案 > 为什么在我的报告程序中根本没有达到给定的代码块?

问题描述

我正在开发一个项目,其中选择屏幕中有两个选项。

块标题 - 搜索

  1. 航班信息
  2. 客户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.

标签: abap

解决方案


AT LINE-SELECTION语句为功能代码定义了一个事件块PICK。触发此事件时,将执行此语句之后的所有内容(除非后面有其他事件语句或类似语句)。

您需要做的是将块的语句移动到事件块IF rad2 = 'X'下方。START-OF-SELECTION


推荐阅读