AT SELECTION-SCREEN ON <FIELD> 阻止程序检索数据
AT SELECTION-SCREEN ON <FIELD> is preventing the program from retrieving data
我还在SAP ABAP的学习阶段,还请多多包涵。所以我正在尝试创建一个将从 vbak table 检索数据的报告,但有一些条件:
1) 启用和禁用单选按钮。
2) 使用 "AT SELECTION-SCREEN ON " 语句。
3) Checkbox'organize' (以presentable的方式打印出数据)
4) 复选框 'Download as a Text File' 将数据下载为文本文件。
我的代码:
REPORT z_testingdemo.
TABLES: vbak.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME NO INTERVALS.
PARAMETERS: rb_on RADIOBUTTON GROUP g1.
PARAMETERS: rb_off RADIOBUTTON GROUP g1.
PARAMETERS: p_name TYPE char15.
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln.
PARAMETERS: c_check AS CHECKBOX DEFAULT 'X'.
PARAMETERS: c_check2 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON RADIOBUTTON GROUP g1.
IF rb_on IS INITIAL.
MESSAGE 'Please Press ENABLE to ENABLE the FIELDS' TYPE 'E'.
ENDIF.
"--------I don't really know why this part didn't work -----------
* IF rb_off = 'X'.
* screen-active = 0.
* modify screen.
* ELSE.
* screen-active = 1.
* modify screen.
* ENDIF.
"------------------------------------------------------------------
TYPES: BEGIN OF itab,
vbeln TYPE vbak-vbeln,
vkorg TYPE vbak-vkorg,
vtweg TYPE vbak-vtweg,
spart TYPE vbak-spart,
END OF itab.
DATA: wa_ma TYPE itab,
it_ma TYPE STANDARD TABLE OF itab.
SELECT vbeln vkorg vtweg spart
FROM vbak
INTO TABLE it_ma
WHERE vbeln IN s_vbeln.
IF sy-subrc = 0 AND c_check = '' AND c_check2 = ''.
LOOP AT it_ma INTO wa_ma.
WRITE : / wa_ma-vbeln, wa_ma-vkorg , wa_ma-vtweg, wa_ma-spart.
ENDLOOP.
ELSEIF sy-subrc = 0 AND c_check = 'X' AND c_check2 = ''.
LOOP AT it_ma INTO wa_ma.
WRITE : / wa_ma-vbeln, 17 wa_ma-vkorg , 37 wa_ma-vtweg, 51 wa_ma-spart.
ENDLOOP.
ELSEIF sy-subrc = 0 AND c_check2 = 'X'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = 'C:/REPORT4.TXT'
write_field_separator = ','
TABLES
data_tab = it_ma.
ELSEIF sy-subrc = 0 AND c_check = '' AND c_check2 = 'X'.
ENDIF.
TOP-OF-PAGE .
PERFORM display_heading .
FORM display_heading.
WRITE : / sy-uline .
WRITE: / 'REPORT 4'.
IF c_check = 'X'.
WRITE: / .
WRITE : /'For Mr./Mrs.: ', p_name.
WRITE : /'SALES DOCUMENT', 17 'SALES ORGANIZATION', 37 'DISTRIBUTION', 51 'CHANN. DIVISION'.
WRITE : / sy-uline .
ENDIF.
ENDFORM.
我的意思是,如果没有 AT SELECTION-SCREEN ON 语句,它基本上可以工作。但是AT SELECTION-SCREEN ON是条件之一。非常感谢。
如果要更改字段的设置,需要在 AT SELECTION-SCREEN OUTPUT
中进行,并且需要使用 LOOP AT SCREEN
语句遍历字段。
您的代码开头没有 START-OF_SELECTION
。
默认情况下,您的报告从事件 START-OF_SELECTION
开始,但是您使用 AT SELECTION-SCREEN
定义了另一个事件,并且您的代码不是从 START-OF_SELECTION
开始。
所以你有两个解决方案:
- 将您的代码
AT SELECTION-SCREEN
移至主代码下方。
- 在您的主要代码前添加一个
START-OF_SELECTION
。
正如 vwegert 已经提到的,要更改选择屏幕上的设置,您需要 LOOP AT SCREEN
。
我还在SAP ABAP的学习阶段,还请多多包涵。所以我正在尝试创建一个将从 vbak table 检索数据的报告,但有一些条件: 1) 启用和禁用单选按钮。 2) 使用 "AT SELECTION-SCREEN ON " 语句。 3) Checkbox'organize' (以presentable的方式打印出数据) 4) 复选框 'Download as a Text File' 将数据下载为文本文件。
我的代码:
REPORT z_testingdemo.
TABLES: vbak.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME NO INTERVALS.
PARAMETERS: rb_on RADIOBUTTON GROUP g1.
PARAMETERS: rb_off RADIOBUTTON GROUP g1.
PARAMETERS: p_name TYPE char15.
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln.
PARAMETERS: c_check AS CHECKBOX DEFAULT 'X'.
PARAMETERS: c_check2 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON RADIOBUTTON GROUP g1.
IF rb_on IS INITIAL.
MESSAGE 'Please Press ENABLE to ENABLE the FIELDS' TYPE 'E'.
ENDIF.
"--------I don't really know why this part didn't work -----------
* IF rb_off = 'X'.
* screen-active = 0.
* modify screen.
* ELSE.
* screen-active = 1.
* modify screen.
* ENDIF.
"------------------------------------------------------------------
TYPES: BEGIN OF itab,
vbeln TYPE vbak-vbeln,
vkorg TYPE vbak-vkorg,
vtweg TYPE vbak-vtweg,
spart TYPE vbak-spart,
END OF itab.
DATA: wa_ma TYPE itab,
it_ma TYPE STANDARD TABLE OF itab.
SELECT vbeln vkorg vtweg spart
FROM vbak
INTO TABLE it_ma
WHERE vbeln IN s_vbeln.
IF sy-subrc = 0 AND c_check = '' AND c_check2 = ''.
LOOP AT it_ma INTO wa_ma.
WRITE : / wa_ma-vbeln, wa_ma-vkorg , wa_ma-vtweg, wa_ma-spart.
ENDLOOP.
ELSEIF sy-subrc = 0 AND c_check = 'X' AND c_check2 = ''.
LOOP AT it_ma INTO wa_ma.
WRITE : / wa_ma-vbeln, 17 wa_ma-vkorg , 37 wa_ma-vtweg, 51 wa_ma-spart.
ENDLOOP.
ELSEIF sy-subrc = 0 AND c_check2 = 'X'.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = 'C:/REPORT4.TXT'
write_field_separator = ','
TABLES
data_tab = it_ma.
ELSEIF sy-subrc = 0 AND c_check = '' AND c_check2 = 'X'.
ENDIF.
TOP-OF-PAGE .
PERFORM display_heading .
FORM display_heading.
WRITE : / sy-uline .
WRITE: / 'REPORT 4'.
IF c_check = 'X'.
WRITE: / .
WRITE : /'For Mr./Mrs.: ', p_name.
WRITE : /'SALES DOCUMENT', 17 'SALES ORGANIZATION', 37 'DISTRIBUTION', 51 'CHANN. DIVISION'.
WRITE : / sy-uline .
ENDIF.
ENDFORM.
我的意思是,如果没有 AT SELECTION-SCREEN ON 语句,它基本上可以工作。但是AT SELECTION-SCREEN ON是条件之一。非常感谢。
如果要更改字段的设置,需要在 AT SELECTION-SCREEN OUTPUT
中进行,并且需要使用 LOOP AT SCREEN
语句遍历字段。
您的代码开头没有 START-OF_SELECTION
。
默认情况下,您的报告从事件 START-OF_SELECTION
开始,但是您使用 AT SELECTION-SCREEN
定义了另一个事件,并且您的代码不是从 START-OF_SELECTION
开始。
所以你有两个解决方案:
- 将您的代码
AT SELECTION-SCREEN
移至主代码下方。 - 在您的主要代码前添加一个
START-OF_SELECTION
。
正如 vwegert 已经提到的,要更改选择屏幕上的设置,您需要 LOOP AT SCREEN
。